@jsverse/transloco-keys-manager
Version:
Extract translatable keys from projects that uses Transloco
24 lines • 1.24 kB
JavaScript
import { tsquery } from '@phenomnomnominal/tsquery';
import ts from 'typescript';
import { buildKeysFromASTNodes } from './build-keys-from-ast-nodes.js';
function buildInjectFunctionQuery(nodeType) {
return `${nodeType}:has(CallExpression:has(Identifier[name=inject]):has(Identifier[name=TranslocoService]))`;
}
export function serviceExtractor(ast) {
const constructorInjection = 'Constructor Parameter:has(TypeReference Identifier[name=TranslocoService])';
const injectFunction = ['PropertyDeclaration', 'VariableDeclaration'].map(buildInjectFunctionQuery);
const serviceNameQuery = [constructorInjection, injectFunction].join(',');
const serviceNameNodes = tsquery(ast, serviceNameQuery);
let result = [];
for (const serviceName of serviceNameNodes) {
if (ts.isParameter(serviceName) ||
ts.isPropertyDeclaration(serviceName) ||
ts.isVariableDeclaration(serviceName)) {
const propName = serviceName.name.getText();
const methodNodes = tsquery(ast, `PropertyAccessExpression:has([text="${propName}"])`);
result = result.concat(buildKeysFromASTNodes(methodNodes));
}
}
return result;
}
//# sourceMappingURL=service.extractor.js.map