95 lines
2.9 KiB
TypeScript
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;
|
|
}
|