fix(sdk): scan CommonJS imports
This commit is contained in:
@@ -140,15 +140,17 @@ function extractDependencyEdges(source, file) {
|
||||
&& node.moduleSpecifier
|
||||
&& ts.isStringLiteralLike(node.moduleSpecifier)) {
|
||||
edges.push({ kind: 'static', specifier: node.moduleSpecifier.text });
|
||||
} else if (ts.isImportEqualsDeclaration(node)) {
|
||||
const specifier = externalImportEqualsSpecifier(node);
|
||||
if (specifier !== null) edges.push({ kind: 'static', specifier });
|
||||
} else if (ts.isImportTypeNode(node)
|
||||
&& ts.isLiteralTypeNode(node.argument)
|
||||
&& ts.isStringLiteralLike(node.argument.literal)) {
|
||||
edges.push({ kind: 'static', specifier: node.argument.literal.text });
|
||||
} else if (ts.isCallExpression(node)
|
||||
&& node.expression.kind === ts.SyntaxKind.ImportKeyword) {
|
||||
const argument = node.arguments[0];
|
||||
if (node.arguments.length === 1 && argument && ts.isStringLiteralLike(argument)) {
|
||||
edges.push({ kind: 'static', specifier: argument.text });
|
||||
} else if (isModuleLoaderCall(node)) {
|
||||
const specifier = literalCallSpecifier(node);
|
||||
if (specifier !== null) {
|
||||
edges.push({ kind: 'static', specifier });
|
||||
} else {
|
||||
edges.push({ kind: 'dynamic' });
|
||||
}
|
||||
@@ -218,17 +220,18 @@ function extractImports(source, file) {
|
||||
? node.importClause.getText(sourceFile)
|
||||
: '',
|
||||
});
|
||||
}
|
||||
if (ts.isImportTypeNode(node)
|
||||
} else if (ts.isImportEqualsDeclaration(node)) {
|
||||
const specifier = externalImportEqualsSpecifier(node);
|
||||
if (specifier !== null) {
|
||||
imports.push({ specifier, bindings: node.name.getText(sourceFile) });
|
||||
}
|
||||
} else if (ts.isImportTypeNode(node)
|
||||
&& ts.isLiteralTypeNode(node.argument)
|
||||
&& ts.isStringLiteralLike(node.argument.literal)) {
|
||||
imports.push({ specifier: node.argument.literal.text, bindings: '' });
|
||||
}
|
||||
if (ts.isCallExpression(node)
|
||||
&& node.expression.kind === ts.SyntaxKind.ImportKeyword
|
||||
&& node.arguments.length === 1
|
||||
&& ts.isStringLiteralLike(node.arguments[0])) {
|
||||
imports.push({ specifier: node.arguments[0].text, bindings: '' });
|
||||
} else if (isModuleLoaderCall(node)) {
|
||||
const specifier = literalCallSpecifier(node);
|
||||
if (specifier !== null) imports.push({ specifier, bindings: '' });
|
||||
}
|
||||
ts.forEachChild(node, visit);
|
||||
};
|
||||
@@ -236,6 +239,29 @@ function extractImports(source, file) {
|
||||
return imports;
|
||||
}
|
||||
|
||||
function externalImportEqualsSpecifier(node) {
|
||||
if (!ts.isImportEqualsDeclaration(node)
|
||||
|| !ts.isExternalModuleReference(node.moduleReference)
|
||||
|| !node.moduleReference.expression
|
||||
|| !ts.isStringLiteralLike(node.moduleReference.expression)) {
|
||||
return null;
|
||||
}
|
||||
return node.moduleReference.expression.text;
|
||||
}
|
||||
|
||||
function isModuleLoaderCall(node) {
|
||||
return ts.isCallExpression(node)
|
||||
&& (node.expression.kind === ts.SyntaxKind.ImportKeyword
|
||||
|| (ts.isIdentifier(node.expression) && node.expression.text === 'require'));
|
||||
}
|
||||
|
||||
function literalCallSpecifier(node) {
|
||||
const argument = node.arguments[0];
|
||||
return node.arguments.length === 1 && argument && ts.isStringLiteralLike(argument)
|
||||
? argument.text
|
||||
: null;
|
||||
}
|
||||
|
||||
function findViolation(context) {
|
||||
const { file, specifier, bindings, resolved, frameworkDir, gamesDir } = context;
|
||||
const filePath = displayPath(file);
|
||||
|
||||
Reference in New Issue
Block a user