devghost
Version:
👻 Find dead code, dead imports, and dead dependencies before they haunt your project
83 lines • 3.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.analyze = analyze;
const deps_1 = require("./analyzer/deps");
const files_1 = require("./analyzer/files");
const imports_1 = require("./analyzer/imports");
const unusedExports_1 = require("./analyzer/unusedExports");
const unusedFunctions_1 = require("./analyzer/unusedFunctions");
const unusedTypes_1 = require("./analyzer/unusedTypes");
const unusedVariables_1 = require("./analyzer/unusedVariables");
const fs_1 = require("./utils/fs");
/**
* Main analysis function that orchestrates all analyzers
*/
async function analyze(config = {}) {
// Find project root
const projectRoot = (0, fs_1.findProjectRoot)();
if (!projectRoot) {
throw new Error('Could not find project root (no package.json found)');
}
// Read package.json
const packageJson = (0, fs_1.readPackageJson)(projectRoot);
if (!packageJson) {
throw new Error('Could not read package.json. Make sure you are in a Node.js project directory.\n' +
'Run this command from your project root (where package.json is located).');
}
// Get all source files
const allFiles = await (0, fs_1.getAllFiles)(projectRoot);
// Apply ignore patterns
const ignorePatterns = config.ignore || [
'**/*.test.ts',
'**/*.test.tsx',
'**/*.spec.ts',
'**/*.spec.tsx',
'**/__tests__/**',
'**/.next/**',
'**/dist/**',
'**/build/**',
];
const files = allFiles.filter((f) => !(0, fs_1.matchesIgnorePattern)(f, ignorePatterns));
// Show progress for large projects
if (!config.quiet && !config.ci && files.length > 50) {
console.log(`Analyzing ${files.length} files...`);
}
// Run analyzers in parallel
const [unusedImports, unusedFiles, unusedDependencies, unusedExports, unusedFunctions, unusedTypes, unusedVariables,] = await Promise.all([
(0, imports_1.analyzeImports)(files),
(0, files_1.analyzeFiles)(files, config.entry),
(0, deps_1.analyzeDependencies)(files, packageJson, projectRoot, config.includeDev),
(0, unusedExports_1.analyzeUnusedExports)(files),
(0, unusedFunctions_1.analyzeUnusedFunctions)(files),
(0, unusedTypes_1.analyzeUnusedTypes)(files),
(0, unusedVariables_1.analyzeUnusedVariables)(files),
]);
// Calculate statistics
const stats = {
totalFiles: allFiles.length,
filesScanned: files.length,
totalDependencies: Object.keys(packageJson.dependencies || {}).length +
Object.keys(packageJson.devDependencies || {}).length,
potentialSavings: {
lines: unusedFiles.reduce((sum, f) => sum + f.lines, 0) +
unusedImports.length +
unusedFunctions.length +
unusedTypes.length +
unusedVariables.length,
bytes: unusedFiles.reduce((sum, f) => sum + f.size, 0),
dependencies: unusedDependencies.length,
dependenciesSize: unusedDependencies.reduce((sum, d) => sum + d.size, 0),
},
};
return {
unusedImports,
unusedFiles,
unusedDependencies,
unusedExports,
unusedFunctions,
unusedTypes,
unusedVariables,
stats,
};
}
//# sourceMappingURL=core.js.map