node-tidy
Version:
A CLI tool to find and remove unused NPM packages and Install Missing packages in your Node.js projects.
37 lines (36 loc) • 1.67 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const glob_1 = require("glob");
const getDependencies_1 = __importDefault(require("./getDependencies"));
const module_1 = require("module");
async function findMissingPackages() {
console.log("Scanning for missing packages...");
const files = (0, glob_1.globSync)("**/*.{js,jsx,ts,tsx}", {
ignore: ["node_modules/**", "dist/**"],
});
const usedPackages = new Set();
const importRegex = /\b(?:import(?:["'\s]*[\w*{}\n, ]+from\s*)?["']([^"']+)["']|require\(["']([^"']+)["']\))/g;
for (const file of files) {
const content = fs_1.default.readFileSync(file, "utf8");
let match;
while ((match = importRegex.exec(content)) !== null) {
const packageName = (match[1] || match[2] || "").split("/")[0]; // Extract the package name
if (packageName && !packageName.startsWith(".")) {
usedPackages.add(packageName);
}
}
}
const installedPackages = new Set([
...(0, getDependencies_1.default)().dependencies,
...(0, getDependencies_1.default)().devDependencies,
]);
const nodeBuiltinModules = new Set(module_1.builtinModules);
// Find packages used in code but not installed
const missingPackages = Array.from(usedPackages).filter((pkg) => !installedPackages.has(pkg) && !nodeBuiltinModules.has(pkg));
return missingPackages;
}
exports.default = findMissingPackages;