95 lines
2.9 KiB
TypeScript

import * as ts from 'typescript';
export function findFunctionCallExpressionStatement(
nodes: ts.Node[],
functionName: string
): ts.ExpressionStatement {
return nodes.find(
node =>
ts.isExpressionStatement(node) &&
ts.isCallExpression(node.expression) &&
ts.isIdentifier(node.expression.expression) &&
node.expression.expression.escapedText === functionName
) as ts.ExpressionStatement;
}
export function findFunctionCalls(
sourceFile: ts.SourceFile,
functionName: string
) {
return sourceFile.statements.filter(statement => {
if (!ts.isVariableStatement(statement)) {
return false;
}
const declarations = statement.declarationList.declarations;
return declarations.some(declaration => {
if (
!ts.isCallExpression(declaration.initializer) ||
!ts.isIdentifier(declaration.initializer.expression)
) {
return false;
}
return declaration.initializer.expression.text === functionName;
});
}) as ts.VariableStatement[];
}
export function findRequireStatement(nodes: ts.Node[]): ts.VariableStatement {
return nodes.find(node => {
if (!ts.isVariableStatement(node)) {
return false;
}
const requireDeclaration = node.declarationList.declarations.find(
declaration => {
if (!ts.isCallExpression(declaration.initializer)) {
return false;
}
const callExpression = declaration.initializer;
if (
ts.isIdentifier(callExpression.expression) &&
callExpression.expression.escapedText === 'require' &&
ts.isStringLiteral(callExpression.arguments[0])
) {
const argument = callExpression.arguments[0] as ts.StringLiteral;
return (
argument.text === '@nrwl/schematics/src/utils/cli-config-utils'
);
}
return false;
}
) as ts.VariableDeclaration;
return !!requireDeclaration;
}) as ts.VariableStatement;
}
export function findSpecDeclaration(nodes: ts.Node[]) {
return nodes.find(
node =>
ts.isPropertyAssignment(node) &&
ts.isIdentifier(node.name) &&
node.name.text === 'specs' &&
ts.isArrayLiteralExpression(node.initializer)
) as ts.PropertyAssignment;
}
export function findTsNodeRegisterExpression(nodes: ts.Node[]) {
return nodes.find(
node =>
ts.isCallExpression(node) &&
ts.isPropertyAccessExpression(node.expression) &&
ts.isIdentifier(node.expression.name) &&
node.expression.name.text === 'register' &&
ts.isCallExpression(node.expression.expression) &&
ts.isIdentifier(node.expression.expression.expression) &&
node.expression.expression.expression.text === 'require' &&
ts.isStringLiteral(node.expression.expression.arguments[0]) &&
(node.expression.expression.arguments[0] as ts.StringLiteral).text ===
'ts-node'
) as ts.CallExpression;
}