@jsverse/transloco-keys-manager
Version:
Extract translatable keys from projects that uses Transloco
72 lines • 2.51 kB
JavaScript
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