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,23 +0,0 @@
1
- import { SemanticGraph, SemanticNode } from "./semantic-graph.js";
2
- export declare class TopologyManager {
3
- private graph;
4
- constructor(graph: SemanticGraph);
5
- /**
6
- * Processes a set of new/updated nodes for a file and updates the graph.
7
- * Implements a Soft-Delete (Tombstone) strategy for resilient parsing.
8
- */
9
- updateFile(fileId: string, newNodes: SemanticNode[], parseSuccess?: boolean): Set<string>;
10
- /**
11
- * Transitively marks all nodes that depend on the given nodeId.
12
- */
13
- private markAffectedDependents;
14
- /**
15
- * Detects orphaned nodes (dead code) using Tarjan's algorithm for SCC-aware detection.
16
- * This treats circular dependency cycles as a single unit.
17
- */
18
- detectDeadCode(): SemanticNode[];
19
- /**
20
- * Tarjan's algorithm for finding Strongly Connected Components.
21
- */
22
- private findSCCs;
23
- }
@@ -1,144 +0,0 @@
1
- export class TopologyManager {
2
- graph;
3
- constructor(graph) {
4
- this.graph = graph;
5
- }
6
- /**
7
- * Processes a set of new/updated nodes for a file and updates the graph.
8
- * Implements a Soft-Delete (Tombstone) strategy for resilient parsing.
9
- */
10
- updateFile(fileId, newNodes, parseSuccess = true) {
11
- const affectedNodeIds = new Set();
12
- const existingNodes = this.graph.getNodesInFile(fileId);
13
- const existingNodeMap = new Map(existingNodes.map(n => [n.id, n]));
14
- const newNodeMap = new Map(newNodes.map(n => [n.id, n]));
15
- if (!parseSuccess) {
16
- // If parse failed, mark all existing nodes as stale but don't purge them
17
- for (const oldNode of existingNodes) {
18
- oldNode.isStale = true;
19
- }
20
- return affectedNodeIds;
21
- }
22
- // 1. Identify removed nodes or nodes that changed content
23
- for (const oldNode of existingNodes) {
24
- const newNode = newNodeMap.get(oldNode.id);
25
- if (!newNode) {
26
- // Node was completely removed
27
- this.markAffectedDependents(oldNode.id, affectedNodeIds);
28
- this.graph.removeNode(oldNode.id);
29
- }
30
- else if (oldNode.contentHash !== newNode.contentHash) {
31
- // Content changed, mark as affected but keep LEI
32
- affectedNodeIds.add(oldNode.id);
33
- oldNode.contentHash = newNode.contentHash;
34
- oldNode.isStale = false;
35
- // In a real implementation, we would re-extract references for the updated node
36
- }
37
- else {
38
- // Node is still there and unchanged
39
- oldNode.isStale = false;
40
- }
41
- }
42
- // 2. Add new nodes
43
- for (const newNode of newNodes) {
44
- if (!existingNodeMap.has(newNode.id)) {
45
- this.graph.addNode(newNode);
46
- affectedNodeIds.add(newNode.id);
47
- }
48
- }
49
- return affectedNodeIds;
50
- }
51
- /**
52
- * Transitively marks all nodes that depend on the given nodeId.
53
- */
54
- markAffectedDependents(nodeId, affected) {
55
- const node = this.graph.getNode(nodeId);
56
- if (!node || affected.has(nodeId))
57
- return;
58
- affected.add(nodeId);
59
- for (const ref of node.incomingReferences) {
60
- this.markAffectedDependents(ref.sourceNodeId, affected);
61
- }
62
- }
63
- /**
64
- * Detects orphaned nodes (dead code) using Tarjan's algorithm for SCC-aware detection.
65
- * This treats circular dependency cycles as a single unit.
66
- */
67
- detectDeadCode() {
68
- const allNodes = this.graph.getAllNodes();
69
- const deadNodes = [];
70
- // 1. Find all SCCs in the graph
71
- const sccs = this.findSCCs(allNodes);
72
- // 2. For each SCC, check if it has any incoming references from outside the SCC
73
- for (const scc of sccs) {
74
- const sccNodeIds = new Set(scc.map(n => n.id));
75
- let hasExternalInflow = false;
76
- for (const node of scc) {
77
- // Files are considered entry points for now
78
- if (node.type === 'File') {
79
- hasExternalInflow = true;
80
- break;
81
- }
82
- for (const ref of node.incomingReferences) {
83
- if (!sccNodeIds.has(ref.sourceNodeId)) {
84
- hasExternalInflow = true;
85
- break;
86
- }
87
- }
88
- if (hasExternalInflow)
89
- break;
90
- }
91
- if (!hasExternalInflow) {
92
- deadNodes.push(...scc);
93
- }
94
- }
95
- return deadNodes;
96
- }
97
- /**
98
- * Tarjan's algorithm for finding Strongly Connected Components.
99
- */
100
- findSCCs(nodes) {
101
- let index = 0;
102
- const stack = [];
103
- const indices = new Map();
104
- const lowlink = new Map();
105
- const onStack = new Set();
106
- const sccs = [];
107
- const strongconnect = (v) => {
108
- indices.set(v.id, index);
109
- lowlink.set(v.id, index);
110
- index++;
111
- stack.push(v);
112
- onStack.add(v.id);
113
- for (const ref of v.outgoingReferences) {
114
- const w = this.graph.getNode(ref.targetNodeId);
115
- if (!w)
116
- continue;
117
- if (!indices.has(w.id)) {
118
- strongconnect(w);
119
- lowlink.set(v.id, Math.min(lowlink.get(v.id), lowlink.get(w.id)));
120
- }
121
- else if (onStack.has(w.id)) {
122
- lowlink.set(v.id, Math.min(lowlink.get(v.id), indices.get(w.id)));
123
- }
124
- }
125
- if (lowlink.get(v.id) === indices.get(v.id)) {
126
- const scc = [];
127
- let w;
128
- do {
129
- w = stack.pop();
130
- onStack.delete(w.id);
131
- scc.push(w);
132
- } while (w.id !== v.id);
133
- sccs.push(scc);
134
- }
135
- };
136
- for (const node of nodes) {
137
- if (!indices.has(node.id)) {
138
- strongconnect(node);
139
- }
140
- }
141
- return sccs;
142
- }
143
- }
144
- //# sourceMappingURL=topology-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"topology-manager.js","sourceRoot":"","sources":["../src/topology-manager.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts DELETED
@@ -1,265 +0,0 @@
1
- export type Confidence = "high" | "medium" | "low" | "info";
2
- export type FailOn = Confidence | "none";
3
- export type Severity = "error" | "warning" | "info";
4
- export type ParseStatus = "parsed" | "recovered" | "fallback";
5
- export type EdgeKind = "import" | "export-from" | "export-all" | "require" | "dynamic-literal" | "dynamic-pattern" | "unknown-dynamic";
6
- export interface Position {
7
- line: number;
8
- column: number;
9
- }
10
- export interface Range {
11
- start: Position;
12
- end: Position;
13
- }
14
- export interface ParseDiagnostic {
15
- message: string;
16
- file: string;
17
- location?: Range;
18
- recovered: boolean;
19
- }
20
- export interface ExportMember {
21
- name: string;
22
- location?: Range;
23
- }
24
- export interface ExportRecord {
25
- name: string;
26
- exportedAs: string;
27
- location?: Range;
28
- isDefault: boolean;
29
- isReExport: boolean;
30
- isWildcard: boolean;
31
- isTypeOnly?: boolean;
32
- isExternalContract?: boolean;
33
- localReferences?: string[];
34
- members?: ExportMember[];
35
- }
36
- export interface DependencyEdge {
37
- source: string;
38
- rawSpecifier: string;
39
- kind: EdgeKind;
40
- target?: string;
41
- location?: Range;
42
- importedNames: string[];
43
- dynamicPattern?: DynamicPattern;
44
- dynamicExpression?: string | undefined;
45
- resolution: "resolved" | "unresolved" | "external" | "unknown";
46
- isTypeOnly?: boolean;
47
- }
48
- export interface DynamicPattern {
49
- prefix: string;
50
- suffix: string;
51
- baseDirectory: string;
52
- candidates: string[];
53
- }
54
- export interface ModuleRecord {
55
- id: string;
56
- relativePath: string;
57
- parseStatus: ParseStatus;
58
- parseDiagnostics: ParseDiagnostic[];
59
- ast?: unknown;
60
- sourceText: string;
61
- exports: ExportRecord[];
62
- edges: DependencyEdge[];
63
- hasUnknownDynamicBoundary: boolean;
64
- hasParseError: boolean;
65
- hasUnresolvedCommonJsExports: boolean;
66
- scannedDirectories: string[];
67
- dynamicImportCandidates: DynamicImportCandidate[];
68
- localSymbolMap?: Record<string, string[]>;
69
- localTypeMap?: Record<string, string>;
70
- localReferences?: string[];
71
- }
72
- export interface WorkspacePackage {
73
- name: string;
74
- location: string;
75
- relativePath: string;
76
- manifestPath: string;
77
- dependencies: Set<string>;
78
- allDependencies: Set<string>;
79
- }
80
- export interface MonorepoGraph {
81
- rootPath: string;
82
- packageMap: Map<string, WorkspacePackage>;
83
- topologicalOrder: string[];
84
- }
85
- export interface StronglyConnectedComponent {
86
- id: number;
87
- modules: string[];
88
- isCycle: boolean;
89
- isReachable?: boolean;
90
- isMaybeReachable?: boolean;
91
- }
92
- export interface ConcolicVerificationResult {
93
- pathReached: boolean;
94
- executionTimeMs: number;
95
- logs: string[];
96
- }
97
- export interface CandidateBranch {
98
- file: string;
99
- line: number;
100
- instrumentedCode: string;
101
- seedInput: Record<string, any>;
102
- }
103
- export interface DynamicImportCandidate {
104
- file: string;
105
- line: number;
106
- column: number;
107
- expression: string;
108
- contextCode: string;
109
- }
110
- export interface Finding {
111
- rule: "unreachable-file" | "unused-export" | "unused-member" | "unreachable-statement" | "constant-condition" | "contradictory-guard" | "schema-impossible-guard" | "parse-recovery" | "unresolved-import" | "unknown-dynamic-import" | "no-entry-points" | "unreachable-dynamic-path" | "protected-contract";
112
- severity: Severity;
113
- confidence: Confidence;
114
- message: string;
115
- file: string;
116
- location?: Range | undefined;
117
- evidence: Record<string, unknown>;
118
- }
119
- export interface AnalyzerOptions {
120
- rootDir?: string;
121
- entry?: string[];
122
- extensions?: string[];
123
- ignore?: string[];
124
- reportUnusedExports?: boolean;
125
- schemaEnums?: Record<string, string[]>;
126
- externalContracts?: string[];
127
- failOn?: FailOn;
128
- json?: boolean;
129
- includeConventionalEntries?: boolean;
130
- skip3?: boolean;
131
- skip4?: boolean;
132
- verbose?: boolean;
133
- }
134
- export type RuleSeverity = "error" | "warning" | "off";
135
- export interface Config {
136
- rootDir?: string;
137
- entry?: string[];
138
- extensions?: string[];
139
- ignore?: string[];
140
- externalContracts?: string[];
141
- reportUnusedExports?: boolean;
142
- includeConventionalEntries?: boolean;
143
- failOn?: FailOn;
144
- json?: boolean;
145
- verbose?: boolean;
146
- layers?: {
147
- smtTimeoutMs?: number;
148
- isolateMemoryLimitMb?: number;
149
- enableConcolicProof?: boolean;
150
- skip3?: boolean;
151
- skip4?: boolean;
152
- };
153
- rules?: Record<string, RuleSeverity>;
154
- }
155
- export interface ResolvedOptions {
156
- rootDir: string;
157
- entry: string[];
158
- extensions: string[];
159
- ignore: string[];
160
- reportUnusedExports: boolean;
161
- schemaEnums: Record<string, string[]>;
162
- failOn: FailOn;
163
- json: boolean;
164
- includeConventionalEntries: boolean;
165
- monorepo?: MonorepoGraph;
166
- pathAliases: Map<string, string[]>;
167
- baseUrl?: string;
168
- externalContracts: string[];
169
- verbose: boolean;
170
- layers: {
171
- smtTimeoutMs: number;
172
- isolateMemoryLimitMb: number;
173
- enableConcolicProof: boolean;
174
- skip3: boolean;
175
- skip4: boolean;
176
- };
177
- rules: Record<string, RuleSeverity>;
178
- }
179
- export interface AnalysisSummary {
180
- filesDiscovered: number;
181
- filesParsed: number;
182
- filesRecovered: number;
183
- filesFallback: number;
184
- edges: number;
185
- entryPoints: number;
186
- stronglyConnectedComponents: number;
187
- cycles: number;
188
- findings: number;
189
- errors: number;
190
- warnings: number;
191
- }
192
- export interface AnalysisReport {
193
- version: string;
194
- rootDir: string;
195
- entryPoints: string[];
196
- summary: AnalysisSummary;
197
- findings: Finding[];
198
- modules: Array<{
199
- path: string;
200
- parseStatus: ParseStatus;
201
- exports: Array<{
202
- name: string;
203
- exportedAs: string;
204
- isDefault: boolean;
205
- isReExport: boolean;
206
- isWildcard: boolean;
207
- isTypeOnly?: boolean;
208
- isExternalContract?: boolean;
209
- }>;
210
- edges: Array<{
211
- kind: EdgeKind;
212
- specifier: string;
213
- target?: string;
214
- resolution: DependencyEdge["resolution"];
215
- }>;
216
- }>;
217
- components: Array<{
218
- id: number;
219
- modules: string[];
220
- isCycle: boolean;
221
- }>;
222
- }
223
- export interface AnalysisContext {
224
- options: ResolvedOptions;
225
- modules: Map<string, ModuleRecord>;
226
- entryPoints: Set<string>;
227
- reachable: Set<string>;
228
- maybeReachable: Set<string>;
229
- hasReachableUnknownDynamicBoundary: boolean;
230
- components: StronglyConnectedComponent[];
231
- usedExports: Set<string>;
232
- usedMembers: Set<string>;
233
- candidateBranches: CandidateBranch[];
234
- dynamicImportCandidates: DynamicImportCandidate[];
235
- monorepo?: MonorepoGraph;
236
- semanticGraph?: any;
237
- symbolicContracts?: Map<string, any>;
238
- }
239
- export interface PluginAdapter {
240
- getAst(fileId: string): any;
241
- getSymbol(name: string, fileId: string): any;
242
- getType(node: any): string | undefined;
243
- getDependencies(fileId: string): string[];
244
- getConfig(): ResolvedOptions;
245
- readFile(filename: string): Promise<string | null>;
246
- readJson(filename: string): Promise<any | null>;
247
- emitFinding(finding: Omit<Finding, "rule">): void;
248
- markAsUsed(fileId: string, symbol?: string): void;
249
- attachMetadata(node: any, key: string, value: any): void;
250
- }
251
- export interface PluginLifecycle {
252
- onProjectInit?(adapter: PluginAdapter): void | Promise<void>;
253
- onFileStart?(fileId: string, adapter: PluginAdapter): void | Promise<void>;
254
- onASTNode?(node: any, fileId: string, adapter: PluginAdapter): void;
255
- onAnalysisComplete?(adapter: PluginAdapter): void | Promise<void>;
256
- }
257
- export interface AnalyzerPlugin {
258
- name: string;
259
- version: string;
260
- enabled?: boolean;
261
- detect?(adapter: PluginAdapter): Promise<boolean>;
262
- lifecycle: PluginLifecycle;
263
- }
264
- export declare const CONFIDENCE_RANK: Record<FailOn, number>;
265
- export declare function defineConfig(config: Config): Config;
package/dist/types.js DELETED
@@ -1,11 +0,0 @@
1
- export const CONFIDENCE_RANK = {
2
- info: 0,
3
- low: 1,
4
- medium: 2,
5
- high: 3,
6
- none: -1, // A value for 'none' to allow comparison
7
- };
8
- export function defineConfig(config) {
9
- return config;
10
- }
11
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAwTA,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC,CAAC,EAAE,yCAAyC;CACpD,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { MonorepoGraph } from './types.js';
2
- /**
3
- * Resolves all sub-packages in a Monorepo workspace.
4
- * Uses POSIX-style path logic for internal calculations to support Windows.
5
- */
6
- export declare function buildMonorepoTopology(rootPath: string): Promise<MonorepoGraph>;
package/dist/workspace.js DELETED
@@ -1,105 +0,0 @@
1
- import path from 'pathe';
2
- import fs from 'node:fs';
3
- import fg from 'fast-glob';
4
- import * as yaml from 'js-yaml';
5
- import { normalizeAbsolute, readJsonFile } from './fs-utils.js';
6
- /**
7
- * Resolves all sub-packages in a Monorepo workspace.
8
- * Uses POSIX-style path logic for internal calculations to support Windows.
9
- */
10
- export async function buildMonorepoTopology(rootPath) {
11
- const absoluteRoot = normalizeAbsolute(rootPath);
12
- const packageMap = new Map();
13
- const packageGlobs = [];
14
- // 1. Detect pnpm-workspace.yaml
15
- const pnpmWorkspacePath = path.join(absoluteRoot, 'pnpm-workspace.yaml');
16
- if (fs.existsSync(pnpmWorkspacePath)) {
17
- try {
18
- const content = fs.readFileSync(pnpmWorkspacePath, 'utf-8');
19
- const doc = yaml.load(content);
20
- if (doc?.packages && Array.isArray(doc.packages)) {
21
- packageGlobs.push(...doc.packages);
22
- }
23
- }
24
- catch (e) {
25
- // Ignore parse warnings on malformed workspace configs
26
- }
27
- }
28
- // 2. Detect Yarn/NPM workspaces in package.json
29
- const rootPackageJsonPath = path.join(absoluteRoot, 'package.json');
30
- if (fs.existsSync(rootPackageJsonPath)) {
31
- const rootManifest = await readJsonFile(rootPackageJsonPath);
32
- if (rootManifest) {
33
- if (Array.isArray(rootManifest.workspaces)) {
34
- packageGlobs.push(...rootManifest.workspaces);
35
- }
36
- else if (rootManifest.workspaces?.packages && Array.isArray(rootManifest.workspaces.packages)) {
37
- packageGlobs.push(...rootManifest.workspaces.packages);
38
- }
39
- }
40
- }
41
- // Default to common patterns if nothing found
42
- if (packageGlobs.length === 0) {
43
- packageGlobs.push('packages/*', 'apps/*');
44
- }
45
- // 3. Find all package.json files matching the globs
46
- const manifestFiles = await fg(packageGlobs.map(g => path.posix.join(g, 'package.json')), { cwd: absoluteRoot, absolute: true, ignore: ['**/node_modules/**'] });
47
- for (const manifestPath of manifestFiles) {
48
- const manifest = await readJsonFile(manifestPath);
49
- if (!manifest || !manifest.name)
50
- continue;
51
- const pkgName = manifest.name;
52
- const location = normalizeAbsolute(path.dirname(manifestPath));
53
- const allDeps = new Set([
54
- ...Object.keys(manifest.dependencies || {}),
55
- ...Object.keys(manifest.devDependencies || {}),
56
- ...Object.keys(manifest.peerDependencies || {}),
57
- ]);
58
- packageMap.set(pkgName, {
59
- name: pkgName,
60
- location,
61
- relativePath: path.posix.relative(absoluteRoot, location),
62
- manifestPath: normalizeAbsolute(manifestPath),
63
- dependencies: new Set(),
64
- allDependencies: allDeps,
65
- });
66
- }
67
- // 4. Resolve internal workspace dependencies
68
- const internalPackageNames = new Set(packageMap.keys());
69
- for (const pkg of packageMap.values()) {
70
- for (const depName of pkg.allDependencies) {
71
- if (internalPackageNames.has(depName)) {
72
- pkg.dependencies.add(depName);
73
- }
74
- }
75
- }
76
- // 5. Topological Sort
77
- const topologicalOrder = [];
78
- const visited = new Set();
79
- const visiting = new Set();
80
- function visit(name) {
81
- if (visiting.has(name))
82
- return;
83
- if (visited.has(name))
84
- return;
85
- visiting.add(name);
86
- const pkg = packageMap.get(name);
87
- if (pkg) {
88
- for (const dep of pkg.dependencies) {
89
- visit(dep);
90
- }
91
- }
92
- visiting.delete(name);
93
- visited.add(name);
94
- topologicalOrder.push(name);
95
- }
96
- for (const name of packageMap.keys()) {
97
- visit(name);
98
- }
99
- return {
100
- rootPath: absoluteRoot,
101
- packageMap,
102
- topologicalOrder,
103
- };
104
- }
105
- //# sourceMappingURL=workspace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}