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/graph.js DELETED
@@ -1,583 +0,0 @@
1
- import path from "pathe";
2
- import { resolveDynamicPattern, resolveLocalSpecifier } from "./fs-utils.js";
3
- import { walkAst } from "./parser.js";
4
- function dynamicParts(rawSpecifier) {
5
- const marker = "${…}";
6
- const index = rawSpecifier.indexOf(marker);
7
- if (index < 0) {
8
- return undefined;
9
- }
10
- return {
11
- prefix: rawSpecifier.slice(0, index),
12
- suffix: rawSpecifier.slice(index + marker.length),
13
- };
14
- }
15
- function resolveEdge(edge, source, knownFiles, options) {
16
- if (edge.kind === "unknown-dynamic") {
17
- edge.resolution = "unknown";
18
- return;
19
- }
20
- if (edge.kind === "dynamic-pattern") {
21
- const parts = edge.dynamicPattern || dynamicParts(edge.rawSpecifier);
22
- if (!parts) {
23
- edge.resolution = "unknown";
24
- return;
25
- }
26
- const candidates = resolveDynamicPattern(source.id, parts.prefix, parts.suffix, knownFiles);
27
- const baseDirectory = path.resolve(path.dirname(source.id), parts.prefix || ".");
28
- edge.dynamicPattern = {
29
- prefix: parts.prefix,
30
- suffix: parts.suffix,
31
- baseDirectory,
32
- candidates,
33
- };
34
- edge.resolution = candidates.length > 0 ? "resolved" : "unresolved";
35
- return;
36
- }
37
- // 1. Try local resolution
38
- let target = resolveLocalSpecifier(source.id, edge.rawSpecifier, knownFiles, options.extensions);
39
- if (edge.rawSpecifier.startsWith(".")) {
40
- // console.log("Resolving " + edge.rawSpecifier + " from " + source.id + " -> " + target);
41
- }
42
- // 2. Try tsconfig path aliases
43
- if (!target && options.pathAliases.size > 0) {
44
- for (const [alias, targets] of options.pathAliases.entries()) {
45
- const aliasPattern = alias.replace(/\*/g, "(.*)");
46
- const matcher = new RegExp(`^${aliasPattern}$`);
47
- const match = edge.rawSpecifier.match(matcher);
48
- if (match) {
49
- for (const targetPattern of targets) {
50
- const resolvedSpecifier = targetPattern.replace(/\*/g, match[1] || "");
51
- const absoluteTarget = path.resolve(options.rootDir, options.baseUrl || ".", resolvedSpecifier);
52
- target = resolveLocalSpecifier(source.id, absoluteTarget, knownFiles, options.extensions);
53
- if (target)
54
- break;
55
- }
56
- }
57
- if (target)
58
- break;
59
- }
60
- }
61
- // 3. Try baseUrl resolution (non-relative imports)
62
- if (!target && options.baseUrl && !edge.rawSpecifier.startsWith(".") && !path.isAbsolute(edge.rawSpecifier)) {
63
- const absoluteTarget = path.resolve(options.rootDir, options.baseUrl, edge.rawSpecifier);
64
- target = resolveLocalSpecifier(source.id, absoluteTarget, knownFiles, options.extensions);
65
- }
66
- // 4. Try Monorepo Workspace resolution
67
- if (!target && options.monorepo) {
68
- // Check if the specifier starts with a workspace package name
69
- for (const [pkgName, pkg] of options.monorepo.packageMap.entries()) {
70
- if (edge.rawSpecifier === pkgName || edge.rawSpecifier.startsWith(pkgName + '/')) {
71
- // Resolve to the package's entry point (main/exports)
72
- // For simplicity, we assume index.ts/js in the package root or src
73
- const subPath = edge.rawSpecifier.slice(pkgName.length);
74
- const pkgRoot = pkg.location;
75
- // Try common entry points if it's just the package name
76
- if (!subPath || subPath === '/') {
77
- const entries = ['src/index.ts', 'src/index.js', 'index.ts', 'index.js'];
78
- for (const e of entries) {
79
- const entryPath = path.join(pkgRoot, e);
80
- if (knownFiles.has(entryPath)) {
81
- target = entryPath;
82
- break;
83
- }
84
- }
85
- }
86
- else {
87
- // Try resolving the sub-path
88
- target = resolveLocalSpecifier(path.join(pkgRoot, 'package.json'), '.' + subPath, knownFiles, options.extensions);
89
- }
90
- if (target)
91
- break;
92
- }
93
- }
94
- }
95
- if (target) {
96
- edge.target = target;
97
- edge.resolution = "resolved";
98
- }
99
- else if (edge.rawSpecifier.startsWith(".") || edge.rawSpecifier.startsWith("/") || edge.rawSpecifier.startsWith("file:")) {
100
- edge.resolution = "unresolved";
101
- }
102
- else {
103
- edge.resolution = "external";
104
- }
105
- }
106
- export function resolveDependencies(modules, options) {
107
- const knownFiles = new Set(modules.keys());
108
- for (const module of modules.values()) {
109
- for (const edge of module.edges) {
110
- resolveEdge(edge, module, knownFiles, options);
111
- }
112
- }
113
- }
114
- export function edgeTargets(edge) {
115
- if (edge.target) {
116
- return [edge.target];
117
- }
118
- return edge.dynamicPattern?.candidates ?? [];
119
- }
120
- function adjacencyFor(modules, moduleId) {
121
- const module = modules.get(moduleId);
122
- if (!module) {
123
- return [];
124
- }
125
- return module.edges.flatMap(edgeTargets).filter((target) => modules.has(target));
126
- }
127
- function reverseAdjacency(modules) {
128
- const reverse = new Map();
129
- for (const moduleId of modules.keys()) {
130
- reverse.set(moduleId, []);
131
- }
132
- for (const module of modules.values()) {
133
- for (const target of module.edges.flatMap(edgeTargets)) {
134
- const reverseTargets = reverse.get(target);
135
- if (reverseTargets) {
136
- reverseTargets.push(module.id);
137
- }
138
- }
139
- }
140
- return reverse;
141
- }
142
- /** Kosaraju with explicit stacks avoids stack overflows on deep graphs and cycles. */
143
- export function stronglyConnectedComponents(modules) {
144
- const visited = new Set();
145
- const finishOrder = [];
146
- for (const root of modules.keys()) {
147
- if (visited.has(root)) {
148
- continue;
149
- }
150
- const stack = [];
151
- visited.add(root);
152
- stack.push({ moduleId: root, nextIndex: 0, neighbors: adjacencyFor(modules, root) });
153
- while (stack.length > 0) {
154
- const frame = stack[stack.length - 1];
155
- if (!frame) {
156
- break;
157
- }
158
- if (frame.nextIndex < frame.neighbors.length) {
159
- const neighbor = frame.neighbors[frame.nextIndex];
160
- frame.nextIndex += 1;
161
- if (neighbor && !visited.has(neighbor)) {
162
- visited.add(neighbor);
163
- stack.push({ moduleId: neighbor, nextIndex: 0, neighbors: adjacencyFor(modules, neighbor) });
164
- }
165
- }
166
- else {
167
- finishOrder.push(frame.moduleId);
168
- stack.pop();
169
- }
170
- }
171
- }
172
- const reverse = reverseAdjacency(modules);
173
- const assigned = new Set();
174
- const components = [];
175
- while (finishOrder.length > 0) {
176
- const root = finishOrder.pop();
177
- if (!root || assigned.has(root)) {
178
- continue;
179
- }
180
- const members = [];
181
- const stack = [root];
182
- assigned.add(root);
183
- while (stack.length > 0) {
184
- const current = stack.pop();
185
- if (!current) {
186
- continue;
187
- }
188
- members.push(current);
189
- for (const neighbor of reverse.get(current) ?? []) {
190
- if (!assigned.has(neighbor)) {
191
- assigned.add(neighbor);
192
- stack.push(neighbor);
193
- }
194
- }
195
- }
196
- members.sort((left, right) => left.localeCompare(right));
197
- const selfLoop = members.length === 1 && adjacencyFor(modules, members[0] ?? "").includes(members[0] ?? "");
198
- components.push({
199
- id: components.length,
200
- modules: members,
201
- isCycle: members.length > 1 || selfLoop,
202
- });
203
- }
204
- return components;
205
- }
206
- /**
207
- * Traverse the graph iteratively. Pattern imports and edges extracted from malformed files
208
- * propagate `maybe` reachability. A reachable completely unknown dynamic boundary makes every
209
- * project module only maybe-reachable, preventing unsafe unreachable-file claims.
210
- */
211
- export function calculateReachability(modules, entryPoints) {
212
- const reachable = new Set();
213
- const maybeReachable = new Set();
214
- const queue = [...entryPoints].map((moduleId) => ({ moduleId, certainty: "exact" }));
215
- let cursor = 0;
216
- let hasReachableUnknownDynamicBoundary = false;
217
- while (cursor < queue.length) {
218
- const current = queue[cursor];
219
- cursor += 1;
220
- if (!current || !modules.has(current.moduleId)) {
221
- continue;
222
- }
223
- if (current.certainty === "exact") {
224
- if (reachable.has(current.moduleId)) {
225
- continue;
226
- }
227
- reachable.add(current.moduleId);
228
- maybeReachable.delete(current.moduleId);
229
- }
230
- else if (reachable.has(current.moduleId) || maybeReachable.has(current.moduleId)) {
231
- continue;
232
- }
233
- else {
234
- maybeReachable.add(current.moduleId);
235
- }
236
- const module = modules.get(current.moduleId);
237
- if (!module) {
238
- continue;
239
- }
240
- if (module.hasUnknownDynamicBoundary) {
241
- hasReachableUnknownDynamicBoundary = true;
242
- }
243
- for (const edge of module.edges) {
244
- // Type-only imports DO contribute to file reachability, but not necessarily runtime usage
245
- // The `isTypeOnly` flag is preserved on the edge for later analysis.
246
- // If a module has a parse error, we treat its edges as "maybe" because the AST might be incomplete.
247
- const edgeIsMaybe = edge.kind === "dynamic-pattern" || module.hasParseError;
248
- const childCertainty = current.certainty === "maybe" || edgeIsMaybe ? "maybe" : "exact";
249
- for (const target of edgeTargets(edge)) {
250
- queue.push({ moduleId: target, certainty: childCertainty });
251
- }
252
- }
253
- }
254
- // Generic Dynamic Discovery:
255
- // If a reachable module scans a directory (readdir) and also has dynamic import patterns,
256
- // we assume it's a plugin loader and mark all files in that directory as maybe-reachable.
257
- for (const module of modules.values()) {
258
- if (reachable.has(module.id)) {
259
- const hasDynamicPatterns = module.edges.some(e => e.kind === "dynamic-pattern" || e.kind === "unknown-dynamic");
260
- const hasScannedDirs = module.scannedDirectories && module.scannedDirectories.length > 0;
261
- if (hasDynamicPatterns && (hasScannedDirs || module.hasUnknownDynamicBoundary)) {
262
- if (hasScannedDirs) {
263
- for (const dir of module.scannedDirectories) {
264
- // Resolve the scanned directory relative to the module
265
- const absoluteDir = path.resolve(path.dirname(module.id), dir);
266
- for (const candidate of modules.keys()) {
267
- if (!reachable.has(candidate) && !maybeReachable.has(candidate)) {
268
- if (candidate.startsWith(absoluteDir)) {
269
- maybeReachable.add(candidate);
270
- }
271
- }
272
- }
273
- }
274
- }
275
- // If we have an unknown dynamic boundary (like a variable readdir or unknown import),
276
- // we must be conservative to ensure "World Peace" and not flag unreachable files
277
- // that might be part of this dynamic system.
278
- if (module.hasUnknownDynamicBoundary) {
279
- hasReachableUnknownDynamicBoundary = true;
280
- }
281
- }
282
- }
283
- }
284
- if (hasReachableUnknownDynamicBoundary) {
285
- for (const moduleId of modules.keys()) {
286
- if (!reachable.has(moduleId)) {
287
- maybeReachable.add(moduleId);
288
- }
289
- }
290
- }
291
- return { reachable, maybeReachable, hasReachableUnknownDynamicBoundary };
292
- }
293
- export function buildImportUsage(modules) {
294
- const usage = new Map();
295
- for (const module of modules.values()) {
296
- // Member Access Tracking within the module
297
- const localMemberAccess = new Map();
298
- if (module.ast) {
299
- walkAst(module.ast, (node, stack) => {
300
- // 1. Track Member Expressions (e.g., Status.Active, user.id)
301
- if (node.type === "MemberExpression" && node.object.type === "Identifier" && !node.computed) {
302
- const objectName = node.object.name;
303
- const propertyName = node.property.name || node.property.value;
304
- if (propertyName) {
305
- // Track direct access (Status.Active)
306
- if (!localMemberAccess.has(objectName))
307
- localMemberAccess.set(objectName, new Set());
308
- localMemberAccess.get(objectName).add(propertyName);
309
- // Track type-aware access (user.id where user is of type User)
310
- const typeName = module.localTypeMap?.[objectName];
311
- if (typeName) {
312
- if (!localMemberAccess.has(typeName))
313
- localMemberAccess.set(typeName, new Set());
314
- localMemberAccess.get(typeName).add(propertyName);
315
- }
316
- }
317
- }
318
- });
319
- }
320
- for (const edge of module.edges) {
321
- for (const target of edgeTargets(edge)) {
322
- const current = usage.get(target) ?? {
323
- consumers: new Set(),
324
- names: new Set(),
325
- memberAccess: new Map(),
326
- wildcard: false,
327
- reExportOnly: true
328
- };
329
- current.consumers.add(module.id);
330
- const isReExport = edge.kind === "export-all" || edge.kind === "export-from";
331
- if (!isReExport) {
332
- current.reExportOnly = false;
333
- }
334
- for (const name of edge.importedNames) {
335
- current.names.add(name);
336
- if (name === "*") {
337
- current.wildcard = true;
338
- }
339
- // Map local member access to the imported name
340
- const accessed = localMemberAccess.get(name);
341
- if (accessed) {
342
- if (!current.memberAccess.has(name))
343
- current.memberAccess.set(name, new Set());
344
- for (const m of accessed)
345
- current.memberAccess.get(name).add(m);
346
- }
347
- }
348
- if (edge.kind === "dynamic-pattern") {
349
- current.wildcard = true;
350
- }
351
- usage.set(target, current);
352
- }
353
- }
354
- // Mark exports as used if they are referenced locally within the module
355
- for (const exportRecord of module.exports) {
356
- if (module.localReferences && module.localReferences.includes(exportRecord.name)) {
357
- const current = usage.get(module.id) ?? {
358
- consumers: new Set(),
359
- names: new Set(),
360
- memberAccess: new Map(),
361
- wildcard: false,
362
- reExportOnly: true
363
- };
364
- current.names.add(exportRecord.exportedAs);
365
- // We don't set reExportOnly = false here because local usage
366
- // within an entry point shouldn't protect OTHER exports in the same file.
367
- // The export is already marked as used via current.names.add().
368
- usage.set(module.id, current);
369
- }
370
- }
371
- }
372
- return usage;
373
- }
374
- export function buildUsedExports(modules) {
375
- const usedExports = new Set();
376
- const usedMembers = new Set();
377
- const importUsage = buildImportUsage(modules);
378
- // 1. Initial pass: Mark exports used by non-re-export imports
379
- // and resolve explicit re-exports (export { x } from 'mod')
380
- const worklist = [];
381
- for (const [moduleId, usage] of importUsage.entries()) {
382
- const module = modules.get(moduleId);
383
- if (!module)
384
- continue;
385
- for (const exp of module.exports) {
386
- if (exp.isExternalContract) {
387
- usedExports.add(`${moduleId}:${exp.exportedAs}`);
388
- continue;
389
- }
390
- // If it's a direct import (not a re-export)
391
- if (!usage.reExportOnly) {
392
- const isRequested = usage.wildcard || usage.names.has(exp.exportedAs) || (exp.isDefault && usage.names.has('default'));
393
- if (isRequested) {
394
- if (!usedExports.has(`${moduleId}:${exp.exportedAs}`)) {
395
- usedExports.add(`${moduleId}:${exp.exportedAs}`);
396
- worklist.push({ moduleId, name: exp.exportedAs });
397
- }
398
- // Track member access
399
- const accessed = usage.memberAccess.get(exp.exportedAs);
400
- if (accessed) {
401
- for (const m of accessed) {
402
- usedMembers.add(`${moduleId}:${exp.exportedAs}:${m}`);
403
- }
404
- }
405
- }
406
- }
407
- }
408
- }
409
- // 2. Propagation pass: Follow re-export chains
410
- // This handles: App -> Barrel (export * from 'Lib') -> Lib
411
- let changed = true;
412
- while (changed) {
413
- changed = false;
414
- for (const module of modules.values()) {
415
- for (const edge of module.edges) {
416
- if (edge.kind === 'export-all' || edge.kind === 'export-from') {
417
- for (const targetId of edgeTargets(edge)) {
418
- const targetModule = modules.get(targetId);
419
- if (!targetModule)
420
- continue;
421
- // If someone uses an export from 'module', and 'module' re-exports it from 'targetModule'
422
- const moduleUsage = importUsage.get(module.id);
423
- if (!moduleUsage)
424
- continue;
425
- for (const exp of targetModule.exports) {
426
- const exportKey = `${targetId}:${exp.exportedAs}`;
427
- if (usedExports.has(exportKey))
428
- continue;
429
- let isUsedViaReExport = false;
430
- if (edge.kind === 'export-all') {
431
- // PRECISION FIX: Only mark this specific export as used if it's actually requested from the barrel
432
- const isRequested = moduleUsage.wildcard || moduleUsage.names.has(exp.exportedAs);
433
- // Also check if it's a default export being requested via a name (not common for export *)
434
- const isDefaultRequested = exp.isDefault && moduleUsage.names.has('default');
435
- if (isRequested || isDefaultRequested) {
436
- isUsedViaReExport = true;
437
- }
438
- else {
439
- // DEEP ALIAS FIX for export *
440
- // Check if any consumer of 'module' uses this name via wildcard or direct name
441
- if (moduleUsage.wildcard || moduleUsage.names.has(exp.exportedAs)) {
442
- isUsedViaReExport = true;
443
- }
444
- }
445
- }
446
- else if (edge.kind === 'export-from') {
447
- // Explicit re-export: export { x } from 'mod'
448
- // edge.importedNames contains the names from 'targetModule'
449
- // We need to see if the corresponding exported name in 'module' is used
450
- for (const edgeImportName of edge.importedNames) {
451
- if (edgeImportName === exp.exportedAs || (exp.isDefault && edgeImportName === 'default')) {
452
- // Find the name this is exported as in 'module'
453
- const correspondingExport = module.exports.find(e => e.isReExport && e.name === edgeImportName);
454
- if (correspondingExport) {
455
- const exportKeyInModule = `${module.id}:${correspondingExport.exportedAs}`;
456
- if (usedExports.has(exportKeyInModule)) {
457
- isUsedViaReExport = true;
458
- break;
459
- }
460
- // DEEP ALIAS FIX: If this re-export is itself re-exported further,
461
- // the usage might be further down the chain.
462
- // We check if any consumer of 'module' uses this specific exported name.
463
- const moduleUsage = importUsage.get(module.id);
464
- if (moduleUsage && (moduleUsage.wildcard || moduleUsage.names.has(correspondingExport.exportedAs))) {
465
- isUsedViaReExport = true;
466
- break;
467
- }
468
- }
469
- }
470
- }
471
- }
472
- if (isUsedViaReExport) {
473
- usedExports.add(exportKey);
474
- changed = true;
475
- // PROPAGATE MEMBER ACCESS THROUGH RE-EXPORTS
476
- const accessedInModule = moduleUsage.memberAccess.get(edge.kind === 'export-all' ? exp.exportedAs : (module.exports.find(e => e.isReExport && e.name === exp.exportedAs)?.exportedAs || ""));
477
- if (accessedInModule) {
478
- for (const m of accessedInModule) {
479
- usedMembers.add(`${targetId}:${exp.exportedAs}:${m}`);
480
- }
481
- }
482
- }
483
- }
484
- }
485
- }
486
- }
487
- }
488
- }
489
- // 3. Local Symbol Propagation (Fix 3: TypeScript False Positives)
490
- // This handles two things:
491
- // A) If an export A is used, any local symbol B it references must also be used.
492
- // B) INTERNAL REFERENCE FIX: Symbols used in top-level code (captured under "")
493
- changed = true;
494
- while (changed) {
495
- changed = false;
496
- for (const module of modules.values()) {
497
- const localDeps = module.localSymbolMap || {};
498
- // INTERNAL REFERENCE FIX: Symbols used in top-level code
499
- const topLevelRefs = localDeps[""] || [];
500
- for (const refName of topLevelRefs) {
501
- const internalExport = module.exports.find(e => e.name === refName);
502
- if (internalExport) {
503
- const internalKey = `${module.id}:${internalExport.exportedAs}`;
504
- if (!usedExports.has(internalKey)) {
505
- usedExports.add(internalKey);
506
- changed = true;
507
- }
508
- }
509
- }
510
- for (const exp of module.exports) {
511
- const exportKey = `${module.id}:${exp.exportedAs}`;
512
- if (usedExports.has(exportKey)) {
513
- const queue = [...(exp.localReferences || [])];
514
- const visited = new Set();
515
- while (queue.length > 0) {
516
- const current = queue.shift();
517
- if (!current || visited.has(current))
518
- continue;
519
- visited.add(current);
520
- // If this local symbol is also an export (e.g. an Interface used as a type)
521
- const internalExport = module.exports.find(e => e.name === current);
522
- if (internalExport) {
523
- const internalKey = `${module.id}:${internalExport.exportedAs}`;
524
- if (!usedExports.has(internalKey)) {
525
- usedExports.add(internalKey);
526
- changed = true;
527
- }
528
- }
529
- // Propagate to symbols used by this symbol
530
- const deps = localDeps[current];
531
- if (Array.isArray(deps)) {
532
- queue.push(...deps);
533
- }
534
- }
535
- }
536
- }
537
- }
538
- }
539
- return { usedExports, usedMembers };
540
- }
541
- /**
542
- * Refines component reachability. A component is reachable if at least one of its
543
- * modules is reachable from an entry point.
544
- */
545
- /**
546
- * Refines component reachability. A component is reachable if at least one of its
547
- * modules is reachable from an entry point.
548
- */
549
- export function calculateComponentReachability(components, reachable, maybeReachable) {
550
- for (const comp of components) {
551
- // A component is reachable if ANY of its modules are in the reachable set
552
- comp.isReachable = comp.modules.some(m => reachable.has(m));
553
- // A component is maybe reachable if ANY of its modules are in the maybeReachable set
554
- // OR if it's not reachable but one of its modules is reachable via a maybe-path
555
- comp.isMaybeReachable = comp.modules.some(m => maybeReachable.has(m));
556
- }
557
- }
558
- export function buildGraph(modules, entryPoints, options) {
559
- resolveDependencies(modules, options);
560
- const components = stronglyConnectedComponents(modules);
561
- const reachability = calculateReachability(modules, entryPoints);
562
- // Apply SCC reachability check
563
- calculateComponentReachability(components, reachability.reachable, reachability.maybeReachable);
564
- const { usedExports, usedMembers } = buildUsedExports(modules);
565
- return { components, ...reachability, usedExports, usedMembers };
566
- }
567
- export function contextWithGraph(modules, entryPoints, options) {
568
- const graph = buildGraph(modules, entryPoints, options);
569
- return {
570
- options,
571
- modules,
572
- entryPoints,
573
- reachable: graph.reachable,
574
- maybeReachable: graph.maybeReachable,
575
- hasReachableUnknownDynamicBoundary: graph.hasReachableUnknownDynamicBoundary,
576
- components: graph.components,
577
- usedExports: graph.usedExports,
578
- usedMembers: graph.usedMembers,
579
- candidateBranches: [],
580
- dynamicImportCandidates: Array.from(modules.values()).flatMap(m => m.dynamicImportCandidates || []),
581
- };
582
- }
583
- //# sourceMappingURL=graph.js.map
package/dist/graph.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { AnalyzerOptions, AnalysisReport, ResolvedOptions } from "./types.js";
2
- export declare function analyze(options: AnalyzerOptions): Promise<AnalysisReport>;
3
- export declare function shouldFail(report: AnalysisReport, failOn: ResolvedOptions["failOn"]): boolean;