optiprune 2.4.0 → 2.6.0
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/README.md +5 -6
- package/config.md +5 -3
- package/dist/cli.js +308 -177
- package/dist/cli.js.map +1 -1
- package/dist/plugin-resolution.d.ts +9 -0
- package/dist/plugin-resolution.js +75 -0
- package/dist/plugin-resolution.js.map +1 -0
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|

|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@optiprune/cli)[](https://www.npmjs.com/package/@optiprune/core)[](https://github.com/optiprune/cli)[](https://github.com/optiprune/core/actions/workflows/tests.yml)[](./LICENSE)[](https://www.npmjs.com/package/@optiprune/cli)[](https://www.npmjs.com/package/@optiprune/core)[](https://github.com/optiprune/cli)[](https://github.com/optiprune/core/actions/workflows/tests-push.yml)[](./LICENSE)[](https://nodejs.org/)
|
|
4
4
|
|
|
5
5
|
# OptiPrune
|
|
6
6
|
|
|
@@ -85,19 +85,18 @@ npx @optiprune/cli analyze --sarif > optiprune.sarif
|
|
|
85
85
|
| `--fail-on <confidence>` | Exit non-zero when findings meet the selected confidence level: `high`, `medium`, `low`, or `none`. | `high` |
|
|
86
86
|
| `--json` | Print the structured analysis report as JSON. | Disabled |
|
|
87
87
|
| `--sarif` | Print SARIF output. | Disabled |
|
|
88
|
-
| `--skip
|
|
89
|
-
| `--skip-4` | Skip the concolic execution-proof layer. | Disabled |
|
|
88
|
+
| `--skip <layers...>` | Skip analysis layers `3`, `4`, or `smt`; `smt` also skips layer `3`. | Disabled |
|
|
90
89
|
| `-v, --verbose` | Print verbose output and internal graph state; with `--json`, include structured `debug` diagnostics in the report. | Disabled |
|
|
91
90
|
| `--fix <rules...>` | Select fix targets: `files`, `exports`, `dependencies`, `devDependencies`, `conditions`, or `json`. | None |
|
|
92
91
|
| `--fix-json` | Safely repair recoverable `package.json` JSON errors; shorthand for `--fix json`. | Disabled |
|
|
93
|
-
| `--
|
|
92
|
+
| `--plugins <names...>` | Force-enable one or more built-in plugins, such as `--plugins astro vite vitest`. Names may omit the `-plugin` suffix; unknown names produce `Did you mean ...?` when a familiar match exists, otherwise `No Plugin found with the name ...`. | Disabled |
|
|
94
93
|
| `--confidence <level>` | Minimum fix confidence: `high`, `medium+`, `low+`, or `all`. | `high` |
|
|
95
94
|
| `--force` | Allow a selected fix when the source edit is otherwise considered unsafe. | Disabled |
|
|
96
95
|
| `--dry-run` | Log planned fixes without changing files. | Disabled |
|
|
97
96
|
| `--cache-from <path>` | Import a JSON cache before analysis. | None |
|
|
98
97
|
| `--cache-to <path>` | Export the resulting cache after analysis. | None |
|
|
99
98
|
|
|
100
|
-
`--confidence`, `--force`, and `--dry-run` require `--fix` or `--fix-json`. Unknown fix targets are rejected before analysis begins.
|
|
99
|
+
`--confidence`, `--force`, and `--dry-run` require `--fix` or `--fix-json`. Unknown fix targets are rejected before analysis begins. `--plugins` is repeatable in one invocation and force-enables the named built-in plugins without changing other plugin settings from project configuration.
|
|
101
100
|
|
|
102
101
|
## Fixes
|
|
103
102
|
|
|
@@ -214,4 +213,4 @@ The Core repository uses Vitest for its test suite. The workflow badges above re
|
|
|
214
213
|
| CLI package | [npmjs.com/package/@optiprune/cli](https://www.npmjs.com/package/@optiprune/cli) |
|
|
215
214
|
| Core package | [npmjs.com/package/@optiprune/core](https://www.npmjs.com/package/@optiprune/core) |
|
|
216
215
|
| Documentation site | [opti.drml.int.yt](https://opti.drml.int.yt/) |
|
|
217
|
-
| License | [MIT](./LICENSE) |
|
|
216
|
+
| License | [MIT](./LICENSE) |
|
package/config.md
CHANGED
|
@@ -123,17 +123,19 @@ Configures the automatic removal of dead code. Can be a boolean or an object for
|
|
|
123
123
|
|
|
124
124
|
**5. Plugin Overrides (plugins)**
|
|
125
125
|
|
|
126
|
-
Enable or disable an installed source-aware plugin explicitly.
|
|
126
|
+
Enable or disable an installed source-aware plugin explicitly. Use the canonical plugin name, including the `-plugin` suffix:
|
|
127
127
|
|
|
128
128
|
```json
|
|
129
129
|
{
|
|
130
130
|
"plugins": {
|
|
131
|
-
"
|
|
131
|
+
"astro-plugin": true,
|
|
132
|
+
"vite-plugin": true,
|
|
133
|
+
"vitest-plugin": true
|
|
132
134
|
}
|
|
133
135
|
}
|
|
134
136
|
```
|
|
135
137
|
|
|
136
|
-
The CLI equivalent is `--
|
|
138
|
+
The CLI equivalent is repeatable and accepts short names without the suffix: `--plugins astro vite vitest`. Each requested plugin is force-enabled. An unknown name produces `Did you mean ...?` when a familiar match exists; otherwise the CLI reports `No Plugin found with the name ...`.
|
|
137
139
|
|
|
138
140
|
**6. Rule Overrides (rules)**Fine-tune or disable specific inspection rules:
|
|
139
141
|
|
package/dist/cli.js
CHANGED
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
import path from "pathe";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import {
|
|
6
|
-
|
|
5
|
+
import { parseArgs } from "node:util";
|
|
6
|
+
import { assertPluginsExist } from "./plugin-resolution.js";
|
|
7
7
|
const FIX_TARGETS = new Set(["files", "exports", "dependencies", "devDependencies", "conditions", "json"]);
|
|
8
|
-
// Test and fixture patterns defined directly in the CLI
|
|
9
8
|
const TEST_IGNORE_PATTERNS = [
|
|
10
9
|
"**/test/**",
|
|
11
10
|
"**/tests/**",
|
|
@@ -20,8 +19,6 @@ const TEST_IGNORE_PATTERNS = [
|
|
|
20
19
|
"**/*.spec.tsx",
|
|
21
20
|
"**/*.spec.jsx",
|
|
22
21
|
];
|
|
23
|
-
// Using @ts-ignore for core imports as CI environments sometimes struggle
|
|
24
|
-
// with subpath exports resolution in strict NodeNext mode.
|
|
25
22
|
// @ts-ignore
|
|
26
23
|
import { analyze, shouldFail, exportCache, importCache, loadConfig, mergeConfig, DEFAULT_CONFIG } from "@optiprune/core";
|
|
27
24
|
// @ts-ignore
|
|
@@ -31,7 +28,6 @@ const bold = (s) => `\x1b[1m${s}\x1b[0m`;
|
|
|
31
28
|
const yellow = (s) => `\x1b[33m${s}\x1b[0m`;
|
|
32
29
|
const red = (s) => `\x1b[31m${s}\x1b[0m`;
|
|
33
30
|
const dim = (s) => `\x1b[2m${s}\x1b[0m`;
|
|
34
|
-
// Helper to find the CLI package version
|
|
35
31
|
function getCliVersion() {
|
|
36
32
|
try {
|
|
37
33
|
const currentDir = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -49,7 +45,6 @@ function getCliVersion() {
|
|
|
49
45
|
catch (e) { }
|
|
50
46
|
return "unknown";
|
|
51
47
|
}
|
|
52
|
-
// Helper to find the core version safely
|
|
53
48
|
function getCoreVersion(rootDir) {
|
|
54
49
|
try {
|
|
55
50
|
const localCore = path.join(rootDir, "node_modules/@optiprune/core/package.json");
|
|
@@ -71,189 +66,325 @@ function getCoreVersion(rootDir) {
|
|
|
71
66
|
catch (e) { }
|
|
72
67
|
return "1.12.1";
|
|
73
68
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
];
|
|
126
|
-
|
|
127
|
-
if (invalidTargets.length > 0) {
|
|
128
|
-
throw new Error(`Unknown --fix target(s): ${invalidTargets.join(", ")}. Choose files, exports, dependencies, devDependencies, conditions, or json.`);
|
|
129
|
-
}
|
|
130
|
-
fixOption = {
|
|
131
|
-
confidence: options.confidence,
|
|
132
|
-
rules: [...new Set(requestedTargets)],
|
|
133
|
-
force: !!options.force,
|
|
134
|
-
dryRun: !!options.dryRun,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
// 3. Determine if test ignoring is active (CLI flag OR config file setting)
|
|
138
|
-
const shouldIgnoreTests = isCliOverride("ignoreTests")
|
|
139
|
-
? !!options.ignoreTests
|
|
140
|
-
: !!fileConfig.ignoreTests;
|
|
141
|
-
// 4. Resolve ignore patterns directly in the CLI
|
|
142
|
-
let mergedIgnore = undefined;
|
|
143
|
-
const cliIgnore = isCliOverride("ignore") ? options.ignore : undefined;
|
|
144
|
-
const baseIgnore = cliIgnore ?? (Array.isArray(fileConfig.ignore) ? fileConfig.ignore : []);
|
|
145
|
-
if (shouldIgnoreTests || baseIgnore.length > 0) {
|
|
146
|
-
const testGlobs = shouldIgnoreTests ? TEST_IGNORE_PATTERNS : [];
|
|
147
|
-
mergedIgnore = Array.from(new Set([...testGlobs, ...baseIgnore]));
|
|
69
|
+
function printHelp() {
|
|
70
|
+
console.log(`
|
|
71
|
+
Usage: optiprune [command] [options]
|
|
72
|
+
|
|
73
|
+
Finds dead code in TypeScript/JavaScript projects.
|
|
74
|
+
|
|
75
|
+
Commands:
|
|
76
|
+
analyze [options] Perform full analysis of the project (default)
|
|
77
|
+
export-cache <targetPath> Export current analysis cache to a JSON file
|
|
78
|
+
import-cache <sourcePath> Import cache JSON file into local directory
|
|
79
|
+
|
|
80
|
+
Options:
|
|
81
|
+
-V, --version Output the version number
|
|
82
|
+
-h, --help Display this help text
|
|
83
|
+
|
|
84
|
+
Analyze Options:
|
|
85
|
+
-r, --rootDir <path> Root directory of project (default: cwd)
|
|
86
|
+
-e, --entry <patterns...> Entry point patterns
|
|
87
|
+
-x, --extensions <exts...> Extensions to analyze (default: .ts .tsx .js .jsx .vue)
|
|
88
|
+
-i, --ignore <patterns...> Ignore patterns (glob)
|
|
89
|
+
--no-report-unused-exports Do not report unused exports
|
|
90
|
+
--no-conventional-entries Do not include conventional entry points
|
|
91
|
+
--include-entry-exports Report unused exports in entry files
|
|
92
|
+
--include-entry-members Report unused members in entry files
|
|
93
|
+
--cycles Print detected dependency cycles
|
|
94
|
+
--ignore-tests Ignore test files and fixtures
|
|
95
|
+
--ignore-unknown-import Ignore dynamic/unknown import reachability
|
|
96
|
+
--fail-on <confidence> Fail confidence: high, medium, low, none (default: high)
|
|
97
|
+
--json Output results as JSON
|
|
98
|
+
--sarif Output results in SARIF format
|
|
99
|
+
--skip <layers...> Skip analysis layers: 3, 4, smt
|
|
100
|
+
-v, --verbose Show verbose output and internal graph state
|
|
101
|
+
--fix <rules...> Fix targets: files, exports, dependencies, etc.
|
|
102
|
+
--fix-json Safely repair recoverable package.json JSON errors
|
|
103
|
+
--plugins <names...> Force-enable plugins by name (e.g. astro vite vitest)
|
|
104
|
+
--confidence <level> Min fix confidence: high, medium+, low+, all (default: high)
|
|
105
|
+
--force Allow unsafe fixes
|
|
106
|
+
--dry-run Log fixes without writing files
|
|
107
|
+
--cache-from <path> Import cache JSON prior to analysis
|
|
108
|
+
--cache-to <path> Export resulting cache to JSON after analysis
|
|
109
|
+
`);
|
|
110
|
+
}
|
|
111
|
+
/** Preprocesses arguments so variadic flags work like Commander (e.g., `--extensions .ts .tsx`) */
|
|
112
|
+
function normalizeVariadicFlags(args, variadicNames) {
|
|
113
|
+
const result = [];
|
|
114
|
+
const variadicSet = new Set(variadicNames);
|
|
115
|
+
let currentFlag = null;
|
|
116
|
+
for (let i = 0; i < args.length; i++) {
|
|
117
|
+
const arg = args[i];
|
|
118
|
+
if (arg.startsWith("-")) {
|
|
119
|
+
const flagName = arg.split("=")[0].replace(/^-+/, "");
|
|
120
|
+
currentFlag = variadicSet.has(flagName) ? arg.split("=")[0] : null;
|
|
121
|
+
result.push(arg);
|
|
148
122
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
const invalidSkipValues = skipValues.filter((value) => !["3", "4", "smt"].includes(value.toLowerCase()));
|
|
152
|
-
if (invalidSkipValues.length > 0) {
|
|
153
|
-
throw new Error(`Unknown --skip value(s): ${invalidSkipValues.join(", ")}. Choose 3, 4, or smt.`);
|
|
123
|
+
else if (currentFlag && !arg.startsWith("-")) {
|
|
124
|
+
result.push(currentFlag, arg);
|
|
154
125
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
...(skipValues.some((value) => value === "4") && { skip4: true }),
|
|
159
|
-
...(skipValues.some((value) => value.toLowerCase() === "smt") && { skipSmt: true, skip3: true }),
|
|
160
|
-
};
|
|
161
|
-
const cliOverrides = {
|
|
162
|
-
...(isCliOverride("rootDir") && { rootDir: targetRootDir }),
|
|
163
|
-
...(isCliOverride("entry") && { entry: options.entry }),
|
|
164
|
-
...(isCliOverride("extensions") && { extensions: options.extensions }),
|
|
165
|
-
...(mergedIgnore !== undefined && { ignore: mergedIgnore }),
|
|
166
|
-
...(shouldIgnoreTests && { ignoreTests: true }),
|
|
167
|
-
...(isCliOverride("reportUnusedExports") && {
|
|
168
|
-
reportUnusedExports: options.reportUnusedExports,
|
|
169
|
-
}),
|
|
170
|
-
...(isCliOverride("conventionalEntries") && {
|
|
171
|
-
includeConventionalEntries: options.conventionalEntries,
|
|
172
|
-
}),
|
|
173
|
-
...(isCliOverride("includeEntryExports") && { includeEntryExports: options.includeEntryExports }),
|
|
174
|
-
...(isCliOverride("includeEntryMembers") && { includeEntryMembers: options.includeEntryMembers }),
|
|
175
|
-
...(isCliOverride("cycles") && { cycles: options.cycles }),
|
|
176
|
-
...(isCliOverride("ignoreUnknownImport") && { ignoreUnknownImport: options.ignoreUnknownImport }),
|
|
177
|
-
...(isCliOverride("failOn") && { failOn: options.failOn }),
|
|
178
|
-
...(isCliOverride("json") && { json: options.json }),
|
|
179
|
-
...(isCliOverride("skip") && { layers: skipLayers }),
|
|
180
|
-
...(isCliOverride("verbose") && { verbose: options.verbose }),
|
|
181
|
-
...(isCliOverride("nodeLlamaCpp") && { plugins: { ...(fileConfig.plugins ?? {}), "node-llama-cpp-plugin": !!options.nodeLlamaCpp } }),
|
|
182
|
-
...(fixOption !== undefined && { fix: fixOption }),
|
|
183
|
-
...(isCliOverride("cacheFrom") && { cacheFrom: options.cacheFrom }),
|
|
184
|
-
...(isCliOverride("cacheTo") && { cacheTo: options.cacheTo }),
|
|
185
|
-
};
|
|
186
|
-
// 6. Merge DEFAULT_CONFIG -> fileConfig -> cliOverrides
|
|
187
|
-
const baseConfig = {
|
|
188
|
-
...DEFAULT_CONFIG,
|
|
189
|
-
rootDir: targetRootDir,
|
|
190
|
-
entry: [...DEFAULT_CONFIG.entry],
|
|
191
|
-
extensions: [...DEFAULT_CONFIG.extensions],
|
|
192
|
-
ignore: [...DEFAULT_CONFIG.ignore],
|
|
193
|
-
ignoreDependencies: [...DEFAULT_CONFIG.ignoreDependencies],
|
|
194
|
-
packageIgnoreDependencies: new Map(DEFAULT_CONFIG.packageIgnoreDependencies),
|
|
195
|
-
externalContracts: [...DEFAULT_CONFIG.externalContracts],
|
|
196
|
-
pathAliases: new Map(DEFAULT_CONFIG.pathAliases),
|
|
197
|
-
packageImports: new Map(DEFAULT_CONFIG.packageImports),
|
|
198
|
-
layers: { ...DEFAULT_CONFIG.layers },
|
|
199
|
-
rules: { ...DEFAULT_CONFIG.rules },
|
|
200
|
-
plugins: { ...DEFAULT_CONFIG.plugins },
|
|
201
|
-
workspaceGlobs: [...DEFAULT_CONFIG.workspaceGlobs],
|
|
202
|
-
projectPatterns: [...DEFAULT_CONFIG.projectPatterns],
|
|
203
|
-
unreachableFileIgnorePatterns: [...DEFAULT_CONFIG.unreachableFileIgnorePatterns],
|
|
204
|
-
protectedExportPatterns: [...DEFAULT_CONFIG.protectedExportPatterns],
|
|
205
|
-
frameworks: [...DEFAULT_CONFIG.frameworks],
|
|
206
|
-
};
|
|
207
|
-
const resolvedWithFile = mergeConfig(baseConfig, fileConfig);
|
|
208
|
-
const finalConfig = mergeConfig(resolvedWithFile, cliOverrides);
|
|
209
|
-
const report = await analyze(finalConfig);
|
|
210
|
-
if (options.sarif) {
|
|
211
|
-
console.log(formatSarif(report));
|
|
126
|
+
else {
|
|
127
|
+
currentFlag = null;
|
|
128
|
+
result.push(arg);
|
|
212
129
|
}
|
|
213
|
-
|
|
214
|
-
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
async function runAnalyze(args) {
|
|
134
|
+
const normalizedArgs = normalizeVariadicFlags(args, ["entry", "e", "extensions", "x", "ignore", "i", "skip", "fix", "plugins"]);
|
|
135
|
+
const optionsConfig = {
|
|
136
|
+
help: { type: "boolean", short: "h" },
|
|
137
|
+
rootDir: { type: "string", short: "r" },
|
|
138
|
+
entry: { type: "string", short: "e", multiple: true },
|
|
139
|
+
extensions: { type: "string", short: "x", multiple: true },
|
|
140
|
+
ignore: { type: "string", short: "i", multiple: true },
|
|
141
|
+
"report-unused-exports": { type: "boolean", default: true },
|
|
142
|
+
"no-report-unused-exports": { type: "boolean" },
|
|
143
|
+
"conventional-entries": { type: "boolean", default: true },
|
|
144
|
+
"no-conventional-entries": { type: "boolean" },
|
|
145
|
+
"include-entry-exports": { type: "boolean" },
|
|
146
|
+
"include-entry-members": { type: "boolean" },
|
|
147
|
+
cycles: { type: "boolean" },
|
|
148
|
+
"ignore-tests": { type: "boolean" },
|
|
149
|
+
"ignore-unknown-import": { type: "boolean" },
|
|
150
|
+
"fail-on": { type: "string", default: "high" },
|
|
151
|
+
json: { type: "boolean" },
|
|
152
|
+
sarif: { type: "boolean" },
|
|
153
|
+
skip: { type: "string", multiple: true },
|
|
154
|
+
verbose: { type: "boolean", short: "v" },
|
|
155
|
+
fix: { type: "string", multiple: true },
|
|
156
|
+
"fix-json": { type: "boolean" },
|
|
157
|
+
plugins: { type: "string", multiple: true },
|
|
158
|
+
confidence: { type: "string", default: "high" },
|
|
159
|
+
force: { type: "boolean" },
|
|
160
|
+
"dry-run": { type: "boolean" },
|
|
161
|
+
"cache-from": { type: "string" },
|
|
162
|
+
"cache-to": { type: "string" },
|
|
163
|
+
};
|
|
164
|
+
const { values } = parseArgs({
|
|
165
|
+
args: normalizedArgs,
|
|
166
|
+
options: optionsConfig,
|
|
167
|
+
strict: true,
|
|
168
|
+
allowPositionals: false,
|
|
169
|
+
});
|
|
170
|
+
if (values.help) {
|
|
171
|
+
printHelp();
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// Checks both long form (--rootDir) and short alias (-r)
|
|
175
|
+
const isCliOverride = (longFlag, shortFlag) => {
|
|
176
|
+
return args.some((arg) => {
|
|
177
|
+
const base = arg.split("=")[0];
|
|
178
|
+
return (base === `--${longFlag}` ||
|
|
179
|
+
base === `--no-${longFlag}` ||
|
|
180
|
+
(shortFlag ? base === `-${shortFlag}` : false));
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
const targetRootDir = path.resolve(values.rootDir ?? process.cwd());
|
|
184
|
+
// 1. Read project config via core's loadConfig
|
|
185
|
+
const fileConfig = typeof loadConfig === "function" ? await loadConfig(targetRootDir) : {};
|
|
186
|
+
// 2. Resolve fix configurations
|
|
187
|
+
let fixOption = undefined;
|
|
188
|
+
const hasExplicitFix = isCliOverride("fix");
|
|
189
|
+
const hasJsonFix = isCliOverride("fix-json") && Boolean(values["fix-json"]);
|
|
190
|
+
const hasFixFlags = hasExplicitFix || hasJsonFix || isCliOverride("confidence") || isCliOverride("force") || isCliOverride("dry-run");
|
|
191
|
+
if (hasFixFlags) {
|
|
192
|
+
if (!hasExplicitFix && !hasJsonFix) {
|
|
193
|
+
throw new Error("--confidence, --force, and --dry-run require --fix <target...> or --fix-json");
|
|
215
194
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
195
|
+
const requestedTargets = [
|
|
196
|
+
...(hasExplicitFix && Array.isArray(values.fix) ? values.fix : []),
|
|
197
|
+
...(hasJsonFix ? ["json"] : []),
|
|
198
|
+
];
|
|
199
|
+
const invalidTargets = requestedTargets.filter((target) => !FIX_TARGETS.has(target));
|
|
200
|
+
if (invalidTargets.length > 0) {
|
|
201
|
+
throw new Error(`Unknown --fix target(s): ${invalidTargets.join(", ")}. Choose files, exports, dependencies, devDependencies, conditions, or json.`);
|
|
219
202
|
}
|
|
220
|
-
|
|
221
|
-
|
|
203
|
+
fixOption = {
|
|
204
|
+
confidence: values.confidence ?? "high",
|
|
205
|
+
rules: [...new Set(requestedTargets)],
|
|
206
|
+
force: Boolean(values.force),
|
|
207
|
+
dryRun: Boolean(values["dry-run"]),
|
|
208
|
+
};
|
|
222
209
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
210
|
+
// 3. Determine if test ignoring is active
|
|
211
|
+
const shouldIgnoreTests = isCliOverride("ignore-tests")
|
|
212
|
+
? Boolean(values["ignore-tests"])
|
|
213
|
+
: Boolean(fileConfig.ignoreTests);
|
|
214
|
+
// 4. Resolve ignore patterns
|
|
215
|
+
let mergedIgnore = undefined;
|
|
216
|
+
const cliIgnore = isCliOverride("ignore", "i") ? values.ignore : undefined;
|
|
217
|
+
const baseIgnore = cliIgnore ?? (Array.isArray(fileConfig.ignore) ? fileConfig.ignore : []);
|
|
218
|
+
if (shouldIgnoreTests || baseIgnore.length > 0) {
|
|
219
|
+
const testGlobs = shouldIgnoreTests ? TEST_IGNORE_PATTERNS : [];
|
|
220
|
+
mergedIgnore = Array.from(new Set([...testGlobs, ...baseIgnore]));
|
|
226
221
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
.
|
|
230
|
-
.
|
|
231
|
-
|
|
232
|
-
.
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
await exportCache(rootDir, targetPath);
|
|
236
|
-
console.log(`${yellow("✔")} Cache exported to ${bold(targetPath)}`);
|
|
222
|
+
// 5. Resolve explicitly requested plugins
|
|
223
|
+
const requestedPlugins = isCliOverride("plugins") ? (values.plugins ?? []) : [];
|
|
224
|
+
const resolvedPlugins = requestedPlugins.length > 0 ? assertPluginsExist(requestedPlugins) : [];
|
|
225
|
+
// 6. Build CLI overrides
|
|
226
|
+
const skipValues = isCliOverride("skip") ? (values.skip ?? []) : [];
|
|
227
|
+
const invalidSkipValues = skipValues.filter((value) => !["3", "4", "smt"].includes(value.toLowerCase()));
|
|
228
|
+
if (invalidSkipValues.length > 0) {
|
|
229
|
+
throw new Error(`Unknown --skip value(s): ${invalidSkipValues.join(", ")}. Choose 3, 4, or smt.`);
|
|
237
230
|
}
|
|
238
|
-
|
|
239
|
-
|
|
231
|
+
const skipLayers = {
|
|
232
|
+
...(fileConfig.layers ?? {}),
|
|
233
|
+
...(skipValues.some((value) => value === "3") && { skip3: true }),
|
|
234
|
+
...(skipValues.some((value) => value === "4") && { skip4: true }),
|
|
235
|
+
...(skipValues.some((value) => value.toLowerCase() === "smt") && { skipSmt: true, skip3: true }),
|
|
236
|
+
};
|
|
237
|
+
const reportUnusedExports = values["no-report-unused-exports"] ? false : Boolean(values["report-unused-exports"]);
|
|
238
|
+
const conventionalEntries = values["no-conventional-entries"] ? false : Boolean(values["conventional-entries"]);
|
|
239
|
+
const cliOverrides = {
|
|
240
|
+
...(isCliOverride("rootDir", "r") && { rootDir: targetRootDir }),
|
|
241
|
+
...(isCliOverride("entry", "e") && values.entry && { entry: values.entry }),
|
|
242
|
+
...(isCliOverride("extensions", "x")
|
|
243
|
+
? values.extensions ? { extensions: values.extensions } : {}
|
|
244
|
+
: { extensions: [".ts", ".tsx", ".js", ".jsx", ".vue"] }),
|
|
245
|
+
...(mergedIgnore !== undefined && { ignore: mergedIgnore }),
|
|
246
|
+
...(shouldIgnoreTests && { ignoreTests: true }),
|
|
247
|
+
...(isCliOverride("report-unused-exports") && { reportUnusedExports }),
|
|
248
|
+
...(isCliOverride("conventional-entries") && { includeConventionalEntries: conventionalEntries }),
|
|
249
|
+
...(isCliOverride("include-entry-exports") && { includeEntryExports: Boolean(values["include-entry-exports"]) }),
|
|
250
|
+
...(isCliOverride("include-entry-members") && { includeEntryMembers: Boolean(values["include-entry-members"]) }),
|
|
251
|
+
...(isCliOverride("cycles") && { cycles: Boolean(values.cycles) }),
|
|
252
|
+
...(isCliOverride("ignore-unknown-import") && { ignoreUnknownImport: Boolean(values["ignore-unknown-import"]) }),
|
|
253
|
+
...(isCliOverride("fail-on") && values["fail-on"] && { failOn: values["fail-on"] }),
|
|
254
|
+
...(isCliOverride("json") && { json: Boolean(values.json) }),
|
|
255
|
+
...(isCliOverride("skip") && { layers: skipLayers }),
|
|
256
|
+
...(isCliOverride("verbose", "v") && { verbose: Boolean(values.verbose) }),
|
|
257
|
+
...(isCliOverride("plugins") && {
|
|
258
|
+
plugins: {
|
|
259
|
+
...(fileConfig.plugins ?? {}),
|
|
260
|
+
...Object.fromEntries(resolvedPlugins.map((plugin) => [plugin, true])),
|
|
261
|
+
},
|
|
262
|
+
}),
|
|
263
|
+
...(fixOption !== undefined && { fix: fixOption }),
|
|
264
|
+
...(isCliOverride("cache-from") && values["cache-from"] && { cacheFrom: values["cache-from"] }),
|
|
265
|
+
...(isCliOverride("cache-to") && values["cache-to"] && { cacheTo: values["cache-to"] }),
|
|
266
|
+
};
|
|
267
|
+
// 7. Merge DEFAULT_CONFIG -> fileConfig -> cliOverrides
|
|
268
|
+
const baseConfig = {
|
|
269
|
+
...DEFAULT_CONFIG,
|
|
270
|
+
rootDir: targetRootDir,
|
|
271
|
+
entry: [...DEFAULT_CONFIG.entry],
|
|
272
|
+
extensions: [...DEFAULT_CONFIG.extensions],
|
|
273
|
+
ignore: [...DEFAULT_CONFIG.ignore],
|
|
274
|
+
ignoreDependencies: [...DEFAULT_CONFIG.ignoreDependencies],
|
|
275
|
+
packageIgnoreDependencies: new Map(DEFAULT_CONFIG.packageIgnoreDependencies),
|
|
276
|
+
externalContracts: [...DEFAULT_CONFIG.externalContracts],
|
|
277
|
+
pathAliases: new Map(DEFAULT_CONFIG.pathAliases),
|
|
278
|
+
packageImports: new Map(DEFAULT_CONFIG.packageImports),
|
|
279
|
+
layers: { ...DEFAULT_CONFIG.layers },
|
|
280
|
+
rules: { ...DEFAULT_CONFIG.rules },
|
|
281
|
+
plugins: { ...DEFAULT_CONFIG.plugins },
|
|
282
|
+
workspaceGlobs: [...DEFAULT_CONFIG.workspaceGlobs],
|
|
283
|
+
projectPatterns: [...DEFAULT_CONFIG.projectPatterns],
|
|
284
|
+
unreachableFileIgnorePatterns: [...DEFAULT_CONFIG.unreachableFileIgnorePatterns],
|
|
285
|
+
protectedExportPatterns: [...DEFAULT_CONFIG.protectedExportPatterns],
|
|
286
|
+
frameworks: [...DEFAULT_CONFIG.frameworks],
|
|
287
|
+
};
|
|
288
|
+
const resolvedWithFile = mergeConfig(baseConfig, fileConfig);
|
|
289
|
+
const finalConfig = mergeConfig(resolvedWithFile, cliOverrides);
|
|
290
|
+
const report = await analyze(finalConfig);
|
|
291
|
+
if (values.sarif) {
|
|
292
|
+
console.log(formatSarif(report));
|
|
293
|
+
}
|
|
294
|
+
else if (finalConfig.json || values.json) {
|
|
295
|
+
console.log(JSON.stringify(report, (k, v) => typeof v === "bigint" ? v.toString() : v, 2));
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
const terminal = formatTerminal(report, { showCycles: Boolean(finalConfig.cycles) });
|
|
299
|
+
console.log(terminal);
|
|
300
|
+
}
|
|
301
|
+
const failTarget = (finalConfig.failOn ?? values["fail-on"] ?? "high");
|
|
302
|
+
if (shouldFail(report, failTarget)) {
|
|
240
303
|
process.exit(1);
|
|
241
304
|
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
305
|
+
}
|
|
306
|
+
async function runExportCache(args) {
|
|
307
|
+
const { values, positionals } = parseArgs({
|
|
308
|
+
args,
|
|
309
|
+
options: {
|
|
310
|
+
rootDir: { type: "string", short: "r" },
|
|
311
|
+
help: { type: "boolean", short: "h" },
|
|
312
|
+
},
|
|
313
|
+
allowPositionals: true,
|
|
314
|
+
});
|
|
315
|
+
const targetPath = positionals[0];
|
|
316
|
+
if (values.help || !targetPath) {
|
|
317
|
+
console.log("Usage: optiprune export-cache <targetPath> [-r, --rootDir <path>]");
|
|
318
|
+
if (!targetPath && !values.help)
|
|
319
|
+
process.exit(1);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
const rootDir = values.rootDir ?? process.cwd();
|
|
323
|
+
await exportCache(rootDir, targetPath);
|
|
324
|
+
console.log(`${yellow("✔")} Cache exported to ${bold(targetPath)}`);
|
|
325
|
+
}
|
|
326
|
+
async function runImportCache(args) {
|
|
327
|
+
const { values, positionals } = parseArgs({
|
|
328
|
+
args,
|
|
329
|
+
options: {
|
|
330
|
+
rootDir: { type: "string", short: "r" },
|
|
331
|
+
help: { type: "boolean", short: "h" },
|
|
332
|
+
},
|
|
333
|
+
allowPositionals: true,
|
|
334
|
+
});
|
|
335
|
+
const sourcePath = positionals[0];
|
|
336
|
+
if (values.help || !sourcePath) {
|
|
337
|
+
console.log("Usage: optiprune import-cache <sourcePath> [-r, --rootDir <path>]");
|
|
338
|
+
if (!sourcePath && !values.help)
|
|
339
|
+
process.exit(1);
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
const rootDir = values.rootDir ?? process.cwd();
|
|
343
|
+
await importCache(rootDir, sourcePath);
|
|
344
|
+
console.log(`${yellow("✔")} Cache imported from ${bold(sourcePath)}`);
|
|
345
|
+
}
|
|
346
|
+
async function main() {
|
|
347
|
+
const rawArgs = process.argv.slice(2);
|
|
348
|
+
if (rawArgs.includes("-V") || rawArgs.includes("--version")) {
|
|
349
|
+
const cliVersion = getCliVersion();
|
|
350
|
+
const coreVersion = getCoreVersion(process.cwd());
|
|
351
|
+
console.log(`CLI: ${cliVersion}, Core: ${coreVersion}`);
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
if (rawArgs.includes("-h") || rawArgs.includes("--help")) {
|
|
355
|
+
printHelp();
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
const firstArg = rawArgs[0];
|
|
359
|
+
const subcommands = new Set(["analyze", "export-cache", "import-cache"]);
|
|
360
|
+
let command = "analyze";
|
|
361
|
+
let commandArgs = rawArgs;
|
|
362
|
+
if (firstArg !== undefined && subcommands.has(firstArg)) {
|
|
363
|
+
command = firstArg;
|
|
364
|
+
commandArgs = rawArgs.slice(1);
|
|
365
|
+
}
|
|
248
366
|
try {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
367
|
+
switch (command) {
|
|
368
|
+
case "analyze":
|
|
369
|
+
await runAnalyze(commandArgs);
|
|
370
|
+
break;
|
|
371
|
+
case "export-cache":
|
|
372
|
+
await runExportCache(commandArgs);
|
|
373
|
+
break;
|
|
374
|
+
case "import-cache":
|
|
375
|
+
await runImportCache(commandArgs);
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
252
378
|
}
|
|
253
379
|
catch (error) {
|
|
254
|
-
|
|
380
|
+
if (command === "analyze") {
|
|
381
|
+
console.error("An unexpected error occurred during analysis:", error);
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
console.error(error?.message ?? error);
|
|
385
|
+
}
|
|
255
386
|
process.exit(1);
|
|
256
387
|
}
|
|
257
|
-
}
|
|
258
|
-
|
|
388
|
+
}
|
|
389
|
+
main();
|
|
259
390
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface PluginResolution {
|
|
2
|
+
requested: string;
|
|
3
|
+
canonical?: string;
|
|
4
|
+
suggestion?: string;
|
|
5
|
+
}
|
|
6
|
+
/** Discover the plugin modules shipped by the installed Core package. */
|
|
7
|
+
export declare function discoverPluginNames(): string[];
|
|
8
|
+
export declare function resolvePlugins(requested: string[], available?: string[]): PluginResolution[];
|
|
9
|
+
export declare function assertPluginsExist(requested: string[], available?: string[]): string[];
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "pathe";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
function normalize(value) {
|
|
5
|
+
return value.trim().toLowerCase().replace(/\\/g, "/").replace(/-plugin$/, "");
|
|
6
|
+
}
|
|
7
|
+
function distance(left, right) {
|
|
8
|
+
const previous = Array.from({ length: right.length + 1 }, (_, index) => index);
|
|
9
|
+
for (let row = 1; row <= left.length; row += 1) {
|
|
10
|
+
let diagonal = previous[0] ?? 0;
|
|
11
|
+
previous[0] = row;
|
|
12
|
+
for (let column = 1; column <= right.length; column += 1) {
|
|
13
|
+
const above = previous[column] ?? column;
|
|
14
|
+
const leftValue = left[row - 1] ?? "";
|
|
15
|
+
const rightValue = right[column - 1] ?? "";
|
|
16
|
+
const aboveValue = previous[column] ?? column;
|
|
17
|
+
const leftValueDistance = previous[column - 1] ?? column - 1;
|
|
18
|
+
previous[column] = leftValue === rightValue
|
|
19
|
+
? diagonal
|
|
20
|
+
: Math.min(diagonal + 1, aboveValue + 1, leftValueDistance + 1);
|
|
21
|
+
diagonal = above;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return previous[right.length] ?? right.length;
|
|
25
|
+
}
|
|
26
|
+
/** Discover the plugin modules shipped by the installed Core package. */
|
|
27
|
+
export function discoverPluginNames() {
|
|
28
|
+
try {
|
|
29
|
+
const require = createRequire(import.meta.url);
|
|
30
|
+
const corePackage = require.resolve("@optiprune/core/package.json");
|
|
31
|
+
const pluginDir = path.join(path.dirname(corePackage), "dist", "plugins");
|
|
32
|
+
return fs.readdirSync(pluginDir)
|
|
33
|
+
.filter((file) => /(?:-plugin|plugin)\.(?:c?m?js|ts)$/.test(file) && file !== "object-member-plugin.js")
|
|
34
|
+
.map((file) => file.replace(/\.(?:c?m?js|ts)$/, ""))
|
|
35
|
+
.sort();
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function resolvePlugins(requested, available = discoverPluginNames()) {
|
|
42
|
+
const byNormalized = new Map(available.map((name) => [normalize(name), name]));
|
|
43
|
+
return requested.map((value) => {
|
|
44
|
+
const key = normalize(value);
|
|
45
|
+
const canonical = byNormalized.get(key);
|
|
46
|
+
if (canonical)
|
|
47
|
+
return { requested: value, canonical };
|
|
48
|
+
let suggestion;
|
|
49
|
+
let bestScore = Number.POSITIVE_INFINITY;
|
|
50
|
+
for (const candidate of available) {
|
|
51
|
+
const candidateKey = normalize(candidate);
|
|
52
|
+
const score = distance(key, candidateKey);
|
|
53
|
+
const threshold = Math.max(2, Math.floor(Math.max(key.length, candidateKey.length) * 0.4));
|
|
54
|
+
if (score <= threshold && score < bestScore) {
|
|
55
|
+
suggestion = candidate;
|
|
56
|
+
bestScore = score;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return suggestion
|
|
60
|
+
? { requested: value, suggestion }
|
|
61
|
+
: { requested: value };
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export function assertPluginsExist(requested, available = discoverPluginNames()) {
|
|
65
|
+
const resolutions = resolvePlugins(requested, available);
|
|
66
|
+
const invalid = resolutions.find((resolution) => !resolution.canonical);
|
|
67
|
+
if (invalid) {
|
|
68
|
+
if (invalid.suggestion) {
|
|
69
|
+
throw new Error(`Plugin not found with the name "${invalid.requested}". Did you mean "${invalid.suggestion}"?`);
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`No Plugin found with the name "${invalid.requested}"`);
|
|
72
|
+
}
|
|
73
|
+
return resolutions.map((resolution) => resolution.canonical);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=plugin-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-resolution.js","sourceRoot":"","sources":["../src/plugin-resolution.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "optiprune",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "CLI for resilient static dead-code analyzer for TypeScript and JavaScript workspaces.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -69,12 +69,11 @@
|
|
|
69
69
|
"./package.json": "./package.json"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@optiprune/core": "^1.
|
|
73
|
-
"commander": "^15.0.0",
|
|
72
|
+
"@optiprune/core": "^1.16.0",
|
|
74
73
|
"pathe": "2.0.3"
|
|
75
74
|
},
|
|
76
75
|
"devDependencies": {
|
|
77
|
-
"@types/node": "^
|
|
76
|
+
"@types/node": "^20.0.01",
|
|
78
77
|
"typescript": "^5.8.3"
|
|
79
78
|
},
|
|
80
79
|
"optionalDependencies": {
|