@m3hti/commit-genie 2.0.0 → 3.0.1

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 (35) hide show
  1. package/CLAUDE.md +112 -0
  2. package/dist/services/analyzerService.d.ts +9 -1
  3. package/dist/services/analyzerService.d.ts.map +1 -1
  4. package/dist/services/analyzerService.js +192 -8
  5. package/dist/services/analyzerService.js.map +1 -1
  6. package/dist/services/astAnalyzer.d.ts +42 -0
  7. package/dist/services/astAnalyzer.d.ts.map +1 -0
  8. package/dist/services/astAnalyzer.js +613 -0
  9. package/dist/services/astAnalyzer.js.map +1 -0
  10. package/dist/services/astAnalyzer.test.d.ts +2 -0
  11. package/dist/services/astAnalyzer.test.d.ts.map +1 -0
  12. package/dist/services/astAnalyzer.test.js +319 -0
  13. package/dist/services/astAnalyzer.test.js.map +1 -0
  14. package/dist/services/astClassifier.d.ts +17 -0
  15. package/dist/services/astClassifier.d.ts.map +1 -0
  16. package/dist/services/astClassifier.js +390 -0
  17. package/dist/services/astClassifier.js.map +1 -0
  18. package/dist/services/astClassifier.test.d.ts +2 -0
  19. package/dist/services/astClassifier.test.d.ts.map +1 -0
  20. package/dist/services/astClassifier.test.js +141 -0
  21. package/dist/services/astClassifier.test.js.map +1 -0
  22. package/dist/services/astDiffEngine.d.ts +45 -0
  23. package/dist/services/astDiffEngine.d.ts.map +1 -0
  24. package/dist/services/astDiffEngine.js +261 -0
  25. package/dist/services/astDiffEngine.js.map +1 -0
  26. package/dist/services/astDiffEngine.test.d.ts +2 -0
  27. package/dist/services/astDiffEngine.test.d.ts.map +1 -0
  28. package/dist/services/astDiffEngine.test.js +234 -0
  29. package/dist/services/astDiffEngine.test.js.map +1 -0
  30. package/dist/services/astExportAnalyzer.d.ts.map +1 -1
  31. package/dist/services/astExportAnalyzer.js +122 -292
  32. package/dist/services/astExportAnalyzer.js.map +1 -1
  33. package/dist/types/index.d.ts +68 -0
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/package.json +2 -4
@@ -0,0 +1,613 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isParseableFile = isParseableFile;
4
+ exports.parseFile = parseFile;
5
+ exports.countNodes = countNodes;
6
+ exports.extractDeclarations = extractDeclarations;
7
+ exports.canonicalizeBody = canonicalizeBody;
8
+ exports.computeBodyHash = computeBodyHash;
9
+ exports.findDeclarationBody = findDeclarationBody;
10
+ exports.populateBodyHashes = populateBodyHashes;
11
+ exports.walkNode = walkNode;
12
+ const typescript_estree_1 = require("@typescript-eslint/typescript-estree");
13
+ const crypto_1 = require("crypto");
14
+ const PARSEABLE_EXTENSIONS = /\.(js|jsx|ts|tsx|mjs|cjs|mts|cts)$/;
15
+ /** Check if a file path is parseable by the AST analyzer. */
16
+ function isParseableFile(filePath) {
17
+ return PARSEABLE_EXTENSIONS.test(filePath);
18
+ }
19
+ /** Parse a source file into a TSESTree AST. Returns null on failure. */
20
+ function parseFile(source, filePath) {
21
+ try {
22
+ return (0, typescript_estree_1.parse)(source, {
23
+ jsx: /\.[jt]sx$/i.test(filePath),
24
+ loc: true,
25
+ range: true,
26
+ comment: false,
27
+ tokens: false,
28
+ errorOnUnknownASTType: false,
29
+ });
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ /** Count total AST nodes in a subtree via preorder traversal. */
36
+ function countNodes(node) {
37
+ let count = 1;
38
+ for (const key of Object.keys(node)) {
39
+ if (key === 'parent')
40
+ continue;
41
+ const val = node[key];
42
+ if (val && typeof val === 'object') {
43
+ if (Array.isArray(val)) {
44
+ for (const item of val) {
45
+ if (item && typeof item === 'object' && typeof item.type === 'string') {
46
+ count += countNodes(item);
47
+ }
48
+ }
49
+ }
50
+ else if (typeof val.type === 'string') {
51
+ count += countNodes(val);
52
+ }
53
+ }
54
+ }
55
+ return count;
56
+ }
57
+ /** Build a normalized signature string from function params. */
58
+ function extractSignature(params) {
59
+ if (params.length === 0)
60
+ return '()';
61
+ const parts = params.map(p => {
62
+ const name = paramName(p);
63
+ const opt = !isParamRequired(p) ? '?' : '';
64
+ return name + opt;
65
+ });
66
+ return '(' + parts.join(', ') + ')';
67
+ }
68
+ /** Extract structured params for breaking change detection. */
69
+ function extractParams(params) {
70
+ return params.map(p => ({
71
+ name: paramName(p),
72
+ required: isParamRequired(p),
73
+ }));
74
+ }
75
+ function paramName(param) {
76
+ switch (param.type) {
77
+ case 'Identifier':
78
+ return param.name;
79
+ case 'AssignmentPattern':
80
+ return param.left.type === 'Identifier' ? param.left.name : '?';
81
+ case 'RestElement':
82
+ return param.argument.type === 'Identifier' ? '...' + param.argument.name : '...?';
83
+ case 'ObjectPattern':
84
+ return '{...}';
85
+ case 'ArrayPattern':
86
+ return '[...]';
87
+ case 'TSParameterProperty':
88
+ return paramName(param.parameter);
89
+ default:
90
+ return '?';
91
+ }
92
+ }
93
+ function isParamRequired(param) {
94
+ if (param.type === 'AssignmentPattern')
95
+ return false;
96
+ if (param.type === 'RestElement')
97
+ return false;
98
+ if (param.type === 'Identifier' && param.optional)
99
+ return false;
100
+ if (param.type === 'TSParameterProperty')
101
+ return isParamRequired(param.parameter);
102
+ return true;
103
+ }
104
+ /** Get the body node for a declaration (function body, class body, initializer, etc.). */
105
+ function getBodyNode(node) {
106
+ switch (node.type) {
107
+ case 'FunctionDeclaration':
108
+ case 'FunctionExpression':
109
+ case 'ArrowFunctionExpression':
110
+ return node.body;
111
+ case 'ClassDeclaration':
112
+ case 'ClassExpression':
113
+ return node.body;
114
+ case 'VariableDeclarator':
115
+ return node.init ?? null;
116
+ case 'TSInterfaceDeclaration':
117
+ return node.body;
118
+ case 'TSTypeAliasDeclaration':
119
+ return node.typeAnnotation;
120
+ case 'TSEnumDeclaration':
121
+ return node; // enum itself is the body
122
+ default:
123
+ return null;
124
+ }
125
+ }
126
+ /** Get function parameters from a node if it has them. */
127
+ function getFunctionParams(node) {
128
+ switch (node.type) {
129
+ case 'FunctionDeclaration':
130
+ case 'FunctionExpression':
131
+ case 'ArrowFunctionExpression':
132
+ return node.params;
133
+ default:
134
+ return null;
135
+ }
136
+ }
137
+ /**
138
+ * Extract a single declaration from a statement node.
139
+ * Returns null if the node isn't a recognized declaration.
140
+ */
141
+ function extractSingleDeclaration(node, exported) {
142
+ switch (node.type) {
143
+ case 'FunctionDeclaration': {
144
+ const name = node.id?.name ?? 'default';
145
+ const body = getBodyNode(node);
146
+ return [{
147
+ name,
148
+ kind: 'function',
149
+ exported,
150
+ signature: extractSignature(node.params),
151
+ params: extractParams(node.params),
152
+ bodyHash: '',
153
+ nodeCount: body ? countNodes(body) : 0,
154
+ }];
155
+ }
156
+ case 'ClassDeclaration': {
157
+ const name = node.id?.name ?? 'default';
158
+ const body = getBodyNode(node);
159
+ return [{
160
+ name,
161
+ kind: 'class',
162
+ exported,
163
+ bodyHash: '',
164
+ nodeCount: body ? countNodes(body) : 0,
165
+ }];
166
+ }
167
+ case 'VariableDeclaration': {
168
+ return node.declarations.map(d => {
169
+ const name = d.id.type === 'Identifier' ? d.id.name : 'unknown';
170
+ const init = d.init;
171
+ const isFn = init && (init.type === 'ArrowFunctionExpression' || init.type === 'FunctionExpression');
172
+ const params = isFn ? getFunctionParams(init) : null;
173
+ const body = init ? getBodyNode(init.type === 'ArrowFunctionExpression' || init.type === 'FunctionExpression' ? init : d) : null;
174
+ return {
175
+ name,
176
+ kind: (isFn ? 'function' : 'variable'),
177
+ exported,
178
+ signature: params ? extractSignature(params) : undefined,
179
+ params: params ? extractParams(params) : undefined,
180
+ bodyHash: '',
181
+ nodeCount: body ? countNodes(body) : 0,
182
+ };
183
+ });
184
+ }
185
+ case 'TSInterfaceDeclaration': {
186
+ const body = getBodyNode(node);
187
+ return [{
188
+ name: node.id.name,
189
+ kind: 'interface',
190
+ exported,
191
+ bodyHash: '',
192
+ nodeCount: body ? countNodes(body) : 0,
193
+ }];
194
+ }
195
+ case 'TSTypeAliasDeclaration': {
196
+ const body = getBodyNode(node);
197
+ return [{
198
+ name: node.id.name,
199
+ kind: 'type',
200
+ exported,
201
+ bodyHash: '',
202
+ nodeCount: body ? countNodes(body) : 0,
203
+ }];
204
+ }
205
+ case 'TSEnumDeclaration': {
206
+ return [{
207
+ name: node.id.name,
208
+ kind: 'enum',
209
+ exported,
210
+ bodyHash: '',
211
+ nodeCount: countNodes(node),
212
+ }];
213
+ }
214
+ default:
215
+ return [];
216
+ }
217
+ }
218
+ /**
219
+ * Collect local names referenced by export specifier lists.
220
+ * E.g. `export { foo, bar as baz }` → Set(['foo', 'bar'])
221
+ */
222
+ function collectExportedNames(program) {
223
+ const names = new Set();
224
+ for (const stmt of program.body) {
225
+ if (stmt.type === 'ExportNamedDeclaration' &&
226
+ !stmt.declaration &&
227
+ stmt.specifiers.length > 0 &&
228
+ !stmt.source // not re-export
229
+ ) {
230
+ for (const spec of stmt.specifiers) {
231
+ if (spec.type === 'ExportSpecifier') {
232
+ const localName = spec.local.type === 'Identifier' ? spec.local.name : '';
233
+ if (localName)
234
+ names.add(localName);
235
+ }
236
+ }
237
+ }
238
+ }
239
+ return names;
240
+ }
241
+ /** Detect CommonJS exports: module.exports = ..., module.exports.foo = ..., exports.foo = ... */
242
+ function extractCommonJSExports(program) {
243
+ const results = [];
244
+ for (const stmt of program.body) {
245
+ if (stmt.type !== 'ExpressionStatement')
246
+ continue;
247
+ const expr = stmt.expression;
248
+ if (expr.type !== 'AssignmentExpression')
249
+ continue;
250
+ const left = expr.left;
251
+ if (left.type !== 'MemberExpression')
252
+ continue;
253
+ // module.exports.foo = ...
254
+ if (left.object.type === 'MemberExpression' &&
255
+ left.object.object.type === 'Identifier' && left.object.object.name === 'module' &&
256
+ left.object.property.type === 'Identifier' && left.object.property.name === 'exports' &&
257
+ left.property.type === 'Identifier') {
258
+ const right = expr.right;
259
+ const isFn = right.type === 'ArrowFunctionExpression' || right.type === 'FunctionExpression';
260
+ const params = isFn ? getFunctionParams(right) : null;
261
+ results.push({
262
+ name: left.property.name,
263
+ kind: isFn ? 'function' : 'variable',
264
+ exported: true,
265
+ signature: params ? extractSignature(params) : undefined,
266
+ params: params ? extractParams(params) : undefined,
267
+ bodyHash: '',
268
+ nodeCount: right ? countNodes(right) : 0,
269
+ });
270
+ continue;
271
+ }
272
+ // exports.foo = ...
273
+ if (left.object.type === 'Identifier' && left.object.name === 'exports' &&
274
+ left.property.type === 'Identifier') {
275
+ const right = expr.right;
276
+ const isFn = right.type === 'ArrowFunctionExpression' || right.type === 'FunctionExpression';
277
+ const params = isFn ? getFunctionParams(right) : null;
278
+ results.push({
279
+ name: left.property.name,
280
+ kind: isFn ? 'function' : 'variable',
281
+ exported: true,
282
+ signature: params ? extractSignature(params) : undefined,
283
+ params: params ? extractParams(params) : undefined,
284
+ bodyHash: '',
285
+ nodeCount: right ? countNodes(right) : 0,
286
+ });
287
+ continue;
288
+ }
289
+ // module.exports = ...
290
+ if (left.object.type === 'Identifier' && left.object.name === 'module' &&
291
+ left.property.type === 'Identifier' && left.property.name === 'exports') {
292
+ const right = expr.right;
293
+ if (right.type === 'ObjectExpression') {
294
+ // module.exports = { a, b }
295
+ for (const prop of right.properties) {
296
+ if (prop.type === 'Property' && prop.key.type === 'Identifier') {
297
+ const val = prop.value;
298
+ const isFn = val.type === 'ArrowFunctionExpression' || val.type === 'FunctionExpression';
299
+ const params = isFn ? getFunctionParams(val) : null;
300
+ results.push({
301
+ name: prop.key.name,
302
+ kind: isFn ? 'function' : 'variable',
303
+ exported: true,
304
+ signature: params ? extractSignature(params) : undefined,
305
+ params: params ? extractParams(params) : undefined,
306
+ bodyHash: '',
307
+ nodeCount: val ? countNodes(val) : 0,
308
+ });
309
+ }
310
+ if (prop.type === 'SpreadElement')
311
+ continue; // skip spread
312
+ }
313
+ }
314
+ else if (right.type === 'ArrowFunctionExpression' || right.type === 'FunctionExpression') {
315
+ // module.exports = function() {}
316
+ const params = getFunctionParams(right);
317
+ results.push({
318
+ name: 'default',
319
+ kind: 'function',
320
+ exported: true,
321
+ signature: params ? extractSignature(params) : undefined,
322
+ params: params ? extractParams(params) : undefined,
323
+ bodyHash: '',
324
+ nodeCount: countNodes(right),
325
+ });
326
+ }
327
+ continue;
328
+ }
329
+ }
330
+ return results;
331
+ }
332
+ /** Check if file has export * from '...' */
333
+ function hasReExportAll(program) {
334
+ return program.body.some(stmt => stmt.type === 'ExportAllDeclaration');
335
+ }
336
+ /**
337
+ * Extract all top-level declarations from a parsed program.
338
+ * Handles ESM exports, CommonJS, and non-exported declarations.
339
+ */
340
+ function extractDeclarations(program) {
341
+ const declarations = [];
342
+ const exportedNames = collectExportedNames(program);
343
+ for (const stmt of program.body) {
344
+ switch (stmt.type) {
345
+ case 'ExportNamedDeclaration': {
346
+ if (stmt.declaration) {
347
+ declarations.push(...extractSingleDeclaration(stmt.declaration, true));
348
+ }
349
+ // specifier-only exports (export { foo }) are handled by collectExportedNames
350
+ break;
351
+ }
352
+ case 'ExportDefaultDeclaration': {
353
+ const decl = stmt.declaration;
354
+ const extracted = extractSingleDeclaration(decl, true);
355
+ if (extracted.length > 0) {
356
+ // Ensure default exports get name 'default' if unnamed
357
+ for (const d of extracted) {
358
+ if (!d.name || d.name === 'unknown')
359
+ d.name = 'default';
360
+ }
361
+ declarations.push(...extracted);
362
+ }
363
+ else {
364
+ // Default export of an expression
365
+ declarations.push({
366
+ name: 'default',
367
+ kind: 'variable',
368
+ exported: true,
369
+ bodyHash: '',
370
+ nodeCount: countNodes(decl),
371
+ });
372
+ }
373
+ break;
374
+ }
375
+ case 'FunctionDeclaration':
376
+ case 'ClassDeclaration':
377
+ case 'VariableDeclaration':
378
+ case 'TSInterfaceDeclaration':
379
+ case 'TSTypeAliasDeclaration':
380
+ case 'TSEnumDeclaration': {
381
+ const extracted = extractSingleDeclaration(stmt, false);
382
+ // Mark as exported if referenced in an export specifier list
383
+ for (const d of extracted) {
384
+ if (exportedNames.has(d.name)) {
385
+ d.exported = true;
386
+ }
387
+ }
388
+ declarations.push(...extracted);
389
+ break;
390
+ }
391
+ default:
392
+ break;
393
+ }
394
+ }
395
+ // Add CommonJS exports
396
+ const cjsExports = extractCommonJSExports(program);
397
+ // Merge: if a CJS export name matches an existing declaration, mark it exported
398
+ for (const cjs of cjsExports) {
399
+ const existing = declarations.find(d => d.name === cjs.name);
400
+ if (existing) {
401
+ existing.exported = true;
402
+ if (cjs.signature && !existing.signature)
403
+ existing.signature = cjs.signature;
404
+ if (cjs.params && !existing.params)
405
+ existing.params = cjs.params;
406
+ }
407
+ else {
408
+ declarations.push(cjs);
409
+ }
410
+ }
411
+ return {
412
+ declarations,
413
+ reExportAll: hasReExportAll(program),
414
+ };
415
+ }
416
+ // ── Canonicalization (Phase 2) ─────────────────────────────────
417
+ /**
418
+ * Collect local identifiers declared within a body scope.
419
+ * These are the identifiers that get normalized to $0, $1, etc.
420
+ */
421
+ function collectLocalIdentifiers(node, params = []) {
422
+ const locals = new Set();
423
+ // Add parameter names
424
+ for (const p of params) {
425
+ collectPatternNames(p, locals);
426
+ }
427
+ // Walk the body looking for variable declarations, catch params
428
+ walkNode(node, (n) => {
429
+ if (n.type === 'VariableDeclarator' && n.id) {
430
+ collectPatternNames(n.id, locals);
431
+ }
432
+ if (n.type === 'CatchClause' && n.param) {
433
+ collectPatternNames(n.param, locals);
434
+ }
435
+ // For-in/for-of left-hand side
436
+ if ((n.type === 'ForInStatement' || n.type === 'ForOfStatement') && n.left.type === 'VariableDeclaration') {
437
+ for (const d of n.left.declarations) {
438
+ collectPatternNames(d.id, locals);
439
+ }
440
+ }
441
+ });
442
+ return locals;
443
+ }
444
+ function collectPatternNames(node, names) {
445
+ switch (node.type) {
446
+ case 'Identifier':
447
+ names.add(node.name);
448
+ break;
449
+ case 'AssignmentPattern':
450
+ collectPatternNames(node.left, names);
451
+ break;
452
+ case 'RestElement':
453
+ collectPatternNames(node.argument, names);
454
+ break;
455
+ case 'ObjectPattern':
456
+ for (const prop of node.properties) {
457
+ if (prop.type === 'Property') {
458
+ collectPatternNames(prop.value, names);
459
+ }
460
+ else if (prop.type === 'RestElement') {
461
+ collectPatternNames(prop.argument, names);
462
+ }
463
+ }
464
+ break;
465
+ case 'ArrayPattern':
466
+ for (const el of node.elements) {
467
+ if (el)
468
+ collectPatternNames(el, names);
469
+ }
470
+ break;
471
+ case 'TSParameterProperty':
472
+ collectPatternNames(node.parameter, names);
473
+ break;
474
+ }
475
+ }
476
+ /** Walk all nodes in preorder, calling visitor on each. */
477
+ function walkNode(node, visitor) {
478
+ visitor(node);
479
+ for (const key of Object.keys(node)) {
480
+ if (key === 'parent')
481
+ continue;
482
+ const val = node[key];
483
+ if (val && typeof val === 'object') {
484
+ if (Array.isArray(val)) {
485
+ for (const item of val) {
486
+ if (item && typeof item === 'object' && typeof item.type === 'string') {
487
+ walkNode(item, visitor);
488
+ }
489
+ }
490
+ }
491
+ else if (typeof val.type === 'string') {
492
+ walkNode(val, visitor);
493
+ }
494
+ }
495
+ }
496
+ }
497
+ /** Location/position property names to strip from canonical form. */
498
+ const STRIP_KEYS = new Set(['range', 'loc', 'start', 'end', 'parent']);
499
+ /**
500
+ * Canonicalize a body subtree for hashing.
501
+ * - Strips location metadata
502
+ * - Normalizes local identifiers to $0, $1, ...
503
+ * - Keeps literals and property keys as-is
504
+ */
505
+ function canonicalizeBody(bodyNode, params = []) {
506
+ const locals = collectLocalIdentifiers(bodyNode, params);
507
+ const localMap = new Map();
508
+ let nextId = 0;
509
+ function getPlaceholder(name) {
510
+ let ph = localMap.get(name);
511
+ if (ph === undefined) {
512
+ ph = '$' + nextId++;
513
+ localMap.set(name, ph);
514
+ }
515
+ return ph;
516
+ }
517
+ function canonicalize(node) {
518
+ if (node === null || node === undefined)
519
+ return node;
520
+ if (typeof node !== 'object')
521
+ return node;
522
+ if (Array.isArray(node)) {
523
+ return node.map(item => canonicalize(item));
524
+ }
525
+ const obj = node;
526
+ if (typeof obj.type !== 'string')
527
+ return node;
528
+ const result = {};
529
+ for (const key of Object.keys(obj)) {
530
+ if (STRIP_KEYS.has(key))
531
+ continue;
532
+ if (obj.type === 'Identifier' && key === 'name') {
533
+ const name = obj.name;
534
+ // Check if this identifier is used as a property key
535
+ // Property keys are NOT normalized
536
+ if (locals.has(name)) {
537
+ result[key] = getPlaceholder(name);
538
+ }
539
+ else {
540
+ result[key] = name;
541
+ }
542
+ continue;
543
+ }
544
+ result[key] = canonicalize(obj[key]);
545
+ }
546
+ return result;
547
+ }
548
+ const canonical = canonicalize(bodyNode);
549
+ return JSON.stringify(canonical);
550
+ }
551
+ /** Compute SHA-256 hash of a canonical string. */
552
+ function computeBodyHash(canonical) {
553
+ return (0, crypto_1.createHash)('sha256').update(canonical).digest('hex');
554
+ }
555
+ /**
556
+ * Find the body AST node for a declaration by name in a program.
557
+ * Returns the body node and function params (if applicable).
558
+ */
559
+ function findDeclarationBody(program, name) {
560
+ for (const stmt of program.body) {
561
+ let declNode = null;
562
+ if (stmt.type === 'ExportNamedDeclaration' && stmt.declaration) {
563
+ declNode = stmt.declaration;
564
+ }
565
+ else if (stmt.type === 'ExportDefaultDeclaration') {
566
+ declNode = stmt.declaration;
567
+ }
568
+ else {
569
+ declNode = stmt;
570
+ }
571
+ if (!declNode)
572
+ continue;
573
+ if (declNode.type === 'FunctionDeclaration' && (declNode.id?.name === name || (name === 'default' && !declNode.id))) {
574
+ return { body: declNode.body, params: declNode.params };
575
+ }
576
+ if (declNode.type === 'ClassDeclaration' && (declNode.id?.name === name || (name === 'default' && !declNode.id))) {
577
+ return { body: declNode.body, params: [] };
578
+ }
579
+ if (declNode.type === 'VariableDeclaration') {
580
+ for (const d of declNode.declarations) {
581
+ if (d.id.type === 'Identifier' && d.id.name === name && d.init) {
582
+ if (d.init.type === 'ArrowFunctionExpression' || d.init.type === 'FunctionExpression') {
583
+ return { body: d.init.body, params: d.init.params };
584
+ }
585
+ return { body: d.init, params: [] };
586
+ }
587
+ }
588
+ }
589
+ if (declNode.type === 'TSInterfaceDeclaration' && declNode.id.name === name) {
590
+ return { body: declNode.body, params: [] };
591
+ }
592
+ if (declNode.type === 'TSTypeAliasDeclaration' && declNode.id.name === name) {
593
+ return { body: declNode.typeAnnotation, params: [] };
594
+ }
595
+ if (declNode.type === 'TSEnumDeclaration' && declNode.id.name === name) {
596
+ return { body: declNode, params: [] };
597
+ }
598
+ }
599
+ return { body: null, params: [] };
600
+ }
601
+ /**
602
+ * Populate bodyHash for all declarations by finding their body nodes in the AST.
603
+ */
604
+ function populateBodyHashes(declarations, program) {
605
+ for (const decl of declarations) {
606
+ const { body, params } = findDeclarationBody(program, decl.name);
607
+ if (body) {
608
+ const canonical = canonicalizeBody(body, params);
609
+ decl.bodyHash = computeBodyHash(canonical);
610
+ }
611
+ }
612
+ }
613
+ //# sourceMappingURL=astAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astAnalyzer.js","sourceRoot":"","sources":["../../src/services/astAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=astAnalyzer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astAnalyzer.test.d.ts","sourceRoot":"","sources":["../../src/services/astAnalyzer.test.ts"],"names":[],"mappings":""}