find-node-modules-import
Version:
Find specific node modules import statement in your source code
37 lines (32 loc) • 1.22 kB
text/typescript
import { init, parse } from "es-module-lexer";
import { StructuredSource } from "structured-source";
// @ts-expect-error: no types
import { isBuiltin } from "node:module";
export type FindNodeModulesImportResult = {
name: string;
range: readonly [start: number, end: number];
loc: Readonly<{
start: { line: number; column: number };
end: { line: number; column: number };
}>;
};
export async function findNodeModulesImport(code: string): Promise<FindNodeModulesImportResult[]> {
await init;
const [imports] = parse(code);
const source = new StructuredSource(code);
return imports.map((imp) => {
return {
name: code.slice(imp.s, imp.e),
range: [imp.s, imp.e] as const,
loc: source.rangeToLocation([imp.s, imp.e])
};
});
}
export function filterModulesByModuleNames(modules: FindNodeModulesImportResult[], moduleNames: readonly string[]) {
return modules.filter((imp) => moduleNames.includes(imp.name));
}
export function filterModulesByBuiltinModules(modules: FindNodeModulesImportResult[]) {
return modules.filter((imp) => {
return imp.name.startsWith("node:") || isBuiltin(imp.name);
});
}