knip
Version:
Find and fix unused dependencies, exports and files in your TypeScript and JavaScript projects
42 lines (41 loc) • 1.45 kB
JavaScript
import ts from 'typescript';
import { getPropertyValues } from "../../typescript/ast-helpers.js";
const ASTRO_CONFIG_SPECIFIER = 'astro/config';
export const getSrcDir = (sourceFile) => {
const srcDir = 'src';
function visit(node) {
if (ts.isObjectLiteralExpression(node)) {
const values = getPropertyValues(node, 'srcDir');
if (values.size > 0) {
return Array.from(values)[0];
}
}
let result;
ts.forEachChild(node, innerNode => {
const innerValue = visit(innerNode);
if (innerValue) {
result = innerValue;
return true;
}
return false;
});
return result;
}
return visit(sourceFile) ?? srcDir;
};
export const usesSharpImageService = (sourceFile) => {
for (const statement of sourceFile.statements) {
if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier))
continue;
if (statement.moduleSpecifier.text !== ASTRO_CONFIG_SPECIFIER)
continue;
const bindings = statement.importClause?.namedBindings;
if (!bindings || !ts.isNamedImports(bindings))
continue;
for (const el of bindings.elements) {
if ((el.propertyName?.text ?? el.name.text) === 'sharpImageService')
return true;
}
}
return false;
};