@metaobjectsdev/codegen-ts 0.23.2 → 0.24.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 (153) hide show
  1. package/dist/generator.d.ts +9 -0
  2. package/dist/generator.d.ts.map +1 -1
  3. package/dist/generator.js.map +1 -1
  4. package/dist/generators/api-field-shape.js +1 -1
  5. package/dist/generators/api-field-shape.js.map +1 -1
  6. package/dist/generators/api-model.d.ts.map +1 -1
  7. package/dist/generators/api-model.js +71 -42
  8. package/dist/generators/api-model.js.map +1 -1
  9. package/dist/generators/docs-data-builder.d.ts.map +1 -1
  10. package/dist/generators/docs-data-builder.js +36 -1
  11. package/dist/generators/docs-data-builder.js.map +1 -1
  12. package/dist/generators/docs-data.d.ts +14 -0
  13. package/dist/generators/docs-data.d.ts.map +1 -1
  14. package/dist/generators/docs-file.d.ts.map +1 -1
  15. package/dist/generators/docs-file.js +13 -4
  16. package/dist/generators/docs-file.js.map +1 -1
  17. package/dist/generators/extractor-file.d.ts.map +1 -1
  18. package/dist/generators/extractor-file.js +7 -11
  19. package/dist/generators/extractor-file.js.map +1 -1
  20. package/dist/generators/index.d.ts +4 -0
  21. package/dist/generators/index.d.ts.map +1 -1
  22. package/dist/generators/index.js +5 -0
  23. package/dist/generators/index.js.map +1 -1
  24. package/dist/generators/output-parser-file.d.ts.map +1 -1
  25. package/dist/generators/output-parser-file.js +12 -7
  26. package/dist/generators/output-parser-file.js.map +1 -1
  27. package/dist/generators/output-prompt-file.d.ts.map +1 -1
  28. package/dist/generators/output-prompt-file.js +14 -24
  29. package/dist/generators/output-prompt-file.js.map +1 -1
  30. package/dist/generators/requirement-tests.d.ts +44 -0
  31. package/dist/generators/requirement-tests.d.ts.map +1 -0
  32. package/dist/generators/requirement-tests.js +127 -0
  33. package/dist/generators/requirement-tests.js.map +1 -0
  34. package/dist/generators/requirements-file.d.ts +9 -0
  35. package/dist/generators/requirements-file.d.ts.map +1 -0
  36. package/dist/generators/requirements-file.js +53 -0
  37. package/dist/generators/requirements-file.js.map +1 -0
  38. package/dist/generators/requirements-markdown.d.ts +10 -0
  39. package/dist/generators/requirements-markdown.d.ts.map +1 -0
  40. package/dist/generators/requirements-markdown.js +71 -0
  41. package/dist/generators/requirements-markdown.js.map +1 -0
  42. package/dist/generators/requirements-toon.d.ts +3 -0
  43. package/dist/generators/requirements-toon.d.ts.map +1 -0
  44. package/dist/generators/requirements-toon.js +47 -0
  45. package/dist/generators/requirements-toon.js.map +1 -0
  46. package/dist/generators/requirements-view.d.ts +32 -0
  47. package/dist/generators/requirements-view.d.ts.map +1 -0
  48. package/dist/generators/requirements-view.js +64 -0
  49. package/dist/generators/requirements-view.js.map +1 -0
  50. package/dist/generators/trace-helper-file.d.ts.map +1 -1
  51. package/dist/generators/trace-helper-file.js +19 -11
  52. package/dist/generators/trace-helper-file.js.map +1 -1
  53. package/dist/index.d.ts +13 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +18 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/metaobjects-config.d.ts +12 -20
  58. package/dist/metaobjects-config.d.ts.map +1 -1
  59. package/dist/metaobjects-config.js +5 -1
  60. package/dist/metaobjects-config.js.map +1 -1
  61. package/dist/orphan-sweep.d.ts +38 -0
  62. package/dist/orphan-sweep.d.ts.map +1 -0
  63. package/dist/orphan-sweep.js +129 -0
  64. package/dist/orphan-sweep.js.map +1 -0
  65. package/dist/overwrite-policy.d.ts +97 -3
  66. package/dist/overwrite-policy.d.ts.map +1 -1
  67. package/dist/overwrite-policy.js +293 -81
  68. package/dist/overwrite-policy.js.map +1 -1
  69. package/dist/projection/build-projection-views.d.ts +8 -0
  70. package/dist/projection/build-projection-views.d.ts.map +1 -1
  71. package/dist/projection/build-projection-views.js +2 -0
  72. package/dist/projection/build-projection-views.js.map +1 -1
  73. package/dist/reconcile-orphans.d.ts +80 -0
  74. package/dist/reconcile-orphans.d.ts.map +1 -0
  75. package/dist/reconcile-orphans.js +61 -0
  76. package/dist/reconcile-orphans.js.map +1 -0
  77. package/dist/render-engine/embedded-templates.generated.js +1 -1
  78. package/dist/render-engine/embedded-templates.generated.js.map +1 -1
  79. package/dist/requirement-walk.d.ts +57 -0
  80. package/dist/requirement-walk.d.ts.map +1 -0
  81. package/dist/requirement-walk.js +94 -0
  82. package/dist/requirement-walk.js.map +1 -0
  83. package/dist/runner.d.ts +35 -0
  84. package/dist/runner.d.ts.map +1 -1
  85. package/dist/runner.js +217 -21
  86. package/dist/runner.js.map +1 -1
  87. package/dist/templates/extractor.d.ts +4 -4
  88. package/dist/templates/extractor.d.ts.map +1 -1
  89. package/dist/templates/extractor.js +18 -22
  90. package/dist/templates/extractor.js.map +1 -1
  91. package/dist/templates/find-inbound.d.ts +44 -0
  92. package/dist/templates/find-inbound.d.ts.map +1 -0
  93. package/dist/templates/find-inbound.js +69 -0
  94. package/dist/templates/find-inbound.js.map +1 -0
  95. package/dist/templates/output-format-spec-emitter.d.ts.map +1 -1
  96. package/dist/templates/output-format-spec-emitter.js +7 -4
  97. package/dist/templates/output-format-spec-emitter.js.map +1 -1
  98. package/dist/templates/output-parser.d.ts +8 -3
  99. package/dist/templates/output-parser.d.ts.map +1 -1
  100. package/dist/templates/output-parser.js +71 -31
  101. package/dist/templates/output-parser.js.map +1 -1
  102. package/dist/templates/output-prompt.d.ts +6 -5
  103. package/dist/templates/output-prompt.d.ts.map +1 -1
  104. package/dist/templates/output-prompt.js +26 -37
  105. package/dist/templates/output-prompt.js.map +1 -1
  106. package/dist/templates/queries.js +1 -1
  107. package/dist/templates/queries.js.map +1 -1
  108. package/dist/templates/requirement-test.d.ts +12 -0
  109. package/dist/templates/requirement-test.d.ts.map +1 -0
  110. package/dist/templates/requirement-test.js +120 -0
  111. package/dist/templates/requirement-test.js.map +1 -0
  112. package/dist/templates/zod-validators.d.ts.map +1 -1
  113. package/dist/templates/zod-validators.js +32 -15
  114. package/dist/templates/zod-validators.js.map +1 -1
  115. package/package.json +7 -6
  116. package/src/generator.ts +9 -0
  117. package/src/generators/api-field-shape.ts +1 -1
  118. package/src/generators/api-model.ts +69 -44
  119. package/src/generators/docs-data-builder.ts +37 -0
  120. package/src/generators/docs-data.ts +15 -0
  121. package/src/generators/docs-file.ts +13 -4
  122. package/src/generators/extractor-file.ts +7 -11
  123. package/src/generators/index.ts +11 -0
  124. package/src/generators/output-parser-file.ts +12 -7
  125. package/src/generators/output-prompt-file.ts +14 -27
  126. package/src/generators/requirement-tests.ts +203 -0
  127. package/src/generators/requirements-file.ts +71 -0
  128. package/src/generators/requirements-markdown.ts +72 -0
  129. package/src/generators/requirements-toon.ts +64 -0
  130. package/src/generators/requirements-view.ts +93 -0
  131. package/src/generators/trace-helper-file.ts +20 -10
  132. package/src/index.ts +47 -1
  133. package/src/metaobjects-config.ts +17 -22
  134. package/src/orphan-sweep.ts +178 -0
  135. package/src/overwrite-policy.ts +362 -89
  136. package/src/projection/build-projection-views.ts +10 -0
  137. package/src/reconcile-orphans.ts +136 -0
  138. package/src/reference/barrel.ts +4 -0
  139. package/src/reference/entity.ts +4 -0
  140. package/src/reference/queries.ts +4 -0
  141. package/src/reference/routes.ts +4 -0
  142. package/src/render-engine/embedded-templates.generated.ts +1 -1
  143. package/src/requirement-walk.ts +124 -0
  144. package/src/runner.ts +266 -27
  145. package/src/templates/extractor.ts +19 -24
  146. package/src/templates/find-inbound.ts +96 -0
  147. package/src/templates/output-format-spec-emitter.ts +7 -4
  148. package/src/templates/output-parser.ts +76 -34
  149. package/src/templates/output-prompt.ts +29 -42
  150. package/src/templates/queries.ts +1 -1
  151. package/src/templates/requirement-test.ts +140 -0
  152. package/src/templates/zod-validators.ts +32 -15
  153. package/templates/docs/entity-page.md.mustache +8 -0
@@ -14,15 +14,24 @@
14
14
  // (current, .gen-state snapshot, fresh tmpfile). Exit 0 → clean merge,
15
15
  // advance .gen-state to fresh content. Exit > 0 → leave conflict markers
16
16
  // in the output file, do NOT advance .gen-state; status "conflict".
17
- // 4. If .gen-state/<relPath> is absent but the file exists ("first-time
18
- // regen on an existing file")write-if-different against the existing
19
- // file as the baseline (no merge, no clobber). The `baseline: "fresh"`
20
- // flag opts into "overwrite from fresh and re-baseline".
17
+ // 4. If the .gen-state BODY is absent but the file exists, consult the
18
+ // committed hash manifest: identical fresh content "unchanged"; the file
19
+ // still hashes to what we recorded writing safe to overwrite; anything
20
+ // else (edited, or no record at all) "refused", naming the file. The
21
+ // `baseline: "fresh"` flag opts into "overwrite from fresh and re-baseline".
21
22
  //
22
23
  // Integrity (caveat 2 from the spike): we keep a sha-256 of each canonical
23
- // snapshot at `.gen-state/.hashes.json`. On load, mismatch → fall back to
24
- // first-time semantics and warn naming the file so the user can investigate.
25
- import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync, } from "node:fs";
24
+ // snapshot at `.gen-state/.hashes.json`.
25
+ //
26
+ // THE MANIFEST IS COMMITTED; THE BODIES ARE NOT. That split is what makes step 4
27
+ // possible. A hash per path is small and reviewable, where a second full copy of
28
+ // all generated output is neither — and a hash is already sufficient to tell
29
+ // "nobody touched this" from "somebody edited this", which is the only thing
30
+ // steps 4 and the orphan-delete path need to know. The cost, stated: without a
31
+ // body there is no base to merge against, so a diverged file on a fresh clone is
32
+ // REFUSED rather than merged. That is a smaller loss than it sounds, because the
33
+ // behaviour it replaces was a silent overwrite.
34
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync, rmSync, } from "node:fs";
26
35
  import { dirname, join, isAbsolute, relative, resolve } from "node:path";
27
36
  import { spawnSync } from "node:child_process";
28
37
  import { tmpdir } from "node:os";
@@ -49,7 +58,111 @@ function loadHashes(genStateDir) {
49
58
  }
50
59
  function saveHashes(genStateDir, hashes) {
51
60
  mkdirSync(genStateDir, { recursive: true });
52
- writeFileSync(join(genStateDir, HASHES_FILE), JSON.stringify(hashes, null, 2) + "\n");
61
+ // Keys SORTED, because this file is committed. Insertion order would make the
62
+ // diff — and any merge conflict between two people who both regenerated —
63
+ // depend on which entity happened to generate first, which is noise nobody can
64
+ // review.
65
+ const sorted = {};
66
+ for (const key of Object.keys(hashes).sort())
67
+ sorted[key] = hashes[key];
68
+ writeFileSync(join(genStateDir, HASHES_FILE), JSON.stringify(sorted, null, 2) + "\n");
69
+ }
70
+ // ---------------------------------------------------------------------------
71
+ // FR-038 §8 — readers for orphan reconciliation.
72
+ //
73
+ // `.hashes.json`'s key set is the ONLY record of what a previous run wrote, so
74
+ // it is also the only way to notice that a file we used to generate is no longer
75
+ // generated. These three functions expose that record without widening the write
76
+ // path: nothing here decides anything (see reconcile-orphans.ts) and nothing here
77
+ // touches an output file (see orphan-sweep.ts).
78
+ // ---------------------------------------------------------------------------
79
+ /**
80
+ * Every snapshot key recorded under `genStateDir` — in a runner-driven project,
81
+ * the project-relative path of every file some previous `meta gen` wrote.
82
+ *
83
+ * Empty for a gen-state directory that does not exist yet, which is what makes a
84
+ * first run, an ephemeral test run and `verify --codegen`'s throwaway root all
85
+ * reconcile nothing.
86
+ */
87
+ export function listGeneratedPaths(genStateDir) {
88
+ return Object.keys(loadHashes(genStateDir));
89
+ }
90
+ /**
91
+ * sha-256 of `content`, hex — the same function that produces `.hashes.json`.
92
+ *
93
+ * Exported so a caller can ask the one question the manifest exists to answer
94
+ * ("is this file byte-for-byte what we recorded writing?") without needing the
95
+ * snapshot body, which is what makes the answer available on a fresh clone.
96
+ */
97
+ export function contentHash(content) {
98
+ return sha256(content);
99
+ }
100
+ /**
101
+ * The hash we recorded when we last wrote `relPath`, or undefined if we have no
102
+ * record of ever writing it.
103
+ *
104
+ * This is the COMMITTED half of `.gen-state`. The snapshot bodies stay ignored —
105
+ * they are a second full copy of all generated output — but a hash per path is
106
+ * small enough to commit and review, and it is sufficient to distinguish "nobody
107
+ * touched this" from "somebody edited this", which is the only distinction the
108
+ * overwrite and delete decisions actually need.
109
+ */
110
+ export function readGeneratedHash(genStateDir, relPath) {
111
+ return loadHashes(genStateDir)[relPath];
112
+ }
113
+ /**
114
+ * True when the file at `relPath` is byte-for-byte what we recorded writing.
115
+ *
116
+ * FAILS CLOSED: with no recorded hash we cannot prove anything, so the answer is
117
+ * false. Both the write path and the orphan-delete path ask this one question of
118
+ * this one piece of evidence — before this existed they answered the same
119
+ * uncertainty in opposite directions inside a single feature, refusing to DELETE
120
+ * a hand-edited file while silently OVERWRITING one.
121
+ */
122
+ export function isPristineGenerated(genStateDir, relPath, current) {
123
+ const recorded = readGeneratedHash(genStateDir, relPath);
124
+ return recorded !== undefined && recorded === sha256(current);
125
+ }
126
+ /**
127
+ * The snapshot of what we last wrote to `relPath`, or undefined when there is no
128
+ * trustworthy one.
129
+ *
130
+ * HASH-CHECKED on purpose. A caller comparing this against the file on disk is
131
+ * asking "is the output still exactly what I wrote?" — and a snapshot that fails
132
+ * its own hash cannot answer that. Returning the stale text would let a
133
+ * reconciling caller conclude "untouched" and delete a file it cannot vouch for,
134
+ * so a tampered snapshot reads as absent and the caller fails closed.
135
+ */
136
+ export function readGeneratedSnapshot(genStateDir, relPath) {
137
+ return readSnapshotChecked(genStateDir, relPath)?.text;
138
+ }
139
+ /**
140
+ * Drop both halves of the record for paths this run no longer generates — each
141
+ * snapshot file and its `.hashes.json` entry.
142
+ *
143
+ * BOTH halves, or the next run sees the path again in `listGeneratedPaths` and
144
+ * re-decides an orphan that has already been dealt with. A no-op for a path that was
145
+ * never generated.
146
+ *
147
+ * Batched deliberately: one manifest read and one write for the whole set. A per-path
148
+ * variant re-reads, re-sorts and rewrites the entire manifest every call, so clearing k
149
+ * orphans rewrote it k times — on a project with hundreds of generated files that makes
150
+ * bookkeeping the dominant cost of `meta gen`, for an identical result.
151
+ */
152
+ export function forgetGeneratedPaths(genStateDir, relPaths) {
153
+ const hashes = loadHashes(genStateDir);
154
+ let changed = false;
155
+ for (const relPath of relPaths) {
156
+ const snapshot = snapshotPath(genStateDir, relPath);
157
+ if (existsSync(snapshot))
158
+ rmSync(snapshot, { force: true });
159
+ if (relPath in hashes) {
160
+ delete hashes[relPath];
161
+ changed = true;
162
+ }
163
+ }
164
+ if (changed)
165
+ saveHashes(genStateDir, hashes);
53
166
  }
54
167
  const ENGINE_FILE = ".engine.json";
55
168
  /**
@@ -181,91 +294,190 @@ function defaultOutputRelPath(outputPath) {
181
294
  // real project-relative path.
182
295
  return sha256(resolve(outputPath)).slice(0, 32);
183
296
  }
184
- /**
185
- * The main entry point. Backward-compatible with the rc.11 signature: passing
186
- * a `MergeStrategy` string as the third argument continues to work; passing
187
- * an options object opts into three-way merge.
188
- */
189
- export function decideAndWrite(path, content, optsOrStrategy = {}) {
190
- const opts = typeof optsOrStrategy === "string"
191
- ? { strategy: optsOrStrategy }
192
- : optsOrStrategy;
193
- const strategy = opts.strategy ?? "overwrite";
194
- const baseline = opts.baseline ?? "default";
195
- const genStateDir = opts.genStateDir !== undefined
196
- ? (isAbsolute(opts.genStateDir)
197
- ? opts.genStateDir
198
- : resolve(opts.genStateDir))
199
- : join(tmpdir(), "meta-gen-state-fallback");
297
+ /** Where this call's gen-state lives. Shared by the write path and the preview so
298
+ * the two cannot resolve it differently a preview that consults a different
299
+ * manifest than the write would be the same disagreement-between-two-answers bug
300
+ * this whole change exists to remove. */
301
+ function resolveGenStateDir(opts) {
302
+ if (opts.genStateDir === undefined)
303
+ return join(tmpdir(), "meta-gen-state-fallback");
304
+ return isAbsolute(opts.genStateDir) ? opts.genStateDir : resolve(opts.genStateDir);
305
+ }
306
+ /** True when this project has a hash manifest at all — as opposed to a manifest
307
+ * that simply has no entry for some path.
308
+ *
309
+ * The distinction drives the upgrade message: a project with NO manifest predates
310
+ * the manifest being committed, so its refusals are one fixable configuration
311
+ * problem rather than N independent hand edits, and it deserves one instruction
312
+ * instead of a wall of per-file warnings. */
313
+ export function hasHashManifest(genStateDir) {
314
+ return existsSync(join(genStateDir, HASHES_FILE));
315
+ }
316
+ /** Normalize the legacy `MergeStrategy` string shorthand into an options object. */
317
+ function normalizeOpts(optsOrStrategy) {
318
+ return typeof optsOrStrategy === "string" ? { strategy: optsOrStrategy } : optsOrStrategy;
319
+ }
320
+ function classifyWrite(path, content, opts) {
321
+ // First-time write — file doesn't exist.
322
+ if (!existsSync(path))
323
+ return { kind: "new" };
324
+ if ((opts.strategy ?? "overwrite") === "skip-existing")
325
+ return { kind: "skip" };
326
+ // File exists. Load the canonical snapshot if any.
327
+ const genStateDir = resolveGenStateDir(opts);
200
328
  const relPath = opts.outputRelPath ?? defaultOutputRelPath(path);
201
- // 1. First-time write — file doesn't exist.
202
- if (!existsSync(path)) {
203
- mkdirSync(dirname(path), { recursive: true });
204
- writeFileSync(path, content);
205
- advanceSnapshot(genStateDir, relPath, content);
206
- return { path, status: "new" };
207
- }
208
- if (strategy === "skip-existing") {
209
- return { path, status: "skipped" };
210
- }
211
- // 2. File exists. Load the canonical snapshot if any.
212
329
  const snapshot = readSnapshotChecked(genStateDir, relPath);
213
- // 3. First-time regen on a pre-existing file (no snapshot).
330
+ const current = readFileSync(path, "utf-8");
331
+ // First-time regen on a pre-existing file (no snapshot) — caveat 3. `baseline`
332
+ // only ever applies here: BaselineMode's own doc comment says so ("When
333
+ // .gen-state is absent but the file exists"), and a snapshot body — handled
334
+ // below — always gets the real three-way merge regardless of baseline.
214
335
  if (snapshot === undefined) {
215
- const current = readFileSync(path, "utf-8");
216
- if (baseline === "fresh") {
336
+ if ((opts.baseline ?? "default") === "fresh") {
217
337
  // Opt-in escape hatch: overwrite and seed the snapshot from fresh.
218
- if (current === content) {
219
- advanceSnapshot(genStateDir, relPath, content);
220
- return { path, status: "unchanged" };
221
- }
222
- writeFileSync(path, content);
223
- advanceSnapshot(genStateDir, relPath, content);
224
- return { path, status: "overwrite" };
338
+ return current === content
339
+ ? { kind: "no-snapshot-fresh-unchanged" }
340
+ : { kind: "no-snapshot-fresh-overwrite" };
225
341
  }
226
- // Default: write-if-different. The EXISTING file is treated as the
227
- // canonical baseline so subsequent runs do real three-way merges. If
228
- // fresh output is identical, just seed the snapshot. If different, write
229
- // the fresh content + seed snapshot there's no marker policy left to
230
- // refuse on, but this is the contract documented in the runbook (no
231
- // marker check; users with hand-written files should never have the
232
- // codegen output path colliding with them).
233
- if (current === content) {
234
- advanceSnapshot(genStateDir, relPath, current);
235
- return { path, status: "unchanged" };
342
+ // No snapshot BODY. That is the normal state, not an edge case: the bodies
343
+ // are gitignored, so every fresh clone and every CI runner arrives here.
344
+ //
345
+ // Previously this branch wrote the fresh content unconditionally, which meant
346
+ // the documented promise that hand edits survive regeneration was false in
347
+ // precisely the situation adopters spend most of their time in — and the CLI
348
+ // labelled the replacement `NEW`.
349
+ //
350
+ // The committed hash manifest answers the only question that matters. Note
351
+ // this is the SAME question, asked of the same evidence, as the orphan-delete
352
+ // path: see `isPristineGenerated`.
353
+ if (current === content)
354
+ return { kind: "no-snapshot-unchanged" };
355
+ if (isPristineGenerated(genStateDir, relPath, current)) {
356
+ // Byte-for-byte what we last wrote, so replacing it loses nothing. This is
357
+ // the common fresh-clone case (a formatter or engine bump moved the output)
358
+ // and it must not refuse, or a clean checkout would stall on every file.
359
+ return { kind: "no-snapshot-pristine-overwrite" };
236
360
  }
237
- writeFileSync(path, content);
238
- advanceSnapshot(genStateDir, relPath, content);
239
- return { path, status: "overwrite" };
361
+ // Either somebody edited it (hash mismatch) or we have no record of writing
362
+ // it at all (no hash). Both are unprovable, so fail closed.
363
+ return {
364
+ kind: "no-snapshot-refused",
365
+ hasRecord: readGeneratedHash(genStateDir, relPath) !== undefined,
366
+ };
240
367
  }
241
- // 4. Snapshot exists — real three-way merge.
242
- const current = readFileSync(path, "utf-8");
368
+ // Snapshot exists — a real three-way merge decides this one.
243
369
  // Fast path: nothing changed.
244
370
  if (current === content && snapshot.text === content) {
245
- return { path, status: "unchanged" };
371
+ return { kind: "snapshot-unchanged" };
246
372
  }
247
- const baseTmp = writeTmpfile(snapshot.text);
248
- const freshTmp = writeTmpfile(content);
249
- const outcome = runGitMergeFile(path, baseTmp, freshTmp);
250
- if (outcome.exitCode === 0) {
251
- // Clean merge — advance the canonical snapshot to fresh.
252
- advanceSnapshot(genStateDir, relPath, content);
253
- // Distinguish "user had no changes vs canonical" from "merge integrated
254
- // edits". The fresh equals snapshot case happened above (fast path) so
255
- // if outcome.mergedContent equals fresh we report a plain overwrite,
256
- // otherwise it's a merge that pulled in user edits.
257
- if (outcome.mergedContent === content) {
373
+ return { kind: "snapshot-merge-required", snapshotText: snapshot.text };
374
+ }
375
+ /**
376
+ * What `decideAndWrite` WOULD do, touching nothing. Backs `meta gen --dry-run`.
377
+ *
378
+ * Exact for every outcome the hash manifest decides, because those are pure
379
+ * comparisons `classifyWrite` above is the single source for which one applies.
380
+ * Deliberately COARSE in one place: with a snapshot body present the result depends
381
+ * on whether `git merge-file` comes back clean or conflicted, which cannot be known
382
+ * without performing the merge — so that case reports `overwrite`, meaning "this
383
+ * file will be rewritten", which is true either way.
384
+ *
385
+ * The reason this exists as its own function rather than a flag on
386
+ * `decideAndWrite`: a preview must be incapable of writing, and the cheapest way to
387
+ * guarantee that is to give it no write in its body at all — mapping a `WriteCase`
388
+ * to a status touches no file and no manifest.
389
+ */
390
+ export function previewWriteStatus(path, content, optsOrStrategy = {}) {
391
+ const kase = classifyWrite(path, content, normalizeOpts(optsOrStrategy));
392
+ switch (kase.kind) {
393
+ case "new":
394
+ return "new";
395
+ case "skip":
396
+ return "skipped";
397
+ case "no-snapshot-fresh-unchanged":
398
+ case "no-snapshot-unchanged":
399
+ case "snapshot-unchanged":
400
+ return "unchanged";
401
+ case "no-snapshot-fresh-overwrite":
402
+ case "no-snapshot-pristine-overwrite":
403
+ return "overwrite";
404
+ case "no-snapshot-refused":
405
+ return "refused";
406
+ case "snapshot-merge-required":
407
+ return "overwrite";
408
+ }
409
+ }
410
+ /**
411
+ * The main entry point. Backward-compatible with the rc.11 signature: passing
412
+ * a `MergeStrategy` string as the third argument continues to work; passing
413
+ * an options object opts into three-way merge.
414
+ */
415
+ export function decideAndWrite(path, content, optsOrStrategy = {}) {
416
+ const opts = normalizeOpts(optsOrStrategy);
417
+ const genStateDir = resolveGenStateDir(opts);
418
+ const relPath = opts.outputRelPath ?? defaultOutputRelPath(path);
419
+ const kase = classifyWrite(path, content, opts);
420
+ switch (kase.kind) {
421
+ case "new":
422
+ mkdirSync(dirname(path), { recursive: true });
423
+ writeFileSync(path, content);
424
+ advanceSnapshot(genStateDir, relPath, content);
425
+ return { path, status: "new" };
426
+ case "skip":
427
+ return { path, status: "skipped" };
428
+ case "no-snapshot-fresh-unchanged":
429
+ case "no-snapshot-unchanged":
430
+ // Identical content needs no write, in either mode — just seed/advance the
431
+ // snapshot so the file is recognisable as ours next time.
432
+ advanceSnapshot(genStateDir, relPath, content);
433
+ return { path, status: "unchanged" };
434
+ case "no-snapshot-fresh-overwrite":
435
+ case "no-snapshot-pristine-overwrite":
436
+ writeFileSync(path, content);
437
+ advanceSnapshot(genStateDir, relPath, content);
258
438
  return { path, status: "overwrite" };
439
+ case "no-snapshot-refused":
440
+ // Deliberately does NOT advance the snapshot or the hash: a refusal that
441
+ // records the current content would make the file look pristine next run and
442
+ // turn this into a silent overwrite one run later.
443
+ return {
444
+ path,
445
+ status: "refused",
446
+ conflictHint: kase.hasRecord
447
+ ? "this file has been edited since it was generated — it was NOT " +
448
+ "overwritten. Move your edits into a non-generated file, or re-run " +
449
+ "with --baseline=fresh to discard them and adopt fresh output."
450
+ : "no record of generating this file, and its content differs from fresh " +
451
+ "output — it was NOT overwritten. Move it aside, or re-run with " +
452
+ "--baseline=fresh to overwrite it and adopt fresh output as the baseline.",
453
+ };
454
+ case "snapshot-unchanged":
455
+ return { path, status: "unchanged" };
456
+ case "snapshot-merge-required": {
457
+ const baseTmp = writeTmpfile(kase.snapshotText);
458
+ const freshTmp = writeTmpfile(content);
459
+ const outcome = runGitMergeFile(path, baseTmp, freshTmp);
460
+ if (outcome.exitCode === 0) {
461
+ // Clean merge — advance the canonical snapshot to fresh.
462
+ advanceSnapshot(genStateDir, relPath, content);
463
+ // Distinguish "user had no changes vs canonical" from "merge integrated
464
+ // edits". The fresh-equals-snapshot case is `snapshot-unchanged` above —
465
+ // so if the merged result equals fresh we report a plain overwrite,
466
+ // otherwise it's a merge that pulled in user edits.
467
+ return {
468
+ path,
469
+ status: outcome.mergedContent === content ? "overwrite" : "merged",
470
+ };
471
+ }
472
+ // Conflict — do NOT advance the snapshot. The output now contains diff3
473
+ // markers from git merge-file.
474
+ return {
475
+ path,
476
+ status: "conflict",
477
+ conflictHint: "merge conflict — resolve `<<<<<<<` markers and re-run `meta gen` to " +
478
+ "advance the canonical state.",
479
+ };
259
480
  }
260
- return { path, status: "merged" };
261
481
  }
262
- // Conflict — do NOT advance the snapshot. The output now contains diff3
263
- // markers from git merge-file.
264
- return {
265
- path,
266
- status: "conflict",
267
- conflictHint: "merge conflict — resolve `<<<<<<<` markers and re-run `meta gen` to " +
268
- "advance the canonical state.",
269
- };
270
482
  }
271
483
  //# sourceMappingURL=overwrite-policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"overwrite-policy.js","sourceRoot":"","sources":["../src/overwrite-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overwrite-policy.js","sourceRoot":"","sources":["../src/overwrite-policy.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4DAA4D;AAC5D,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,2DAA2D;AAC3D,EAAE;AACF,iBAAiB;AACjB,EAAE;AACF,0CAA0C;AAC1C,kEAAkE;AAClE,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,yEAAyE;AACzE,yEAAyE;AACzE,gFAAgF;AAChF,8EAA8E;AAC9E,4EAA4E;AAC5E,kFAAkF;AAClF,EAAE;AACF,2EAA2E;AAC3E,yCAAyC;AACzC,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AACjF,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,iFAAiF;AACjF,iFAAiF;AACjF,gDAAgD;AAEhD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,MAAM,GACP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAsDtD,MAAM,WAAW,GAAG,cAAc,CAAC;AAInC,SAAS,MAAM,CAAC,OAAwB;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,UAAU,CAAC,WAAmB;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrC,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAAoB,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,WAAmB,EAAE,MAAkB;IACzD,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,8EAA8E;IAC9E,0EAA0E;IAC1E,+EAA+E;IAC/E,UAAU;IACV,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAE,CAAC;IACzE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACxF,CAAC;AAED,8EAA8E;AAC9E,iDAAiD;AACjD,EAAE;AACF,+EAA+E;AAC/E,iFAAiF;AACjF,iFAAiF;AACjF,kFAAkF;AAClF,gDAAgD;AAChD,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,OAAe;IAEf,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,OAAe,EACf,OAAe;IAEf,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzD,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAmB,EACnB,OAAe;IAEf,OAAO,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,QAA0B;IAE1B,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,OAAO;QAAE,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,WAAW,GAAG,cAAc,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,MAAM,CAAC,GAAI,MAAuC,CAAC,cAAc,CAAC;YAClE,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;IACpF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,OAAe;IACpE,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,aAAa,CACX,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAC5D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,WAAmB,EAAE,OAAe;IACxD,2EAA2E;IAC3E,2EAA2E;IAC3E,8DAA8D;IAC9D,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;0CAC0C;AAC1C,SAAS,eAAe,CACtB,WAAmB,EACnB,OAAe,EACf,OAAe;IAEf,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAChD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,iFAAiF;AACjF,SAAS,mBAAmB,CAC1B,WAAmB,EACnB,OAAe;IAEf,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAED;gDACgD;AAChD,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC;QACE,KAAK,CACH,kEAAkE;YAChE,4DAA4D,CAC/D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAYD;;;;;gFAKgF;AAChF,SAAS,eAAe,CACtB,OAAe,EACf,QAAgB,EAChB,SAAiB;IAEjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC;IACjD,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACH,GAAG,GAAG,SAAS,CACb,MAAM,EACN;YACE,YAAY;YACZ,SAAS;YACT,IAAI;YACJ,YAAY;YACZ,IAAI;YACJ,gBAAgB;YAChB,IAAI;YACJ,qBAAqB;YACrB,OAAO;YACP,QAAQ;YACR,SAAS;SACV,EACD,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,EAAE,CAAC;QACzC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,eAAe,EAAE,CAAC;QACxD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,IAAI,GAAI,GAAG,CAAC,KAA+B,CAAC,IAAI,CAAC;QACvD,IAAI,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,eAAe,EAAE,CAAC;QACnD,MAAM,GAAG,CAAC,KAAK,CAAC;IAClB,CAAC;IACD,2EAA2E;IAC3E,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IACjC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,6BAA6B,OAAO,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC;AAC/D,CAAC;AAED;;0BAE0B;AAC1B,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7C,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9E,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;iCAEiC;AACjC,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,2EAA2E;IAC3E,yEAAyE;IACzE,8BAA8B;IAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;;0CAG0C;AAC1C,SAAS,kBAAkB,CAAC,IAAwB;IAClD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC;IACrF,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrF,CAAC;AAED;;;;;;8CAM8C;AAC9C,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,oFAAoF;AACpF,SAAS,aAAa,CACpB,cAAkD;IAElD,OAAO,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;AAC5F,CAAC;AAwBD,SAAS,aAAa,CACpB,IAAY,EACZ,OAAe,EACf,IAAwB;IAExB,yCAAyC;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAE9C,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,eAAe;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAEhF,mDAAmD;IACnD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE5C,+EAA+E;IAC/E,wEAAwE;IACxE,4EAA4E;IAC5E,uEAAuE;IACvE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC;YAC7C,mEAAmE;YACnE,OAAO,OAAO,KAAK,OAAO;gBACxB,CAAC,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE;gBACzC,CAAC,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;QAC9C,CAAC;QAED,2EAA2E;QAC3E,yEAAyE;QACzE,EAAE;QACF,8EAA8E;QAC9E,2EAA2E;QAC3E,6EAA6E;QAC7E,kCAAkC;QAClC,EAAE;QACF,2EAA2E;QAC3E,8EAA8E;QAC9E,mCAAmC;QACnC,IAAI,OAAO,KAAK,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;QAElE,IAAI,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACvD,2EAA2E;YAC3E,4EAA4E;YAC5E,yEAAyE;YACzE,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC;QACpD,CAAC;QAED,4EAA4E;QAC5E,4DAA4D;QAC5D,OAAO;YACL,IAAI,EAAE,qBAAqB;YAC3B,SAAS,EAAE,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,SAAS;SACjE,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,8BAA8B;IAC9B,IAAI,OAAO,KAAK,OAAO,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACrD,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC1E,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,OAAe,EACf,iBAAqD,EAAE;IAEvD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;IACzE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,6BAA6B,CAAC;QACnC,KAAK,uBAAuB,CAAC;QAC7B,KAAK,oBAAoB;YACvB,OAAO,WAAW,CAAC;QACrB,KAAK,6BAA6B,CAAC;QACnC,KAAK,gCAAgC;YACnC,OAAO,WAAW,CAAC;QACrB,KAAK,qBAAqB;YACxB,OAAO,SAAS,CAAC;QACnB,KAAK,yBAAyB;YAC5B,OAAO,WAAW,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,OAAe,EACf,iBAAqD,EAAE;IAEvD,MAAM,IAAI,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAEhD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7B,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAEjC,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAErC,KAAK,6BAA6B,CAAC;QACnC,KAAK,uBAAuB;YAC1B,2EAA2E;YAC3E,0DAA0D;YAC1D,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAEvC,KAAK,6BAA6B,CAAC;QACnC,KAAK,gCAAgC;YACnC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7B,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAEvC,KAAK,qBAAqB;YACxB,yEAAyE;YACzE,6EAA6E;YAC7E,mDAAmD;YACnD,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,IAAI,CAAC,SAAS;oBAC1B,CAAC,CAAC,gEAAgE;wBAChE,oEAAoE;wBACpE,+DAA+D;oBACjE,CAAC,CAAC,wEAAwE;wBACxE,iEAAiE;wBACjE,0EAA0E;aAC/E,CAAC;QAEJ,KAAK,oBAAoB;YACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAEvC,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEzD,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC3B,yDAAyD;gBACzD,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC/C,wEAAwE;gBACxE,yEAAyE;gBACzE,oEAAoE;gBACpE,oDAAoD;gBACpD,OAAO;oBACL,IAAI;oBACJ,MAAM,EAAE,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;iBACnE,CAAC;YACJ,CAAC;YAED,wEAAwE;YACxE,+BAA+B;YAC/B,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,UAAU;gBAClB,YAAY,EACV,sEAAsE;oBACtE,8BAA8B;aACjC,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -31,6 +31,14 @@ export interface ExpectedView {
31
31
  name: string;
32
32
  schema?: string;
33
33
  sql: string;
34
+ /**
35
+ * `resolutionKey()` of the object that declared this view — the projection, or the
36
+ * write-through entity hosting its own read view. migrate-ts records it as
37
+ * PROVENANCE (never onto the view descriptor, never into the committed snapshot) so
38
+ * a per-command `migrate.scope` can decide ownership on the declaring FQN rather
39
+ * than on the physical view name, which no naming strategy can reverse.
40
+ */
41
+ fqn: string;
34
42
  /**
35
43
  * Physical tables this view reads (base + every joined table). The migrate-ts
36
44
  * diff uses this to recreate the view when one of its source tables undergoes a
@@ -1 +1 @@
1
- {"version":3,"file":"build-projection-views.d.ts","sourceRoot":"","sources":["../../src/projection/build-projection-views.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EAad,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,8FAA8F;AAC9F;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAE3G,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;OAKG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC;IACtC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,2BAA2B,GAChC,YAAY,EAAE,CA2DhB"}
1
+ {"version":3,"file":"build-projection-views.d.ts","sourceRoot":"","sources":["../../src/projection/build-projection-views.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EAad,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,8FAA8F;AAC9F;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAE3G,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;OAKG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC;IACtC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,2BAA2B,GAChC,YAAY,EAAE,CA2DhB"}
@@ -100,6 +100,7 @@ function emitViewFor(host, root, joinTables, dialect, columnNamingStrategy, out)
100
100
  sql: body,
101
101
  dependsOn,
102
102
  columns,
103
+ fqn: host.resolutionKey(),
103
104
  ...(schema !== undefined ? { schema } : {}),
104
105
  });
105
106
  }
@@ -132,6 +133,7 @@ function emitSqlView(host, source, root, joinTables, out) {
132
133
  name: source.physicalName, // FR-016 four-step physical name
133
134
  sql: source.sqlBody, // verbatim — never parsed, never re-wrapped
134
135
  dependsOn,
136
+ fqn: host.resolutionKey(),
135
137
  // columns OMITTED → "unknown" → gated drop+create fail-safe.
136
138
  ...(schema !== undefined ? { schema } : {}),
137
139
  });
@@ -1 +1 @@
1
- {"version":3,"file":"build-projection-views.js","sourceRoot":"","sources":["../../src/projection/build-projection-views.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-projection-views.js","sourceRoot":"","sources":["../../src/projection/build-projection-views.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,iFAAiF;AACjF,kFAAkF;AAClF,oFAAoF;AACpF,+EAA+E;AAC/E,EAAE;AACF,mFAAmF;AACnF,mFAAmF;AACnF,qFAAqF;AAErF,OAAO,EAGL,UAAU,EAGV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA8DjD,MAAM,UAAU,oBAAoB,CAClC,IAAc,EACd,IAAiC;IAEjC,gFAAgF;IAChF,mFAAmF;IACnF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,iCAAiC;IACjC,MAAM,OAAO,GAA0B,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACvF,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,IAAI,YAAY,CAAC;IAEvE,6EAA6E;IAC7E,qFAAqF;IACrF,0FAA0F;IAC1F,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;QAAE,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAE1F,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7D,sFAAsF;QACtF,mFAAmF;QACnF,iFAAiF;QACjF,MAAM,GAAG,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAClC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACvB,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YAC3D,SAAS;QACX,CAAC;QACD,iFAAiF;QACjF,qFAAqF;QACrF,oFAAoF;QACpF,oFAAoF;QACpF,yEAAyE;QACzE,iEAAiE;QACjE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;YAAE,SAAS;QACzC,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAChF,CAAC;IAED,8EAA8E;IAC9E,iFAAiF;IACjF,iFAAiF;IACjF,mFAAmF;IACnF,gFAAgF;IAChF,iFAAiF;IACjF,8EAA8E;IAC9E,gFAAgF;IAChF,iEAAiE;IACjE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3D,+EAA+E;QAC/E,oFAAoF;QACpF,sFAAsF;QACtF,MAAM,GAAG,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAClC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACvB,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QACD,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AA0BD,SAAS,sBAAsB,CAAC,IAAgB;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACzD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAClD,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,2CAA2C;IAC5F,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,uBAAuB;IACzF,IAAI,MAAM,CAAC,aAAa,KAAK,gBAAgB;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,6BAA6B;IACrG,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED;wFACwF;AACxF,SAAS,WAAW,CAClB,IAAgB,EAChB,IAAc,EACd,UAAkC,EAClC,OAA8B,EAC9B,oBAA0C,EAC1C,GAAmB;IAEnB,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC,aAAa;QAAE,OAAO,CAAC,sEAAsE;IAClG,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACpE,GAAG,CAAC,IAAI,CAAC;QACP,IAAI,EAAE,IAAI,CAAC,QAAQ;QACnB,GAAG,EAAE,IAAI;QACT,SAAS;QACT,OAAO;QACP,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE;QACzB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,WAAW,CAClB,IAAgB,EAChB,MAAkB,EAClB,IAAc,EACd,UAAkC,EAClC,GAAmB;IAEnB,sFAAsF;IACtF,mFAAmF;IACnF,qFAAqF;IACrF,0DAA0D;IAC1D,IAAI,MAAM,CAAC,aAAa,KAAK,gBAAgB,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,8CAA8C,MAAM,CAAC,aAAa,IAAI;YACpE,eAAe,IAAI,CAAC,IAAI,+CAA+C;YACvE,yDAAyD,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9D,GAAG,CAAC,IAAI,CAAC;QACP,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,iCAAiC;QAC5D,GAAG,EAAE,MAAM,CAAC,OAAQ,EAAE,4CAA4C;QAClE,SAAS;QACT,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE;QACzB,6DAA6D;QAC7D,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAS,mBAAmB,CAC1B,IAAgB,EAChB,IAAc,EACd,UAA4C;IAE5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,yFAAyF;IACzF,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpE,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,gEAAgE;IAChE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,SAAS;QACxE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CACzB,IAAc,EACd,aAAqB,EACrB,UAA4C;IAE5C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAiB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,CAAC,IAAc,EAAQ,EAAE;QACpC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,CAAC;YAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAE7C,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxC,qFAAqF;QACrF,oFAAoF;QACpF,iFAAiF;QACjF,qFAAqF;QACrF,mFAAmF;QACnF,2EAA2E;QAC3E,uDAAuD;QACvD,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,EAAE,CAAC;QAClE,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACpD,iFAAiF;QACjF,iFAAiF;QACjF,iFAAiF;QACjF,qCAAqC;QACrC,IAAI,WAAW,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CACN,CAAC,CAAC,IAAI,KAAK,WAAW;YACpB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;YAClG,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,SAAS,aAAa,CAAC,UAAsB;IAC3C,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CACvF,CAAC;IACF,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1B,qFAAqF;IACrF,OAAO,GAAG,CAAC,IAAI,CACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CACpF,CAAC;AACJ,CAAC;AAED;;;;0DAI0D;AAC1D,SAAS,gBAAgB,CACvB,IAAc,EACd,aAAqB,EACrB,UAA4C;IAE5C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,CAAC,aAAa,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,IAAc,EAAQ,EAAE;QACpC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * A generator's opt-in to orphan reconciliation, and the namespace it applies to.
3
+ *
4
+ * Declaring this is the ONLY way in: `.gen-state/.hashes.json` records paths, not
5
+ * which generator produced each one, so the runner genuinely cannot work out who
6
+ * owns what. Deriving ownership from the output directory instead would be worse
7
+ * than useless — every generator in a single-target project writes to the same
8
+ * `outDir`, so one generator narrowing its output would delete its siblings'
9
+ * files. The generator has to say.
10
+ */
11
+ export interface OrphanPolicy {
12
+ /**
13
+ * True when `relPathInTarget` — a path relative to this generator's own output
14
+ * directory, always `/`-separated — is inside the namespace this generator is
15
+ * the sole producer of.
16
+ *
17
+ * Be narrow. This predicate is the blast radius: every previously-generated
18
+ * path it accepts and this run did not re-emit is a deletion candidate.
19
+ */
20
+ readonly owns: (relPathInTarget: string) => boolean;
21
+ /**
22
+ * Delete a hand-edited orphan instead of refusing it. Default false.
23
+ *
24
+ * The seam exists because §6 requires every default to have one, not because
25
+ * it is advisable: the refusal already names the file and deleting it by hand
26
+ * is a one-line answer, whereas this flag makes the destructive outcome the
27
+ * automatic one.
28
+ */
29
+ readonly force?: boolean;
30
+ }
31
+ export interface OrphanDecision {
32
+ /** No longer emitted, on disk, and byte-identical to the snapshot we wrote.
33
+ * Safe to delete — the generator is removing only its own untouched output. */
34
+ readonly remove: readonly string[];
35
+ /** No longer emitted and CHANGED since we wrote it (or with no snapshot to
36
+ * compare against). Left alone and reported, never deleted. */
37
+ readonly refused: readonly string[];
38
+ /** No longer emitted and already absent from disk. Nothing to delete; the
39
+ * caller should just drop the stale snapshot. */
40
+ readonly vanished: readonly string[];
41
+ }
42
+ export interface ReconcileOrphansArgs {
43
+ /** Relative paths this generator emitted on some previous run — in practice the
44
+ * keys of `.gen-state/.hashes.json`. */
45
+ readonly previouslyGenerated: readonly string[];
46
+ /** Relative paths emitted on THIS run. */
47
+ readonly emitted: readonly string[];
48
+ /** Namespace guard. Orphan reconciliation is opt-in and scoped: a generator must
49
+ * never delete another generator's output just because it stopped emitting its
50
+ * own. */
51
+ readonly owns: (relPath: string) => boolean;
52
+ /** Whether the file is still on disk at all. */
53
+ readonly exists: (relPath: string) => boolean;
54
+ /**
55
+ * Whether the file is byte-for-byte what we recorded writing.
56
+ *
57
+ * MUST fail closed — false when it cannot be proven. This is deliberately the
58
+ * same question the write path asks (`isPristineGenerated`), of the same
59
+ * evidence: the committed hash manifest. Before they were unified, one feature
60
+ * refused to DELETE a hand-edited file while silently OVERWRITING one, which is
61
+ * the same uncertainty answered two opposite ways.
62
+ */
63
+ readonly isUntouched: (relPath: string) => boolean;
64
+ }
65
+ export declare function reconcileOrphans(args: ReconcileOrphansArgs): OrphanDecision;
66
+ /**
67
+ * The message shown when a hand-edited orphan is refused.
68
+ *
69
+ * It has to say what happened, why nothing was deleted, and what the two ways out
70
+ * are — otherwise the reasonable reaction to an unexplained refusal is to delete
71
+ * the file, which is the outcome the refusal exists to prevent.
72
+ */
73
+ export declare function refusedOrphanMessage(paths: readonly string[],
74
+ /** Which generator's namespace these came from. `orphanPolicy` is a generic
75
+ * `Generator` field and `sweepOrphans`/`OrphanPolicy` are exported precisely so an
76
+ * app can compose its own — so this message must not hardcode `requirement-tests`,
77
+ * naming a generator the project may not even use and a cause ("the requirement was
78
+ * removed") that may not apply. */
79
+ generatorName?: string): string;
80
+ //# sourceMappingURL=reconcile-orphans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile-orphans.d.ts","sourceRoot":"","sources":["../src/reconcile-orphans.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC;IACpD;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B;oFACgF;IAChF,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC;oEACgE;IAChE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;sDACkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC;6CACyC;IACzC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;eAEW;IACX,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C;;;;;;;;OAQG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,CA0B3E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,MAAM,EAAE;AACxB;;;;oCAIoC;AACpC,aAAa,SAAmB,GAC/B,MAAM,CAQR"}