@ts-intl/dependency
Version:
I18n keys dependency analysis
18 lines (17 loc) • 676 B
JavaScript
import { createSourceFile, forEachChild, ScriptTarget, SyntaxKind, } from 'typescript';
import { extractIntlKeyArg, isIntlCall } from './utils';
export const extractIntlKeysFromCode = (sourceText, opts) => {
const sourceFile = createSourceFile('source.tsx', sourceText, ScriptTarget.Latest);
const res = new Set();
const traverse = (node) => {
if (node.kind === SyntaxKind.CallExpression) {
const key = extractIntlKeyArg(node, opts.argIdx);
if (key && isIntlCall(node, opts)) {
res.add(key.text);
}
}
forEachChild(node, traverse);
};
traverse(sourceFile);
return [...res];
};