UNPKG

@ts-intl/dependency

Version:

I18n keys dependency analysis

39 lines (32 loc) 815 B
import { CallExpression, createSourceFile, forEachChild, Node, ScriptTarget, SyntaxKind, } from 'typescript'; import { ExtractIntlKeysOpts } from '../types'; import { extractIntlKeyArg, isIntlCall } from './utils'; export const extractIntlKeysFromCode = ( sourceText: string, opts: ExtractIntlKeysOpts ) => { const sourceFile = createSourceFile( 'source.tsx', sourceText, ScriptTarget.Latest ); const res = new Set<string>(); const traverse = (node: Node) => { if (node.kind === SyntaxKind.CallExpression) { const key = extractIntlKeyArg(node as CallExpression, opts.argIdx); if (key && isIntlCall(node as CallExpression, opts)) { res.add(key.text); } } forEachChild(node, traverse); }; traverse(sourceFile); return [...res]; };