UNPKG

@jsverse/transloco-keys-manager

Version:

Extract translatable keys from projects that uses Transloco

72 lines 2.51 kB
import { tsquery, ScriptKind } from '@phenomnomnominal/tsquery'; import { readFile } from '../../utils/file.utils.js'; import { regexFactoryMap } from '../../utils/regexs.utils.js'; import { addCommentSectionKeys } from '../add-comment-section-keys.js'; import { addKey } from '../add-key.js'; import { extractKeys } from '../utils/extract-keys.js'; import { resolveScopeAlias } from '../utils/resolvers.utils.js'; import { inlineTemplateExtractor } from './inline-template.js'; import { markerExtractor } from './marker.extractor.js'; import { pureFunctionExtractor } from './pure-function.extractor.js'; import { serviceExtractor } from './service.extractor.js'; import { signalExtractor } from './signal.extractor.js'; export function extractTSKeys(config) { return extractKeys(config, 'ts', TSExtractor); } const translocoImport = /@(jsverse|ngneat)\/transloco/; const translocoKeysManagerImport = /@(jsverse|ngneat)\/transloco-keys-manager/; function TSExtractor(config) { const { file, scopes, defaultValue, scopeToKeys } = config; const content = readFile(file); const extractors = []; if (translocoImport.test(content)) { extractors.push(serviceExtractor, pureFunctionExtractor, signalExtractor); } if (translocoKeysManagerImport.test(content)) { extractors.push(markerExtractor); } const ast = tsquery.ast(content, undefined, ScriptKind.TS); const baseParams = { scopeToKeys, scopes, defaultValue, }; extractors .map((ex) => ex(ast)) .flat() .forEach(({ key, lang, params }) => { const [keyWithoutScope, scopeAlias] = resolveAliasAndKeyFromService(key, lang, scopes); addKey({ scopeAlias, keyWithoutScope, params, ...baseParams, }); }); /** Check for dynamic markings */ addCommentSectionKeys({ content, regexFactory: regexFactoryMap.ts.comments, ...baseParams, }); inlineTemplateExtractor(ast, config); return scopeToKeys; } /** * * It can be one of the following: * * translate('2', {}, 'some/nested'); * translate('3', {}, 'some/nested/en'); * translate('globalKey'); * */ function resolveAliasAndKeyFromService(key, scopePath, scopes) { // It means that it's the global if (!scopePath) { return [key, null]; } const scopeAlias = resolveScopeAlias({ scopePath, scopes }); return [key, scopeAlias]; } //# sourceMappingURL=index.js.map