Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import { createWriteStream } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path/posix'; import { pipeline } from 'node:stream/promises'; import { extract } from '@formatjs/cli-lib'; import { type ExtractedMessageDescriptor } from '@formatjs/cli-lib/src/extract'; import { getProjects, type ExecutorContext } from '@nx/devkit'; import { glob } from 'glob'; import { FsTree } from 'nx/src/generators/tree'; import { PotFileGeneratorStream } from './potFileGenerator.stream'; import { type IntlUpdateExecutorSchema } from './schema.d'; import { updatePoFiles } from './updater'; export default async function runExecutor( { messagesPackageTags, poPath }: IntlUpdateExecutorSchema, context: ExecutorContext, ) { const tree = new FsTree(context.cwd, false); const messagesPackagePaths = [...getProjects(tree).values()] .filter((project) => project.tags?.some((tag) => messagesPackageTags.includes(tag))) .map((project) => `${project.root}/src`) .filter(Boolean) .sort((a, b) => b.localeCompare(a)); // Get all messages from the matching packages. const messages: Record<string, ExtractedMessageDescriptor> = JSON.parse( await extract( messagesPackagePaths.flatMap((path) => glob.sync(join(path, '**/*.@(ts|tsx)'), { nodir: true, ignore: ['**/*.d.ts', '**/*.spec.@(ts|tsx)', '**/*.test.@(ts|tsx)', '**/*.e2e-spec.@(ts|tsx)'], }), ), { idInterpolationPattern: '[sha512:contenthash:base64:6]', extractSourceLocation: true, }, ), ) as Record<string, ExtractedMessageDescriptor>; const poFilesPath = glob.sync(poPath); // write transformed messages to a temporary file const potFilePath = `${tmpdir()}/messages.pot`; await pipeline(new PotFileGeneratorStream(messages, 'en'), createWriteStream(potFilePath, { encoding: 'utf-8' })); // update translations updatePoFiles(poFilesPath, potFilePath); return { success: true, }; } |