@m3hti/commit-genie 2.0.0 → 3.0.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.
Files changed (33) hide show
  1. package/dist/services/analyzerService.d.ts.map +1 -1
  2. package/dist/services/analyzerService.js +32 -4
  3. package/dist/services/analyzerService.js.map +1 -1
  4. package/dist/services/astAnalyzer.d.ts +42 -0
  5. package/dist/services/astAnalyzer.d.ts.map +1 -0
  6. package/dist/services/astAnalyzer.js +613 -0
  7. package/dist/services/astAnalyzer.js.map +1 -0
  8. package/dist/services/astAnalyzer.test.d.ts +2 -0
  9. package/dist/services/astAnalyzer.test.d.ts.map +1 -0
  10. package/dist/services/astAnalyzer.test.js +319 -0
  11. package/dist/services/astAnalyzer.test.js.map +1 -0
  12. package/dist/services/astClassifier.d.ts +17 -0
  13. package/dist/services/astClassifier.d.ts.map +1 -0
  14. package/dist/services/astClassifier.js +390 -0
  15. package/dist/services/astClassifier.js.map +1 -0
  16. package/dist/services/astClassifier.test.d.ts +2 -0
  17. package/dist/services/astClassifier.test.d.ts.map +1 -0
  18. package/dist/services/astClassifier.test.js +141 -0
  19. package/dist/services/astClassifier.test.js.map +1 -0
  20. package/dist/services/astDiffEngine.d.ts +45 -0
  21. package/dist/services/astDiffEngine.d.ts.map +1 -0
  22. package/dist/services/astDiffEngine.js +261 -0
  23. package/dist/services/astDiffEngine.js.map +1 -0
  24. package/dist/services/astDiffEngine.test.d.ts +2 -0
  25. package/dist/services/astDiffEngine.test.d.ts.map +1 -0
  26. package/dist/services/astDiffEngine.test.js +234 -0
  27. package/dist/services/astDiffEngine.test.js.map +1 -0
  28. package/dist/services/astExportAnalyzer.d.ts.map +1 -1
  29. package/dist/services/astExportAnalyzer.js +122 -292
  30. package/dist/services/astExportAnalyzer.js.map +1 -1
  31. package/dist/types/index.d.ts +68 -0
  32. package/dist/types/index.d.ts.map +1 -1
  33. package/package.json +2 -4
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractFunctionCalls = extractFunctionCalls;
4
+ exports.detectRenames = detectRenames;
5
+ exports.diffDeclarations = diffDeclarations;
6
+ exports.countStatements = countStatements;
7
+ exports.extractImports = extractImports;
8
+ exports.computeBodyChanges = computeBodyChanges;
9
+ const astAnalyzer_1 = require("./astAnalyzer");
10
+ /** Size guard threshold: don't attempt rename matching above this node count. */
11
+ const RENAME_SIZE_GUARD = 300;
12
+ /** Near-match: max allowed nodeCount difference ratio. */
13
+ const NEAR_MATCH_NODE_RATIO = 0.10;
14
+ /** Near-match: minimum call overlap ratio. */
15
+ const NEAR_MATCH_CALL_OVERLAP = 0.80;
16
+ /**
17
+ * Extract function call names from a body subtree.
18
+ * - Identifier callee → name
19
+ * - MemberExpression callee → property name
20
+ * - Otherwise ignored
21
+ */
22
+ function extractFunctionCalls(node) {
23
+ const calls = [];
24
+ (0, astAnalyzer_1.walkNode)(node, (n) => {
25
+ if (n.type === 'CallExpression') {
26
+ const callee = n.callee;
27
+ if (callee.type === 'Identifier') {
28
+ calls.push(callee.name);
29
+ }
30
+ else if (callee.type === 'MemberExpression') {
31
+ if (callee.property.type === 'Identifier') {
32
+ calls.push(callee.property.name);
33
+ }
34
+ }
35
+ }
36
+ });
37
+ return calls;
38
+ }
39
+ /** Compute the overlap ratio between two string arrays (as sets). */
40
+ function callOverlap(a, b) {
41
+ const setA = new Set(a);
42
+ const setB = new Set(b);
43
+ if (setA.size === 0 && setB.size === 0)
44
+ return 1.0;
45
+ const union = new Set([...setA, ...setB]);
46
+ if (union.size === 0)
47
+ return 1.0;
48
+ let intersection = 0;
49
+ for (const item of setA) {
50
+ if (setB.has(item))
51
+ intersection++;
52
+ }
53
+ return intersection / union.size;
54
+ }
55
+ /**
56
+ * Detect renames between old and new declarations.
57
+ * Uses exact hash match and near-match heuristics.
58
+ */
59
+ function detectRenames(oldDecls, newDecls, oldProgram, newProgram) {
60
+ const newNames = new Set(newDecls.map(d => d.name));
61
+ const oldNames = new Set(oldDecls.map(d => d.name));
62
+ // Orphans: names that exist only in old or only in new
63
+ const orphanOld = oldDecls.filter(d => !newNames.has(d.name));
64
+ const orphanNew = newDecls.filter(d => !oldNames.has(d.name));
65
+ const renames = [];
66
+ const matchedOld = new Set();
67
+ const matchedNew = new Set();
68
+ // Pass 1: Exact hash match
69
+ for (const oldD of orphanOld) {
70
+ if (matchedOld.has(oldD.name))
71
+ continue;
72
+ if (oldD.nodeCount >= RENAME_SIZE_GUARD)
73
+ continue;
74
+ for (const newD of orphanNew) {
75
+ if (matchedNew.has(newD.name))
76
+ continue;
77
+ if (newD.nodeCount >= RENAME_SIZE_GUARD)
78
+ continue;
79
+ if (oldD.kind !== newD.kind)
80
+ continue;
81
+ if (oldD.bodyHash && newD.bodyHash && oldD.bodyHash === newD.bodyHash) {
82
+ renames.push({ oldName: oldD.name, newName: newD.name, exact: true });
83
+ matchedOld.add(oldD.name);
84
+ matchedNew.add(newD.name);
85
+ break;
86
+ }
87
+ }
88
+ }
89
+ // Pass 2: Near-match heuristic (only if we have ASTs to extract calls from)
90
+ if (oldProgram && newProgram) {
91
+ for (const oldD of orphanOld) {
92
+ if (matchedOld.has(oldD.name))
93
+ continue;
94
+ if (oldD.nodeCount >= RENAME_SIZE_GUARD)
95
+ continue;
96
+ for (const newD of orphanNew) {
97
+ if (matchedNew.has(newD.name))
98
+ continue;
99
+ if (newD.nodeCount >= RENAME_SIZE_GUARD)
100
+ continue;
101
+ if (oldD.kind !== newD.kind)
102
+ continue;
103
+ // Check nodeCount difference < 10%
104
+ const maxCount = Math.max(oldD.nodeCount, newD.nodeCount);
105
+ if (maxCount === 0)
106
+ continue;
107
+ const diff = Math.abs(oldD.nodeCount - newD.nodeCount);
108
+ if (diff / maxCount >= NEAR_MATCH_NODE_RATIO)
109
+ continue;
110
+ // Check call overlap >= 80%
111
+ const { body: oldBody } = (0, astAnalyzer_1.findDeclarationBody)(oldProgram, oldD.name);
112
+ const { body: newBody } = (0, astAnalyzer_1.findDeclarationBody)(newProgram, newD.name);
113
+ if (!oldBody || !newBody)
114
+ continue;
115
+ const oldCalls = extractFunctionCalls(oldBody);
116
+ const newCalls = extractFunctionCalls(newBody);
117
+ if (callOverlap(oldCalls, newCalls) < NEAR_MATCH_CALL_OVERLAP)
118
+ continue;
119
+ renames.push({ oldName: oldD.name, newName: newD.name, exact: false });
120
+ matchedOld.add(oldD.name);
121
+ matchedNew.add(newD.name);
122
+ break;
123
+ }
124
+ }
125
+ }
126
+ return renames;
127
+ }
128
+ /**
129
+ * Diff two sets of declarations.
130
+ * Returns added, removed, renamed, and modified declarations.
131
+ */
132
+ function diffDeclarations(oldDecls, newDecls, oldProgram, newProgram) {
133
+ const oldMap = new Map();
134
+ for (const d of oldDecls)
135
+ oldMap.set(d.name, d);
136
+ const newMap = new Map();
137
+ for (const d of newDecls)
138
+ newMap.set(d.name, d);
139
+ // Detect renames first
140
+ const renames = detectRenames(oldDecls, newDecls, oldProgram, newProgram);
141
+ const renamedOldNames = new Set(renames.map(r => r.oldName));
142
+ const renamedNewNames = new Set(renames.map(r => r.newName));
143
+ // Modified: same name, different bodyHash
144
+ const modified = [];
145
+ for (const [name, oldD] of oldMap) {
146
+ if (renamedOldNames.has(name))
147
+ continue;
148
+ const newD = newMap.get(name);
149
+ if (newD && oldD.bodyHash !== newD.bodyHash) {
150
+ modified.push({ name, oldDecl: oldD, newDecl: newD });
151
+ }
152
+ }
153
+ // Added: in new but not in old, and not a rename target
154
+ const added = newDecls.filter(d => !oldMap.has(d.name) && !renamedNewNames.has(d.name));
155
+ // Removed: in old but not in new, and not a rename source
156
+ const removed = oldDecls.filter(d => !newMap.has(d.name) && !renamedOldNames.has(d.name));
157
+ return { added, removed, renamed: renames, modified };
158
+ }
159
+ // ── Body Change Extraction (Phase 3) ──────────────────────────
160
+ /** Statement-level AST node types. */
161
+ const STATEMENT_TYPES = new Set([
162
+ 'ExpressionStatement', 'VariableDeclaration', 'ReturnStatement',
163
+ 'IfStatement', 'ForStatement', 'ForInStatement', 'ForOfStatement',
164
+ 'WhileStatement', 'DoWhileStatement', 'SwitchStatement',
165
+ 'ThrowStatement', 'TryStatement', 'BreakStatement', 'ContinueStatement',
166
+ 'LabeledStatement', 'WithStatement', 'DebuggerStatement',
167
+ 'ClassDeclaration', 'FunctionDeclaration',
168
+ ]);
169
+ /** Control flow AST node types. */
170
+ const CONTROL_FLOW_TYPES = new Set([
171
+ 'IfStatement', 'ForStatement', 'ForInStatement', 'ForOfStatement',
172
+ 'WhileStatement', 'DoWhileStatement', 'SwitchStatement',
173
+ 'ConditionalExpression',
174
+ ]);
175
+ /** Error handling AST node types. */
176
+ const ERROR_HANDLING_TYPES = new Set([
177
+ 'TryStatement', 'ThrowStatement',
178
+ ]);
179
+ /** Count statement-level AST nodes in a body. */
180
+ function countStatements(node) {
181
+ let count = 0;
182
+ (0, astAnalyzer_1.walkNode)(node, (n) => {
183
+ if (STATEMENT_TYPES.has(n.type)) {
184
+ count++;
185
+ }
186
+ });
187
+ return count;
188
+ }
189
+ /** Collect all control flow node types present in a subtree. */
190
+ function collectControlFlowSignature(node) {
191
+ const sig = [];
192
+ (0, astAnalyzer_1.walkNode)(node, (n) => {
193
+ if (CONTROL_FLOW_TYPES.has(n.type)) {
194
+ sig.push(n.type);
195
+ }
196
+ });
197
+ return sig;
198
+ }
199
+ /** Collect all error handling node types present in a subtree. */
200
+ function collectErrorHandlingSignature(node) {
201
+ const sig = [];
202
+ (0, astAnalyzer_1.walkNode)(node, (n) => {
203
+ if (ERROR_HANDLING_TYPES.has(n.type)) {
204
+ sig.push(n.type);
205
+ }
206
+ });
207
+ return sig;
208
+ }
209
+ /**
210
+ * Extract import specifier names from a program.
211
+ */
212
+ function extractImports(program) {
213
+ const imports = [];
214
+ for (const stmt of program.body) {
215
+ if (stmt.type === 'ImportDeclaration' && stmt.source.type === 'Literal') {
216
+ imports.push(stmt.source.value);
217
+ }
218
+ }
219
+ return imports;
220
+ }
221
+ /**
222
+ * Compute body changes between old and new versions of a declaration.
223
+ */
224
+ function computeBodyChanges(oldBody, newBody, oldProgram, newProgram) {
225
+ // Statement counts
226
+ const oldStmts = countStatements(oldBody);
227
+ const newStmts = countStatements(newBody);
228
+ // Function calls
229
+ const oldCalls = extractFunctionCalls(oldBody);
230
+ const newCalls = extractFunctionCalls(newBody);
231
+ const oldCallSet = new Set(oldCalls);
232
+ const newCallSet = new Set(newCalls);
233
+ const addedFunctionCalls = [...newCallSet].filter(c => !oldCallSet.has(c));
234
+ const removedFunctionCalls = [...oldCallSet].filter(c => !newCallSet.has(c));
235
+ // Imports (program-level)
236
+ const oldImports = extractImports(oldProgram);
237
+ const newImports = extractImports(newProgram);
238
+ const oldImportSet = new Set(oldImports);
239
+ const newImportSet = new Set(newImports);
240
+ const addedImports = [...newImportSet].filter(i => !oldImportSet.has(i));
241
+ const removedImports = [...oldImportSet].filter(i => !newImportSet.has(i));
242
+ // Control flow
243
+ const oldCF = collectControlFlowSignature(oldBody);
244
+ const newCF = collectControlFlowSignature(newBody);
245
+ const changedControlFlow = JSON.stringify(oldCF.sort()) !== JSON.stringify(newCF.sort());
246
+ // Error handling
247
+ const oldEH = collectErrorHandlingSignature(oldBody);
248
+ const newEH = collectErrorHandlingSignature(newBody);
249
+ const changedErrorHandling = JSON.stringify(oldEH.sort()) !== JSON.stringify(newEH.sort());
250
+ return {
251
+ statementsAdded: Math.max(0, newStmts - oldStmts),
252
+ statementsRemoved: Math.max(0, oldStmts - newStmts),
253
+ addedFunctionCalls,
254
+ removedFunctionCalls,
255
+ addedImports,
256
+ removedImports,
257
+ changedControlFlow,
258
+ changedErrorHandling,
259
+ };
260
+ }
261
+ //# sourceMappingURL=astDiffEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astDiffEngine.js","sourceRoot":"","sources":["../../src/services/astDiffEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=astDiffEngine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astDiffEngine.test.d.ts","sourceRoot":"","sources":["../../src/services/astDiffEngine.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const astDiffEngine_1 = require("./astDiffEngine");
4
+ const astAnalyzer_1 = require("./astAnalyzer");
5
+ /** Helper to parse source, extract declarations, and populate hashes. */
6
+ function parseAndExtract(src, filePath = 'test.ts') {
7
+ const program = (0, astAnalyzer_1.parseFile)(src, filePath);
8
+ const { declarations } = (0, astAnalyzer_1.extractDeclarations)(program);
9
+ (0, astAnalyzer_1.populateBodyHashes)(declarations, program);
10
+ return { declarations, program };
11
+ }
12
+ describe('astDiffEngine', () => {
13
+ describe('detectRenames', () => {
14
+ it('detects exact rename (identical body, different name)', () => {
15
+ const old = parseAndExtract('function foo(x) { return x + 1; }', 'test.js');
16
+ const neu = parseAndExtract('function bar(x) { return x + 1; }', 'test.js');
17
+ const renames = (0, astDiffEngine_1.detectRenames)(old.declarations, neu.declarations, old.program, neu.program);
18
+ expect(renames).toHaveLength(1);
19
+ expect(renames[0]).toMatchObject({ oldName: 'foo', newName: 'bar', exact: true });
20
+ });
21
+ it('does not detect rename when body differs significantly', () => {
22
+ const old = parseAndExtract('function foo() { return 1; }', 'test.js');
23
+ const neu = parseAndExtract('function bar() { if (true) { console.log("a"); console.log("b"); } return 2; }', 'test.js');
24
+ const renames = (0, astDiffEngine_1.detectRenames)(old.declarations, neu.declarations, old.program, neu.program);
25
+ expect(renames).toHaveLength(0);
26
+ });
27
+ it('does not detect rename when kind differs', () => {
28
+ const old = parseAndExtract('function foo() { return 1; }', 'test.js');
29
+ const neu = parseAndExtract('class foo { method() { return 1; } }', 'test.js');
30
+ // Different names AND different kinds
31
+ const oldRenamed = parseAndExtract('function alpha() { return 1; }', 'test.js');
32
+ const neuRenamed = parseAndExtract('const alpha = 42;', 'test.js');
33
+ // Here both have same name - not a rename scenario
34
+ // Test with actual orphans
35
+ const old2 = parseAndExtract('function alpha() { return 1; }', 'test.js');
36
+ const neu2 = parseAndExtract('class beta { constructor() { return 1; } }', 'test.js');
37
+ const renames = (0, astDiffEngine_1.detectRenames)(old2.declarations, neu2.declarations, old2.program, neu2.program);
38
+ expect(renames).toHaveLength(0); // Different kind
39
+ });
40
+ it('respects size guard (nodeCount >= 300)', () => {
41
+ // Create a function with many nodes
42
+ const stmts = Array.from({ length: 100 }, (_, i) => ` const v${i} = ${i}; console.log(v${i});`).join('\n');
43
+ const oldSrc = `function bigFn() {\n${stmts}\n}`;
44
+ const newSrc = `function renamedBigFn() {\n${stmts}\n}`;
45
+ const old = parseAndExtract(oldSrc, 'test.js');
46
+ const neu = parseAndExtract(newSrc, 'test.js');
47
+ // Verify nodeCount is above threshold
48
+ expect(old.declarations[0].nodeCount).toBeGreaterThanOrEqual(300);
49
+ const renames = (0, astDiffEngine_1.detectRenames)(old.declarations, neu.declarations, old.program, neu.program);
50
+ expect(renames).toHaveLength(0); // Skipped due to size guard
51
+ });
52
+ it('detects near-match rename (minor body change, same calls)', () => {
53
+ // Bodies must be large enough so one extra call is <10% nodeCount difference
54
+ const sharedCalls = 'a(x); b(x); c(x); d(x); e(x); f(x); g(x); h(x); i(x); j(x);';
55
+ const old = parseAndExtract(`function foo(x) { ${sharedCalls} return x; }`, 'test.js');
56
+ const neu = parseAndExtract(`function bar(x) { ${sharedCalls} k(x); return x; }`, 'test.js');
57
+ const renames = (0, astDiffEngine_1.detectRenames)(old.declarations, neu.declarations, old.program, neu.program);
58
+ expect(renames).toHaveLength(1);
59
+ expect(renames[0]).toMatchObject({ oldName: 'foo', newName: 'bar', exact: false });
60
+ });
61
+ it('does not rename when names both still exist', () => {
62
+ const old = parseAndExtract('function foo() { return 1; }\nfunction bar() { return 2; }', 'test.js');
63
+ const neu = parseAndExtract('function foo() { return 1; }\nfunction bar() { return 2; }', 'test.js');
64
+ const renames = (0, astDiffEngine_1.detectRenames)(old.declarations, neu.declarations, old.program, neu.program);
65
+ expect(renames).toHaveLength(0);
66
+ });
67
+ });
68
+ describe('diffDeclarations', () => {
69
+ it('detects added declarations', () => {
70
+ const old = parseAndExtract('function foo() { return 1; }', 'test.js');
71
+ const neu = parseAndExtract('function foo() { return 1; }\nfunction bar() { return 2; }', 'test.js');
72
+ const diff = (0, astDiffEngine_1.diffDeclarations)(old.declarations, neu.declarations, old.program, neu.program);
73
+ expect(diff.added).toHaveLength(1);
74
+ expect(diff.added[0].name).toBe('bar');
75
+ expect(diff.removed).toHaveLength(0);
76
+ });
77
+ it('detects removed declarations', () => {
78
+ const old = parseAndExtract('function foo() { return 1; }\nfunction bar() { return 2; }', 'test.js');
79
+ const neu = parseAndExtract('function foo() { return 1; }', 'test.js');
80
+ const diff = (0, astDiffEngine_1.diffDeclarations)(old.declarations, neu.declarations, old.program, neu.program);
81
+ expect(diff.removed).toHaveLength(1);
82
+ expect(diff.removed[0].name).toBe('bar');
83
+ expect(diff.added).toHaveLength(0);
84
+ });
85
+ it('detects modified declarations (same name, different body)', () => {
86
+ const old = parseAndExtract('function foo() { return 1; }', 'test.js');
87
+ const neu = parseAndExtract('function foo() { return 2; }', 'test.js');
88
+ const diff = (0, astDiffEngine_1.diffDeclarations)(old.declarations, neu.declarations, old.program, neu.program);
89
+ expect(diff.modified).toHaveLength(1);
90
+ expect(diff.modified[0].name).toBe('foo');
91
+ });
92
+ it('detects renamed declarations', () => {
93
+ const old = parseAndExtract('function foo(x) { return x + 1; }', 'test.js');
94
+ const neu = parseAndExtract('function bar(x) { return x + 1; }', 'test.js');
95
+ const diff = (0, astDiffEngine_1.diffDeclarations)(old.declarations, neu.declarations, old.program, neu.program);
96
+ expect(diff.renamed).toHaveLength(1);
97
+ expect(diff.renamed[0]).toMatchObject({ oldName: 'foo', newName: 'bar' });
98
+ expect(diff.added).toHaveLength(0);
99
+ expect(diff.removed).toHaveLength(0);
100
+ });
101
+ it('handles empty old (all added)', () => {
102
+ const neu = parseAndExtract('function foo() { return 1; }', 'test.js');
103
+ const diff = (0, astDiffEngine_1.diffDeclarations)([], neu.declarations, null, neu.program);
104
+ expect(diff.added).toHaveLength(1);
105
+ expect(diff.removed).toHaveLength(0);
106
+ });
107
+ it('handles empty new (all removed)', () => {
108
+ const old = parseAndExtract('function foo() { return 1; }', 'test.js');
109
+ const diff = (0, astDiffEngine_1.diffDeclarations)(old.declarations, [], old.program, null);
110
+ expect(diff.removed).toHaveLength(1);
111
+ expect(diff.added).toHaveLength(0);
112
+ });
113
+ });
114
+ describe('extractFunctionCalls', () => {
115
+ it('extracts simple function calls', () => {
116
+ const ast = (0, astAnalyzer_1.parseFile)('function foo() { bar(); baz(); }', 'test.js');
117
+ const { body } = (0, astAnalyzer_1.findDeclarationBody)(ast, 'foo');
118
+ const calls = (0, astDiffEngine_1.extractFunctionCalls)(body);
119
+ expect(calls).toContain('bar');
120
+ expect(calls).toContain('baz');
121
+ });
122
+ it('extracts member expression calls (property name only)', () => {
123
+ const ast = (0, astAnalyzer_1.parseFile)('function foo() { obj.validate(); this.save(); }', 'test.js');
124
+ const { body } = (0, astAnalyzer_1.findDeclarationBody)(ast, 'foo');
125
+ const calls = (0, astDiffEngine_1.extractFunctionCalls)(body);
126
+ expect(calls).toContain('validate');
127
+ expect(calls).toContain('save');
128
+ });
129
+ it('extracts optional chaining calls', () => {
130
+ const ast = (0, astAnalyzer_1.parseFile)('function foo() { obj?.check(); }', 'test.js');
131
+ const { body } = (0, astAnalyzer_1.findDeclarationBody)(ast, 'foo');
132
+ const calls = (0, astDiffEngine_1.extractFunctionCalls)(body);
133
+ expect(calls).toContain('check');
134
+ });
135
+ it('ignores computed calls', () => {
136
+ const ast = (0, astAnalyzer_1.parseFile)('function foo() { arr[0](); }', 'test.js');
137
+ const { body } = (0, astAnalyzer_1.findDeclarationBody)(ast, 'foo');
138
+ const calls = (0, astDiffEngine_1.extractFunctionCalls)(body);
139
+ expect(calls).toHaveLength(0);
140
+ });
141
+ });
142
+ describe('extractImports', () => {
143
+ it('extracts import sources', () => {
144
+ const ast = (0, astAnalyzer_1.parseFile)("import { foo } from './foo';\nimport bar from 'bar';", 'test.ts');
145
+ const imports = (0, astDiffEngine_1.extractImports)(ast);
146
+ expect(imports).toContain('./foo');
147
+ expect(imports).toContain('bar');
148
+ });
149
+ it('returns empty for no imports', () => {
150
+ const ast = (0, astAnalyzer_1.parseFile)('const x = 1;', 'test.ts');
151
+ expect((0, astDiffEngine_1.extractImports)(ast)).toHaveLength(0);
152
+ });
153
+ });
154
+ describe('countStatements', () => {
155
+ it('counts statement-level nodes', () => {
156
+ const ast = (0, astAnalyzer_1.parseFile)('function foo() { const x = 1; if (x) { return x; } }', 'test.js');
157
+ const { body } = (0, astAnalyzer_1.findDeclarationBody)(ast, 'foo');
158
+ const count = (0, astDiffEngine_1.countStatements)(body);
159
+ expect(count).toBeGreaterThanOrEqual(3); // VariableDeclaration, IfStatement, ReturnStatement
160
+ });
161
+ });
162
+ describe('computeBodyChanges', () => {
163
+ it('detects added statements', () => {
164
+ const oldAst = (0, astAnalyzer_1.parseFile)('function foo() { return 1; }', 'test.js');
165
+ const newAst = (0, astAnalyzer_1.parseFile)('function foo() { const x = 1; console.log(x); return x; }', 'test.js');
166
+ const { body: oldBody } = (0, astAnalyzer_1.findDeclarationBody)(oldAst, 'foo');
167
+ const { body: newBody } = (0, astAnalyzer_1.findDeclarationBody)(newAst, 'foo');
168
+ const changes = (0, astDiffEngine_1.computeBodyChanges)(oldBody, newBody, oldAst, newAst);
169
+ expect(changes.statementsAdded).toBeGreaterThan(0);
170
+ });
171
+ it('detects added function calls', () => {
172
+ const oldAst = (0, astAnalyzer_1.parseFile)('function foo() { return 1; }', 'test.js');
173
+ const newAst = (0, astAnalyzer_1.parseFile)('function foo() { validate(); return 1; }', 'test.js');
174
+ const { body: oldBody } = (0, astAnalyzer_1.findDeclarationBody)(oldAst, 'foo');
175
+ const { body: newBody } = (0, astAnalyzer_1.findDeclarationBody)(newAst, 'foo');
176
+ const changes = (0, astDiffEngine_1.computeBodyChanges)(oldBody, newBody, oldAst, newAst);
177
+ expect(changes.addedFunctionCalls).toContain('validate');
178
+ });
179
+ it('detects removed function calls', () => {
180
+ const oldAst = (0, astAnalyzer_1.parseFile)('function foo() { fetch("/api"); return 1; }', 'test.js');
181
+ const newAst = (0, astAnalyzer_1.parseFile)('function foo() { return 1; }', 'test.js');
182
+ const { body: oldBody } = (0, astAnalyzer_1.findDeclarationBody)(oldAst, 'foo');
183
+ const { body: newBody } = (0, astAnalyzer_1.findDeclarationBody)(newAst, 'foo');
184
+ const changes = (0, astDiffEngine_1.computeBodyChanges)(oldBody, newBody, oldAst, newAst);
185
+ expect(changes.removedFunctionCalls).toContain('fetch');
186
+ });
187
+ it('detects changed error handling (try/catch added)', () => {
188
+ const oldAst = (0, astAnalyzer_1.parseFile)('function foo() { doWork(); }', 'test.js');
189
+ const newAst = (0, astAnalyzer_1.parseFile)('function foo() { try { doWork(); } catch(e) { log(e); } }', 'test.js');
190
+ const { body: oldBody } = (0, astAnalyzer_1.findDeclarationBody)(oldAst, 'foo');
191
+ const { body: newBody } = (0, astAnalyzer_1.findDeclarationBody)(newAst, 'foo');
192
+ const changes = (0, astDiffEngine_1.computeBodyChanges)(oldBody, newBody, oldAst, newAst);
193
+ expect(changes.changedErrorHandling).toBe(true);
194
+ });
195
+ it('detects changed control flow (if added)', () => {
196
+ const oldAst = (0, astAnalyzer_1.parseFile)('function foo(x) { return x; }', 'test.js');
197
+ const newAst = (0, astAnalyzer_1.parseFile)('function foo(x) { if (!x) throw new Error("invalid"); return x; }', 'test.js');
198
+ const { body: oldBody } = (0, astAnalyzer_1.findDeclarationBody)(oldAst, 'foo');
199
+ const { body: newBody } = (0, astAnalyzer_1.findDeclarationBody)(newAst, 'foo');
200
+ const changes = (0, astDiffEngine_1.computeBodyChanges)(oldBody, newBody, oldAst, newAst);
201
+ expect(changes.changedControlFlow).toBe(true);
202
+ });
203
+ it('detects added imports', () => {
204
+ const oldAst = (0, astAnalyzer_1.parseFile)('function foo() { return 1; }', 'test.js');
205
+ const newAst = (0, astAnalyzer_1.parseFile)("import { bar } from './bar';\nfunction foo() { return bar(); }", 'test.js');
206
+ const { body: oldBody } = (0, astAnalyzer_1.findDeclarationBody)(oldAst, 'foo');
207
+ const { body: newBody } = (0, astAnalyzer_1.findDeclarationBody)(newAst, 'foo');
208
+ const changes = (0, astDiffEngine_1.computeBodyChanges)(oldBody, newBody, oldAst, newAst);
209
+ expect(changes.addedImports).toContain('./bar');
210
+ });
211
+ it('reports no changes for identical bodies', () => {
212
+ const oldAst = (0, astAnalyzer_1.parseFile)('function foo() { return 1; }', 'test.js');
213
+ const newAst = (0, astAnalyzer_1.parseFile)('function foo() { return 1; }', 'test.js');
214
+ const { body: oldBody } = (0, astAnalyzer_1.findDeclarationBody)(oldAst, 'foo');
215
+ const { body: newBody } = (0, astAnalyzer_1.findDeclarationBody)(newAst, 'foo');
216
+ const changes = (0, astDiffEngine_1.computeBodyChanges)(oldBody, newBody, oldAst, newAst);
217
+ expect(changes.statementsAdded).toBe(0);
218
+ expect(changes.statementsRemoved).toBe(0);
219
+ expect(changes.addedFunctionCalls).toHaveLength(0);
220
+ expect(changes.removedFunctionCalls).toHaveLength(0);
221
+ expect(changes.changedControlFlow).toBe(false);
222
+ expect(changes.changedErrorHandling).toBe(false);
223
+ });
224
+ it('detects member expression call additions', () => {
225
+ const oldAst = (0, astAnalyzer_1.parseFile)('function foo() { return data; }', 'test.js');
226
+ const newAst = (0, astAnalyzer_1.parseFile)('function foo() { obj.validate(); return data; }', 'test.js');
227
+ const { body: oldBody } = (0, astAnalyzer_1.findDeclarationBody)(oldAst, 'foo');
228
+ const { body: newBody } = (0, astAnalyzer_1.findDeclarationBody)(newAst, 'foo');
229
+ const changes = (0, astDiffEngine_1.computeBodyChanges)(oldBody, newBody, oldAst, newAst);
230
+ expect(changes.addedFunctionCalls).toContain('validate');
231
+ });
232
+ });
233
+ });
234
+ //# sourceMappingURL=astDiffEngine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astDiffEngine.test.js","sourceRoot":"","sources":["../../src/services/astDiffEngine.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"astExportAnalyzer.d.ts","sourceRoot":"","sources":["../../src/services/astExportAnalyzer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItD,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,yGAAyG;AACzG,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,EACrD,SAAS,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,GACpD,OAAO,CAaT;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,cAAc,EAAE,CA+HlB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,QAAQ,EAAE,MAAM,GACf,UAAU,CAwCZ"}
1
+ {"version":3,"file":"astExportAnalyzer.d.ts","sourceRoot":"","sources":["../../src/services/astExportAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAkB,MAAM,UAAU,CAAC;AAQtE,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,yGAAyG;AACzG,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,EACrD,SAAS,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,GACpD,OAAO,CAaT;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,cAAc,EAAE,CA+DlB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,QAAQ,EAAE,MAAM,GACf,UAAU,CAwCZ"}