tsro
Version:
TypeScript Remove Orphaned (tsro) is a CLI utility and library for TypeScript projects that detects and removes files containing invalid imports — imports that refer to nonexistent entities or nonexistent modules.
60 lines (59 loc) • 2.37 kB
JavaScript
import ts from "typescript";
export const validateNamedImports = (node, sourceFile, importPath, exports) => {
const diagnostics = [];
const named = node.importClause?.namedBindings;
if (named && ts.isNamedImports(named)) {
for (const element of named.elements) {
const importedName = element.propertyName?.text ?? element.name.text;
const match = exports.find((e) => e.name === importedName);
if (!match) {
const pos = sourceFile.getLineAndCharacterOfPosition(element.getStart());
const code = importedName !== element.name.text
? `import { ${importedName} as ${element.name.text} } from "${importPath}"`
: `import { ${importedName} } from "${importPath}"`;
diagnostics.push({
file: sourceFile.fileName,
code,
line: pos.line + 1,
char: pos.character + 1,
});
}
}
}
return diagnostics;
};
export const validateDefaultImport = (node, sourceFile, importPath, exports) => {
const diagnostics = [];
const defaultImport = node.importClause?.name;
if (defaultImport) {
const match = exports.find((e) => e.name === "default");
if (!match) {
const pos = sourceFile.getLineAndCharacterOfPosition(defaultImport.getStart());
const code = `import ${defaultImport.text} from "${importPath}"`;
diagnostics.push({
file: sourceFile.fileName,
code,
line: pos.line + 1,
char: pos.character + 1,
});
}
}
return diagnostics;
};
export const validateNamespaceImport = (node, sourceFile, importPath, moduleSymbol) => {
const diagnostics = [];
const named = node.importClause?.namedBindings;
if (named && ts.isNamespaceImport(named)) {
if (!moduleSymbol) {
const pos = sourceFile.getLineAndCharacterOfPosition(named.getStart());
const code = `import * as ${named.name.text} from "${importPath}"`;
diagnostics.push({
file: sourceFile.fileName,
code,
line: pos.line + 1,
char: pos.character + 1,
});
}
}
return diagnostics;
};