optiprune 2.1.5 → 2.1.8

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.
Files changed (101) hide show
  1. package/bin/runner.js +26 -0
  2. package/package.json +8 -43
  3. package/dist/ast-utils.d.ts +0 -149
  4. package/dist/ast-utils.js +0 -36
  5. package/dist/ast-utils.js.map +0 -1
  6. package/dist/cache.d.ts +0 -14
  7. package/dist/cache.js +0 -36
  8. package/dist/cache.js.map +0 -1
  9. package/dist/cli.d.ts +0 -2
  10. package/dist/cli.js +0 -68
  11. package/dist/cli.js.map +0 -1
  12. package/dist/config-loader.d.ts +0 -4
  13. package/dist/config-loader.js +0 -84
  14. package/dist/config-loader.js.map +0 -1
  15. package/dist/coverage-tracker.d.ts +0 -39
  16. package/dist/coverage-tracker.js +0 -61
  17. package/dist/coverage-tracker.js.map +0 -1
  18. package/dist/engine.d.ts +0 -17
  19. package/dist/engine.js +0 -215
  20. package/dist/engine.js.map +0 -1
  21. package/dist/framework-plugins.d.ts +0 -16
  22. package/dist/framework-plugins.js +0 -127
  23. package/dist/framework-plugins.js.map +0 -1
  24. package/dist/fs-utils.d.ts +0 -32
  25. package/dist/fs-utils.js +0 -415
  26. package/dist/fs-utils.js.map +0 -1
  27. package/dist/graph.d.ts +0 -42
  28. package/dist/graph.js +0 -583
  29. package/dist/graph.js.map +0 -1
  30. package/dist/index.d.ts +0 -3
  31. package/dist/index.js +0 -451
  32. package/dist/index.js.map +0 -1
  33. package/dist/instrument.d.ts +0 -5
  34. package/dist/instrument.js +0 -108
  35. package/dist/instrument.js.map +0 -1
  36. package/dist/layer2.d.ts +0 -6
  37. package/dist/layer2.js +0 -224
  38. package/dist/layer2.js.map +0 -1
  39. package/dist/layer3.d.ts +0 -7
  40. package/dist/layer3.js +0 -346
  41. package/dist/layer3.js.map +0 -1
  42. package/dist/layer4.d.ts +0 -8
  43. package/dist/layer4.js +0 -627
  44. package/dist/layer4.js.map +0 -1
  45. package/dist/layer5.d.ts +0 -6
  46. package/dist/layer5.js +0 -141
  47. package/dist/layer5.js.map +0 -1
  48. package/dist/layer6.d.ts +0 -26
  49. package/dist/layer6.js +0 -268
  50. package/dist/layer6.js.map +0 -1
  51. package/dist/layer7.d.ts +0 -28
  52. package/dist/layer7.js +0 -267
  53. package/dist/layer7.js.map +0 -1
  54. package/dist/parser.d.ts +0 -20
  55. package/dist/parser.js +0 -832
  56. package/dist/parser.js.map +0 -1
  57. package/dist/plugins/angular-plugin.d.ts +0 -7
  58. package/dist/plugins/angular-plugin.js +0 -60
  59. package/dist/plugins/angular-plugin.js.map +0 -1
  60. package/dist/plugins/astro-plugin.d.ts +0 -7
  61. package/dist/plugins/astro-plugin.js +0 -88
  62. package/dist/plugins/astro-plugin.js.map +0 -1
  63. package/dist/plugins/babel-plugin.d.ts +0 -8
  64. package/dist/plugins/babel-plugin.js +0 -132
  65. package/dist/plugins/babel-plugin.js.map +0 -1
  66. package/dist/plugins/esbuild-plugin.d.ts +0 -8
  67. package/dist/plugins/esbuild-plugin.js +0 -121
  68. package/dist/plugins/esbuild-plugin.js.map +0 -1
  69. package/dist/plugins/nestjs-plugin.d.ts +0 -7
  70. package/dist/plugins/nestjs-plugin.js +0 -69
  71. package/dist/plugins/nestjs-plugin.js.map +0 -1
  72. package/dist/plugins/nextjs-plugin.d.ts +0 -7
  73. package/dist/plugins/nextjs-plugin.js +0 -66
  74. package/dist/plugins/nextjs-plugin.js.map +0 -1
  75. package/dist/plugins/nuxtjs-plugin.d.ts +0 -7
  76. package/dist/plugins/nuxtjs-plugin.js +0 -80
  77. package/dist/plugins/nuxtjs-plugin.js.map +0 -1
  78. package/dist/plugins/svelte-plugin.d.ts +0 -7
  79. package/dist/plugins/svelte-plugin.js +0 -38
  80. package/dist/plugins/svelte-plugin.js.map +0 -1
  81. package/dist/plugins/vuejs-plugin.d.ts +0 -7
  82. package/dist/plugins/vuejs-plugin.js +0 -63
  83. package/dist/plugins/vuejs-plugin.js.map +0 -1
  84. package/dist/reporters.d.ts +0 -3
  85. package/dist/reporters.js +0 -75
  86. package/dist/reporters.js.map +0 -1
  87. package/dist/semantic-graph.d.ts +0 -44
  88. package/dist/semantic-graph.js +0 -88
  89. package/dist/semantic-graph.js.map +0 -1
  90. package/dist/symbolic-engine.d.ts +0 -19
  91. package/dist/symbolic-engine.js +0 -51
  92. package/dist/symbolic-engine.js.map +0 -1
  93. package/dist/topology-manager.d.ts +0 -23
  94. package/dist/topology-manager.js +0 -144
  95. package/dist/topology-manager.js.map +0 -1
  96. package/dist/types.d.ts +0 -265
  97. package/dist/types.js +0 -11
  98. package/dist/types.js.map +0 -1
  99. package/dist/workspace.d.ts +0 -6
  100. package/dist/workspace.js +0 -105
  101. package/dist/workspace.js.map +0 -1
package/bin/runner.js ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from "node:module";
3
+ import { fileURLToPath, pathToFileURL } from "node:url";
4
+ import path from "pathe";
5
+
6
+ const require = createRequire(import.meta.url);
7
+
8
+ let cliPath;
9
+
10
+ try {
11
+ // 1. Try standard package resolution
12
+ const pkgPath = require.resolve("@optiprune/cli/package.json");
13
+ cliPath = path.join(path.dirname(pkgPath), "dist/cli.js");
14
+ } catch {
15
+ // 2. Monorepo / global symlink fallback
16
+ const currentDir = path.dirname(fileURLToPath(import.meta.url));
17
+ cliPath = path.resolve(currentDir, "../../cli/dist/cli.js");
18
+ }
19
+
20
+ // Convert absolute Windows path (E:\...) into a valid file:// URL
21
+ const cliUrl = pathToFileURL(cliPath).href;
22
+
23
+ import(cliUrl).catch((err) => {
24
+ console.error("Failed to execute @optiprune/cli:", err);
25
+ process.exit(1);
26
+ });
package/package.json CHANGED
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "optiprune",
3
- "version": "2.1.5",
3
+ "version": "2.1.8",
4
4
  "description": "Resilient static dead-code analyzer for TypeScript and JavaScript workspaces.",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
6
+ "main": "./dist/cli.js",
8
7
  "homepage": "https://opti.drml.int.yt/",
9
8
  "repository": {
10
9
  "type": "git",
@@ -50,57 +49,23 @@
50
49
  "optimization"
51
50
  ],
52
51
  "bin": {
53
- "optiprune": "dist/cli.js"
54
- },
55
- "exports": {
56
- ".": {
57
- "types": "./dist/index.d.ts",
58
- "import": "./dist/index.js"
59
- }
52
+ "optiprune": "./bin/runner.js"
60
53
  },
61
54
  "files": [
62
- "dist",
55
+ "bin",
63
56
  "README.md",
64
57
  "LICENSE"
65
58
  ],
66
- "scripts": {
67
- "build": "npx tsc -p tsconfig.json",
68
- "check": "npx tsc -p tsconfig.json --noEmit",
69
- "test": "vitest run --no-file-parallelism",
70
- "test:watch": "vitest",
71
- "analyze": "node ./dist/cli.js",
72
- "docs:dev": "vitepress dev docs",
73
- "docs:build": "vitepress build docs",
74
- "docs:preview": "vitepress preview docs",
75
- "prepublishOnly": "npm run build",
76
- "release": "node -e \"fs.rmSync('dist', { recursive: true, force: true })\" && npm ci && npm run build"
77
- },
78
59
  "dependencies": {
79
- "commander": "^15.0.0",
80
- "esbuild": "^0.28.1",
81
- "fast-glob": "^3.3.3",
82
- "js-yaml": "^5.2.2",
83
- "pathe": "2.0.3",
84
- "quickjs-emscripten": "^0.32.0",
85
- "yuku-ast": "^0.8.3",
86
- "yuku-codegen": "^0.8.3",
87
- "yuku-parser": "^0.8.3",
88
- "z3-solver": "^5.0.0"
89
- },
90
- "devDependencies": {
91
- "@types/node": "^22.15.3",
92
- "typescript": "^5.8.3",
93
- "vitepress": "^1.6.4",
94
- "vitest": "^3.2.4",
95
- "vue": "^3.5.40"
60
+ "@optiprune/cli": "^1.2.9",
61
+ "pathe": "2.0.3"
96
62
  },
97
63
  "engines": {
98
64
  "node": "^22.18.0 || >=24.11.0"
99
65
  },
100
66
  "license": "MIT",
101
67
  "directories": {
102
- "doc": "docs",
103
- "test": "tests"
68
+ "doc": "docs"
104
69
  },
105
70
  "author": "DreamLongYT"
106
- }
71
+ }
@@ -1,149 +0,0 @@
1
- /**
2
- * Shared AST Utilities for Yuku-compatible ESTree ASTs.
3
- * Replaces @babel/types for common type-guarding tasks.
4
- */
5
- export declare const t: {
6
- isStringLiteral: (n: unknown) => n is {
7
- type: "Literal";
8
- value: string;
9
- };
10
- isNumericLiteral: (n: unknown) => n is {
11
- type: "Literal";
12
- value: number;
13
- };
14
- isBooleanLiteral: (n: unknown) => n is {
15
- type: "Literal";
16
- value: boolean;
17
- };
18
- isIdentifier: (n: unknown) => n is {
19
- type: "Identifier";
20
- name: string;
21
- };
22
- isCallExpression: (n: unknown) => n is {
23
- type: "CallExpression";
24
- callee: any;
25
- arguments: any[];
26
- };
27
- isMemberExpression: (n: unknown) => n is {
28
- type: "MemberExpression";
29
- object: any;
30
- property: any;
31
- computed: boolean;
32
- };
33
- isVariableDeclarator: (n: unknown) => n is {
34
- type: "VariableDeclarator";
35
- id: any;
36
- init: any;
37
- };
38
- isFunctionDeclaration: (n: unknown) => n is {
39
- type: "FunctionDeclaration";
40
- id: {
41
- name: string;
42
- } | null;
43
- };
44
- isExportNamedDeclaration: (n: unknown) => n is {
45
- type: "ExportNamedDeclaration";
46
- declaration: any;
47
- specifiers: any[];
48
- };
49
- isImportDeclaration: (n: unknown) => n is {
50
- type: "ImportDeclaration";
51
- source: {
52
- value: string;
53
- };
54
- specifiers: any[];
55
- };
56
- isObjectProperty: (n: unknown) => n is {
57
- type: "Property";
58
- key: any;
59
- value: any;
60
- computed: boolean;
61
- };
62
- isObjectMethod: (n: unknown) => n is {
63
- type: "ObjectMethod";
64
- key: any;
65
- };
66
- isTSInterfaceDeclaration: (n: unknown) => n is {
67
- type: "TSInterfaceDeclaration";
68
- id: {
69
- name: string;
70
- };
71
- };
72
- isTSTypeAliasDeclaration: (n: unknown) => n is {
73
- type: "TSTypeAliasDeclaration";
74
- id: {
75
- name: string;
76
- };
77
- };
78
- isTSEnumDeclaration: (n: unknown) => n is {
79
- type: "TSEnumDeclaration";
80
- id: {
81
- name: string;
82
- };
83
- };
84
- isClassDeclaration: (n: unknown) => n is {
85
- type: "ClassDeclaration";
86
- id: {
87
- name: string;
88
- } | null;
89
- };
90
- isClassExpression: (n: unknown) => n is {
91
- type: "ClassExpression";
92
- id: {
93
- name: string;
94
- } | null;
95
- };
96
- isClassMethod: (n: unknown) => n is {
97
- type: "ClassMethod";
98
- key: any;
99
- };
100
- isClassProperty: (n: unknown) => n is {
101
- type: "ClassProperty";
102
- key: any;
103
- };
104
- isExportDefaultDeclaration: (n: unknown) => n is {
105
- type: "ExportDefaultDeclaration";
106
- declaration: any;
107
- };
108
- isFunctionExpression: (n: unknown) => n is {
109
- type: "FunctionExpression";
110
- id: {
111
- name: string;
112
- } | null;
113
- };
114
- isJSXElement: (n: unknown) => n is {
115
- type: "JSXElement";
116
- openingElement: any;
117
- };
118
- isJSXIdentifier: (n: unknown) => n is {
119
- type: "JSXIdentifier";
120
- name: string;
121
- };
122
- isObjectExpression: (n: unknown) => n is {
123
- type: "ObjectExpression";
124
- properties: any[];
125
- };
126
- isLiteral: (n: unknown) => n is {
127
- type: "Literal";
128
- value: any;
129
- };
130
- isJSXAttribute: (n: unknown) => n is {
131
- type: "JSXAttribute";
132
- name: any;
133
- value: any;
134
- };
135
- isNewExpression: (n: unknown) => n is {
136
- type: "NewExpression";
137
- callee: any;
138
- arguments: any[];
139
- };
140
- isTemplateLiteral: (n: unknown) => n is {
141
- type: "TemplateLiteral";
142
- quasis: any[];
143
- expressions: any[];
144
- };
145
- isDecorator: (n: unknown) => n is {
146
- type: "Decorator";
147
- expression: any;
148
- };
149
- };
package/dist/ast-utils.js DELETED
@@ -1,36 +0,0 @@
1
- /**
2
- * Shared AST Utilities for Yuku-compatible ESTree ASTs.
3
- * Replaces @babel/types for common type-guarding tasks.
4
- */
5
- export const t = {
6
- isStringLiteral: (n) => !!n && typeof n === 'object' && n.type === 'Literal' && typeof n.value === 'string',
7
- isNumericLiteral: (n) => !!n && typeof n === 'object' && n.type === 'Literal' && typeof n.value === 'number',
8
- isBooleanLiteral: (n) => !!n && typeof n === 'object' && n.type === 'Literal' && typeof n.value === 'boolean',
9
- isIdentifier: (n) => !!n && typeof n === 'object' && n.type === 'Identifier',
10
- isCallExpression: (n) => !!n && typeof n === 'object' && n.type === 'CallExpression',
11
- isMemberExpression: (n) => !!n && typeof n === 'object' && n.type === 'MemberExpression',
12
- isVariableDeclarator: (n) => !!n && typeof n === 'object' && n.type === 'VariableDeclarator',
13
- isFunctionDeclaration: (n) => !!n && typeof n === 'object' && n.type === 'FunctionDeclaration',
14
- isExportNamedDeclaration: (n) => !!n && typeof n === 'object' && n.type === 'ExportNamedDeclaration',
15
- isImportDeclaration: (n) => !!n && typeof n === 'object' && n.type === 'ImportDeclaration',
16
- isObjectProperty: (n) => !!n && typeof n === 'object' && (n.type === 'Property' || n.type === 'ObjectProperty'),
17
- isObjectMethod: (n) => !!n && typeof n === 'object' && n.type === 'ObjectMethod',
18
- isTSInterfaceDeclaration: (n) => !!n && typeof n === 'object' && n.type === 'TSInterfaceDeclaration',
19
- isTSTypeAliasDeclaration: (n) => !!n && typeof n === 'object' && n.type === 'TSTypeAliasDeclaration',
20
- isTSEnumDeclaration: (n) => !!n && typeof n === 'object' && n.type === 'TSEnumDeclaration',
21
- isClassDeclaration: (n) => !!n && typeof n === 'object' && n.type === 'ClassDeclaration',
22
- isClassExpression: (n) => !!n && typeof n === 'object' && n.type === 'ClassExpression',
23
- isClassMethod: (n) => !!n && typeof n === 'object' && n.type === 'ClassMethod',
24
- isClassProperty: (n) => !!n && typeof n === 'object' && (n.type === 'ClassProperty' || n.type === 'PropertyDefinition'),
25
- isExportDefaultDeclaration: (n) => !!n && typeof n === 'object' && n.type === 'ExportDefaultDeclaration',
26
- isFunctionExpression: (n) => !!n && typeof n === 'object' && n.type === 'FunctionExpression',
27
- isJSXElement: (n) => !!n && typeof n === 'object' && n.type === 'JSXElement',
28
- isJSXIdentifier: (n) => !!n && typeof n === 'object' && n.type === 'JSXIdentifier',
29
- isObjectExpression: (n) => !!n && typeof n === 'object' && n.type === 'ObjectExpression',
30
- isLiteral: (n) => !!n && typeof n === 'object' && n.type === 'Literal',
31
- isJSXAttribute: (n) => !!n && typeof n === 'object' && n.type === 'JSXAttribute',
32
- isNewExpression: (n) => !!n && typeof n === 'object' && n.type === 'NewExpression',
33
- isTemplateLiteral: (n) => !!n && typeof n === 'object' && n.type === 'TemplateLiteral',
34
- isDecorator: (n) => !!n && typeof n === 'object' && n.type === 'Decorator',
35
- };
36
- //# sourceMappingURL=ast-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../src/ast-utils.ts"],"names":[],"mappings":"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"}
package/dist/cache.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import type { ModuleRecord } from "./types.js";
2
- export interface CacheEntry {
3
- hash: string;
4
- moduleRecord: ModuleRecord;
5
- timestamp: number;
6
- }
7
- export interface AnalysisCache {
8
- version: string;
9
- entries: Record<string, CacheEntry>;
10
- }
11
- export declare function getFileHash(content: string): string;
12
- export declare function loadCache(rootDir: string): AnalysisCache;
13
- export declare function saveCache(rootDir: string, cache: AnalysisCache): void;
14
- export declare function isCacheValid(entry: CacheEntry, currentContent: string): boolean;
package/dist/cache.js DELETED
@@ -1,36 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import crypto from "node:crypto";
4
- const CACHE_DIR = ".optiprune";
5
- const CACHE_FILE = "cache.json";
6
- export function getFileHash(content) {
7
- return crypto.createHash("sha256").update(content).digest("hex");
8
- }
9
- export function loadCache(rootDir) {
10
- const cachePath = path.join(rootDir, CACHE_DIR, CACHE_FILE);
11
- if (fs.existsSync(cachePath)) {
12
- try {
13
- return JSON.parse(fs.readFileSync(cachePath, "utf-8"));
14
- }
15
- catch (e) {
16
- // Ignore
17
- }
18
- }
19
- return { version: "1.0", entries: {} };
20
- }
21
- export function saveCache(rootDir, cache) {
22
- try {
23
- const dirPath = path.join(rootDir, CACHE_DIR);
24
- if (!fs.existsSync(dirPath)) {
25
- fs.mkdirSync(dirPath, { recursive: true });
26
- }
27
- fs.writeFileSync(path.join(dirPath, CACHE_FILE), JSON.stringify(cache, null, 2));
28
- }
29
- catch (e) {
30
- // Ignore cache write errors in environments like tests where rootDir might be problematic
31
- }
32
- }
33
- export function isCacheValid(entry, currentContent) {
34
- return entry.hash === getFileHash(currentContent);
35
- }
36
- //# sourceMappingURL=cache.js.map
package/dist/cache.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AAcjC,MAAM,SAAS,GAAG,YAAY,CAAC;AAC/B,MAAM,UAAU,GAAG,YAAY,CAAC;AAEhC,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,KAAoB;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,0FAA0F;IAC5F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAiB,EAAE,cAAsB;IACpE,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,cAAc,CAAC,CAAC;AACpD,CAAC"}
package/dist/cli.d.ts DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
package/dist/cli.js DELETED
@@ -1,68 +0,0 @@
1
- #!/usr/bin/env node
2
- import path from "pathe";
3
- import { Command } from "commander";
4
- const program = new Command();
5
- import { analyze, shouldFail } from "./index.js";
6
- import { readJsonFile } from "./fs-utils.js";
7
- import { formatTerminal, formatSarif } from "./reporters.js";
8
- import { fileURLToPath } from "node:url";
9
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
- const PKG_JSON = await readJsonFile(path.join(__dirname, "..", "package.json"));
11
- program
12
- .name("optiprune")
13
- .version(PKG_JSON && typeof PKG_JSON.version === "string" ? PKG_JSON.version : "1.8.2")
14
- .description("Finds dead code in TypeScript/JavaScript projects.")
15
- .option("-r, --rootDir <path>", "Root directory of the project", process.cwd())
16
- .option("-e, --entry <patterns...>", "Entry point patterns (glob or file paths)", [])
17
- .option("-x, --extensions <exts...>", "File extensions to analyze", [".ts", ".tsx", ".js", ".jsx"])
18
- .option("-i, --ignore <patterns...>", "Ignore patterns (glob)", [])
19
- .option("--no-report-unused-exports", "Do not report unused exports")
20
- .option("--no-conventional-entries", "Do not include conventional entry points (e.g., src/index.ts)")
21
- .option("--fail-on <confidence>", "Fail on findings with confidence level (high, medium, low, none)", "high")
22
- .option("--json", "Output results as JSON")
23
- .option("--sarif", "Output results in SARIF format")
24
- .option("--skip-3", "Skip Layer 3 (SMT Constraint Solver)")
25
- .option("--skip-4", "Skip Layer 4 (Concolic Execution Proofs)")
26
- .action(async (options) => {
27
- try {
28
- const analyzerOptions = {
29
- rootDir: options.rootDir,
30
- entry: options.entry,
31
- extensions: options.extensions,
32
- ignore: options.ignore,
33
- reportUnusedExports: options.reportUnusedExports,
34
- includeConventionalEntries: options.conventionalEntries,
35
- failOn: options.failOn,
36
- json: options.json || options.sarif,
37
- skip3: options.skip3,
38
- skip4: options.skip4,
39
- };
40
- const report = await analyze(analyzerOptions);
41
- if (options.sarif) {
42
- console.log(formatSarif(report));
43
- }
44
- else if (options.json) {
45
- try {
46
- // Use a replacer to handle potential BigInt or other non-serializable types if any
47
- const json = JSON.stringify(report, (key, value) => typeof value === 'bigint' ? value.toString() : value, 2);
48
- console.log(json);
49
- }
50
- catch (jsonError) {
51
- console.error("Failed to generate JSON output:", jsonError);
52
- process.exit(1);
53
- }
54
- }
55
- else {
56
- console.log(formatTerminal(report));
57
- }
58
- if (shouldFail(report, options.failOn)) {
59
- process.exit(1);
60
- }
61
- }
62
- catch (error) {
63
- console.error("An unexpected error occurred:", error);
64
- process.exit(1);
65
- }
66
- });
67
- program.parse(process.argv);
68
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { Config, ResolvedOptions } from "./types.js";
2
- export declare const DEFAULT_CONFIG: ResolvedOptions;
3
- export declare function loadConfig(rootDir: string): Promise<Config>;
4
- export declare function mergeConfig(base: ResolvedOptions, userConfig: Config): ResolvedOptions;
@@ -1,84 +0,0 @@
1
- import path from "pathe";
2
- import fs from "node:fs";
3
- import { pathToFileURL } from "node:url";
4
- import { DEFAULT_EXTENSIONS, DEFAULT_IGNORE, normalizeAbsolute } from "./fs-utils.js";
5
- export const DEFAULT_CONFIG = {
6
- rootDir: normalizeAbsolute(process.cwd()),
7
- entry: [],
8
- extensions: DEFAULT_EXTENSIONS,
9
- ignore: DEFAULT_IGNORE,
10
- reportUnusedExports: true,
11
- schemaEnums: {},
12
- failOn: "high",
13
- json: false,
14
- includeConventionalEntries: true,
15
- externalContracts: [],
16
- verbose: false,
17
- pathAliases: new Map(),
18
- layers: {
19
- smtTimeoutMs: 100,
20
- isolateMemoryLimitMb: 16,
21
- enableConcolicProof: true,
22
- skip3: false,
23
- skip4: false,
24
- },
25
- rules: {
26
- 'unused-export': 'warning',
27
- 'unreachable-file': 'warning',
28
- 'constant-condition': 'warning',
29
- 'unreachable-dynamic-path': 'warning',
30
- }
31
- };
32
- export async function loadConfig(rootDir) {
33
- const configPaths = [
34
- path.join(rootDir, "optiprune.config.ts"),
35
- path.join(rootDir, "optiprune.config.js"),
36
- path.join(rootDir, "optiprune.config.mjs"),
37
- ];
38
- for (const configPath of configPaths) {
39
- if (fs.existsSync(configPath)) {
40
- try {
41
- const configUrl = pathToFileURL(configPath).href;
42
- const module = await import(configUrl);
43
- return module.default || module;
44
- }
45
- catch (e) {
46
- console.warn(`[Config] Failed to load config from ${configPath}:`, e);
47
- }
48
- }
49
- }
50
- return {};
51
- }
52
- export function mergeConfig(base, userConfig) {
53
- // 1. Check if user explicitly passed non-empty entry array
54
- const hasUserEntries = Array.isArray(userConfig.entry) && userConfig.entry.length > 0;
55
- // 2. Normalize rootDir to POSIX
56
- const rootDir = userConfig.rootDir ? normalizeAbsolute(userConfig.rootDir) : base.rootDir;
57
- // 3. Normalize entries to POSIX absolute paths
58
- const rawEntries = hasUserEntries ? userConfig.entry : (userConfig.entry || base.entry);
59
- const entry = rawEntries.map(e => normalizeAbsolute(path.resolve(rootDir, e)));
60
- // 4. If explicit entries are supplied, force includeConventionalEntries to false unless user explicitly said otherwise
61
- const includeConventionalEntries = hasUserEntries
62
- ? (userConfig.includeConventionalEntries ?? false)
63
- : (userConfig.includeConventionalEntries ?? base.includeConventionalEntries);
64
- return {
65
- ...base,
66
- ...userConfig,
67
- rootDir,
68
- entry,
69
- includeConventionalEntries,
70
- layers: {
71
- ...base.layers,
72
- ...userConfig.layers,
73
- },
74
- rules: {
75
- ...base.rules,
76
- ...userConfig.rules,
77
- },
78
- externalContracts: [
79
- ...base.externalContracts,
80
- ...(userConfig.externalContracts || []),
81
- ],
82
- };
83
- }
84
- //# sourceMappingURL=config-loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- interface BranchCoverage {
2
- file: string;
3
- line: number;
4
- condition: any;
5
- hit: boolean;
6
- }
7
- interface FunctionCoverage {
8
- file: string;
9
- line: number;
10
- name: string;
11
- hit: boolean;
12
- }
13
- interface CallCoverage {
14
- file: string;
15
- line: number;
16
- callee: string;
17
- hit: boolean;
18
- }
19
- export declare class CoverageTracker {
20
- private branches;
21
- private functions;
22
- private calls;
23
- private currentFile;
24
- private z3;
25
- constructor(z3Context: any);
26
- init(file: string): void;
27
- traceBranch(file: string, line: number, condition: any): void;
28
- traceFunction(file: string, line: number, name: string): void;
29
- traceCall(file: string, line: number, callee: string): void;
30
- traceAndExecuteCall(file: string, line: number, calleeName: string, callee: Function, args: any[]): any;
31
- getCoverage(): {
32
- branches: BranchCoverage[];
33
- functions: FunctionCoverage[];
34
- calls: CallCoverage[];
35
- };
36
- reset(): void;
37
- }
38
- export declare function createCoverageTracker(): Promise<CoverageTracker>;
39
- export {};
@@ -1,61 +0,0 @@
1
- import { init } from "z3-solver";
2
- export class CoverageTracker {
3
- branches = new Map();
4
- functions = new Map();
5
- calls = new Map();
6
- currentFile = "";
7
- z3;
8
- constructor(z3Context) {
9
- this.z3 = z3Context;
10
- }
11
- init(file) {
12
- this.currentFile = file;
13
- }
14
- traceBranch(file, line, condition) {
15
- const key = `${file}:${line}`;
16
- if (!this.branches.has(key)) {
17
- this.branches.set(key, { file, line, condition, hit: false });
18
- }
19
- this.branches.get(key).hit = true;
20
- }
21
- traceFunction(file, line, name) {
22
- const key = `${file}:${line}:${name}`;
23
- if (!this.functions.has(key)) {
24
- this.functions.set(key, { file, line, name, hit: false });
25
- }
26
- this.functions.get(key).hit = true;
27
- }
28
- traceCall(file, line, callee) {
29
- const key = `${file}:${line}:${callee}`;
30
- if (!this.calls.has(key)) {
31
- this.calls.set(key, { file, line, callee, hit: false });
32
- }
33
- this.calls.get(key).hit = true;
34
- }
35
- // New method to trace and execute calls
36
- traceAndExecuteCall(file, line, calleeName, callee, args) {
37
- this.traceCall(file, line, calleeName);
38
- // Execute the original function call
39
- return callee(...args);
40
- }
41
- getCoverage() {
42
- return {
43
- branches: Array.from(this.branches.values()),
44
- functions: Array.from(this.functions.values()),
45
- calls: Array.from(this.calls.values()),
46
- };
47
- }
48
- reset() {
49
- this.branches.clear();
50
- this.functions.clear();
51
- this.calls.clear();
52
- this.currentFile = "";
53
- }
54
- }
55
- // This will be initialized once in Layer 4 and passed to the sandbox
56
- export async function createCoverageTracker() {
57
- const { Context } = await init();
58
- const z3 = Context("main");
59
- return new CoverageTracker(z3);
60
- }
61
- //# sourceMappingURL=coverage-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coverage-tracker.js","sourceRoot":"","sources":["../src/coverage-tracker.ts"],"names":[],"mappings":"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"}
package/dist/engine.d.ts DELETED
@@ -1,17 +0,0 @@
1
- import { AnalysisContext, AnalyzerPlugin, Finding } from "./types.js";
2
- export declare class PluginEngine {
3
- private plugins;
4
- private findings;
5
- register(plugin: AnalyzerPlugin): void;
6
- /**
7
- * Dynamically loads all plugins from the src/plugins directory.
8
- * Handles errors gracefully to ensure the core analysis continues.
9
- */
10
- loadDynamicPlugins(): Promise<void>;
11
- run(context: AnalysisContext): Promise<Finding[]>;
12
- private createAdapter;
13
- }
14
- /**
15
- * Legacy ZodPlugin refactored to new architecture
16
- */
17
- export declare const ZodPlugin: AnalyzerPlugin;