@kernlang/review 2.0.0 → 3.1.0
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.
- package/dist/concept-rules/boundary-mutation.d.ts +13 -0
- package/dist/concept-rules/boundary-mutation.js +40 -0
- package/dist/concept-rules/boundary-mutation.js.map +1 -0
- package/dist/concept-rules/ignored-error.d.ts +13 -0
- package/dist/concept-rules/ignored-error.js +40 -0
- package/dist/concept-rules/ignored-error.js.map +1 -0
- package/dist/concept-rules/illegal-dependency.d.ts +13 -0
- package/dist/concept-rules/illegal-dependency.js +49 -0
- package/dist/concept-rules/illegal-dependency.js.map +1 -0
- package/dist/concept-rules/index.d.ts +15 -0
- package/dist/concept-rules/index.js +27 -0
- package/dist/concept-rules/index.js.map +1 -0
- package/dist/concept-rules/unguarded-effect.d.ts +13 -0
- package/dist/concept-rules/unguarded-effect.js +58 -0
- package/dist/concept-rules/unguarded-effect.js.map +1 -0
- package/dist/concept-rules/unrecovered-effect.d.ts +13 -0
- package/dist/concept-rules/unrecovered-effect.js +61 -0
- package/dist/concept-rules/unrecovered-effect.js.map +1 -0
- package/dist/confidence.d.ts +92 -0
- package/dist/confidence.js +263 -0
- package/dist/confidence.js.map +1 -0
- package/dist/differ.js +4 -2
- package/dist/differ.js.map +1 -1
- package/dist/external-tools.js +7 -3
- package/dist/external-tools.js.map +1 -1
- package/dist/file-role.d.ts +10 -0
- package/dist/file-role.js +80 -0
- package/dist/file-role.js.map +1 -0
- package/dist/graph.d.ts +11 -0
- package/dist/graph.js +152 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +46 -3
- package/dist/index.js +313 -27
- package/dist/index.js.map +1 -1
- package/dist/inferrer.js +123 -25
- package/dist/inferrer.js.map +1 -1
- package/dist/kern-lint.d.ts +18 -0
- package/dist/kern-lint.js +24 -0
- package/dist/kern-lint.js.map +1 -0
- package/dist/llm-bridge.d.ts +42 -0
- package/dist/llm-bridge.js +176 -0
- package/dist/llm-bridge.js.map +1 -0
- package/dist/llm-review.d.ts +8 -1
- package/dist/llm-review.js +20 -7
- package/dist/llm-review.js.map +1 -1
- package/dist/mappers/ts-concepts.d.ts +9 -0
- package/dist/mappers/ts-concepts.js +518 -0
- package/dist/mappers/ts-concepts.js.map +1 -0
- package/dist/quality-rules.d.ts +3 -3
- package/dist/quality-rules.js +3 -11
- package/dist/quality-rules.js.map +1 -1
- package/dist/reporter.d.ts +19 -3
- package/dist/reporter.js +232 -20
- package/dist/reporter.js.map +1 -1
- package/dist/rules/base.js +167 -15
- package/dist/rules/base.js.map +1 -1
- package/dist/rules/confidence.d.ts +37 -0
- package/dist/rules/confidence.js +159 -0
- package/dist/rules/confidence.js.map +1 -0
- package/dist/rules/dead-logic.d.ts +13 -0
- package/dist/rules/dead-logic.js +393 -0
- package/dist/rules/dead-logic.js.map +1 -0
- package/dist/rules/express.js +69 -2
- package/dist/rules/express.js.map +1 -1
- package/dist/rules/ground-layer.d.ts +23 -0
- package/dist/rules/ground-layer.js +132 -0
- package/dist/rules/ground-layer.js.map +1 -0
- package/dist/rules/index.d.ts +1 -1
- package/dist/rules/index.js +8 -2
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/kern-source.d.ts +16 -0
- package/dist/rules/kern-source.js +726 -0
- package/dist/rules/kern-source.js.map +1 -0
- package/dist/rules/nextjs.js +38 -10
- package/dist/rules/nextjs.js.map +1 -1
- package/dist/rules/null-safety.d.ts +12 -0
- package/dist/rules/null-safety.js +123 -0
- package/dist/rules/null-safety.js.map +1 -0
- package/dist/rules/react.js +64 -1
- package/dist/rules/react.js.map +1 -1
- package/dist/rules/security-v2.d.ts +12 -0
- package/dist/rules/security-v2.js +415 -0
- package/dist/rules/security-v2.js.map +1 -0
- package/dist/rules/security-v3.d.ts +12 -0
- package/dist/rules/security-v3.js +397 -0
- package/dist/rules/security-v3.js.map +1 -0
- package/dist/rules/security-v4.d.ts +22 -0
- package/dist/rules/security-v4.js +688 -0
- package/dist/rules/security-v4.js.map +1 -0
- package/dist/rules/security.d.ts +12 -0
- package/dist/rules/security.js +286 -0
- package/dist/rules/security.js.map +1 -0
- package/dist/rules/utils.d.ts +7 -0
- package/dist/rules/utils.js +21 -0
- package/dist/rules/utils.js.map +1 -0
- package/dist/rules/vue.js +1 -1
- package/dist/rules/vue.js.map +1 -1
- package/dist/spec-checker.d.ts +83 -0
- package/dist/spec-checker.js +405 -0
- package/dist/spec-checker.js.map +1 -0
- package/dist/suppression/apply-suppression.d.ts +17 -0
- package/dist/suppression/apply-suppression.js +94 -0
- package/dist/suppression/apply-suppression.js.map +1 -0
- package/dist/suppression/index.d.ts +6 -0
- package/dist/suppression/index.js +6 -0
- package/dist/suppression/index.js.map +1 -0
- package/dist/suppression/parse-directives.d.ts +25 -0
- package/dist/suppression/parse-directives.js +161 -0
- package/dist/suppression/parse-directives.js.map +1 -0
- package/dist/suppression/types.d.ts +32 -0
- package/dist/suppression/types.js +5 -0
- package/dist/suppression/types.js.map +1 -0
- package/dist/taint.d.ts +115 -0
- package/dist/taint.js +1052 -0
- package/dist/taint.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.js.map +1 -1
- package/package.json +7 -4
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confidence Graph — Layer 5 propagation engine
|
|
3
|
+
*
|
|
4
|
+
* Builds a directed graph of confidence dependencies between KERN IR nodes,
|
|
5
|
+
* then propagates confidence values using Kahn's topological sort.
|
|
6
|
+
*
|
|
7
|
+
* Supports single-file and multi-file graphs. Cross-file resolution allows
|
|
8
|
+
* `confidence=from:authMethod` to resolve across .kern files.
|
|
9
|
+
*
|
|
10
|
+
* Strategies:
|
|
11
|
+
* - literal: confidence=0.7 — direct value
|
|
12
|
+
* - from:X — inherits from one source (min strategy)
|
|
13
|
+
* - min:X,Y — inherits from multiple sources (weakest link)
|
|
14
|
+
*/
|
|
15
|
+
// ── Helpers ──────────────────────────────────────────────────────────────
|
|
16
|
+
function props(node) {
|
|
17
|
+
return node.props || {};
|
|
18
|
+
}
|
|
19
|
+
function children(node, type) {
|
|
20
|
+
const c = node.children || [];
|
|
21
|
+
return type ? c.filter(n => n.type === type) : c;
|
|
22
|
+
}
|
|
23
|
+
function nodeKey(node) {
|
|
24
|
+
const name = props(node).name;
|
|
25
|
+
if (name)
|
|
26
|
+
return name;
|
|
27
|
+
const line = node.loc?.line ?? 0;
|
|
28
|
+
return `${node.type}:${line}`;
|
|
29
|
+
}
|
|
30
|
+
// ── Parse ────────────────────────────────────────────────────────────────
|
|
31
|
+
/** Parse a raw confidence prop value into a spec. Returns undefined for malformed. */
|
|
32
|
+
export function parseConfidence(raw) {
|
|
33
|
+
if (raw === undefined || raw === null)
|
|
34
|
+
return undefined;
|
|
35
|
+
const str = String(raw).trim();
|
|
36
|
+
if (str === '')
|
|
37
|
+
return undefined;
|
|
38
|
+
// literal number: "0.7"
|
|
39
|
+
const num = parseFloat(str);
|
|
40
|
+
if (!isNaN(num) && /^[0-9]*\.?[0-9]+$/.test(str)) {
|
|
41
|
+
if (num < 0 || num > 1)
|
|
42
|
+
return undefined;
|
|
43
|
+
return { kind: 'literal', value: num, strategy: 'min' };
|
|
44
|
+
}
|
|
45
|
+
// from:nodeName — inherits from one source
|
|
46
|
+
if (str.startsWith('from:')) {
|
|
47
|
+
const source = str.slice(5).trim();
|
|
48
|
+
if (!source)
|
|
49
|
+
return undefined;
|
|
50
|
+
return { kind: 'inherited', strategy: 'min', sources: [source] };
|
|
51
|
+
}
|
|
52
|
+
// min:a,b,c — inherits from multiple
|
|
53
|
+
if (str.startsWith('min:')) {
|
|
54
|
+
const sources = str.slice(4).split(',').map(s => s.trim()).filter(Boolean);
|
|
55
|
+
if (sources.length === 0)
|
|
56
|
+
return undefined;
|
|
57
|
+
return { kind: 'inherited', strategy: 'min', sources };
|
|
58
|
+
}
|
|
59
|
+
// Anything else (e.g. "high", "auto") is malformed
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
// ── Internal helpers (shared by single-file + multi-file) ────────────────
|
|
63
|
+
/** Pass 1: Register nodes with confidence props into the graph map. */
|
|
64
|
+
function registerNodes(irNodes, nodes, sourceFile) {
|
|
65
|
+
const duplicates = [];
|
|
66
|
+
for (const node of irNodes) {
|
|
67
|
+
const conf = props(node).confidence;
|
|
68
|
+
if (conf === undefined)
|
|
69
|
+
continue;
|
|
70
|
+
const spec = parseConfidence(conf);
|
|
71
|
+
if (!spec)
|
|
72
|
+
continue;
|
|
73
|
+
const key = nodeKey(node);
|
|
74
|
+
// Check for duplicate names across files
|
|
75
|
+
if (nodes.has(key) && sourceFile) {
|
|
76
|
+
const existing = nodes.get(key);
|
|
77
|
+
if (existing.sourceFile && existing.sourceFile !== sourceFile) {
|
|
78
|
+
duplicates.push({ name: key, files: [existing.sourceFile, sourceFile] });
|
|
79
|
+
}
|
|
80
|
+
// Last-writer-wins (deterministic by file sort order)
|
|
81
|
+
}
|
|
82
|
+
const needsChildren = children(node, 'needs');
|
|
83
|
+
const needsEntries = needsChildren.map(n => {
|
|
84
|
+
const np = props(n);
|
|
85
|
+
const wouldRaise = np['would-raise-to'];
|
|
86
|
+
const parsed = wouldRaise !== undefined ? parseFloat(wouldRaise) : undefined;
|
|
87
|
+
const resolved = np.resolved === 'true' || np.resolved === true;
|
|
88
|
+
return {
|
|
89
|
+
what: np.what || np.description || '',
|
|
90
|
+
wouldRaiseTo: (parsed !== undefined && !isNaN(parsed) && parsed >= 0 && parsed <= 1) ? parsed : undefined,
|
|
91
|
+
resolved,
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
nodes.set(key, {
|
|
95
|
+
name: key,
|
|
96
|
+
nodeRef: { type: node.type, line: node.loc?.line ?? 0 },
|
|
97
|
+
...(sourceFile ? { sourceFile } : {}),
|
|
98
|
+
spec,
|
|
99
|
+
resolved: null,
|
|
100
|
+
dependsOn: spec.sources ? [...spec.sources] : [],
|
|
101
|
+
dependedBy: [],
|
|
102
|
+
needs: needsEntries,
|
|
103
|
+
inCycle: false,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return duplicates;
|
|
107
|
+
}
|
|
108
|
+
/** Pass 2: Wire reverse edges (dependedBy). */
|
|
109
|
+
function wireEdges(nodes) {
|
|
110
|
+
// Reset dependedBy (important for multi-file where registerNodes runs multiple times)
|
|
111
|
+
for (const cnode of nodes.values()) {
|
|
112
|
+
cnode.dependedBy = [];
|
|
113
|
+
}
|
|
114
|
+
for (const [key, cnode] of nodes) {
|
|
115
|
+
for (const dep of cnode.dependsOn) {
|
|
116
|
+
const target = nodes.get(dep);
|
|
117
|
+
if (target) {
|
|
118
|
+
target.dependedBy.push(key);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/** Pass 3: Kahn's algorithm for topological sort + cycle detection. */
|
|
124
|
+
function kahnSort(nodes) {
|
|
125
|
+
const inDegree = new Map();
|
|
126
|
+
for (const [key, cnode] of nodes) {
|
|
127
|
+
const validDeps = cnode.dependsOn.filter(d => nodes.has(d));
|
|
128
|
+
inDegree.set(key, validDeps.length);
|
|
129
|
+
}
|
|
130
|
+
const queue = [];
|
|
131
|
+
for (const [key, deg] of inDegree) {
|
|
132
|
+
if (deg === 0)
|
|
133
|
+
queue.push(key);
|
|
134
|
+
}
|
|
135
|
+
const topoOrder = [];
|
|
136
|
+
while (queue.length > 0) {
|
|
137
|
+
const current = queue.shift();
|
|
138
|
+
topoOrder.push(current);
|
|
139
|
+
const cnode = nodes.get(current);
|
|
140
|
+
for (const dependent of cnode.dependedBy) {
|
|
141
|
+
const deg = inDegree.get(dependent);
|
|
142
|
+
inDegree.set(dependent, deg - 1);
|
|
143
|
+
if (deg - 1 === 0)
|
|
144
|
+
queue.push(dependent);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Detect cycles: any node not in topoOrder is in a cycle
|
|
148
|
+
const cycles = [];
|
|
149
|
+
const inTopo = new Set(topoOrder);
|
|
150
|
+
const cycleNodes = [...nodes.keys()].filter(k => !inTopo.has(k));
|
|
151
|
+
if (cycleNodes.length > 0) {
|
|
152
|
+
for (const cn of cycleNodes) {
|
|
153
|
+
nodes.get(cn).inCycle = true;
|
|
154
|
+
}
|
|
155
|
+
cycles.push(cycleNodes);
|
|
156
|
+
}
|
|
157
|
+
return { topoOrder, cycles };
|
|
158
|
+
}
|
|
159
|
+
// ── Build Graph (single-file) ────────────────────────────────────────────
|
|
160
|
+
/** Build confidence graph from flat list of IR nodes. O(n). */
|
|
161
|
+
export function buildConfidenceGraph(irNodes) {
|
|
162
|
+
const nodes = new Map();
|
|
163
|
+
registerNodes(irNodes, nodes);
|
|
164
|
+
wireEdges(nodes);
|
|
165
|
+
const { topoOrder, cycles } = kahnSort(nodes);
|
|
166
|
+
propagateConfidence({ nodes, topoOrder, cycles });
|
|
167
|
+
return { nodes, topoOrder, cycles };
|
|
168
|
+
}
|
|
169
|
+
// ── Build Graph (multi-file) ─────────────────────────────────────────────
|
|
170
|
+
/** Build confidence graph from multiple .kern files. Resolves cross-file from: references. */
|
|
171
|
+
export function buildMultiFileConfidenceGraph(fileMap) {
|
|
172
|
+
const nodes = new Map();
|
|
173
|
+
const allDuplicates = [];
|
|
174
|
+
// Sort files for deterministic last-writer-wins
|
|
175
|
+
const sortedFiles = [...fileMap.entries()].sort((a, b) => a[0].localeCompare(b[0]));
|
|
176
|
+
for (const [filePath, irNodes] of sortedFiles) {
|
|
177
|
+
const dups = registerNodes(irNodes, nodes, filePath);
|
|
178
|
+
allDuplicates.push(...dups);
|
|
179
|
+
}
|
|
180
|
+
wireEdges(nodes);
|
|
181
|
+
const { topoOrder, cycles } = kahnSort(nodes);
|
|
182
|
+
propagateConfidence({ nodes, topoOrder, cycles });
|
|
183
|
+
return { nodes, topoOrder, cycles, duplicates: allDuplicates };
|
|
184
|
+
}
|
|
185
|
+
// ── Propagation ──────────────────────────────────────────────────────────
|
|
186
|
+
/** Resolve base confidence for a literal node, applying resolved needs. */
|
|
187
|
+
export function resolveBaseConfidence(node) {
|
|
188
|
+
const declared = node.spec.value ?? 0;
|
|
189
|
+
// Apply resolved needs: max(declared, max(...resolvedNeeds.map(n => n.wouldRaiseTo)))
|
|
190
|
+
let best = declared;
|
|
191
|
+
for (const need of node.needs) {
|
|
192
|
+
if (need.resolved && need.wouldRaiseTo !== undefined) {
|
|
193
|
+
best = Math.max(best, need.wouldRaiseTo);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return best;
|
|
197
|
+
}
|
|
198
|
+
/** Propagate confidence values through the graph in topological order. */
|
|
199
|
+
export function propagateConfidence(graph) {
|
|
200
|
+
for (const key of graph.topoOrder) {
|
|
201
|
+
const cnode = graph.nodes.get(key);
|
|
202
|
+
if (cnode.spec.kind === 'literal') {
|
|
203
|
+
cnode.resolved = resolveBaseConfidence(cnode);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// Inherited: resolve from sources using min strategy
|
|
207
|
+
const sources = cnode.spec.sources || [];
|
|
208
|
+
const values = [];
|
|
209
|
+
for (const src of sources) {
|
|
210
|
+
const srcNode = graph.nodes.get(src);
|
|
211
|
+
if (srcNode && srcNode.resolved !== null) {
|
|
212
|
+
values.push(srcNode.resolved);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
cnode.resolved = values.length > 0 ? Math.min(...values) : null;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// ── Serialization ────────────────────────────────────────────────────────
|
|
220
|
+
/** Serialize a confidence graph (strips Map, uses arrays). */
|
|
221
|
+
export function serializeGraph(graph) {
|
|
222
|
+
const isMulti = 'duplicates' in graph;
|
|
223
|
+
const nodes = [...graph.nodes.values()].map(n => ({
|
|
224
|
+
name: n.name,
|
|
225
|
+
nodeRef: n.nodeRef,
|
|
226
|
+
...(n.sourceFile ? { sourceFile: n.sourceFile } : {}),
|
|
227
|
+
spec: n.spec,
|
|
228
|
+
resolved: n.resolved,
|
|
229
|
+
dependsOn: n.dependsOn,
|
|
230
|
+
needs: n.needs,
|
|
231
|
+
inCycle: n.inCycle,
|
|
232
|
+
}));
|
|
233
|
+
return {
|
|
234
|
+
nodes,
|
|
235
|
+
topoOrder: graph.topoOrder,
|
|
236
|
+
cycles: graph.cycles,
|
|
237
|
+
...(isMulti ? { duplicates: graph.duplicates } : {}),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/** Compute confidence summary bands. */
|
|
241
|
+
export function computeConfidenceSummary(graph) {
|
|
242
|
+
let high = 0, medium = 0, low = 0, unresolved = 0, unresolvedNeeds = 0;
|
|
243
|
+
for (const cnode of graph.nodes.values()) {
|
|
244
|
+
if (cnode.resolved === null) {
|
|
245
|
+
unresolved++;
|
|
246
|
+
}
|
|
247
|
+
else if (cnode.resolved > 0.9) {
|
|
248
|
+
high++;
|
|
249
|
+
}
|
|
250
|
+
else if (cnode.resolved >= 0.7) {
|
|
251
|
+
medium++;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
low++;
|
|
255
|
+
}
|
|
256
|
+
for (const need of cnode.needs) {
|
|
257
|
+
if (!need.resolved)
|
|
258
|
+
unresolvedNeeds++;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return { high, medium, low, unresolved, unresolvedNeeds };
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=confidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence.js","sourceRoot":"","sources":["../src/confidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAuEH,4EAA4E;AAE5E,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAa;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC9B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAA0B,CAAC;IACpD,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;IACjC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,4EAA4E;AAE5E,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAEjC,wBAAwB;IACxB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;IAED,2CAA2C;IAC3C,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IACnE,CAAC;IAED,qCAAqC;IACrC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACzD,CAAC;IAED,mDAAmD;IACnD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,4EAA4E;AAE5E,uEAAuE;AACvE,SAAS,aAAa,CACpB,OAAiB,EACjB,KAAkC,EAClC,UAAmB;IAEnB,MAAM,UAAU,GAAyB,EAAE,CAAC;IAE5C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAEjC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAE1B,yCAAyC;QACzC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC9D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,sDAAsD;QACxD,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAiB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACvD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAuB,CAAC;YAC9D,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7E,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC;YAChE,OAAO;gBACL,IAAI,EAAE,EAAE,CAAC,IAAc,IAAI,EAAE,CAAC,WAAqB,IAAI,EAAE;gBACzD,YAAY,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACzG,QAAQ;aACT,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YACb,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE;YACvD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,IAAI;YACJ,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YAChD,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,+CAA+C;AAC/C,SAAS,SAAS,CAAC,KAAkC;IACnD,sFAAsF;IACtF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;IACxB,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,SAAS,QAAQ,CAAC,KAAkC;IAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;QAClC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;YACrC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,OAAO,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,4EAA4E;AAE5E,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB,CAAC,OAAiB;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAChD,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,SAAS,CAAC,KAAK,CAAC,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,mBAAmB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,4EAA4E;AAE5E,8FAA8F;AAC9F,MAAM,UAAU,6BAA6B,CAAC,OAA8B;IAC1E,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAChD,MAAM,aAAa,GAAyB,EAAE,CAAC;IAE/C,gDAAgD;IAChD,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrD,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,SAAS,CAAC,KAAK,CAAC,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,mBAAmB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAElD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AACjE,CAAC;AAED,4EAA4E;AAE5E,2EAA2E;AAC3E,MAAM,UAAU,qBAAqB,CAAC,IAAoB;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAEtC,sFAAsF;IACtF,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACrD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QAEpC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAClC,KAAK,CAAC,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,qDAAqD;YACrD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YACzC,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YACD,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,CAAC;IACH,CAAC;AACH,CAAC;AAED,4EAA4E;AAE5E,8DAA8D;AAC9D,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,MAAM,OAAO,GAAG,YAAY,IAAI,KAAK,CAAC;IACtC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,KAAK;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAG,KAAkC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC;AACJ,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,wBAAwB,CAAC,KAAsB;IAC7D,IAAI,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC;IAEvE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC5B,UAAU,EAAE,CAAC;QACf,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC;YAChC,IAAI,EAAE,CAAC;QACT,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC;YACjC,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,GAAG,EAAE,CAAC;QACR,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,eAAe,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;AAC5D,CAAC"}
|
package/dist/differ.js
CHANGED
|
@@ -123,8 +123,10 @@ export function structuralDiff(originalSource, inferred, filePath = 'input.ts')
|
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
catch {
|
|
127
|
-
// Recompilation failed —
|
|
126
|
+
catch (_err) {
|
|
127
|
+
// Recompilation failed — inference was incomplete, skip this construct
|
|
128
|
+
// (e.g., partial machine nodes, unresolvable template references)
|
|
129
|
+
void _err; // intentional: roundtrip diff is best-effort
|
|
128
130
|
}
|
|
129
131
|
}
|
|
130
132
|
return findings;
|
package/dist/differ.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"differ.js","sourceRoot":"","sources":["../src/differ.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,SAAS,IAAI,CAAC,IAAY,EAAE,IAAY,EAAE,GAAG,GAAG,CAAC;IAC/C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,cAAsB,EACtB,QAAuB,EACvB,QAAQ,GAAG,UAAU;IAErB,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;IAExC,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,SAAS,GAAG,CAAC,OAAO;YACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YACvB,OAAO,KAAK,IAAI,CAAC;QAEnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,oBAAoB,KAAK,CAAC;gBAAE,cAAc,GAAG,CAAC,CAAC;YACnD,oBAAoB,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,YAAY;oBACpB,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,WAAW;oBACrB,OAAO,EAAE,GAAG,oBAAoB,sBAAsB,cAAc,IAAI,cAAc,GAAG,oBAAoB,GAAG,CAAC,6BAA6B;oBAC9I,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;oBAC3C,WAAW,EAAE,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;iBAChE,CAAC,CAAC;YACL,CAAC;YACD,oBAAoB,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,GAAG,oBAAoB,sBAAsB,cAAc,IAAI,cAAc,GAAG,oBAAoB,GAAG,CAAC,6BAA6B;YAC9I,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;YAC3C,WAAW,EAAE,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;IAED,yDAAyD;IACzD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YAC/D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC;YACxE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,sBAAsB;oBAC9B,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,QAAQ,MAAM,CAAC,MAAM,sEAAsE;oBACnI,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC;oBACxC,WAAW,EAAE,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;oBACtE,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,cAAc;oBACtB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,8BAA8B;oBACrE,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC;oBACxC,WAAW,EAAE,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC9D,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAEvC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEtC,MAAM,iBAAiB,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;YACtD,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,CAAC;YAEhE,IAAI,KAAK,GAAG,iBAAiB,GAAG,GAAG,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,kBAAkB;oBAC1B,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,+BAA+B,iBAAiB,wBAAwB,mBAAmB,QAAQ;oBACjI,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC;oBACxC,WAAW,EAAE,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;oBAClE,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,
|
|
1
|
+
{"version":3,"file":"differ.js","sourceRoot":"","sources":["../src/differ.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,SAAS,IAAI,CAAC,IAAY,EAAE,IAAY,EAAE,GAAG,GAAG,CAAC;IAC/C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,cAAsB,EACtB,QAAuB,EACvB,QAAQ,GAAG,UAAU;IAErB,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;IAExC,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,MAAM,SAAS,GAAG,CAAC,OAAO;YACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YACvB,OAAO,KAAK,IAAI,CAAC;QAEnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,oBAAoB,KAAK,CAAC;gBAAE,cAAc,GAAG,CAAC,CAAC;YACnD,oBAAoB,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,YAAY;oBACpB,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,WAAW;oBACrB,OAAO,EAAE,GAAG,oBAAoB,sBAAsB,cAAc,IAAI,cAAc,GAAG,oBAAoB,GAAG,CAAC,6BAA6B;oBAC9I,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;oBAC3C,WAAW,EAAE,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;iBAChE,CAAC,CAAC;YACL,CAAC;YACD,oBAAoB,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,GAAG,oBAAoB,sBAAsB,cAAc,IAAI,cAAc,GAAG,oBAAoB,GAAG,CAAC,6BAA6B;YAC9I,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC;YAC3C,WAAW,EAAE,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;IAED,yDAAyD;IACzD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YAC/D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC;YACxE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,sBAAsB;oBAC9B,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,QAAQ,MAAM,CAAC,MAAM,sEAAsE;oBACnI,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC;oBACxC,WAAW,EAAE,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;oBACtE,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,cAAc;oBACtB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,8BAA8B;oBACrE,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC;oBACxC,WAAW,EAAE,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC9D,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAEvC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEtC,MAAM,iBAAiB,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;YACtD,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,CAAC;YAEhE,IAAI,KAAK,GAAG,iBAAiB,GAAG,GAAG,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,kBAAkB;oBAC1B,QAAQ,EAAE,MAAM;oBAChB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,+BAA+B,iBAAiB,wBAAwB,mBAAmB,QAAQ;oBACjI,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC;oBACxC,WAAW,EAAE,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;oBAClE,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,IAAI,EAAE,CAAC;YACd,uEAAuE;YACvE,kEAAkE;YAClE,KAAK,IAAI,CAAC,CAAC,6CAA6C;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/external-tools.js
CHANGED
|
@@ -125,8 +125,10 @@ export function runTSCDiagnostics(project) {
|
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
-
catch {
|
|
129
|
-
//
|
|
128
|
+
catch (err) {
|
|
129
|
+
// ts-morph diagnostics can fail on malformed source — return what we have
|
|
130
|
+
if (process.env.KERN_DEBUG)
|
|
131
|
+
console.error('tsc diagnostics error:', err.message);
|
|
130
132
|
}
|
|
131
133
|
return findings;
|
|
132
134
|
}
|
|
@@ -145,7 +147,9 @@ export function runTSCDiagnosticsFromPaths(filePaths) {
|
|
|
145
147
|
try {
|
|
146
148
|
project.addSourceFileAtPath(fp);
|
|
147
149
|
}
|
|
148
|
-
catch {
|
|
150
|
+
catch (_e) {
|
|
151
|
+
void _e; // intentional: skip unreadable/unparseable files
|
|
152
|
+
}
|
|
149
153
|
}
|
|
150
154
|
return runTSCDiagnostics(project);
|
|
151
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-tools.js","sourceRoot":"","sources":["../src/external-tools.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"external-tools.js","sourceRoot":"","sources":["../src/external-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-role classifier — determines whether a source file is runtime code,
|
|
3
|
+
* codegen, a rule definition, an example, a test, or a barrel re-export.
|
|
4
|
+
*
|
|
5
|
+
* Used to gate rules: e.g. server-hook only fires on 'runtime' files.
|
|
6
|
+
*/
|
|
7
|
+
import { type SourceFile } from 'ts-morph';
|
|
8
|
+
import type { FileRole } from './types.js';
|
|
9
|
+
/** Classify a source file's role based on AST evidence and path heuristics. */
|
|
10
|
+
export declare function classifyFileRole(sourceFile: SourceFile, filePath: string): FileRole;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-role classifier — determines whether a source file is runtime code,
|
|
3
|
+
* codegen, a rule definition, an example, a test, or a barrel re-export.
|
|
4
|
+
*
|
|
5
|
+
* Used to gate rules: e.g. server-hook only fires on 'runtime' files.
|
|
6
|
+
*/
|
|
7
|
+
import { SyntaxKind } from 'ts-morph';
|
|
8
|
+
/** Classify a source file's role based on AST evidence and path heuristics. */
|
|
9
|
+
export function classifyFileRole(sourceFile, filePath) {
|
|
10
|
+
// 1. Test files
|
|
11
|
+
if (/\.(test|spec)\.(tsx?|jsx?)$/.test(filePath) || /\/tests?\//.test(filePath) || /^test_/.test(filePath.split('/').pop() || '')) {
|
|
12
|
+
return 'test';
|
|
13
|
+
}
|
|
14
|
+
// 2. Barrel / re-export only files
|
|
15
|
+
if (isBarrelFile(sourceFile)) {
|
|
16
|
+
return 'barrel';
|
|
17
|
+
}
|
|
18
|
+
// 3. Path-based heuristics (strong signals)
|
|
19
|
+
const lower = filePath.toLowerCase();
|
|
20
|
+
if (/\/(codegen|generated|__generated__|gen)\//i.test(lower) || /\/codegen-/.test(lower)) {
|
|
21
|
+
return 'codegen';
|
|
22
|
+
}
|
|
23
|
+
if (/\/rules?\//i.test(lower) && /\/review\//.test(lower)) {
|
|
24
|
+
return 'rule-definition';
|
|
25
|
+
}
|
|
26
|
+
const basename = lower.split('/').pop() || '';
|
|
27
|
+
if (/\/examples?\//i.test(lower) || /\/fixtures?\//i.test(lower) || /\/preview-/.test(basename) || /(?:^|[-_.])examples?\.(tsx?|jsx?)$/.test(basename)) {
|
|
28
|
+
return 'example';
|
|
29
|
+
}
|
|
30
|
+
// 4. Content markers
|
|
31
|
+
const fullText = sourceFile.getFullText();
|
|
32
|
+
if (/\/\/\s*@generated/i.test(fullText) || /\/\/\s*Generated by/i.test(fullText) || /\/\/\s*Auto-generated/i.test(fullText)) {
|
|
33
|
+
return 'codegen';
|
|
34
|
+
}
|
|
35
|
+
// 5. AST evidence: file produces string output containing JSX/hook patterns = codegen
|
|
36
|
+
if (hasCodegenStringPatterns(sourceFile)) {
|
|
37
|
+
return 'codegen';
|
|
38
|
+
}
|
|
39
|
+
// 6. Default
|
|
40
|
+
return 'runtime';
|
|
41
|
+
}
|
|
42
|
+
/** A barrel file has only import/export declarations and no executable statements. */
|
|
43
|
+
function isBarrelFile(sourceFile) {
|
|
44
|
+
const statements = sourceFile.getStatements();
|
|
45
|
+
if (statements.length === 0)
|
|
46
|
+
return true;
|
|
47
|
+
return statements.every(s => {
|
|
48
|
+
const kind = s.getKind();
|
|
49
|
+
return kind === SyntaxKind.ImportDeclaration
|
|
50
|
+
|| kind === SyntaxKind.ExportDeclaration
|
|
51
|
+
|| kind === SyntaxKind.ExportAssignment;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Detect codegen files that produce strings containing React hooks/JSX.
|
|
56
|
+
* Checks template literals and string literals for hook call patterns.
|
|
57
|
+
*/
|
|
58
|
+
function hasCodegenStringPatterns(sourceFile) {
|
|
59
|
+
const hookPattern = /\buse(State|Effect|Ref|Callback|Memo|Reducer|Context)\s*[<(]/;
|
|
60
|
+
// Check template literals containing hook patterns
|
|
61
|
+
const templates = sourceFile.getDescendantsOfKind(SyntaxKind.TemplateExpression);
|
|
62
|
+
const noSubTemplates = sourceFile.getDescendantsOfKind(SyntaxKind.NoSubstitutionTemplateLiteral);
|
|
63
|
+
for (const t of [...templates, ...noSubTemplates]) {
|
|
64
|
+
if (hookPattern.test(t.getText())) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Check string literals containing JSX-like patterns (codegen building HTML/JSX strings)
|
|
69
|
+
const strings = sourceFile.getDescendantsOfKind(SyntaxKind.StringLiteral);
|
|
70
|
+
let hookStringCount = 0;
|
|
71
|
+
for (const s of strings) {
|
|
72
|
+
if (hookPattern.test(s.getLiteralText())) {
|
|
73
|
+
hookStringCount++;
|
|
74
|
+
if (hookStringCount >= 3)
|
|
75
|
+
return true; // 3+ hook mentions in strings = codegen
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=file-role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-role.js","sourceRoot":"","sources":["../src/file-role.ts"],"names":[],"mappings":"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"}
|
package/dist/graph.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import graph resolver — BFS-walks TypeScript imports from entry files.
|
|
3
|
+
*
|
|
4
|
+
* Resolves: relative imports, .js→.ts extension mapping, path aliases (via tsconfig),
|
|
5
|
+
* barrel files (index.ts re-exports). Skips: node_modules, .d.ts files.
|
|
6
|
+
* Handles circular imports via visited set. Tracks shortest distance per file.
|
|
7
|
+
*
|
|
8
|
+
* Codex contributions: extension fallback, shortest-distance tracking, skip counters.
|
|
9
|
+
*/
|
|
10
|
+
import type { GraphResult, GraphOptions } from './types.js';
|
|
11
|
+
export declare function resolveImportGraph(entryFiles: string[], options?: GraphOptions): GraphResult;
|
package/dist/graph.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import graph resolver — BFS-walks TypeScript imports from entry files.
|
|
3
|
+
*
|
|
4
|
+
* Resolves: relative imports, .js→.ts extension mapping, path aliases (via tsconfig),
|
|
5
|
+
* barrel files (index.ts re-exports). Skips: node_modules, .d.ts files.
|
|
6
|
+
* Handles circular imports via visited set. Tracks shortest distance per file.
|
|
7
|
+
*
|
|
8
|
+
* Codex contributions: extension fallback, shortest-distance tracking, skip counters.
|
|
9
|
+
*/
|
|
10
|
+
import { Project } from 'ts-morph';
|
|
11
|
+
/** Extension fallback map: .js→.ts, .jsx→.tsx (Codex idea) */
|
|
12
|
+
const EXT_FALLBACK = {
|
|
13
|
+
'.js': ['.ts', '.tsx'],
|
|
14
|
+
'.jsx': ['.tsx'],
|
|
15
|
+
'.mjs': ['.mts'],
|
|
16
|
+
'.cjs': ['.cts'],
|
|
17
|
+
};
|
|
18
|
+
export function resolveImportGraph(entryFiles, options = {}) {
|
|
19
|
+
const maxDepth = options.maxDepth ?? 3;
|
|
20
|
+
const project = options.project ?? new Project({
|
|
21
|
+
tsConfigFilePath: options.tsConfigFilePath,
|
|
22
|
+
skipAddingFilesFromTsConfig: true,
|
|
23
|
+
compilerOptions: options.tsConfigFilePath ? undefined : {
|
|
24
|
+
strict: true,
|
|
25
|
+
target: 99,
|
|
26
|
+
module: 99,
|
|
27
|
+
moduleResolution: 100, // Bundler
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
const fileMap = new Map();
|
|
31
|
+
const visited = new Set();
|
|
32
|
+
const queue = [];
|
|
33
|
+
let skipped = 0;
|
|
34
|
+
// Seed BFS with entry files
|
|
35
|
+
for (const entry of entryFiles) {
|
|
36
|
+
let sf = project.getSourceFile(entry);
|
|
37
|
+
if (!sf) {
|
|
38
|
+
try {
|
|
39
|
+
sf = project.addSourceFileAtPath(entry);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
skipped++;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const p = sf.getFilePath();
|
|
47
|
+
if (!fileMap.has(p)) {
|
|
48
|
+
fileMap.set(p, { path: p, distance: 0, imports: [], importedBy: [] });
|
|
49
|
+
queue.push({ path: p, distance: 0 });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// BFS walk
|
|
53
|
+
while (queue.length > 0) {
|
|
54
|
+
const { path: filePath, distance } = queue.shift();
|
|
55
|
+
if (visited.has(filePath))
|
|
56
|
+
continue;
|
|
57
|
+
visited.add(filePath);
|
|
58
|
+
if (distance >= maxDepth)
|
|
59
|
+
continue;
|
|
60
|
+
const sf = project.getSourceFile(filePath);
|
|
61
|
+
if (!sf)
|
|
62
|
+
continue;
|
|
63
|
+
const current = fileMap.get(filePath);
|
|
64
|
+
// Collect module references from imports and re-exports (barrel file support)
|
|
65
|
+
const refs = [];
|
|
66
|
+
for (const decl of sf.getImportDeclarations()) {
|
|
67
|
+
refs.push({
|
|
68
|
+
specifier: decl.getModuleSpecifierValue(),
|
|
69
|
+
resolved: decl.getModuleSpecifierSourceFile(),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
for (const decl of sf.getExportDeclarations()) {
|
|
73
|
+
const spec = decl.getModuleSpecifierValue();
|
|
74
|
+
if (spec) {
|
|
75
|
+
refs.push({ specifier: spec, resolved: decl.getModuleSpecifierSourceFile() });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (const { specifier, resolved } of refs) {
|
|
79
|
+
// Try ts-morph resolution first (handles path aliases via tsconfig)
|
|
80
|
+
let resolvedFile = resolved;
|
|
81
|
+
// For relative imports that weren't resolved, try extension fallback
|
|
82
|
+
if (!resolvedFile && (specifier.startsWith('.') || specifier.startsWith('/'))) {
|
|
83
|
+
resolvedFile = tryExtensionFallback(project, sf, specifier);
|
|
84
|
+
}
|
|
85
|
+
if (!resolvedFile) {
|
|
86
|
+
skipped++;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const resolvedPath = resolvedFile.getFilePath();
|
|
90
|
+
// Skip .d.ts and node_modules (even if resolved via path alias)
|
|
91
|
+
if (resolvedPath.endsWith('.d.ts')) {
|
|
92
|
+
skipped++;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (resolvedPath.includes('/node_modules/')) {
|
|
96
|
+
skipped++;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (!current.imports.includes(resolvedPath)) {
|
|
100
|
+
current.imports.push(resolvedPath);
|
|
101
|
+
}
|
|
102
|
+
if (!fileMap.has(resolvedPath)) {
|
|
103
|
+
fileMap.set(resolvedPath, {
|
|
104
|
+
path: resolvedPath,
|
|
105
|
+
distance: distance + 1,
|
|
106
|
+
imports: [],
|
|
107
|
+
importedBy: [filePath],
|
|
108
|
+
});
|
|
109
|
+
queue.push({ path: resolvedPath, distance: distance + 1 });
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const existing = fileMap.get(resolvedPath);
|
|
113
|
+
// Shortest distance wins (Codex idea)
|
|
114
|
+
if (distance + 1 < existing.distance) {
|
|
115
|
+
existing.distance = distance + 1;
|
|
116
|
+
}
|
|
117
|
+
if (!existing.importedBy.includes(filePath)) {
|
|
118
|
+
existing.importedBy.push(filePath);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const files = Array.from(fileMap.values());
|
|
124
|
+
return {
|
|
125
|
+
files,
|
|
126
|
+
entryFiles: files.filter(f => f.distance === 0).map(f => f.path),
|
|
127
|
+
totalFiles: files.length,
|
|
128
|
+
skipped,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Extension fallback: when ts-morph can't resolve ./foo.js, try ./foo.ts and ./foo.tsx.
|
|
133
|
+
* Common in ESM projects where imports use .js but source files are .ts.
|
|
134
|
+
*/
|
|
135
|
+
function tryExtensionFallback(project, fromFile, specifier) {
|
|
136
|
+
for (const [jsExt, tsExts] of Object.entries(EXT_FALLBACK)) {
|
|
137
|
+
if (!specifier.endsWith(jsExt))
|
|
138
|
+
continue;
|
|
139
|
+
const base = specifier.slice(0, -jsExt.length);
|
|
140
|
+
for (const tsExt of tsExts) {
|
|
141
|
+
const candidate = base + tsExt;
|
|
142
|
+
// Try resolving relative to the importing file's directory
|
|
143
|
+
const fromDir = fromFile.getDirectoryPath();
|
|
144
|
+
const fullPath = fromDir + '/' + candidate.replace(/^\.\//, '');
|
|
145
|
+
const sf = project.getSourceFile(fullPath);
|
|
146
|
+
if (sf)
|
|
147
|
+
return sf;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
|