UNPKG

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.

39 lines (38 loc) 1.75 kB
import ts from "typescript"; import { checkLib } from "../utils/checkLib.js"; import { getTsAliases } from "../utils/getTsAliases.js"; import { validateDefaultImport, validateNamedImports, validateNamespaceImport, } from "../utils/validators.js"; export const validateImportsInFile = (sourceFile, program, ignoreLibImports) => { const checker = program.getTypeChecker(); const aliases = getTsAliases(program); const diagnostics = []; ts.forEachChild(sourceFile, (node) => { if (!ts.isImportDeclaration(node) || !ts.isStringLiteral(node.moduleSpecifier)) return; const moduleSymbol = checker.getSymbolAtLocation(node.moduleSpecifier); const importPath = node.moduleSpecifier.text; const start = node.moduleSpecifier.getStart(); const { line, character } = sourceFile.getLineAndCharacterOfPosition(start); if (!moduleSymbol) { diagnostics.push({ file: sourceFile.fileName, code: `"${importPath}" not resolved`, line: line + 1, char: character + 1, }); return; } const isLib = checkLib(importPath, aliases); if (isLib && ignoreLibImports) { return; } const exports = checker.getExportsOfModule(moduleSymbol); // Named imports diagnostics.push(...validateNamedImports(node, sourceFile, importPath, exports)); // Default import diagnostics.push(...validateDefaultImport(node, sourceFile, importPath, exports)); // Namespace import (import * as X from ...) diagnostics.push(...validateNamespaceImport(node, sourceFile, importPath, moduleSymbol)); }); return diagnostics; };