UNPKG

devghost

Version:

👻 Find dead code, dead imports, and dead dependencies before they haunt your project

83 lines • 3.36 kB
"use strict"; 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