logicstamp-context 0.7.1 → 0.8.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 (81) hide show
  1. package/README.md +10 -1
  2. package/dist/cli/commands/clean.d.ts +2 -1
  3. package/dist/cli/commands/clean.d.ts.map +1 -1
  4. package/dist/cli/commands/clean.js +30 -2
  5. package/dist/cli/commands/clean.js.map +1 -1
  6. package/dist/cli/commands/compare/cleanup.d.ts +8 -0
  7. package/dist/cli/commands/compare/cleanup.d.ts.map +1 -0
  8. package/dist/cli/commands/compare/cleanup.js +27 -0
  9. package/dist/cli/commands/compare/cleanup.js.map +1 -0
  10. package/dist/cli/commands/compare/core.d.ts +29 -0
  11. package/dist/cli/commands/compare/core.d.ts.map +1 -0
  12. package/dist/cli/commands/compare/core.js +249 -0
  13. package/dist/cli/commands/compare/core.js.map +1 -0
  14. package/dist/cli/commands/compare/display.d.ts +9 -0
  15. package/dist/cli/commands/compare/display.d.ts.map +1 -0
  16. package/dist/cli/commands/compare/display.js +251 -0
  17. package/dist/cli/commands/compare/display.js.map +1 -0
  18. package/dist/cli/commands/compare/index.d.ts +26 -0
  19. package/dist/cli/commands/compare/index.d.ts.map +1 -0
  20. package/dist/cli/commands/compare/index.js +33 -0
  21. package/dist/cli/commands/compare/index.js.map +1 -0
  22. package/dist/cli/commands/compare/multiFile.d.ts +16 -0
  23. package/dist/cli/commands/compare/multiFile.d.ts.map +1 -0
  24. package/dist/cli/commands/compare/multiFile.js +113 -0
  25. package/dist/cli/commands/compare/multiFile.js.map +1 -0
  26. package/dist/cli/commands/compare/singleFile.d.ts +20 -0
  27. package/dist/cli/commands/compare/singleFile.d.ts.map +1 -0
  28. package/dist/cli/commands/compare/singleFile.js +341 -0
  29. package/dist/cli/commands/compare/singleFile.js.map +1 -0
  30. package/dist/cli/commands/{compare.d.ts → compare/types.d.ts} +21 -28
  31. package/dist/cli/commands/compare/types.d.ts.map +1 -0
  32. package/dist/cli/commands/compare/types.js +5 -0
  33. package/dist/cli/commands/compare/types.js.map +1 -0
  34. package/dist/cli/commands/compare/utils.d.ts +20 -0
  35. package/dist/cli/commands/compare/utils.d.ts.map +1 -0
  36. package/dist/cli/commands/compare/utils.js +94 -0
  37. package/dist/cli/commands/compare/utils.js.map +1 -0
  38. package/dist/cli/commands/context/watchMode/watchMode.d.ts.map +1 -1
  39. package/dist/cli/commands/context/watchMode/watchMode.js +2 -107
  40. package/dist/cli/commands/context/watchMode/watchMode.js.map +1 -1
  41. package/dist/cli/commands/context.d.ts +1 -0
  42. package/dist/cli/commands/context.d.ts.map +1 -1
  43. package/dist/cli/commands/context.js +3 -1
  44. package/dist/cli/commands/context.js.map +1 -1
  45. package/dist/cli/handlers/compareHandler.d.ts.map +1 -1
  46. package/dist/cli/handlers/compareHandler.js +297 -9
  47. package/dist/cli/handlers/compareHandler.js.map +1 -1
  48. package/dist/cli/index.js +1 -1
  49. package/dist/cli/index.js.map +1 -1
  50. package/dist/cli/parser/argumentParser.d.ts +2 -0
  51. package/dist/cli/parser/argumentParser.d.ts.map +1 -1
  52. package/dist/cli/parser/argumentParser.js +20 -2
  53. package/dist/cli/parser/argumentParser.js.map +1 -1
  54. package/dist/cli/parser/helpText.d.ts.map +1 -1
  55. package/dist/cli/parser/helpText.js +29 -0
  56. package/dist/cli/parser/helpText.js.map +1 -1
  57. package/dist/core/violations.d.ts +36 -0
  58. package/dist/core/violations.d.ts.map +1 -0
  59. package/dist/core/violations.js +292 -0
  60. package/dist/core/violations.js.map +1 -0
  61. package/dist/extractors/shared/propTypeNormalizer.d.ts.map +1 -1
  62. package/dist/extractors/shared/propTypeNormalizer.js +2 -1
  63. package/dist/extractors/shared/propTypeNormalizer.js.map +1 -1
  64. package/dist/index.d.ts +2 -2
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +1 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/utils/fileLock.d.ts.map +1 -1
  69. package/dist/utils/fileLock.js +79 -5
  70. package/dist/utils/fileLock.js.map +1 -1
  71. package/dist/utils/git.d.ts +135 -0
  72. package/dist/utils/git.d.ts.map +1 -0
  73. package/dist/utils/git.js +429 -0
  74. package/dist/utils/git.js.map +1 -0
  75. package/dist/utils/hash.d.ts.map +1 -1
  76. package/dist/utils/hash.js +20 -4
  77. package/dist/utils/hash.js.map +1 -1
  78. package/package.json +2 -1
  79. package/dist/cli/commands/compare.d.ts.map +0 -1
  80. package/dist/cli/commands/compare.js +0 -648
  81. package/dist/cli/commands/compare.js.map +0 -1
package/README.md CHANGED
@@ -226,7 +226,14 @@ stamp context compare --approve # update (like jest -u)
226
226
 
227
227
  Useful for reviewing changes before committing or validating context is up-to-date.
228
228
 
229
- > ⚠️ **Note:** Context files are gitignored by default. For CI-based drift detection, the `--baseline git:<ref>` option (e.g., `--baseline git:main`) is **not yet implemented**. Until automation is available, use the manual workflow: generate context from current code, checkout baseline branch, generate context from baseline, then compare. See the [roadmap](https://logicstamp.dev/roadmap) for planned automation.
229
+ **Git baseline comparison** *(v0.7.2)*: Compare against any git ref:
230
+ ```bash
231
+ stamp context compare --baseline git:main # Compare against main branch
232
+ stamp context compare --baseline git:HEAD # Compare against HEAD
233
+ stamp context compare --baseline git:v1.0.0 # Compare against a tag
234
+ ```
235
+
236
+ > **ℹ️ Note:** Context files are gitignored by default. Git baseline comparison uses git worktrees to generate context for both the baseline ref and the current working tree, then performs a structural contract comparison. See [docs/cli/compare.md](docs/cli/compare.md) for complete documentation.
230
237
 
231
238
  ## How it Works
232
239
 
@@ -286,6 +293,8 @@ npm install -g logicstamp-mcp
286
293
 
287
294
  Then configure your AI assistant to use the LogicStamp MCP Server.
288
295
 
296
+ 🔗 **See [LogicStamp MCP Server Repository](https://github.com/LogicStamp/logicstamp-mcp)**
297
+
289
298
  📋 **See [MCP Getting Started Guide](https://logicstamp.dev/docs/mcp/getting-started)** for setup instructions.
290
299
 
291
300
  ## Example Output
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Clean command - Removes all compiled context artifacts
3
- * Deletes context_main.json, all folder context.json files, and optionally .logicstamp/ cache
3
+ * Deletes context_main.json, all folder context.json files, context.toon files,
4
+ * context_*.toon variants, and optionally .logicstamp/ cache
4
5
  */
5
6
  export interface CleanOptions {
6
7
  projectRoot?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAmDD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FvE"}
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA4ED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FvE"}
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * Clean command - Removes all compiled context artifacts
3
- * Deletes context_main.json, all folder context.json files, and optionally .logicstamp/ cache
3
+ * Deletes context_main.json, all folder context.json files, context.toon files,
4
+ * context_*.toon variants, and optionally .logicstamp/ cache
4
5
  */
5
6
  import { glob } from 'glob';
6
7
  import { unlink, rm, stat } from 'node:fs/promises';
7
8
  import { resolve, join, relative } from 'node:path';
8
9
  import { fileExists, normalizeEntryId } from '../../utils/fsx.js';
10
+ const GLOB_IGNORE = ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.next/**'];
9
11
  /**
10
12
  * Normalize path for display (convert backslashes to forward slashes)
11
13
  */
@@ -20,11 +22,32 @@ async function findContextFiles(projectRoot) {
20
22
  const contextFiles = await glob('**/context.json', {
21
23
  cwd: projectRoot,
22
24
  absolute: false,
23
- ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.next/**'],
25
+ ignore: GLOB_IGNORE,
24
26
  });
25
27
  // Convert to normalized relative paths
26
28
  return contextFiles.map(file => normalizeEntryId(file)).sort();
27
29
  }
30
+ /**
31
+ * Find all context.toon and context_*.toon files in the project
32
+ * Returns relative paths from projectRoot
33
+ */
34
+ async function findContextToonFiles(projectRoot) {
35
+ const [toonFiles, toonVariants] = await Promise.all([
36
+ glob('**/context.toon', {
37
+ cwd: projectRoot,
38
+ absolute: false,
39
+ ignore: GLOB_IGNORE,
40
+ }),
41
+ glob('**/context_*.toon', {
42
+ cwd: projectRoot,
43
+ absolute: false,
44
+ ignore: GLOB_IGNORE,
45
+ }),
46
+ ]);
47
+ // Combine and deduplicate (context.toon could theoretically match in some edge cases)
48
+ const allToon = new Set([...toonFiles, ...toonVariants]);
49
+ return [...allToon].map(file => normalizeEntryId(file)).sort();
50
+ }
28
51
  /**
29
52
  * Find context_main.json in the project root
30
53
  */
@@ -58,6 +81,7 @@ export async function cleanCommand(options) {
58
81
  const projectRoot = resolve(options.projectRoot || '.');
59
82
  // Find all files to remove
60
83
  const contextFiles = await findContextFiles(projectRoot);
84
+ const contextToonFiles = await findContextToonFiles(projectRoot);
61
85
  const mainContextFile = await findMainContextFile(projectRoot);
62
86
  const logicStampDir = await findLogicStampDir(projectRoot);
63
87
  // Collect all files to remove (as relative paths)
@@ -67,6 +91,7 @@ export async function cleanCommand(options) {
67
91
  filesToRemove.push(relative(projectRoot, mainContextFile));
68
92
  }
69
93
  filesToRemove.push(...contextFiles);
94
+ filesToRemove.push(...contextToonFiles);
70
95
  // If no files found, exit early
71
96
  if (filesToRemove.length === 0 && !logicStampDir) {
72
97
  if (options.quiet) {
@@ -88,6 +113,9 @@ export async function cleanCommand(options) {
88
113
  // file is already relative
89
114
  console.log(` - ${displayPath(file)}`);
90
115
  }
116
+ for (const file of contextToonFiles) {
117
+ console.log(` - ${displayPath(file)}`);
118
+ }
91
119
  if (logicStampDir) {
92
120
  const relPath = relative(projectRoot, logicStampDir);
93
121
  console.log(` - ${displayPath(relPath)}/`);
@@ -1 +1 @@
1
- {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/cli/commands/clean.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Cleanup functions for compare command
3
+ */
4
+ /**
5
+ * Clean up orphaned files
6
+ */
7
+ export declare function cleanOrphanedFiles(orphanedFiles: string[], baseDir: string, quiet?: boolean): Promise<number>;
8
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/compare/cleanup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBnH"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Cleanup functions for compare command
3
+ */
4
+ import { unlink } from 'node:fs/promises';
5
+ import { join } from 'node:path';
6
+ /**
7
+ * Clean up orphaned files
8
+ */
9
+ export async function cleanOrphanedFiles(orphanedFiles, baseDir, quiet) {
10
+ let deletedCount = 0;
11
+ for (const file of orphanedFiles) {
12
+ const filePath = join(baseDir, file);
13
+ try {
14
+ await unlink(filePath);
15
+ if (!quiet) {
16
+ console.log(` 🗑️ Deleted: ${file}`);
17
+ }
18
+ deletedCount++;
19
+ }
20
+ catch (error) {
21
+ // Always show errors even in quiet mode
22
+ console.error(` ⚠️ Failed to delete ${file}: ${error.message}`);
23
+ }
24
+ }
25
+ return deletedCount;
26
+ }
27
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../../src/cli/commands/compare/cleanup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,aAAuB,EAAE,OAAe,EAAE,KAAe;IAChG,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,YAAY,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wCAAwC;YACxC,OAAO,CAAC,KAAK,CAAC,2BAA2B,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Core comparison logic - indexing and diffing bundles
3
+ */
4
+ import type { LogicStampBundle } from '../../../core/pack.js';
5
+ import type { LiteSig, CompareResult } from './types.js';
6
+ /**
7
+ * Normalize a component/hook/function name for comparison
8
+ * Strips relative paths and normalizes casing
9
+ */
10
+ export declare function normalizeName(name: string): string;
11
+ /**
12
+ * Normalize an array of names for comparison
13
+ */
14
+ export declare function normalizeNames(names: string[]): string[];
15
+ /**
16
+ * Index bundles into a map of entryId -> LiteSig
17
+ */
18
+ export declare function index(bundles: LogicStampBundle[], normalize?: boolean): Map<string, LiteSig>;
19
+ /**
20
+ * Compare two arrays with optional normalization
21
+ * Always sorts arrays for order-independence
22
+ */
23
+ export declare function arraysEqual(a: string[], b: string[], normalize?: boolean): boolean;
24
+ /**
25
+ * Diff two indexed bundles with detailed change information
26
+ * @param ignoreHashOnly - If true, ignore hash-only changes (useful for git baseline comparisons where hash may differ due to TypeScript project resolution differences between worktree and working directory contexts)
27
+ */
28
+ export declare function diff(oldIdx: Map<string, LiteSig>, newIdx: Map<string, LiteSig>, normalize?: boolean, ignoreHashOnly?: boolean): CompareResult;
29
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/compare/core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAExD;AA2CD;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,EAAE,SAAS,UAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAwD1F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,UAAQ,GAAG,OAAO,CAUhF;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,UAAQ,EAAE,cAAc,UAAQ,GAAG,aAAa,CA4HzI"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Core comparison logic - indexing and diffing bundles
3
+ */
4
+ /**
5
+ * Normalize a component/hook/function name for comparison
6
+ * Strips relative paths and normalizes casing
7
+ */
8
+ export function normalizeName(name) {
9
+ // Strip relative path prefixes (./, ../, ../../, etc.)
10
+ let stripped = name;
11
+ while (stripped.startsWith('./') || stripped.startsWith('../')) {
12
+ stripped = stripped.replace(/^\.\.?\//, '');
13
+ }
14
+ // Extract just the basename (last part after /)
15
+ const basename = stripped.includes('/') ? stripped.split('/').pop() : stripped;
16
+ // Normalize to lowercase for case-insensitive comparison
17
+ return basename.toLowerCase();
18
+ }
19
+ /**
20
+ * Normalize an array of names for comparison
21
+ */
22
+ export function normalizeNames(names) {
23
+ return [...names].map(normalizeName).sort();
24
+ }
25
+ /**
26
+ * Normalize an object by sorting its keys recursively for stable comparison
27
+ * This ensures objects with the same content but different key order compare as equal
28
+ */
29
+ function normalizeObject(obj) {
30
+ if (obj === null || typeof obj !== 'object') {
31
+ return obj;
32
+ }
33
+ if (Array.isArray(obj)) {
34
+ return obj.map(item => normalizeObject(item));
35
+ }
36
+ const sorted = Object.keys(obj)
37
+ .sort()
38
+ .reduce((acc, key) => {
39
+ acc[key] = normalizeObject(obj[key]);
40
+ return acc;
41
+ }, {});
42
+ return sorted;
43
+ }
44
+ /**
45
+ * Compare two values (primitives or objects) for equality with normalized key order
46
+ */
47
+ function valuesEqual(a, b) {
48
+ if (a === b)
49
+ return true;
50
+ if (a === null || b === null)
51
+ return a === b;
52
+ if (typeof a !== typeof b)
53
+ return false;
54
+ if (typeof a !== 'object')
55
+ return a === b;
56
+ return JSON.stringify(normalizeObject(a)) === JSON.stringify(normalizeObject(b));
57
+ }
58
+ /**
59
+ * Compare two objects with normalized key order
60
+ * Ensures objects with same content but different key order compare as equal
61
+ */
62
+ function objectsEqual(a, b) {
63
+ const aNorm = normalizeObject(a);
64
+ const bNorm = normalizeObject(b);
65
+ return JSON.stringify(aNorm) === JSON.stringify(bNorm);
66
+ }
67
+ /**
68
+ * Index bundles into a map of entryId -> LiteSig
69
+ */
70
+ export function index(bundles, normalize = false) {
71
+ const m = new Map();
72
+ for (const b of bundles) {
73
+ for (const n of b.graph.nodes) {
74
+ const c = n.contract;
75
+ // Extract full props/emits objects with types for comparison
76
+ // Filter out any invalid prop/emit names (like stringified objects)
77
+ const rawProps = c.interface?.props ?? {};
78
+ const rawEmits = c.interface?.emits ?? {};
79
+ // Filter and build props object with valid keys only
80
+ const propsObj = {};
81
+ for (const key of Object.keys(rawProps)) {
82
+ if (typeof key === 'string' &&
83
+ key.length > 0 &&
84
+ !key.includes('\n') &&
85
+ !key.includes('\r') &&
86
+ !key.includes('{') &&
87
+ !key.includes('}') &&
88
+ /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {
89
+ propsObj[key] = rawProps[key];
90
+ }
91
+ }
92
+ // Filter and build emits object with valid keys only
93
+ const emitsObj = {};
94
+ for (const key of Object.keys(rawEmits)) {
95
+ if (typeof key === 'string' &&
96
+ key.length > 0 &&
97
+ !key.includes('\n') &&
98
+ !key.includes('\r') &&
99
+ !key.includes('{') &&
100
+ !key.includes('}') &&
101
+ /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {
102
+ emitsObj[key] = rawEmits[key];
103
+ }
104
+ }
105
+ const sig = {
106
+ semanticHash: c.semanticHash,
107
+ imports: normalize ? normalizeNames(c.composition?.imports ?? []) : (c.composition?.imports ?? []),
108
+ hooks: normalize ? normalizeNames(c.composition?.hooks ?? []) : (c.composition?.hooks ?? []),
109
+ functions: normalize ? normalizeNames(c.composition?.functions ?? []) : (c.composition?.functions ?? []),
110
+ components: normalize ? normalizeNames(c.composition?.components ?? []) : (c.composition?.components ?? []),
111
+ props: propsObj,
112
+ emits: emitsObj,
113
+ variables: normalize ? normalizeNames(c.composition?.variables ?? []) : (c.composition?.variables ?? []),
114
+ state: c.interface?.state ?? {},
115
+ exportKind: typeof c.exports === 'string' ? 'default'
116
+ : c.exports?.named?.length ? 'named' : 'none',
117
+ apiSignature: c.interface?.apiSignature,
118
+ };
119
+ m.set(c.entryId.toLowerCase(), sig);
120
+ }
121
+ }
122
+ return m;
123
+ }
124
+ /**
125
+ * Compare two arrays with optional normalization
126
+ * Always sorts arrays for order-independence
127
+ */
128
+ export function arraysEqual(a, b, normalize = false) {
129
+ if (normalize) {
130
+ const aNorm = normalizeNames(a);
131
+ const bNorm = normalizeNames(b);
132
+ return JSON.stringify(aNorm) === JSON.stringify(bNorm);
133
+ }
134
+ // Sort both arrays for order-independence
135
+ const aSorted = [...a].sort();
136
+ const bSorted = [...b].sort();
137
+ return JSON.stringify(aSorted) === JSON.stringify(bSorted);
138
+ }
139
+ /**
140
+ * Diff two indexed bundles with detailed change information
141
+ * @param ignoreHashOnly - If true, ignore hash-only changes (useful for git baseline comparisons where hash may differ due to TypeScript project resolution differences between worktree and working directory contexts)
142
+ */
143
+ export function diff(oldIdx, newIdx, normalize = false, ignoreHashOnly = false) {
144
+ const added = [];
145
+ const removed = [];
146
+ const changed = [];
147
+ // Find added components
148
+ for (const id of newIdx.keys()) {
149
+ if (!oldIdx.has(id)) {
150
+ added.push(id);
151
+ }
152
+ }
153
+ // Find removed components
154
+ for (const id of oldIdx.keys()) {
155
+ if (!newIdx.has(id)) {
156
+ removed.push(id);
157
+ }
158
+ }
159
+ // Find changed components with detailed deltas
160
+ for (const id of newIdx.keys()) {
161
+ if (oldIdx.has(id)) {
162
+ const a = oldIdx.get(id);
163
+ const b = newIdx.get(id);
164
+ const deltas = [];
165
+ // Props and emits are now Record<string, any> objects
166
+ // We need to detect: added keys, removed keys, and changed types
167
+ const oldProps = a.props ?? {};
168
+ const newProps = b.props ?? {};
169
+ const oldEmits = a.emits ?? {};
170
+ const newEmits = b.emits ?? {};
171
+ // Compare props, emits, and state
172
+ // In git baseline mode (ignoreHashOnly=true), only detect structural changes (added/removed keys)
173
+ // because type values can differ due to TypeScript resolution differences between worktree and working directory
174
+ const hasStructuralChanges = (oldObj, newObj) => {
175
+ const oldKeys = new Set(Object.keys(oldObj));
176
+ const newKeys = new Set(Object.keys(newObj));
177
+ for (const k of oldKeys)
178
+ if (!newKeys.has(k))
179
+ return true;
180
+ for (const k of newKeys)
181
+ if (!oldKeys.has(k))
182
+ return true;
183
+ return false;
184
+ };
185
+ const propsHaveStructuralChanges = hasStructuralChanges(oldProps, newProps);
186
+ const emitsHaveStructuralChanges = hasStructuralChanges(oldEmits, newEmits);
187
+ const stateHasStructuralChanges = hasStructuralChanges(a.state, b.state);
188
+ // Full comparison (includes type changes) - only when NOT in git baseline mode
189
+ const propsHaveChanges = ignoreHashOnly ? propsHaveStructuralChanges : !objectsEqual(oldProps, newProps);
190
+ const emitsHaveChanges = ignoreHashOnly ? emitsHaveStructuralChanges : !objectsEqual(oldEmits, newEmits);
191
+ const stateHasChanges = ignoreHashOnly ? stateHasStructuralChanges : !objectsEqual(a.state, b.state);
192
+ const hasNonHashChanges = !arraysEqual(a.imports, b.imports, normalize) ||
193
+ !arraysEqual(a.hooks, b.hooks, normalize) ||
194
+ !arraysEqual(a.functions, b.functions, normalize) ||
195
+ !arraysEqual(a.components, b.components, normalize) ||
196
+ !arraysEqual(a.variables, b.variables, normalize) ||
197
+ propsHaveChanges ||
198
+ emitsHaveChanges ||
199
+ stateHasChanges ||
200
+ a.exportKind !== b.exportKind ||
201
+ !objectsEqual(a.apiSignature ?? {}, b.apiSignature ?? {});
202
+ // Only include hash change if there are other changes, or if ignoreHashOnly is false
203
+ if (a.semanticHash !== b.semanticHash && (!ignoreHashOnly || hasNonHashChanges)) {
204
+ deltas.push({ type: 'hash', old: a.semanticHash, new: b.semanticHash });
205
+ }
206
+ if (!arraysEqual(a.imports, b.imports, normalize)) {
207
+ deltas.push({ type: 'imports', old: a.imports, new: b.imports });
208
+ }
209
+ if (!arraysEqual(a.hooks, b.hooks, normalize)) {
210
+ deltas.push({ type: 'hooks', old: a.hooks, new: b.hooks });
211
+ }
212
+ if (!arraysEqual(a.functions, b.functions, normalize)) {
213
+ deltas.push({ type: 'functions', old: a.functions, new: b.functions });
214
+ }
215
+ if (!arraysEqual(a.components, b.components, normalize)) {
216
+ deltas.push({ type: 'components', old: a.components, new: b.components });
217
+ }
218
+ // Add props delta (full objects, diff computed on display)
219
+ if (propsHaveChanges) {
220
+ deltas.push({ type: 'props', old: oldProps, new: newProps });
221
+ }
222
+ // Add emits delta (full objects, diff computed on display)
223
+ if (emitsHaveChanges) {
224
+ deltas.push({ type: 'emits', old: oldEmits, new: newEmits });
225
+ }
226
+ if (!arraysEqual(a.variables, b.variables, normalize)) {
227
+ deltas.push({ type: 'variables', old: a.variables, new: b.variables });
228
+ }
229
+ if (stateHasChanges) {
230
+ deltas.push({ type: 'state', old: a.state, new: b.state });
231
+ }
232
+ if (a.exportKind !== b.exportKind) {
233
+ deltas.push({ type: 'exports', old: a.exportKind, new: b.exportKind });
234
+ }
235
+ if (!objectsEqual(a.apiSignature ?? {}, b.apiSignature ?? {})) {
236
+ deltas.push({ type: 'apiSignature', old: a.apiSignature ?? null, new: b.apiSignature ?? null });
237
+ }
238
+ if (deltas.length > 0) {
239
+ changed.push({ id, deltas });
240
+ }
241
+ }
242
+ }
243
+ // Only removals and changes qualify as drift; additions are growth, not drift
244
+ const status = removed.length === 0 && changed.length === 0
245
+ ? 'PASS'
246
+ : 'DRIFT';
247
+ return { status, added, removed, changed };
248
+ }
249
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/cli/commands/compare/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Display formatting for compare command results
3
+ */
4
+ import type { MultiFileCompareResult } from './types.js';
5
+ /**
6
+ * Format and display multi-file comparison results
7
+ */
8
+ export declare function displayMultiFileCompareResult(result: MultiFileCompareResult, stats: boolean, quiet?: boolean): void;
9
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/compare/display.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAIzD;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAoPnH"}