optiprune 2.1.4 → 2.1.7

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 (102) hide show
  1. package/README.md +52 -22
  2. package/bin/runner.js +26 -0
  3. package/package.json +10 -37
  4. package/dist/ast-utils.d.ts +0 -149
  5. package/dist/ast-utils.js +0 -36
  6. package/dist/ast-utils.js.map +0 -1
  7. package/dist/cache.d.ts +0 -14
  8. package/dist/cache.js +0 -36
  9. package/dist/cache.js.map +0 -1
  10. package/dist/cli.d.ts +0 -2
  11. package/dist/cli.js +0 -68
  12. package/dist/cli.js.map +0 -1
  13. package/dist/config-loader.d.ts +0 -4
  14. package/dist/config-loader.js +0 -84
  15. package/dist/config-loader.js.map +0 -1
  16. package/dist/coverage-tracker.d.ts +0 -39
  17. package/dist/coverage-tracker.js +0 -61
  18. package/dist/coverage-tracker.js.map +0 -1
  19. package/dist/engine.d.ts +0 -17
  20. package/dist/engine.js +0 -215
  21. package/dist/engine.js.map +0 -1
  22. package/dist/framework-plugins.d.ts +0 -16
  23. package/dist/framework-plugins.js +0 -127
  24. package/dist/framework-plugins.js.map +0 -1
  25. package/dist/fs-utils.d.ts +0 -32
  26. package/dist/fs-utils.js +0 -415
  27. package/dist/fs-utils.js.map +0 -1
  28. package/dist/graph.d.ts +0 -42
  29. package/dist/graph.js +0 -583
  30. package/dist/graph.js.map +0 -1
  31. package/dist/index.d.ts +0 -3
  32. package/dist/index.js +0 -451
  33. package/dist/index.js.map +0 -1
  34. package/dist/instrument.d.ts +0 -5
  35. package/dist/instrument.js +0 -108
  36. package/dist/instrument.js.map +0 -1
  37. package/dist/layer2.d.ts +0 -6
  38. package/dist/layer2.js +0 -224
  39. package/dist/layer2.js.map +0 -1
  40. package/dist/layer3.d.ts +0 -7
  41. package/dist/layer3.js +0 -346
  42. package/dist/layer3.js.map +0 -1
  43. package/dist/layer4.d.ts +0 -8
  44. package/dist/layer4.js +0 -627
  45. package/dist/layer4.js.map +0 -1
  46. package/dist/layer5.d.ts +0 -6
  47. package/dist/layer5.js +0 -141
  48. package/dist/layer5.js.map +0 -1
  49. package/dist/layer6.d.ts +0 -26
  50. package/dist/layer6.js +0 -268
  51. package/dist/layer6.js.map +0 -1
  52. package/dist/layer7.d.ts +0 -28
  53. package/dist/layer7.js +0 -267
  54. package/dist/layer7.js.map +0 -1
  55. package/dist/parser.d.ts +0 -20
  56. package/dist/parser.js +0 -832
  57. package/dist/parser.js.map +0 -1
  58. package/dist/plugins/angular-plugin.d.ts +0 -7
  59. package/dist/plugins/angular-plugin.js +0 -60
  60. package/dist/plugins/angular-plugin.js.map +0 -1
  61. package/dist/plugins/astro-plugin.d.ts +0 -7
  62. package/dist/plugins/astro-plugin.js +0 -88
  63. package/dist/plugins/astro-plugin.js.map +0 -1
  64. package/dist/plugins/babel-plugin.d.ts +0 -8
  65. package/dist/plugins/babel-plugin.js +0 -132
  66. package/dist/plugins/babel-plugin.js.map +0 -1
  67. package/dist/plugins/esbuild-plugin.d.ts +0 -8
  68. package/dist/plugins/esbuild-plugin.js +0 -121
  69. package/dist/plugins/esbuild-plugin.js.map +0 -1
  70. package/dist/plugins/nestjs-plugin.d.ts +0 -7
  71. package/dist/plugins/nestjs-plugin.js +0 -69
  72. package/dist/plugins/nestjs-plugin.js.map +0 -1
  73. package/dist/plugins/nextjs-plugin.d.ts +0 -7
  74. package/dist/plugins/nextjs-plugin.js +0 -66
  75. package/dist/plugins/nextjs-plugin.js.map +0 -1
  76. package/dist/plugins/nuxtjs-plugin.d.ts +0 -7
  77. package/dist/plugins/nuxtjs-plugin.js +0 -80
  78. package/dist/plugins/nuxtjs-plugin.js.map +0 -1
  79. package/dist/plugins/svelte-plugin.d.ts +0 -7
  80. package/dist/plugins/svelte-plugin.js +0 -38
  81. package/dist/plugins/svelte-plugin.js.map +0 -1
  82. package/dist/plugins/vuejs-plugin.d.ts +0 -7
  83. package/dist/plugins/vuejs-plugin.js +0 -63
  84. package/dist/plugins/vuejs-plugin.js.map +0 -1
  85. package/dist/reporters.d.ts +0 -3
  86. package/dist/reporters.js +0 -75
  87. package/dist/reporters.js.map +0 -1
  88. package/dist/semantic-graph.d.ts +0 -44
  89. package/dist/semantic-graph.js +0 -88
  90. package/dist/semantic-graph.js.map +0 -1
  91. package/dist/symbolic-engine.d.ts +0 -19
  92. package/dist/symbolic-engine.js +0 -51
  93. package/dist/symbolic-engine.js.map +0 -1
  94. package/dist/topology-manager.d.ts +0 -23
  95. package/dist/topology-manager.js +0 -144
  96. package/dist/topology-manager.js.map +0 -1
  97. package/dist/types.d.ts +0 -265
  98. package/dist/types.js +0 -11
  99. package/dist/types.js.map +0 -1
  100. package/dist/workspace.d.ts +0 -6
  101. package/dist/workspace.js +0 -105
  102. package/dist/workspace.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"nestjs-plugin.js","sourceRoot":"","sources":["../../src/plugins/nestjs-plugin.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { AnalyzerPlugin } from "../types.js";
2
- /**
3
- * Next.js Plugin
4
- * Handles Next.js-specific patterns: page.tsx, route.ts, layout.tsx, middleware, API routes, etc.
5
- */
6
- export declare const NextJsPlugin: AnalyzerPlugin;
7
- export default NextJsPlugin;
@@ -1,66 +0,0 @@
1
- import { t } from "../ast-utils.js";
2
- /**
3
- * Next.js Plugin
4
- * Handles Next.js-specific patterns: page.tsx, route.ts, layout.tsx, middleware, API routes, etc.
5
- */
6
- export const NextJsPlugin = {
7
- name: "nextjs-plugin",
8
- version: "1.0.0",
9
- detect: async (adapter) => {
10
- const pkg = await adapter.readJson('package.json');
11
- if (pkg) {
12
- const hasDep = !!(pkg.dependencies?.['next'] || pkg.devDependencies?.['next']);
13
- if (hasDep)
14
- return true;
15
- }
16
- // Fallback: If we see next.config.js, enable it
17
- const nextConfig = await adapter.readFile('next.config.js');
18
- return !!nextConfig;
19
- },
20
- lifecycle: {
21
- onFileStart: (fileId, adapter) => {
22
- // Mark Next.js conventional files as entry points
23
- const nextJsPatterns = [
24
- 'page.tsx', 'page.ts', 'page.jsx', 'page.js',
25
- 'route.ts', 'route.js',
26
- 'layout.tsx', 'layout.ts', 'layout.jsx', 'layout.js',
27
- 'middleware.ts', 'middleware.js',
28
- 'error.tsx', 'error.ts',
29
- 'loading.tsx', 'loading.ts',
30
- 'not-found.tsx', 'not-found.ts',
31
- 'template.tsx', 'template.ts',
32
- 'default.tsx', 'default.ts'
33
- ];
34
- if (nextJsPatterns.some(pattern => fileId.endsWith(pattern))) {
35
- adapter.markAsUsed(fileId);
36
- }
37
- },
38
- onASTNode: (node, fileId, adapter) => {
39
- // Detect Next.js data fetching functions
40
- if (t.isExportNamedDeclaration(node) || t.isExportDefaultDeclaration(node)) {
41
- if (t.isFunctionDeclaration(node.declaration) || t.isFunctionExpression(node.declaration)) {
42
- const funcName = node.declaration.id?.name;
43
- if (funcName && ['getServerSideProps', 'getStaticProps', 'getStaticPaths', 'generateStaticParams', 'generateMetadata'].includes(funcName)) {
44
- adapter.markAsUsed(fileId, funcName);
45
- }
46
- }
47
- }
48
- // Detect Next.js hooks usage (useRouter, usePathname, useSearchParams, etc.)
49
- if (t.isCallExpression(node) && t.isIdentifier(node.callee)) {
50
- const hookName = node.callee.name;
51
- if (['useRouter', 'usePathname', 'useSearchParams', 'useParams', 'useServerInsertedHTML'].includes(hookName)) {
52
- adapter.markAsUsed(fileId);
53
- }
54
- }
55
- // Mark files using Image component
56
- if (t.isJSXElement(node) && t.isJSXIdentifier(node.openingElement.name)) {
57
- const tagName = node.openingElement.name.name;
58
- if (tagName === 'Image') {
59
- adapter.markAsUsed(fileId);
60
- }
61
- }
62
- }
63
- }
64
- };
65
- export default NextJsPlugin;
66
- //# sourceMappingURL=nextjs-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nextjs-plugin.js","sourceRoot":"","sources":["../../src/plugins/nextjs-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/E,IAAI,MAAM;gBAAE,OAAO,IAAI,CAAC;QAC1B,CAAC;QACD,gDAAgD;QAChD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAC5D,OAAO,CAAC,CAAC,UAAU,CAAC;IACtB,CAAC;IACD,SAAS,EAAE;QACT,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC/B,kDAAkD;YAClD,MAAM,cAAc,GAAG;gBACrB,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS;gBAC5C,UAAU,EAAE,UAAU;gBACtB,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW;gBACpD,eAAe,EAAE,eAAe;gBAChC,WAAW,EAAE,UAAU;gBACvB,aAAa,EAAE,YAAY;gBAC3B,eAAe,EAAE,cAAc;gBAC/B,cAAc,EAAE,aAAa;gBAC7B,aAAa,EAAE,YAAY;aAC5B,CAAC;YAEF,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;YACnC,yCAAyC;YACzC,IAAI,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3E,IAAI,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC1F,MAAM,QAAQ,GAAI,IAAI,CAAC,WAAmB,CAAC,EAAE,EAAE,IAAI,CAAC;oBACpD,IAAI,QAAQ,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC1I,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,6EAA6E;YAC7E,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAClC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7G,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxE,MAAM,OAAO,GAAI,IAAI,CAAC,cAAc,CAAC,IAAY,CAAC,IAAI,CAAC;gBACvD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;oBACxB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;KACF;CACF,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,7 +0,0 @@
1
- import { AnalyzerPlugin } from "../types.js";
2
- /**
3
- * Nuxt Plugin
4
- * Handles Nuxt-specific patterns: pages, layouts, middleware, composables, auto-imports, etc.
5
- */
6
- export declare const NuxtPlugin: AnalyzerPlugin;
7
- export default NuxtPlugin;
@@ -1,80 +0,0 @@
1
- import { t } from "../ast-utils.js";
2
- /**
3
- * Nuxt Plugin
4
- * Handles Nuxt-specific patterns: pages, layouts, middleware, composables, auto-imports, etc.
5
- */
6
- export const NuxtPlugin = {
7
- name: "nuxt-plugin",
8
- version: "1.0.0",
9
- detect: async (adapter) => {
10
- const pkg = await adapter.readJson('package.json');
11
- if (pkg) {
12
- const hasDep = !!(pkg.dependencies?.['nuxt'] || pkg.devDependencies?.['nuxt']);
13
- if (hasDep)
14
- return true;
15
- }
16
- // Fallback: If we see nuxt.config.ts, enable it
17
- const nuxtConfig = await adapter.readFile('nuxt.config.ts');
18
- return !!nuxtConfig;
19
- },
20
- lifecycle: {
21
- onFileStart: (fileId, adapter) => {
22
- // Mark Nuxt conventional directories as entry points
23
- const nuxtPatterns = [
24
- 'pages/', 'layouts/', 'middleware/', 'composables/', 'components/', 'plugins/', 'app.vue'
25
- ];
26
- if (nuxtPatterns.some(pattern => fileId.includes(pattern))) {
27
- adapter.markAsUsed(fileId);
28
- }
29
- // Mark .vue files in these directories
30
- if ((fileId.includes('pages/') || fileId.includes('layouts/') || fileId.includes('components/')) && fileId.endsWith('.vue')) {
31
- adapter.markAsUsed(fileId);
32
- }
33
- },
34
- onASTNode: (node, fileId, adapter) => {
35
- // Nuxt composables (useRouter, useFetch, useAsyncData, etc.)
36
- if (t.isCallExpression(node) && t.isIdentifier(node.callee)) {
37
- const composableName = node.callee.name;
38
- if (['useRouter', 'useRoute', 'useFetch', 'useAsyncData', 'useLazyFetch', 'useLazyAsyncData', 'useHead', 'useState', 'useError', 'useNuxtData', 'useRequestHeaders', 'useCookie', 'useDirectives'].includes(composableName)) {
39
- adapter.markAsUsed(fileId);
40
- }
41
- }
42
- // Nuxt definePageMeta
43
- if (t.isCallExpression(node) && t.isIdentifier(node.callee)) {
44
- if (node.callee.name === 'definePageMeta') {
45
- adapter.markAsUsed(fileId);
46
- }
47
- }
48
- // Nuxt defineRouteRules
49
- if (t.isCallExpression(node) && t.isIdentifier(node.callee)) {
50
- if (node.callee.name === 'defineRouteRules') {
51
- adapter.markAsUsed(fileId);
52
- }
53
- }
54
- // Nuxt middleware definitions
55
- if (t.isExportDefaultDeclaration(node)) {
56
- if (t.isFunctionDeclaration(node.declaration) || t.isFunctionExpression(node.declaration)) {
57
- if (fileId.includes('middleware/')) {
58
- adapter.markAsUsed(fileId);
59
- }
60
- }
61
- }
62
- // Nuxt plugin definitions
63
- if (t.isExportDefaultDeclaration(node)) {
64
- if (t.isCallExpression(node.declaration) && t.isIdentifier(node.declaration.callee)) {
65
- if (node.declaration.callee.name === 'defineNuxtPlugin') {
66
- adapter.markAsUsed(fileId);
67
- }
68
- }
69
- }
70
- // Nuxt auto-imported composables (starting with 'use')
71
- if (t.isIdentifier(node) && node.name.startsWith('use')) {
72
- if (fileId.includes('composables/')) {
73
- adapter.markAsUsed(fileId, node.name);
74
- }
75
- }
76
- }
77
- }
78
- };
79
- export default NuxtPlugin;
80
- //# sourceMappingURL=nuxtjs-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nuxtjs-plugin.js","sourceRoot":"","sources":["../../src/plugins/nuxtjs-plugin.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { AnalyzerPlugin } from "../types.js";
2
- /**
3
- * Svelte Plugin
4
- * Handles Svelte-specific patterns and lifecycle methods.
5
- */
6
- export declare const SveltePlugin: AnalyzerPlugin;
7
- export default SveltePlugin;
@@ -1,38 +0,0 @@
1
- import { t } from "../ast-utils.js";
2
- /**
3
- * Svelte Plugin
4
- * Handles Svelte-specific patterns and lifecycle methods.
5
- */
6
- export const SveltePlugin = {
7
- name: "svelte-plugin",
8
- version: "1.0.0",
9
- detect: async (adapter) => {
10
- const pkg = await adapter.readJson('package.json');
11
- if (!pkg)
12
- return false;
13
- return !!(pkg.dependencies?.['svelte'] || pkg.devDependencies?.['svelte']);
14
- },
15
- lifecycle: {
16
- onFileStart: (fileId, adapter) => {
17
- // Svelte components are entry points by nature
18
- if (fileId.endsWith('.svelte')) {
19
- adapter.markAsUsed(fileId);
20
- }
21
- },
22
- onASTNode: (node, fileId, adapter) => {
23
- // Svelte lifecycle methods
24
- if (t.isCallExpression(node) && t.isIdentifier(node.callee)) {
25
- if (['onMount', 'onDestroy', 'beforeUpdate', 'afterUpdate', 'tick', 'createEventDispatcher', 'setContext', 'getContext'].includes(node.callee.name)) {
26
- adapter.markAsUsed(fileId);
27
- }
28
- }
29
- // Svelte stores ($ prefix)
30
- if (t.isIdentifier(node) && node.name.startsWith('$')) {
31
- const storeName = node.name.slice(1);
32
- adapter.markAsUsed(fileId, storeName);
33
- }
34
- }
35
- }
36
- };
37
- export default SveltePlugin;
38
- //# sourceMappingURL=svelte-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"svelte-plugin.js","sourceRoot":"","sources":["../../src/plugins/svelte-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,SAAS,EAAE;QACT,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC/B,+CAA+C;YAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;YACnC,2BAA2B;YAC3B,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,uBAAuB,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpJ,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;KACF;CACF,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,7 +0,0 @@
1
- import { AnalyzerPlugin } from "../types.js";
2
- /**
3
- * Vue.js Plugin
4
- * Handles Vue.js-specific patterns: .vue components, composition API, lifecycle hooks, etc.
5
- */
6
- export declare const VueJsPlugin: AnalyzerPlugin;
7
- export default VueJsPlugin;
@@ -1,63 +0,0 @@
1
- import { t } from "../ast-utils.js";
2
- /**
3
- * Vue.js Plugin
4
- * Handles Vue.js-specific patterns: .vue components, composition API, lifecycle hooks, etc.
5
- */
6
- export const VueJsPlugin = {
7
- name: "vuejs-plugin",
8
- version: "1.0.0",
9
- detect: async (adapter) => {
10
- const pkg = await adapter.readJson('package.json');
11
- if (pkg) {
12
- const hasDep = !!(pkg.dependencies?.['vue'] || pkg.devDependencies?.['vue']);
13
- if (hasDep)
14
- return true;
15
- }
16
- // Fallback: If we see .vue files, enable it
17
- const vueConfig = await adapter.readFile('vite.config.ts');
18
- return !!vueConfig;
19
- },
20
- lifecycle: {
21
- onFileStart: (fileId, adapter) => {
22
- // Vue components are entry points by nature
23
- if (fileId.endsWith('.vue')) {
24
- adapter.markAsUsed(fileId);
25
- }
26
- },
27
- onASTNode: (node, fileId, adapter) => {
28
- // Vue Composition API lifecycle hooks
29
- if (t.isCallExpression(node) && t.isIdentifier(node.callee)) {
30
- const hookName = node.callee.name;
31
- if (['onMounted', 'onUpdated', 'onUnmounted', 'onBeforeMount', 'onBeforeUpdate', 'onBeforeUnmount', 'onActivated', 'onDeactivated', 'onErrorCaptured', 'onRenderTracked', 'onRenderTriggered'].includes(hookName)) {
32
- adapter.markAsUsed(fileId);
33
- }
34
- }
35
- // Vue reactive/ref declarations
36
- if (t.isCallExpression(node) && t.isIdentifier(node.callee)) {
37
- const apiName = node.callee.name;
38
- if (['ref', 'reactive', 'computed', 'watch', 'watchEffect', 'provide', 'inject'].includes(apiName)) {
39
- adapter.markAsUsed(fileId);
40
- }
41
- }
42
- // Vue defineComponent
43
- if (t.isCallExpression(node) && t.isIdentifier(node.callee)) {
44
- if (node.callee.name === 'defineComponent') {
45
- adapter.markAsUsed(fileId);
46
- }
47
- }
48
- // Vue defineProps, defineEmits, defineExpose
49
- if (t.isCallExpression(node) && t.isIdentifier(node.callee)) {
50
- const defineName = node.callee.name;
51
- if (['defineProps', 'defineEmits', 'defineExpose', 'defineOptions', 'defineSlots'].includes(defineName)) {
52
- adapter.markAsUsed(fileId);
53
- }
54
- }
55
- // Vue template refs ($refs)
56
- if (t.isIdentifier(node) && node.name === '$refs') {
57
- adapter.markAsUsed(fileId);
58
- }
59
- }
60
- }
61
- };
62
- export default VueJsPlugin;
63
- //# sourceMappingURL=vuejs-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vuejs-plugin.js","sourceRoot":"","sources":["../../src/plugins/vuejs-plugin.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { AnalysisReport } from "./types.js";
2
- export declare function formatTerminal(report: AnalysisReport): string;
3
- export declare function formatSarif(report: AnalysisReport): string;
package/dist/reporters.js DELETED
@@ -1,75 +0,0 @@
1
- export function formatTerminal(report) {
2
- const lines = [];
3
- lines.push(`\x1b[1mOptiprune Analysis Report v${report.version}\x1b[0m`);
4
- lines.push(`Root: ${report.rootDir}`);
5
- lines.push("");
6
- const summary = report.summary;
7
- lines.push(`\x1b[1mSummary:\x1b[0m`);
8
- lines.push(` Files: ${summary.filesDiscovered} discovered, ${summary.filesParsed} parsed`);
9
- lines.push(` Findings: ${summary.findings} total (\x1b[31m${summary.errors} errors\x1b[0m, \x1b[33m${summary.warnings} warnings\x1b[0m)`);
10
- lines.push("");
11
- if (report.findings.length === 0) {
12
- lines.push("\x1b[32m✔ No issues found!\x1b[0m");
13
- return lines.join("\n");
14
- }
15
- let currentFile = "";
16
- for (const finding of report.findings) {
17
- if (finding.file !== currentFile) {
18
- currentFile = finding.file;
19
- lines.push(`\x1b[1m\x1b[4m${currentFile}\x1b[0m`);
20
- }
21
- const severityColor = finding.severity === "error" ? "\x1b[31m" : "\x1b[33m";
22
- const loc = finding.location ? `:${finding.location.start.line}:${finding.location.start.column}` : "";
23
- lines.push(` ${severityColor}${finding.severity.toUpperCase()}\x1b[0m [${finding.rule}] ${finding.message}`);
24
- if (finding.location) {
25
- // Simple snippet display (in a real CLI, we'd read the file and show the line)
26
- lines.push(` at ${finding.file}${loc} (Confidence: ${finding.confidence})`);
27
- }
28
- }
29
- return lines.join("\n");
30
- }
31
- export function formatSarif(report) {
32
- const sarif = {
33
- $schema: "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json",
34
- version: "2.1.0",
35
- runs: [
36
- {
37
- tool: {
38
- driver: {
39
- name: "Optiprune",
40
- version: report.version,
41
- informationUri: "https://github.com/manus/optiprune",
42
- rules: Array.from(new Set(report.findings.map(f => f.rule))).map(ruleId => ({
43
- id: ruleId,
44
- shortDescription: { text: `Optiprune rule: ${ruleId}` }
45
- }))
46
- }
47
- },
48
- results: report.findings.map(finding => ({
49
- ruleId: finding.rule,
50
- level: finding.severity === "error" ? "error" : "warning",
51
- message: { text: finding.message },
52
- locations: [
53
- {
54
- physicalLocation: {
55
- artifactLocation: { uri: finding.file },
56
- region: finding.location ? {
57
- startLine: finding.location.start.line,
58
- startColumn: finding.location.start.column,
59
- endLine: finding.location.end.line,
60
- endColumn: finding.location.end.column
61
- } : undefined
62
- }
63
- }
64
- ],
65
- properties: {
66
- confidence: finding.confidence,
67
- evidence: finding.evidence
68
- }
69
- }))
70
- }
71
- ]
72
- };
73
- return JSON.stringify(sarif, null, 2);
74
- }
75
- //# sourceMappingURL=reporters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reporters.js","sourceRoot":"","sources":["../src/reporters.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import type { Range } from "./types.js";
2
- export type SemanticNodeType = 'File' | 'Function' | 'Class' | 'Variable' | 'Export' | 'Import' | 'Dynamic' | 'Unknown';
3
- export type ReferenceKind = 'CALLS' | 'IMPORTS' | 'EXPORTS' | 'DEFINES' | 'USES' | 'TYPE_DEPENDENCY';
4
- export interface SemanticNode {
5
- id: string;
6
- contentHash: string;
7
- type: SemanticNodeType;
8
- name?: string;
9
- location?: Range;
10
- fileId: string;
11
- metadata: Record<string, any>;
12
- incomingReferences: Reference[];
13
- outgoingReferences: Reference[];
14
- isStale?: boolean;
15
- }
16
- export interface Reference {
17
- sourceNodeId: string;
18
- targetNodeId: string;
19
- kind: ReferenceKind;
20
- metadata?: Record<string, any> | undefined;
21
- }
22
- export declare class SemanticGraph {
23
- private nodes;
24
- private fileToNodes;
25
- /**
26
- * Generates a stable Logical Entity Identifier (LEI).
27
- */
28
- static generateLei(fileId: string, type: SemanticNodeType, name?: string): string;
29
- /**
30
- * Generates a content-addressed hash for change detection.
31
- */
32
- static generateContentHash(content: string): string;
33
- addNode(node: SemanticNode): void;
34
- getNode(id: string): SemanticNode | undefined;
35
- removeNode(id: string): void;
36
- addReference(sourceId: string, targetId: string, kind: ReferenceKind, metadata?: Record<string, any>): void;
37
- getNodesInFile(fileId: string): SemanticNode[];
38
- getAllNodes(): SemanticNode[];
39
- /**
40
- * Returns nodes that have no incoming references of a certain kind.
41
- * Useful for initial dead code detection.
42
- */
43
- getOrphanedNodes(kind?: ReferenceKind): SemanticNode[];
44
- }
@@ -1,88 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- export class SemanticGraph {
3
- nodes = new Map();
4
- fileToNodes = new Map();
5
- /**
6
- * Generates a stable Logical Entity Identifier (LEI).
7
- */
8
- static generateLei(fileId, type, name) {
9
- return `symbol:${fileId}#${type}${name ? ':' + name : ''}`;
10
- }
11
- /**
12
- * Generates a content-addressed hash for change detection.
13
- */
14
- static generateContentHash(content) {
15
- return createHash("sha256").update(content).digest("hex");
16
- }
17
- addNode(node) {
18
- this.nodes.set(node.id, node);
19
- if (!this.fileToNodes.has(node.fileId)) {
20
- this.fileToNodes.set(node.fileId, new Set());
21
- }
22
- this.fileToNodes.get(node.fileId).add(node.id);
23
- }
24
- getNode(id) {
25
- return this.nodes.get(id);
26
- }
27
- removeNode(id) {
28
- const node = this.nodes.get(id);
29
- if (!node)
30
- return;
31
- // Remove all references associated with this node
32
- for (const ref of node.incomingReferences) {
33
- const sourceNode = this.nodes.get(ref.sourceNodeId);
34
- if (sourceNode) {
35
- sourceNode.outgoingReferences = sourceNode.outgoingReferences.filter(r => r.targetNodeId !== id);
36
- }
37
- }
38
- for (const ref of node.outgoingReferences) {
39
- const targetNode = this.nodes.get(ref.targetNodeId);
40
- if (targetNode) {
41
- targetNode.incomingReferences = targetNode.incomingReferences.filter(r => r.sourceNodeId !== id);
42
- }
43
- }
44
- this.nodes.delete(id);
45
- this.fileToNodes.get(node.fileId)?.delete(id);
46
- }
47
- addReference(sourceId, targetId, kind, metadata) {
48
- const sourceNode = this.nodes.get(sourceId);
49
- const targetNode = this.nodes.get(targetId);
50
- if (!sourceNode || !targetNode) {
51
- // In a real implementation, we might want to handle pending references
52
- // if the target node hasn't been parsed yet.
53
- return;
54
- }
55
- const reference = {
56
- sourceNodeId: sourceId,
57
- targetNodeId: targetId,
58
- kind,
59
- metadata: metadata ?? undefined
60
- };
61
- sourceNode.outgoingReferences.push(reference);
62
- targetNode.incomingReferences.push(reference);
63
- }
64
- getNodesInFile(fileId) {
65
- const nodeIds = this.fileToNodes.get(fileId);
66
- if (!nodeIds)
67
- return [];
68
- return Array.from(nodeIds).map(id => this.nodes.get(id)).filter(Boolean);
69
- }
70
- getAllNodes() {
71
- return Array.from(this.nodes.values());
72
- }
73
- /**
74
- * Returns nodes that have no incoming references of a certain kind.
75
- * Useful for initial dead code detection.
76
- */
77
- getOrphanedNodes(kind) {
78
- return Array.from(this.nodes.values()).filter(node => {
79
- if (node.type === 'File')
80
- return false; // Files are entry points or handled differently
81
- const refs = kind
82
- ? node.incomingReferences.filter(r => r.kind === kind)
83
- : node.incomingReferences;
84
- return refs.length === 0;
85
- });
86
- }
87
- }
88
- //# sourceMappingURL=semantic-graph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semantic-graph.js","sourceRoot":"","sources":["../src/semantic-graph.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import type { AnalysisContext, Finding } from "./types.js";
2
- import { SemanticGraph } from "./semantic-graph.js";
3
- export interface SymbolicExecutionContract {
4
- nodeId: string;
5
- inputs: Record<string, 'symbolic' | any>;
6
- constraints: any[];
7
- stateSpace: Map<string, any[]>;
8
- }
9
- export declare class SymbolicEngine {
10
- private graph;
11
- private contracts;
12
- constructor(graph: SemanticGraph);
13
- registerContract(contract: SymbolicExecutionContract): void;
14
- /**
15
- * Evaluates dynamic nodes based on their contracts.
16
- * This is a simplified implementation of Abstract Interpretation.
17
- */
18
- evaluateContracts(context: AnalysisContext): Promise<Finding[]>;
19
- }
@@ -1,51 +0,0 @@
1
- export class SymbolicEngine {
2
- graph;
3
- contracts = new Map();
4
- constructor(graph) {
5
- this.graph = graph;
6
- }
7
- registerContract(contract) {
8
- this.contracts.set(contract.nodeId, contract);
9
- }
10
- /**
11
- * Evaluates dynamic nodes based on their contracts.
12
- * This is a simplified implementation of Abstract Interpretation.
13
- */
14
- async evaluateContracts(context) {
15
- const findings = [];
16
- for (const [nodeId, contract] of this.contracts) {
17
- const node = this.graph.getNode(nodeId);
18
- if (!node)
19
- continue;
20
- // Example: Evaluate dynamic property access
21
- // const handler = handlers[config.mode];
22
- if (node.metadata.dynamicType === 'property-access') {
23
- const objectName = node.metadata.objectName;
24
- const propertyVar = node.metadata.propertyVar;
25
- const possibleStates = contract.stateSpace.get(propertyVar) || [];
26
- for (const state of possibleStates) {
27
- // In a real implementation, we would look up the actual object property
28
- // and create a live reference in the semantic graph.
29
- const targetNodeName = `${objectName}.${state}`;
30
- const targetNode = this.graph.getAllNodes().find(n => n.name === targetNodeName);
31
- if (targetNode) {
32
- this.graph.addReference(nodeId, targetNode.id, 'CALLS', { state });
33
- }
34
- else {
35
- findings.push({
36
- rule: "unknown-dynamic-import",
37
- severity: "warning",
38
- confidence: "medium",
39
- message: `[Symbolic] Could not resolve dynamic link for state: ${state}`,
40
- file: node.fileId,
41
- location: node.location ?? undefined,
42
- evidence: { nodeId, state }
43
- });
44
- }
45
- }
46
- }
47
- }
48
- return findings;
49
- }
50
- }
51
- //# sourceMappingURL=symbolic-engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"symbolic-engine.js","sourceRoot":"","sources":["../src/symbolic-engine.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,cAAc;IAGL;IAFZ,SAAS,GAA2C,IAAI,GAAG,EAAE,CAAC;IAEtE,YAAoB,KAAoB;QAApB,UAAK,GAAL,KAAK,CAAe;IAAG,CAAC;IAE5C,gBAAgB,CAAC,QAAmC;QAClD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAAwB;QAC9C,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,4CAA4C;YAC5C,yCAAyC;YACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,iBAAiB,EAAE,CAAC;gBACpD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAE9C,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBAElE,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;oBACnC,wEAAwE;oBACxE,qDAAqD;oBACrD,MAAM,cAAc,GAAG,GAAG,UAAU,IAAI,KAAK,EAAE,CAAC;oBAChD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;oBAEjF,IAAI,UAAU,EAAE,CAAC;wBACf,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBACrE,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,wBAAwB;4BAC9B,QAAQ,EAAE,SAAS;4BACnB,UAAU,EAAE,QAAQ;4BACpB,OAAO,EAAE,wDAAwD,KAAK,EAAE;4BACxE,IAAI,EAAE,IAAI,CAAC,MAAM;4BACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;4BACpC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;yBAC5B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}