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
package/dist/layer5.js DELETED
@@ -1,141 +0,0 @@
1
- import { walkAst } from "./parser.js";
2
- /**
3
- * Layer 5: Schema Alignment
4
- * Protects public interfaces and contracts (Zod, Prisma, GraphQL, OpenAPI) from being falsely marked as dead code.
5
- */
6
- export async function analyzeLayer5(context) {
7
- const findings = [];
8
- const externallyDefinedContracts = new Set(context.options.externalContracts || []);
9
- const PROTECTED_DECORATORS = new Set([
10
- 'Controller', 'Injectable', 'Module', 'Resolver', 'Directive',
11
- 'ObjectType', 'InputType', 'Field', 'Query', 'Mutation', 'Subscription',
12
- 'Entity', 'Table', 'Column', 'PrimaryGeneratedColumn', 'OneToMany', 'ManyToOne', 'ManyToMany', 'JoinColumn',
13
- 'Get', 'Post', 'Put', 'Delete', 'Patch', 'Options', 'Head', 'All'
14
- ]);
15
- // Phase 1: Identify symbols explicitly provided as external contracts via options
16
- // These are already added to `externallyDefinedContracts` at initialization.
17
- // Phase 2: Decorator & Framework Metadata Reader
18
- for (const module of context.modules.values()) {
19
- if (!module.ast)
20
- continue;
21
- walkAst(module.ast, (rawNode) => {
22
- const node = rawNode;
23
- // 1. Framework Decorators (NestJS, TypeORM, MikroORM, TypeGraphQL)
24
- const decorators = [
25
- ...(Array.isArray(node.decorators) ? node.decorators : []),
26
- ...(Array.isArray(node.modifiers)
27
- ? node.modifiers.filter((m) => m.type === 'Decorator')
28
- : []),
29
- ];
30
- if (decorators.length > 0) {
31
- for (const decorator of decorators) {
32
- let decoratorName = "";
33
- const expr = decorator.expression;
34
- if (expr?.type === 'CallExpression' && expr.callee?.type === 'Identifier') {
35
- decoratorName = expr.callee.name;
36
- }
37
- else if (expr?.type === 'Identifier') {
38
- decoratorName = expr.name;
39
- }
40
- if (PROTECTED_DECORATORS.has(decoratorName)) {
41
- let targetNode = node;
42
- if ((node.type === 'ExportNamedDeclaration' || node.type === 'ExportDefaultDeclaration') && node.declaration) {
43
- targetNode = node.declaration;
44
- }
45
- if ((targetNode.type === 'ClassDeclaration' || targetNode.type === 'FunctionDeclaration') && targetNode.id?.name) {
46
- externallyDefinedContracts.add(targetNode.id.name);
47
- }
48
- else if ((targetNode.type === 'ClassMethod' || targetNode.type === 'ClassProperty') && targetNode.key?.type === 'Identifier') {
49
- externallyDefinedContracts.add(targetNode.key.name);
50
- }
51
- else if (targetNode.type === 'VariableDeclaration') {
52
- targetNode.declarations.forEach((decl) => {
53
- if (decl.id?.type === 'Identifier')
54
- externallyDefinedContracts.add(decl.id.name);
55
- });
56
- }
57
- }
58
- }
59
- }
60
- // 2. JSDoc Annotations (@public, @used, optiprune-ignore)
61
- if (Array.isArray(node.leadingComments)) {
62
- const isPublic = node.leadingComments.some((comment) => comment.value.includes("@public") ||
63
- comment.value.includes("@used") ||
64
- comment.value.includes("optiprune-ignore"));
65
- if (isPublic) {
66
- if (node.type === 'VariableDeclaration') {
67
- node.declarations.forEach((decl) => {
68
- if (decl.id?.type === 'Identifier')
69
- externallyDefinedContracts.add(decl.id.name);
70
- });
71
- }
72
- else if ((node.type === 'FunctionDeclaration' || node.type === 'ClassDeclaration') &&
73
- node.id?.name) {
74
- externallyDefinedContracts.add(node.id.name);
75
- }
76
- else if (node.type === 'ExportNamedDeclaration' && node.declaration) {
77
- const decl = node.declaration;
78
- if (decl.type === 'VariableDeclaration') {
79
- decl.declarations.forEach((d) => {
80
- if (d.id?.type === 'Identifier')
81
- externallyDefinedContracts.add(d.id.name);
82
- });
83
- }
84
- else if ((decl.type === 'FunctionDeclaration' || decl.type === 'ClassDeclaration') &&
85
- decl.id?.name) {
86
- externallyDefinedContracts.add(decl.id.name);
87
- }
88
- }
89
- }
90
- }
91
- // 3. Schema & Validation Framework Naming Pattern Matching
92
- let varDeclarations = [];
93
- if (node.type === 'VariableDeclaration') {
94
- varDeclarations = node.declarations || [];
95
- }
96
- else if (node.type === 'ExportNamedDeclaration' && node.declaration?.type === 'VariableDeclaration') {
97
- varDeclarations = node.declaration.declarations || [];
98
- }
99
- for (const decl of varDeclarations) {
100
- if (decl.id?.type === 'Identifier') {
101
- const varName = decl.id.name;
102
- const init = decl.init;
103
- const isZodCall = init?.type === 'CallExpression' &&
104
- ((init.callee?.type === 'MemberExpression' &&
105
- (init.callee.object?.name === 'z' || init.callee.object?.name === 'zod')) ||
106
- (init.callee?.type === 'Identifier' &&
107
- (init.callee.name === 'z' || init.callee.name.startsWith('zod'))));
108
- if (isZodCall || varName.endsWith('Schema')) {
109
- externallyDefinedContracts.add(varName);
110
- }
111
- }
112
- }
113
- // Check class and function declarations ending in Schema (e.g., export class UserSchema)
114
- let targetNameNode = null;
115
- if (node.type === 'ClassDeclaration' || node.type === 'FunctionDeclaration') {
116
- targetNameNode = node;
117
- }
118
- else if (node.type === 'ExportNamedDeclaration' &&
119
- node.declaration &&
120
- (node.declaration.type === 'ClassDeclaration' || node.declaration.type === 'FunctionDeclaration')) {
121
- targetNameNode = node.declaration;
122
- }
123
- if (targetNameNode?.id?.name && targetNameNode.id.name.endsWith('Schema')) {
124
- externallyDefinedContracts.add(targetNameNode.id.name);
125
- }
126
- });
127
- }
128
- // Phase 3: Apply Contract Guard Marking to ExportRecords
129
- for (const module of context.modules.values()) {
130
- if (module.exports) {
131
- for (const exportRecord of module.exports) {
132
- if ((exportRecord.name && externallyDefinedContracts.has(exportRecord.name)) ||
133
- (exportRecord.exportedAs && externallyDefinedContracts.has(exportRecord.exportedAs))) {
134
- exportRecord.isExternalContract = true;
135
- }
136
- }
137
- }
138
- }
139
- return findings;
140
- }
141
- //# sourceMappingURL=layer5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer5.js","sourceRoot":"","sources":["../src/layer5.ts"],"names":[],"mappings":"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"}
package/dist/layer6.d.ts DELETED
@@ -1,26 +0,0 @@
1
- import type { AnalysisContext, Finding } from './types.js';
2
- export interface DtsExportGraph {
3
- filePath: string;
4
- exportedTypes: Set<string>;
5
- hasModuleAugmentation: boolean;
6
- }
7
- export interface DependencyNode {
8
- name: string;
9
- version: string;
10
- dependencies: Set<string>;
11
- }
12
- /**
13
- * Parses a library's entry point `.d.ts` file using yuku-parser.
14
- * Handles Windows & POSIX paths natively.
15
- * Replaces the previous SWC-based implementation.
16
- */
17
- export declare function parseDtsWithSwc(entryPointRelative: string): Promise<DtsExportGraph>;
18
- /**
19
- * Fast-path topology extraction from lockfiles.
20
- */
21
- export declare function buildLockfileGraph(projectRoot: string): Map<string, DependencyNode>;
22
- /**
23
- * Layer 6: Dependency & Boundary Engine
24
- * Audits package usage and refines Layer 5 protections.
25
- */
26
- export declare function analyzeLayer6(context: AnalysisContext): Promise<Finding[]>;
package/dist/layer6.js DELETED
@@ -1,268 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'pathe';
3
- import { parse as yukuParse } from 'yuku-parser';
4
- import * as yaml from 'js-yaml';
5
- import { readJsonFile } from './fs-utils.js';
6
- /**
7
- * Parses a library's entry point `.d.ts` file using yuku-parser.
8
- * Handles Windows & POSIX paths natively.
9
- * Replaces the previous SWC-based implementation.
10
- */
11
- export async function parseDtsWithSwc(entryPointRelative) {
12
- const absolutePath = path.resolve(entryPointRelative);
13
- if (!fs.existsSync(absolutePath)) {
14
- return { filePath: absolutePath, exportedTypes: new Set(), hasModuleAugmentation: false };
15
- }
16
- const source = fs.readFileSync(absolutePath, 'utf-8');
17
- // yuku-parser: use 'dts' lang for declaration files
18
- const result = yukuParse(source, { lang: 'dts', sourceType: 'module' });
19
- const program = result.program;
20
- const exportedTypes = new Set();
21
- let hasModuleAugmentation = false;
22
- for (const item of (program.body ?? [])) {
23
- // yuku-parser emits ESTree-compatible nodes (ExportNamedDeclaration, ExportDefaultDeclaration)
24
- if (item.type === 'ExportNamedDeclaration') {
25
- // Inline declaration: export interface Foo {}, export type Bar = ...
26
- if (item.declaration) {
27
- const decl = item.declaration;
28
- if (decl.id?.name) {
29
- exportedTypes.add(decl.id.name);
30
- }
31
- }
32
- // Re-export specifiers: export { Foo, Bar }
33
- for (const spec of (item.specifiers ?? [])) {
34
- if (spec.type === 'ExportSpecifier') {
35
- const name = spec.exported?.name ?? spec.local?.name;
36
- if (name)
37
- exportedTypes.add(name);
38
- }
39
- }
40
- }
41
- else if (item.type === 'ExportDefaultDeclaration') {
42
- exportedTypes.add('default');
43
- }
44
- // Detect ambient module augmentation: declare module "..."
45
- if (item.type === 'TSModuleDeclaration' ||
46
- (item.type === 'ExportNamedDeclaration' && item.declaration?.type === 'TSModuleDeclaration')) {
47
- hasModuleAugmentation = true;
48
- }
49
- }
50
- return {
51
- filePath: absolutePath,
52
- exportedTypes,
53
- hasModuleAugmentation,
54
- };
55
- }
56
- /**
57
- * Fast-path topology extraction from lockfiles.
58
- */
59
- export function buildLockfileGraph(projectRoot) {
60
- const graph = new Map();
61
- const pnpmLockPath = path.join(projectRoot, 'pnpm-lock.yaml');
62
- const packageLockPath = path.join(projectRoot, 'package-lock.json');
63
- if (fs.existsSync(packageLockPath)) {
64
- try {
65
- const raw = fs.readFileSync(packageLockPath, 'utf-8');
66
- const cleanRaw = raw.charCodeAt(0) === 0xFEFF ? raw.slice(1) : raw;
67
- const parsed = JSON.parse(cleanRaw);
68
- const packages = parsed.packages || {};
69
- for (const [pkgPath, meta] of Object.entries(packages)) {
70
- if (!pkgPath)
71
- continue;
72
- const cleanName = pkgPath.replace(/^node_modules\//, '');
73
- const deps = new Set(Object.keys(meta.dependencies || {}).concat(Object.keys(meta.peerDependencies || {})));
74
- graph.set(cleanName, {
75
- name: cleanName,
76
- version: meta.version || 'unknown',
77
- dependencies: deps,
78
- });
79
- }
80
- }
81
- catch (e) {
82
- // Ignore lockfile parse errors
83
- }
84
- }
85
- else if (fs.existsSync(pnpmLockPath)) {
86
- try {
87
- const raw = fs.readFileSync(pnpmLockPath, 'utf-8');
88
- const parsed = yaml.load(raw);
89
- const snapshots = parsed.snapshots || {};
90
- for (const [pkgId, meta] of Object.entries(snapshots)) {
91
- const nameMatch = pkgId.match(/^\/(@?[^@]+)/);
92
- const cleanName = (nameMatch ? nameMatch[1] : pkgId);
93
- const deps = new Set(Object.keys(meta.dependencies || {}).concat(Object.keys(meta.peerDependencies || {})));
94
- graph.set(cleanName, {
95
- name: cleanName,
96
- version: 'pnpm-managed',
97
- dependencies: deps,
98
- });
99
- }
100
- }
101
- catch (e) {
102
- // Ignore lockfile parse errors
103
- }
104
- }
105
- return graph;
106
- }
107
- /**
108
- * Layer 6: Dependency & Boundary Engine
109
- * Audits package usage and refines Layer 5 protections.
110
- */
111
- export async function analyzeLayer6(context) {
112
- const findings = [];
113
- const projectRoot = context.options.rootDir;
114
- // 1. Audit declared dependencies vs imported ones
115
- const lockfileGraph = buildLockfileGraph(projectRoot);
116
- // Track imports per-package for monorepos, or globally for simple repos
117
- const packageImportMap = new Map();
118
- const globalImports = new Set();
119
- for (const module of context.modules.values()) {
120
- // Determine which workspace this module belongs to
121
- let ownerPackage = 'root';
122
- if (context.options.monorepo) {
123
- for (const [name, pkg] of context.options.monorepo.packageMap.entries()) {
124
- if (module.id.startsWith(pkg.location + path.sep) || module.id === pkg.location) {
125
- ownerPackage = name;
126
- break;
127
- }
128
- }
129
- }
130
- const pkgImports = packageImportMap.get(ownerPackage) || new Set();
131
- if (!packageImportMap.has(ownerPackage))
132
- packageImportMap.set(ownerPackage, pkgImports);
133
- for (const edge of module.edges) {
134
- if (edge.resolution === 'external') {
135
- const parts = edge.rawSpecifier.split('/');
136
- const pkgName = edge.rawSpecifier.startsWith('@') ? `${parts[0] ?? ''}/${parts[1] ?? ''}` : (parts[0] ?? '');
137
- pkgImports.add(pkgName);
138
- globalImports.add(pkgName);
139
- }
140
- else if (edge.resolution === 'resolved' && edge.target && context.options.monorepo) {
141
- for (const [pkgName, pkg] of context.options.monorepo.packageMap.entries()) {
142
- if (edge.target.startsWith(pkg.location + path.sep) || edge.target === pkg.location) {
143
- pkgImports.add(pkgName);
144
- globalImports.add(pkgName);
145
- break;
146
- }
147
- }
148
- }
149
- }
150
- }
151
- // Find unused direct dependencies from all package.json files
152
- const manifestPaths = new Map();
153
- manifestPaths.set('root', path.join(projectRoot, 'package.json'));
154
- if (context.options.monorepo) {
155
- for (const [name, pkg] of context.options.monorepo.packageMap.entries()) {
156
- manifestPaths.set(name, pkg.manifestPath);
157
- }
158
- }
159
- for (const [pkgName, manifestPath] of manifestPaths.entries()) {
160
- if (fs.existsSync(manifestPath)) {
161
- const pkg = await readJsonFile(manifestPath);
162
- if (!pkg)
163
- continue;
164
- const dependencies = pkg.dependencies || {};
165
- const devDependencies = pkg.devDependencies || {};
166
- const scripts = pkg.scripts || {};
167
- const relativeManifest = path.posix.relative(projectRoot, manifestPath);
168
- const importedInThisPackage = packageImportMap.get(pkgName) || new Set();
169
- // 1. Collect binary usages from scripts
170
- const scriptUsages = new Set();
171
- for (const script of Object.values(scripts)) {
172
- // Better heuristic: find all potential binaries
173
- const words = script.split(/[\s|&;><!]/).filter(w => w.length > 0 && !w.startsWith('-'));
174
- for (const word of words) {
175
- scriptUsages.add(word);
176
- }
177
- // Specifically check for npx/pnpm/yarn/npm exec patterns
178
- const execMatches = script.matchAll(/(?:npx|pnpm|yarn|npm)\s+([@\w\-/]+)/g);
179
- for (const match of execMatches) {
180
- if (match[1])
181
- scriptUsages.add(match[1]);
182
- }
183
- }
184
- // 2. Audit Dependencies
185
- for (const dep of Object.keys(dependencies)) {
186
- // In monorepo, we check if it's used in this package OR if it's a workspace package used elsewhere
187
- const isUsed = importedInThisPackage.has(dep) || scriptUsages.has(dep);
188
- if (!isUsed) {
189
- findings.push({
190
- rule: 'unused-export',
191
- severity: 'warning',
192
- confidence: 'high',
193
- message: `Package '${dep}' is declared as a dependency in ${relativeManifest} but never imported or used in scripts.`,
194
- file: relativeManifest,
195
- evidence: { package: dep, type: 'dependency' }
196
- });
197
- }
198
- }
199
- // 3. Audit DevDependencies
200
- for (const dep of Object.keys(devDependencies)) {
201
- // Prevent self-reporting (ignore the package's own name if listed in devDeps)
202
- if (pkg.name && dep === pkg.name) {
203
- continue;
204
- }
205
- // Special handling for @types/
206
- if (dep.startsWith('@types/')) {
207
- const basePkg = dep.slice(7).replace('__', '/');
208
- if (importedInThisPackage.has(basePkg) || globalImports.has(basePkg) || dependencies[basePkg] || devDependencies[basePkg]) {
209
- continue;
210
- }
211
- }
212
- // Refined Whitelist for config/tooling packages
213
- // We only whitelist very core tools that are almost always implicitly used
214
- const CORE_TOOLING = [
215
- 'optiprune', 'typescript', 'ts-node', 'tsx', 'babel', 'swc',
216
- 'eslint', 'prettier', 'husky', 'lint-staged',
217
- 'vitest', 'jest', 'cypress', 'playwright',
218
- '@types/node', '@types/react', '@types/react-dom', '@types/jest'
219
- ];
220
- const isCoreTool = CORE_TOOLING.some(p => dep.includes(p));
221
- // Heuristic: Check for common config files in root
222
- const commonConfigs = [
223
- '.eslintrc', '.prettierrc', 'vitest.config', 'jest.config', 'webpack.config', 'vite.config', 'rollup.config',
224
- 'postcss.config', 'tailwind.config', 'tsconfig.json', 'babel.config', 'swc.config', 'lerna.json', 'turbo.json',
225
- 'nx.json', '.env', 'svelte.config', 'vue.config', 'astro.config', 'package.json'
226
- ];
227
- const hasRelatedConfig = commonConfigs.some(cfg => {
228
- const depBase = dep.split('/')[0]?.replace(/^@/, '').replace(/-config$/, '').replace(/config-/, '');
229
- // If the dependency name (or part of it) is found in a config file name, it's likely used
230
- return cfg.includes(depBase || '___never___');
231
- });
232
- const isUsed = importedInThisPackage.has(dep) || scriptUsages.has(dep) || isCoreTool || hasRelatedConfig;
233
- if (!isUsed) {
234
- findings.push({
235
- rule: 'unused-export',
236
- severity: 'info', // devDeps are usually less critical
237
- confidence: 'medium',
238
- message: `DevDependency '${dep}' in ${relativeManifest} appears unused.`,
239
- file: relativeManifest,
240
- evidence: { package: dep, type: 'devDependency' }
241
- });
242
- }
243
- }
244
- }
245
- }
246
- // 2. Refine Layer 5 Protection
247
- for (const module of context.modules.values()) {
248
- const isReachable = context.reachable.has(module.id) || context.maybeReachable.has(module.id);
249
- if (!isReachable) {
250
- for (const exp of module.exports) {
251
- if (exp.isExternalContract) {
252
- findings.push({
253
- rule: 'protected-contract',
254
- severity: 'info',
255
- confidence: 'high',
256
- message: `[Layer 6] Revoked protection for unreferenced contract: ${exp.exportedAs} (File is unreachable).`,
257
- file: module.relativePath,
258
- ...(exp.location !== undefined && { location: exp.location }),
259
- evidence: { symbol: exp.exportedAs, reason: 'unreachable-file' }
260
- });
261
- exp.isExternalContract = false;
262
- }
263
- }
264
- }
265
- }
266
- return findings;
267
- }
268
- //# sourceMappingURL=layer6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer6.js","sourceRoot":"","sources":["../src/layer6.ts"],"names":[],"mappings":"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"}
package/dist/layer7.d.ts DELETED
@@ -1,28 +0,0 @@
1
- import type { AnalysisContext, Finding } from "./types.js";
2
- export interface Layer7Result {
3
- layer: 7;
4
- implicitEdges: ImplicitEdge[];
5
- resolvedDynamicImports: ResolvedDynamicImport[];
6
- }
7
- export interface ImplicitEdge {
8
- id: string;
9
- type: 'DI_INJECTION' | 'EVENT_CONTRACT';
10
- provider?: {
11
- file: string;
12
- symbol: string;
13
- token: string;
14
- };
15
- consumer: {
16
- file: string;
17
- symbol: string;
18
- handler?: string;
19
- };
20
- topic?: string;
21
- status: 'ACTIVE' | 'DEAD_ORPHANED_CONSUMER';
22
- }
23
- export interface ResolvedDynamicImport {
24
- sourceFile: string;
25
- template: string;
26
- resolvedFiles: string[];
27
- }
28
- export declare function analyzeLayer7(context: AnalysisContext): Promise<Finding[]>;