shared/selectors/specifier.selector.ts
shared/selectors/specifier.selector.ts is a file in GovLab Extension Host. 30 lines of code and 6 definitions.
import ts from "typescript";
export const specifierNodes = function specifierNodes(source: ts.SourceFile): ts.StringLiteral[] {
const out: ts.StringLiteral[] = [];
const visit = function visit(node: ts.Node): void {
if (
(ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) &&
node.moduleSpecifier !== undefined &&
ts.isStringLiteral(node.moduleSpecifier)
) {
out.push(node.moduleSpecifier);
}
if (
ts.isCallExpression(node) &&
node.expression.kind === ts.SyntaxKind.ImportKeyword &&
node.arguments.length > 0
) {
const [first] = node.arguments;
if (first !== undefined && ts.isStringLiteral(first)) {
out.push(first);
}
}
ts.forEachChild(node, visit);
};
visit(source);
return out;
};
export const specifiersOf = function specifiersOf(fileName: string, text: string): readonly string[] {
const source = ts.createSourceFile(fileName, text, ts.ScriptTarget.Latest, true);
return specifierNodes(source).map((literal) => literal.text);
};