@optiprune/cli 1.0.0 → 1.1.2

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 CHANGED
@@ -1,15 +1,71 @@
1
1
  #!/usr/bin/env node
2
2
  import path from "pathe";
3
+ import fs from "node:fs";
3
4
  import { Command } from "commander";
4
5
  const program = new Command();
6
+ // Using @ts-ignore for core imports as CI environments sometimes struggle
7
+ // with subpath exports resolution in strict NodeNext mode.
8
+ // @ts-ignore
5
9
  import { analyze, shouldFail } from "@optiprune/core";
10
+ // @ts-ignore
6
11
  import { formatTerminal, formatSarif } from "@optiprune/core/reporters";
7
- import { fileURLToPath } from "node:url";
8
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
- const VERSION = "2.1.5"; // Assuming same version as core for now
12
+ /** ANSI colour helpers */
13
+ const bold = (s) => `\x1b[1m${s}\x1b[0m`;
14
+ const yellow = (s) => `\x1b[33m${s}\x1b[0m`;
15
+ const red = (s) => `\x1b[31m${s}\x1b[0m`;
16
+ const dim = (s) => `\x1b[2m${s}\x1b[0m`;
17
+ // Helper to find the core version safely
18
+ function getCoreVersion(rootDir) {
19
+ try {
20
+ const localCore = path.join(rootDir, "node_modules/@optiprune/core/package.json");
21
+ if (fs.existsSync(localCore)) {
22
+ const content = fs.readFileSync(localCore, "utf-8");
23
+ const pkg = JSON.parse(content);
24
+ return pkg.version || "2.1.5";
25
+ }
26
+ }
27
+ catch (e) { }
28
+ return "2.1.5";
29
+ }
30
+ /**
31
+ * Custom Terminal Formatter that includes the new dependency findings.
32
+ */
33
+ function formatTerminalExtended(report) {
34
+ const output = formatTerminal(report);
35
+ const unusedDevDeps = report.findings.filter((f) => f.rule === "unused-dev-dependency");
36
+ const missingDeps = report.findings.filter((f) => f.rule === "missing-dependency");
37
+ if (unusedDevDeps.length === 0 && missingDeps.length === 0) {
38
+ return output;
39
+ }
40
+ const lines = [];
41
+ lines.push("");
42
+ lines.push(bold("── Dependency Audit ─────────────────────────────────────────────"));
43
+ if (unusedDevDeps.length > 0) {
44
+ lines.push("");
45
+ lines.push(bold(` Unused devDependencies (${unusedDevDeps.length})`));
46
+ lines.push(dim(" These packages are listed in devDependencies but never imported in source code."));
47
+ lines.push("");
48
+ for (const f of unusedDevDeps) {
49
+ const evidence = f.evidence;
50
+ const pkg = evidence?.package || "unknown package";
51
+ lines.push(` ${yellow("▲")} ${bold(pkg)}${dim(" (package.json)")}`);
52
+ }
53
+ }
54
+ if (missingDeps.length > 0) {
55
+ lines.push("");
56
+ lines.push(bold(` Used in code but missing from package.json (${missingDeps.length})`));
57
+ lines.push(dim(" These packages are imported in source files but not declared as any dependency."));
58
+ lines.push("");
59
+ for (const f of missingDeps) {
60
+ const evidence = f.evidence;
61
+ const pkg = evidence?.package || "unknown package";
62
+ lines.push(` ${red("✖")} ${bold(pkg)}`);
63
+ }
64
+ }
65
+ return output + "\n" + lines.join("\n");
66
+ }
10
67
  program
11
68
  .name("optiprune")
12
- .version(VERSION)
13
69
  .description("Finds dead code in TypeScript/JavaScript projects.")
14
70
  .option("-r, --rootDir <path>", "Root directory of the project", process.cwd())
15
71
  .option("-e, --entry <patterns...>", "Entry point patterns (glob or file paths)", [])
@@ -22,41 +78,114 @@ program
22
78
  .option("--sarif", "Output results in SARIF format")
23
79
  .option("--skip-3", "Skip Layer 3 (SMT Constraint Solver)")
24
80
  .option("--skip-4", "Skip Layer 4 (Concolic Execution Proofs)")
81
+ .option("-v, --verbose", "Show verbose output and internal graph state")
25
82
  .action(async (options) => {
26
83
  try {
84
+ const rootDir = options.rootDir ?? process.cwd();
85
+ program.version(getCoreVersion(rootDir));
27
86
  const analyzerOptions = {
28
- rootDir: options.rootDir,
29
- entry: options.entry,
30
- extensions: options.extensions,
31
- ignore: options.ignore,
87
+ rootDir: rootDir,
88
+ entry: options.entry ?? [],
89
+ extensions: options.extensions ?? [".ts", ".tsx", ".js", ".jsx"],
90
+ ignore: options.ignore ?? [],
32
91
  reportUnusedExports: options.reportUnusedExports,
33
92
  includeConventionalEntries: options.conventionalEntries,
34
- failOn: options.failOn,
93
+ failOn: options.failOn ?? "high",
35
94
  json: options.json || options.sarif,
36
95
  skip3: options.skip3,
37
96
  skip4: options.skip4,
97
+ verbose: options.verbose,
38
98
  };
39
99
  const report = await analyze(analyzerOptions);
100
+ // --- DEPENDENCY AUDIT INJECTION ---
101
+ try {
102
+ const pkgPath = path.join(rootDir, "package.json");
103
+ if (fs.existsSync(pkgPath)) {
104
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
105
+ const deps = (pkg.dependencies || {});
106
+ const devDeps = (pkg.devDependencies || {});
107
+ const allDeclared = new Set([...Object.keys(deps), ...Object.keys(devDeps)]);
108
+ const builtinModules = new Set(['fs', 'path', 'os', 'http', 'https', 'crypto', 'stream', 'util', 'events', 'node:url', 'node:fs', 'node:path', 'node:process', 'node:module', 'child_process', 'cluster', 'dns', 'url', 'v8', 'vm', 'zlib']);
109
+ const usedExternals = new Set();
110
+ for (const module of report.modules) {
111
+ for (const edge of module.edges) {
112
+ if (edge.resolution === 'external') {
113
+ const specifier = edge.specifier;
114
+ if (!specifier)
115
+ continue;
116
+ let pkgName = specifier.startsWith('@')
117
+ ? specifier.split('/').slice(0, 2).join('/')
118
+ : specifier.split('/')[0];
119
+ if (pkgName && !builtinModules.has(pkgName)) {
120
+ usedExternals.add(pkgName);
121
+ if (!allDeclared.has(pkgName)) {
122
+ const alreadyReported = report.findings.some((f) => f.rule === "missing-dependency" && f.evidence?.package === pkgName);
123
+ if (!alreadyReported) {
124
+ report.findings.push({
125
+ rule: "missing-dependency",
126
+ severity: "error",
127
+ confidence: "high",
128
+ message: `Package '${pkgName}' is used in '${module.path}' but not declared in package.json.`,
129
+ file: "package.json",
130
+ evidence: { package: pkgName, type: "missing" }
131
+ });
132
+ report.summary.findings++;
133
+ report.summary.errors++;
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+ for (const depName of Object.keys(deps)) {
141
+ if (!usedExternals.has(depName)) {
142
+ const alreadyReported = report.findings.some((f) => f.rule === "unused-dependency" && f.evidence?.package === depName);
143
+ if (!alreadyReported) {
144
+ report.findings.push({
145
+ rule: "unused-dependency",
146
+ severity: "warning",
147
+ confidence: "high",
148
+ message: `Package '${depName}' is declared as a dependency but never imported.`,
149
+ file: "package.json",
150
+ evidence: { package: depName, type: "dependency" }
151
+ });
152
+ report.summary.findings++;
153
+ report.summary.warnings++;
154
+ }
155
+ }
156
+ }
157
+ const skipList = new Set(['knip', '@optiprune/cli', '@optiprune/core', 'typescript', 'vite', 'vitest', 'jest', 'eslint', 'prettier', '@types/node', 'ts-node', 'tsx']);
158
+ for (const devDepName of Object.keys(devDeps)) {
159
+ if (!usedExternals.has(devDepName) && !skipList.has(devDepName)) {
160
+ const alreadyReported = report.findings.some((f) => f.rule === "unused-dev-dependency" && f.evidence?.package === devDepName);
161
+ if (!alreadyReported) {
162
+ report.findings.push({
163
+ rule: "unused-dev-dependency",
164
+ severity: "info",
165
+ confidence: "medium",
166
+ message: `DevDependency '${devDepName}' appears unused.`,
167
+ file: "package.json",
168
+ evidence: { package: devDepName, type: "devDependency" }
169
+ });
170
+ report.summary.findings++;
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+ catch (e) { }
177
+ // --- END OF INJECTION ---
40
178
  if (options.sarif) {
41
179
  console.log(formatSarif(report));
42
180
  }
43
181
  else if (options.json) {
44
- try {
45
- // Use a replacer to handle potential BigInt or other non-serializable types if any
46
- const json = JSON.stringify(report, (key, value) => typeof value === 'bigint' ? value.toString() : value, 2);
47
- console.log(json);
48
- }
49
- catch (jsonError) {
50
- console.error("Failed to generate JSON output:", jsonError);
51
- process.exit(1);
52
- }
182
+ console.log(JSON.stringify(report, (k, v) => typeof v === 'bigint' ? v.toString() : v, 2));
53
183
  }
54
184
  else {
55
- console.log(formatTerminal(report));
185
+ console.log(formatTerminalExtended(report));
56
186
  }
57
- if (shouldFail(report, options.failOn)) {
187
+ if (shouldFail(report, options.failOn))
58
188
  process.exit(1);
59
- }
60
189
  }
61
190
  catch (error) {
62
191
  console.error("An unexpected error occurred:", error);
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optiprune/cli",
3
- "version": "1.0.0",
3
+ "version": "1.1.2",
4
4
  "description": "CLI for resilient static dead-code analyzer for TypeScript and JavaScript workspaces.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,10 +9,10 @@
9
9
  "homepage": "https://opti.drml.int.yt/",
10
10
  "repository": {
11
11
  "type": "git",
12
- "url": "git+https://github.com/DreamLongYT/optiprune.git"
12
+ "url": "git+https://github.com/optiprune/cli.git"
13
13
  },
14
14
  "bugs": {
15
- "url": "https://github.com/DreamLongYT/optiprune/issues"
15
+ "url": "https://github.com/optiprune/cli/issues"
16
16
  },
17
17
  "keywords": [
18
18
  "analysis",
@@ -21,7 +21,15 @@
21
21
  "dead code",
22
22
  "typescript",
23
23
  "javascript",
24
- "optiprune"
24
+ "optiprune",
25
+ "api",
26
+ "optimization",
27
+ "resilient",
28
+ "analyzer",
29
+ "code",
30
+ "typescript",
31
+ "javascript"
32
+
25
33
  ],
26
34
  "files": [
27
35
  "dist",
@@ -29,12 +37,12 @@
29
37
  "LICENSE"
30
38
  ],
31
39
  "dependencies": {
40
+ "@optiprune/core": "1.0.2",
32
41
  "commander": "^15.0.0",
33
- "pathe": "2.0.3",
34
- "@optiprune/core": "1.0.2"
42
+ "pathe": "2.0.3"
35
43
  },
36
44
  "devDependencies": {
37
- "@types/node": "^22.15.3",
45
+ "@types/node": "^22.20.1",
38
46
  "typescript": "^5.8.3"
39
47
  },
40
48
  "scripts": {