@optiprune/cli 1.2.1 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +18 -50
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -6,7 +6,7 @@ const program = new Command();
|
|
|
6
6
|
// Using @ts-ignore for core imports as CI environments sometimes struggle
|
|
7
7
|
// with subpath exports resolution in strict NodeNext mode.
|
|
8
8
|
// @ts-ignore
|
|
9
|
-
import { analyze, shouldFail
|
|
9
|
+
import { analyze, shouldFail } from "@optiprune/core";
|
|
10
10
|
// @ts-ignore
|
|
11
11
|
import { formatTerminal, formatSarif } from "@optiprune/core/reporters";
|
|
12
12
|
/** ANSI colour helpers */
|
|
@@ -67,10 +67,6 @@ function formatTerminalExtended(report) {
|
|
|
67
67
|
program
|
|
68
68
|
.name("optiprune")
|
|
69
69
|
.description("Finds dead code in TypeScript/JavaScript projects.")
|
|
70
|
-
.version(getCoreVersion(process.cwd()));
|
|
71
|
-
program
|
|
72
|
-
.command("analyze", { isDefault: true })
|
|
73
|
-
.description("Perform full analysis of the project")
|
|
74
70
|
.option("-r, --rootDir <path>", "Root directory of the project", process.cwd())
|
|
75
71
|
.option("-e, --entry <patterns...>", "Entry point patterns (glob or file paths)", [])
|
|
76
72
|
.option("-x, --extensions <exts...>", "File extensions to analyze", [".ts", ".tsx", ".js", ".jsx"])
|
|
@@ -83,14 +79,10 @@ program
|
|
|
83
79
|
.option("--skip-3", "Skip Layer 3 (SMT Constraint Solver)")
|
|
84
80
|
.option("--skip-4", "Skip Layer 4 (Concolic Execution Proofs)")
|
|
85
81
|
.option("-v, --verbose", "Show verbose output and internal graph state")
|
|
86
|
-
.option("--fix", "Automatically remove unused exports, dependencies, and unreachable files")
|
|
87
|
-
.option("--cache-from <path>", "Path to a JSON file to import cache from before analysis")
|
|
88
|
-
.option("--cache-to <path>", "Path to export the resulting cache to after analysis")
|
|
89
82
|
.action(async (options) => {
|
|
90
83
|
try {
|
|
91
84
|
const rootDir = options.rootDir ?? process.cwd();
|
|
92
|
-
|
|
93
|
-
// be out of sync with the actual HeadLess API implementation during development.
|
|
85
|
+
program.version(getCoreVersion(rootDir));
|
|
94
86
|
const analyzerOptions = {
|
|
95
87
|
rootDir: rootDir,
|
|
96
88
|
entry: options.entry ?? [],
|
|
@@ -103,12 +95,9 @@ program
|
|
|
103
95
|
skip3: options.skip3,
|
|
104
96
|
skip4: options.skip4,
|
|
105
97
|
verbose: options.verbose,
|
|
106
|
-
fix: options.fix,
|
|
107
|
-
cacheFrom: options.cacheFrom,
|
|
108
|
-
cacheTo: options.cacheTo,
|
|
109
98
|
};
|
|
110
99
|
const report = await analyze(analyzerOptions);
|
|
111
|
-
// --- DEPENDENCY AUDIT INJECTION ---
|
|
100
|
+
// --- DEPENDENCY AUDIT INJECTION WITH BUILT-IN NORMALIZATION ---
|
|
112
101
|
try {
|
|
113
102
|
const pkgPath = path.join(rootDir, "package.json");
|
|
114
103
|
if (fs.existsSync(pkgPath)) {
|
|
@@ -116,7 +105,14 @@ program
|
|
|
116
105
|
const deps = (pkg.dependencies || {});
|
|
117
106
|
const devDeps = (pkg.devDependencies || {});
|
|
118
107
|
const allDeclared = new Set([...Object.keys(deps), ...Object.keys(devDeps)]);
|
|
119
|
-
const builtinModules = new Set([
|
|
108
|
+
const builtinModules = new Set([
|
|
109
|
+
'assert', 'async_hooks', 'buffer', 'child_process', 'cluster', 'console', 'constants',
|
|
110
|
+
'crypto', 'dgram', 'diagnostics_channel', 'dns', 'domain', 'events', 'fs', 'http', 'http2',
|
|
111
|
+
'https', 'inspector', 'module', 'net', 'os', 'path', 'perf_hooks',
|
|
112
|
+
'process', 'punycode', 'querystring', 'readline', 'repl', 'stream',
|
|
113
|
+
'string_decoder', 'sys', 'timers', 'tls', 'trace_events', 'tty',
|
|
114
|
+
'url', 'util', 'v8', 'vm', 'wasi', 'worker_threads', 'zlib'
|
|
115
|
+
]);
|
|
120
116
|
const usedExternals = new Set();
|
|
121
117
|
for (const module of report.modules) {
|
|
122
118
|
for (const edge of module.edges) {
|
|
@@ -124,9 +120,11 @@ program
|
|
|
124
120
|
const specifier = edge.specifier;
|
|
125
121
|
if (!specifier)
|
|
126
122
|
continue;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
123
|
+
// Normalize node: protocol
|
|
124
|
+
const cleanSpec = specifier.startsWith('node:') ? specifier.slice(5) : specifier;
|
|
125
|
+
let pkgName = cleanSpec.startsWith('@')
|
|
126
|
+
? cleanSpec.split('/').slice(0, 2).join('/')
|
|
127
|
+
: cleanSpec.split('/')[0];
|
|
130
128
|
if (pkgName && !builtinModules.has(pkgName)) {
|
|
131
129
|
usedExternals.add(pkgName);
|
|
132
130
|
if (!allDeclared.has(pkgName)) {
|
|
@@ -165,7 +163,7 @@ program
|
|
|
165
163
|
}
|
|
166
164
|
}
|
|
167
165
|
}
|
|
168
|
-
const skipList = new Set(['@optiprune/cli', '@optiprune/core', 'typescript', '@types/node', 'tsx']);
|
|
166
|
+
const skipList = new Set(['knip', 'husky', 'lint-staged', '@optiprune/cli', '@optiprune/core', 'typescript', 'vite', 'vitest', 'jest', 'eslint', 'prettier', '@types/node', 'ts-node', 'tsx']);
|
|
169
167
|
for (const devDepName of Object.keys(devDeps)) {
|
|
170
168
|
if (!usedExternals.has(devDepName) && !skipList.has(devDepName)) {
|
|
171
169
|
const alreadyReported = report.findings.some((f) => f.rule === "unused-dev-dependency" && f.evidence?.package === devDepName);
|
|
@@ -199,37 +197,7 @@ program
|
|
|
199
197
|
process.exit(1);
|
|
200
198
|
}
|
|
201
199
|
catch (error) {
|
|
202
|
-
console.error("An unexpected error occurred
|
|
203
|
-
process.exit(1);
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
program
|
|
207
|
-
.command("export-cache <targetPath>")
|
|
208
|
-
.description("Export the current analysis cache to a JSON file")
|
|
209
|
-
.option("-r, --rootDir <path>", "Root directory of the project", process.cwd())
|
|
210
|
-
.action(async (targetPath, options) => {
|
|
211
|
-
try {
|
|
212
|
-
const rootDir = options.rootDir ?? process.cwd();
|
|
213
|
-
await exportCache(rootDir, targetPath);
|
|
214
|
-
console.log(`${yellow("✔")} Cache exported to ${bold(targetPath)}`);
|
|
215
|
-
}
|
|
216
|
-
catch (error) {
|
|
217
|
-
console.error("Failed to export cache:", error);
|
|
218
|
-
process.exit(1);
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
program
|
|
222
|
-
.command("import-cache <sourcePath>")
|
|
223
|
-
.description("Import an external cache JSON file into the local directory")
|
|
224
|
-
.option("-r, --rootDir <path>", "Root directory of the project", process.cwd())
|
|
225
|
-
.action(async (sourcePath, options) => {
|
|
226
|
-
try {
|
|
227
|
-
const rootDir = options.rootDir ?? process.cwd();
|
|
228
|
-
await importCache(rootDir, sourcePath);
|
|
229
|
-
console.log(`${yellow("✔")} Cache imported from ${bold(sourcePath)}`);
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
console.error("Failed to import cache:", error);
|
|
200
|
+
console.error("An unexpected error occurred:", error);
|
|
233
201
|
process.exit(1);
|
|
234
202
|
}
|
|
235
203
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,OAAO,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,2EAA2E;AAC3E,2DAA2D;AAC3D,aAAa;AACb,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|