@metaobjectsdev/cli 1.0.8 → 1.0.9-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/commands/eject.d.ts.map +1 -1
- package/dist/src/commands/eject.js +22 -4
- package/dist/src/commands/eject.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +0 -3
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/migrate.d.ts +1 -1
- package/dist/src/commands/migrate.d.ts.map +1 -1
- package/dist/src/commands/migrate.js +35 -22
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/verify.d.ts +12 -0
- package/dist/src/commands/verify.d.ts.map +1 -1
- package/dist/src/commands/verify.js +102 -20
- package/dist/src/commands/verify.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/advisory.d.ts +19 -0
- package/dist/src/lib/advisory.d.ts.map +1 -1
- package/dist/src/lib/advisory.js +27 -0
- package/dist/src/lib/advisory.js.map +1 -1
- package/dist/src/lib/allow.d.ts +21 -1
- package/dist/src/lib/allow.d.ts.map +1 -1
- package/dist/src/lib/allow.js +62 -1
- package/dist/src/lib/allow.js.map +1 -1
- package/dist/src/lib/catalog-listing.d.ts +2 -0
- package/dist/src/lib/catalog-listing.d.ts.map +1 -1
- package/dist/src/lib/catalog-listing.js +7 -0
- package/dist/src/lib/catalog-listing.js.map +1 -1
- package/dist/src/lib/file-provider.d.ts +12 -0
- package/dist/src/lib/file-provider.d.ts.map +1 -1
- package/dist/src/lib/file-provider.js +26 -1
- package/dist/src/lib/file-provider.js.map +1 -1
- package/dist/src/lib/fk-index-advisory.d.ts +17 -0
- package/dist/src/lib/fk-index-advisory.d.ts.map +1 -0
- package/dist/src/lib/fk-index-advisory.js +77 -0
- package/dist/src/lib/fk-index-advisory.js.map +1 -0
- package/dist/src/lib/output.d.ts +9 -0
- package/dist/src/lib/output.d.ts.map +1 -1
- package/dist/src/lib/output.js +17 -3
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/referential-action-advisory.d.ts +14 -0
- package/dist/src/lib/referential-action-advisory.d.ts.map +1 -0
- package/dist/src/lib/referential-action-advisory.js +38 -0
- package/dist/src/lib/referential-action-advisory.js.map +1 -0
- package/package.json +10 -10
- package/src/commands/eject.ts +25 -4
- package/src/commands/init.ts +0 -3
- package/src/commands/migrate.ts +32 -24
- package/src/commands/verify.ts +108 -18
- package/src/index.ts +5 -2
- package/src/lib/advisory.ts +33 -0
- package/src/lib/allow.ts +66 -2
- package/src/lib/catalog-listing.ts +7 -0
- package/src/lib/file-provider.ts +27 -1
- package/src/lib/fk-index-advisory.ts +112 -0
- package/src/lib/output.ts +25 -3
- package/src/lib/referential-action-advisory.ts +58 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAkB,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAkB,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAG9F,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;CAChB;AAMD;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,WAAW,GACX,QAAQ,GACR,UAAU,GACV,WAAW,GACX,SAAS;AACX;;4EAE4E;GAC1E,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACnD;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAwBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAmDnF;AAMD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,wGAAwG;IACxG,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CA8C5F;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG;IACvD,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,EAAE,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;CACnD,CAgDA;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAElE;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG;IAC/D,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAmEA;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAE1E"}
|
package/dist/src/lib/output.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// (NEW MERGED CONFLICT UNCHANGED REFUSED) otherwise. Per SP5 §5.1.
|
|
5
5
|
import { toonEncode } from "./format.js";
|
|
6
6
|
import { skippedSection } from "./advisory.js";
|
|
7
|
+
import { blockedHintLines } from "./allow.js";
|
|
7
8
|
const GEN_GLYPHS = {
|
|
8
9
|
new: "✓",
|
|
9
10
|
overwrite: "↻",
|
|
@@ -88,9 +89,16 @@ export function formatMigrateResult(result, _opts) {
|
|
|
88
89
|
lines.push(` Changes: ${summary}`, "");
|
|
89
90
|
}
|
|
90
91
|
if (result.blocked.length > 0) {
|
|
91
|
-
|
|
92
|
+
const anyRename = result.blocked.some((b) => b.renameFlag !== undefined);
|
|
93
|
+
lines.push(anyRename ? " Blocked (re-run with the flag shown):" : " Blocked (re-run with --allow):");
|
|
92
94
|
for (const b of result.blocked) {
|
|
93
|
-
|
|
95
|
+
if (b.renameFlag === undefined) {
|
|
96
|
+
lines.push(` ${b.kind} ${b.description} (--allow ${b.allowFlag})`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
for (const l of blockedHintLines(b))
|
|
100
|
+
lines.push(` ${l}`);
|
|
101
|
+
}
|
|
94
102
|
}
|
|
95
103
|
lines.push("");
|
|
96
104
|
}
|
|
@@ -194,8 +202,14 @@ export function migrateResultToData(result) {
|
|
|
194
202
|
let help;
|
|
195
203
|
if (isBlocked) {
|
|
196
204
|
summary = `${changeSummary}; not applied`;
|
|
205
|
+
// A rename-pairable drop leads: its `--allow` would delete the data the rename keeps.
|
|
206
|
+
const renames = result.blocked.filter((b) => b.renameFlag !== undefined);
|
|
207
|
+
const others = result.blocked.filter((b) => b.renameFlag === undefined);
|
|
197
208
|
help = [
|
|
198
|
-
...
|
|
209
|
+
...renames.map((b) => `if ${b.description} was renamed to ${b.renameTo ?? "the added column"}, re-run with ${b.renameFlag} to keep its data` +
|
|
210
|
+
`${b.shapeChange !== undefined ? ` (its ${b.shapeChange} also changes: rename first, reshape in a second migration)` : ""}` +
|
|
211
|
+
`; --allow ${b.allowFlag} instead DELETES the column and all its data`),
|
|
212
|
+
...others.map((b) => `re-run with --allow ${b.allowFlag} to apply: ${b.description}`),
|
|
199
213
|
...result.ambiguous.map((a) => `re-run with --on-ambiguous to resolve: ${a.hint}`),
|
|
200
214
|
];
|
|
201
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,0EAA0E;AAC1E,mEAAmE;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAiD,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkE9C,MAAM,UAAU,GAAkC;IAChD,GAAG,EAAE,GAAG;IACR,SAAS,EAAE,GAAG;IACd,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;CACb,CAAC;AAEF,MAAM,SAAS,GAAkC;IAC/C,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,IAAmB;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,mFAAmF;IACnF,MAAM,MAAM,GAAG,WAAW,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAE/H,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,MAAM,kCAAkC,CAAC;IACrD,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,UAAU,KAAK,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACT,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CACnG,CAAC;IACF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,iFAAiF;IACjF,kFAAkF;IAClF,6DAA6D;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,YAAY,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAChE,sFAAsF;IACtF,wFAAwF;IACxF,uFAAuF;IACvF,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAE5C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAsDD,MAAM,UAAU,mBAAmB,CAAC,MAA0B,EAAE,KAAoB;IAClF,MAAM,MAAM,GAAG,eAAe,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;IAC5G,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/F,OAAO,GAAG,MAAM,4BAA4B,CAAC;IAC/C,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;QACvG,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,cAAc,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,mDAAmD,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,MAAM,UAAU,eAAe,CAAC,MAAsB;IAMpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CACnG,CAAC;IACF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,0EAA0E;IAC1E,0CAA0C;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;IAC9C,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,YAAY,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAC5D,kFAAkF;IAClF,iFAAiF;IACjF,iFAAiF;IACjF,yDAAyD;IACzD,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,KAAK,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACvC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAClB,CAAC,CAAC,YAAY;YACZ,CAAC,CAAC,4EAA4E;YAC9E,CAAC,CAAC,8BAA8B,MAAM,CAAC,MAAM,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACpC,CAAC,CAAC,CAAC,6CAA6C,EAAE,sHAAsH,CAAC;QACzK,CAAC,CAAC,YAAY;YACZ,CAAC,CAAC,CAAC,wKAAwK,CAAC;YAC5K,CAAC,CAAC,CAAC,2EAA2E,CAAC,CAAC;IACpF,4EAA4E;IAC5E,sDAAsD;IACtD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY;WACnC,cAAc,CAAqB,4DAA4D,CAAC,CAAC;IACtG,8EAA8E;IAC9E,2EAA2E;IAC3E,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CACP,GAAG,YAAY,CAAC,KAAK,qHAAqH,CAC3I,CAAC;IACJ,CAAC;IACD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,OAAO;QACP,IAAI;QACJ,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACxD,OAAO,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAO5D,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;IAChD,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC;IACzD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,gFAAgF;IAChF,yEAAyE;IACzE,+EAA+E;IAC/E,+EAA+E;IAC/E,gFAAgF;IAChF,uCAAuC;IACvC,IAAI,OAAe,CAAC;IACpB,IAAI,IAAc,CAAC;IACnB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,GAAG,GAAG,aAAa,eAAe,CAAC;QAC1C,sFAAsF;QACtF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;QACxE,IAAI,GAAG;YACL,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACnB,MAAM,CAAC,CAAC,WAAW,mBAAmB,CAAC,CAAC,QAAQ,IAAI,kBAAkB,iBAAiB,CAAC,CAAC,UAAU,mBAAmB;gBACtH,GAAG,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,6DAA6D,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3H,aAAa,CAAC,CAAC,SAAS,8CAA8C,CAAC;YACzE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;YACrF,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0CAA0C,CAAC,CAAC,IAAI,EAAE,CAAC;SACnF,CAAC;IACJ,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,kCAAkC,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAChG,IAAI,GAAG,UAAU;YACf,CAAC,CAAC,CAAC,iDAAiD,CAAC;YACrD,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,OAAO,GAAG,GAAG,MAAM,cAAc,CAAC;QAClC,IAAI,GAAG,CAAC,mEAAmE,CAAC,CAAC;IAC/E,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,GAAG,MAAM,WAAW,OAAO,CAAC,MAAM,eAAe,CAAC;QAC5D,IAAI,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAC/D,CAAC;SAAM,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,GAAG,GAAG,MAAM,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,oBAAoB,CAAC;QAC3E,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ;YAC/B,CAAC,CAAC,CAAC,wEAAwE,CAAC;YAC5E,uEAAuE;YACvE,uEAAuE;YACvE,oEAAoE;YACpE,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,GAAG,mBAAmB,CAAC;QAC9B,IAAI,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,GAAG,aAAa,eAAe,CAAC;QAC1C,IAAI,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,OAAO;QACL,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI;QACpD,uEAAuE;QACvE,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAA0B;IAChE,OAAO,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MetaData } from "@metaobjectsdev/metadata";
|
|
2
|
+
export interface ReferentialActionConflictFinding {
|
|
3
|
+
/** The metadata file declaring the FK-owning entity ("" when the loader recorded none). */
|
|
4
|
+
file: string;
|
|
5
|
+
/** `<entity FQN>.<reference name>` — the FK, which is where the fix is declared. */
|
|
6
|
+
construct: string;
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ReferentialActionConflictOptions {
|
|
10
|
+
/** Skip an entity by FQN — imported (dependency) metadata is not the adopter's to fix. */
|
|
11
|
+
skip?: (fqn: string) => boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function scanForReferentialActionConflicts(root: MetaData, opts?: ReferentialActionConflictOptions): ReferentialActionConflictFinding[];
|
|
14
|
+
//# sourceMappingURL=referential-action-advisory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referential-action-advisory.d.ts","sourceRoot":"","sources":["../../../src/lib/referential-action-advisory.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAOzD,MAAM,WAAW,gCAAgC;IAC/C,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gCAAgC;IAC/C,0FAA0F;IAC1F,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACjC;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,QAAQ,EACd,IAAI,GAAE,gCAAqC,GAC1C,gCAAgC,EAAE,CAkBpC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Two relationships over one foreign key that disagree on its referential action.
|
|
2
|
+
//
|
|
3
|
+
// A 1:N may be declared on either side — the parent (`Author` composition `books`) or the
|
|
4
|
+
// FK-owning child (`Book` association `author`) — and each side's subtype implies an
|
|
5
|
+
// ON DELETE default (composition → cascade, association → restrict). When BOTH are
|
|
6
|
+
// declared and disagree, the documented precedence (ADR-0047) lets the FK-owning side
|
|
7
|
+
// govern, so the parent's relationship has no effect on the constraint. That is a
|
|
8
|
+
// defensible rule and a silent one: an adopter declared a composition, read "cascade" in
|
|
9
|
+
// the docs, and got ON DELETE RESTRICT and a 409 with nothing saying why.
|
|
10
|
+
//
|
|
11
|
+
// Advisory, never a gate: changing the precedence would change the DDL of every model
|
|
12
|
+
// that relies on it. This names each such key, the action that governs, and the two
|
|
13
|
+
// one-line ways to say which one the author means. Read off the SAME walk that emits the
|
|
14
|
+
// FK (`buildExpectedSchema`'s `onReferentialActionConflict`), so it can only ever name a
|
|
15
|
+
// constraint migrate actually writes. `meta verify` lists them; `meta migrate` warns.
|
|
16
|
+
import { buildExpectedSchema, describeReferentialActionConflict, } from "@metaobjectsdev/migrate-ts";
|
|
17
|
+
export function scanForReferentialActionConflicts(root, opts = {}) {
|
|
18
|
+
const conflicts = [];
|
|
19
|
+
buildExpectedSchema(root, { onReferentialActionConflict: (c) => conflicts.push(c) });
|
|
20
|
+
const out = [];
|
|
21
|
+
const seen = new Set();
|
|
22
|
+
for (const c of conflicts) {
|
|
23
|
+
const fqn = c.entity.resolutionKey();
|
|
24
|
+
if (opts.skip?.(fqn) === true)
|
|
25
|
+
continue;
|
|
26
|
+
const construct = `${fqn}.${c.ref.name}`;
|
|
27
|
+
if (seen.has(construct))
|
|
28
|
+
continue;
|
|
29
|
+
seen.add(construct);
|
|
30
|
+
const files = "files" in c.entity.source ? c.entity.source.files : [];
|
|
31
|
+
// A node a shipped library contributed is the library's design, not the adopter's.
|
|
32
|
+
if (files.some((f) => f.startsWith("library:")))
|
|
33
|
+
continue;
|
|
34
|
+
out.push({ file: files[0] ?? "", construct, message: describeReferentialActionConflict(c) });
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=referential-action-advisory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referential-action-advisory.js","sourceRoot":"","sources":["../../../src/lib/referential-action-advisory.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,0FAA0F;AAC1F,qFAAqF;AACrF,mFAAmF;AACnF,sFAAsF;AACtF,kFAAkF;AAClF,yFAAyF;AACzF,0EAA0E;AAC1E,EAAE;AACF,sFAAsF;AACtF,oFAAoF;AACpF,yFAAyF;AACzF,yFAAyF;AACzF,sFAAsF;AAGtF,OAAO,EACL,mBAAmB,EACnB,iCAAiC,GAElC,MAAM,4BAA4B,CAAC;AAepC,MAAM,UAAU,iCAAiC,CAC/C,IAAc,EACd,OAAyC,EAAE;IAE3C,MAAM,SAAS,GAAgC,EAAE,CAAC;IAClD,mBAAmB,CAAC,IAAI,EAAE,EAAE,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAErF,MAAM,GAAG,GAAuC,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI;YAAE,SAAS;QACxC,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,mFAAmF;QACnF,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAAE,SAAS;QAC1D,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,iCAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaobjectsdev/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9-rc.2",
|
|
4
4
|
"description": "CLI for MetaObjects: scaffold, codegen, migrate, and drift-detection commands.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -51,15 +51,15 @@
|
|
|
51
51
|
"@biomejs/js-api": "^0.7.0",
|
|
52
52
|
"@biomejs/wasm-nodejs": "^1.9.4",
|
|
53
53
|
"@libsql/kysely-libsql": "^0.4.0",
|
|
54
|
-
"@metaobjectsdev/codegen-ts": "1.0.
|
|
55
|
-
"@metaobjectsdev/codegen-ts-react": "1.0.
|
|
56
|
-
"@metaobjectsdev/codegen-ts-tanstack": "1.0.
|
|
57
|
-
"@metaobjectsdev/docs-site": "1.0.
|
|
58
|
-
"@metaobjectsdev/metadata": "1.0.
|
|
59
|
-
"@metaobjectsdev/migrate-ts": "1.0.
|
|
60
|
-
"@metaobjectsdev/render": "1.0.
|
|
61
|
-
"@metaobjectsdev/runtime-ts": "1.0.
|
|
62
|
-
"@metaobjectsdev/sdk": "1.0.
|
|
54
|
+
"@metaobjectsdev/codegen-ts": "1.0.9-rc.2",
|
|
55
|
+
"@metaobjectsdev/codegen-ts-react": "1.0.9-rc.2",
|
|
56
|
+
"@metaobjectsdev/codegen-ts-tanstack": "1.0.9-rc.2",
|
|
57
|
+
"@metaobjectsdev/docs-site": "1.0.9-rc.2",
|
|
58
|
+
"@metaobjectsdev/metadata": "1.0.9-rc.2",
|
|
59
|
+
"@metaobjectsdev/migrate-ts": "1.0.9-rc.2",
|
|
60
|
+
"@metaobjectsdev/render": "1.0.9-rc.2",
|
|
61
|
+
"@metaobjectsdev/runtime-ts": "1.0.9-rc.2",
|
|
62
|
+
"@metaobjectsdev/sdk": "1.0.9-rc.2",
|
|
63
63
|
"@toon-format/toon": "^2.3.0",
|
|
64
64
|
"jiti": "^2.4.0"
|
|
65
65
|
},
|
package/src/commands/eject.ts
CHANGED
|
@@ -24,7 +24,7 @@ import { parseEjectArgs } from "../lib/args.js";
|
|
|
24
24
|
import { log } from "../lib/log.js";
|
|
25
25
|
import { declaredDependencyNames, readPackageManifest } from "../lib/package-manifest.js";
|
|
26
26
|
import { compareOwnedCopy, type OwnedComparison } from "../lib/owned-copy.js";
|
|
27
|
-
import { composeCatalog } from "../lib/catalog.js";
|
|
27
|
+
import { composeCatalog, packageOf } from "../lib/catalog.js";
|
|
28
28
|
import { installSetFor, type InstallSet } from "../lib/install-set.js";
|
|
29
29
|
import { emitStructured, type OutputFormat } from "../lib/format.js";
|
|
30
30
|
import {
|
|
@@ -55,9 +55,11 @@ interface TemplateSource {
|
|
|
55
55
|
// runtime by selecting this entry via `names.includes(name)`. Reading from the root
|
|
56
56
|
// deletes that machinery without weakening anything: membership is still checked, once,
|
|
57
57
|
// where the untrusted value enters.
|
|
58
|
+
const CORE_CODEGEN_PACKAGE = "@metaobjectsdev/codegen-ts";
|
|
59
|
+
|
|
58
60
|
const SOURCES: TemplateSource[] = [
|
|
59
61
|
{
|
|
60
|
-
packageName:
|
|
62
|
+
packageName: CORE_CODEGEN_PACKAGE,
|
|
61
63
|
names: coreTpl.REFERENCE_GENERATOR_NAMES,
|
|
62
64
|
root: coreTpl.resolveReferenceRoot,
|
|
63
65
|
},
|
|
@@ -417,6 +419,13 @@ function reportLibrary(result: LibraryEjectResult): void {
|
|
|
417
419
|
* already-copied half as "preserved" and the adopter cannot tell what happened.
|
|
418
420
|
* Returns the unknown names, or an empty array.
|
|
419
421
|
*/
|
|
422
|
+
/** Where a package-only generator's factory is imported from. The core package serves
|
|
423
|
+
* its generator factories from the `/generators` subpath; the UI packages from the root. */
|
|
424
|
+
function packageFactoryPath(name: string): string {
|
|
425
|
+
const pkg = packageOf(name) ?? "";
|
|
426
|
+
return pkg === CORE_CODEGEN_PACKAGE ? `${pkg}/generators` : pkg;
|
|
427
|
+
}
|
|
428
|
+
|
|
420
429
|
function unknownNames(names: readonly string[]): string[] {
|
|
421
430
|
return names.filter((n) => resolveSource(n) === undefined && !isLibraryName(n));
|
|
422
431
|
}
|
|
@@ -535,7 +544,19 @@ export async function ejectCommand(
|
|
|
535
544
|
}
|
|
536
545
|
|
|
537
546
|
// All-or-nothing on the names, BEFORE any write — see unknownNames().
|
|
538
|
-
const
|
|
547
|
+
const unmatched = unknownNames(flags.names);
|
|
548
|
+
// A catalog entry with no reference template is PACKAGE-ONLY, not a typo — say so,
|
|
549
|
+
// and say where it is imported from instead.
|
|
550
|
+
const packageOnly = unmatched.filter((n) => packageOf(n) !== undefined);
|
|
551
|
+
const unknown = unmatched.filter((n) => packageOf(n) === undefined);
|
|
552
|
+
if (packageOnly.length > 0) {
|
|
553
|
+
log.error(
|
|
554
|
+
`package-only generator(s): ${packageOnly.map((n) => `${n} (${packageFactoryPath(n)})`).join(", ")}. ` +
|
|
555
|
+
"No reference template ships for them, so they cannot be ejected: import the factory " +
|
|
556
|
+
"from the package named beside each one and wire it in `generators: [...]`. " +
|
|
557
|
+
"Nothing was ejected.",
|
|
558
|
+
);
|
|
559
|
+
}
|
|
539
560
|
if (unknown.length > 0) {
|
|
540
561
|
log.error(
|
|
541
562
|
`unknown name(s): ${unknown.join(", ")}. Nothing was ejected. ` +
|
|
@@ -543,8 +564,8 @@ export async function ejectCommand(
|
|
|
543
564
|
`Shipped libraries: ${ejectableLibraryNames().join(", ")}. ` +
|
|
544
565
|
"Run `meta eject --list` to see them grouped.",
|
|
545
566
|
);
|
|
546
|
-
return 2;
|
|
547
567
|
}
|
|
568
|
+
if (unmatched.length > 0) return 2;
|
|
548
569
|
|
|
549
570
|
const catalog = composeCatalog();
|
|
550
571
|
const rows: EjectedRow[] = [];
|
package/src/commands/init.ts
CHANGED
|
@@ -148,9 +148,6 @@ Next steps:
|
|
|
148
148
|
4. meta gen # generate from exactly what you wired
|
|
149
149
|
5. meta docs # neutral model + API docs (on by default)
|
|
150
150
|
6. Create your tables: meta migrate --from-db --db file:dev.sqlite --dialect sqlite --slug init --apply
|
|
151
|
-
|
|
152
|
-
Ship in later sub-projects: meta ingest (propose entities from existing code),
|
|
153
|
-
meta serve (local viewer), meta install-hooks (MCP server + Claude Code hooks).
|
|
154
151
|
`;
|
|
155
152
|
|
|
156
153
|
export interface InitOptions {
|
package/src/commands/migrate.ts
CHANGED
|
@@ -16,7 +16,6 @@ import { loadMemoryOptionsFrom, loadMetaobjectsConfig, resolveGenConfigDir } fro
|
|
|
16
16
|
import { collectionLoadOptions } from "../lib/collection-load-options.js";
|
|
17
17
|
import { exclusionNotes, importedOption, migrateScopeMismatch } from "../lib/migrate-scope.js";
|
|
18
18
|
import {
|
|
19
|
-
allowOptionFor,
|
|
20
19
|
isBlockedChangesError,
|
|
21
20
|
isPrimaryKeyChangeError,
|
|
22
21
|
isDeclaredRenameError,
|
|
@@ -35,7 +34,6 @@ import {
|
|
|
35
34
|
readSnapshot,
|
|
36
35
|
writeSnapshot,
|
|
37
36
|
qualifiedDbName,
|
|
38
|
-
type BlockedChangesError,
|
|
39
37
|
renderD1,
|
|
40
38
|
writeMigrationD1,
|
|
41
39
|
writeMigrationFlyway,
|
|
@@ -62,8 +60,10 @@ import {
|
|
|
62
60
|
type WranglerRunner,
|
|
63
61
|
} from "../lib/wrangler.js";
|
|
64
62
|
import { buildProjectionViews } from "@metaobjectsdev/codegen-ts";
|
|
65
|
-
import {
|
|
63
|
+
import { tokensToAllowOptions, blockedEntriesFor, blockedHintLines } from "../lib/allow.js";
|
|
66
64
|
import { reportLoadError } from "../lib/load-error.js";
|
|
65
|
+
import { scanForReferentialActionConflicts } from "../lib/referential-action-advisory.js";
|
|
66
|
+
import type { MetaData } from "@metaobjectsdev/metadata";
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* Print a load failure with everything the loader's ADR-0009 envelope carried — the stable
|
|
@@ -108,6 +108,9 @@ MIGRATE FLAGS:
|
|
|
108
108
|
drop-check,drop-view,drop-view-cascade,
|
|
109
109
|
adopt-view,nullable-to-not-null,drop-identity-default,
|
|
110
110
|
drop-unmanaged
|
|
111
|
+
drop-column DELETES the column and every value in it. If
|
|
112
|
+
the column was RENAMED, use --rename-column instead: it
|
|
113
|
+
keeps the data.
|
|
111
114
|
drop-unmanaged permits dropping a table/view the committed
|
|
112
115
|
snapshot never contained — one this toolchain never managed.
|
|
113
116
|
Without it that drop is refused, because the migration it
|
|
@@ -235,6 +238,22 @@ function logOutOfScope(
|
|
|
235
238
|
}
|
|
236
239
|
}
|
|
237
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Warn about each foreign key whose two sides declare relationships that disagree on its
|
|
243
|
+
* referential action — the parent's is overridden, and the DDL this run writes carries the
|
|
244
|
+
* child's. Advisory: it never changes the exit code, and a scan that throws is dropped
|
|
245
|
+
* (the schema build itself reports anything wrong with the model).
|
|
246
|
+
*/
|
|
247
|
+
function warnReferentialActionConflicts(metadata: MetaData, collection: Collection): void {
|
|
248
|
+
let findings;
|
|
249
|
+
try {
|
|
250
|
+
findings = scanForReferentialActionConflicts(metadata, { skip: collection.imported });
|
|
251
|
+
} catch {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
for (const f of findings) log.warn(`migrate: ${f.message}`);
|
|
255
|
+
}
|
|
256
|
+
|
|
238
257
|
function emitStructuredError(error: string, hint: string, fmt: OutputFormat): void {
|
|
239
258
|
const payload = { error, hint };
|
|
240
259
|
if (fmt === "json") {
|
|
@@ -436,21 +455,10 @@ async function snapshotAbsentDrops(changes: Change[], snapPath: string): Promise
|
|
|
436
455
|
return absent;
|
|
437
456
|
}
|
|
438
457
|
|
|
439
|
-
/**
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
const option = allowOptionFor(c);
|
|
444
|
-
const token = Object.keys(ALLOW_TOKEN_MAP).find((t) => ALLOW_TOKEN_MAP[t] === option);
|
|
445
|
-
return token ?? c.kind;
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
function blockedToEntries(err: BlockedChangesError): BlockedEntry[] {
|
|
449
|
-
return err.blocked.map((c) => ({
|
|
450
|
-
kind: c.kind,
|
|
451
|
-
description: describeChange(c),
|
|
452
|
-
allowFlag: allowFlagFor(c),
|
|
453
|
-
}));
|
|
458
|
+
/** Report blocked changes on stderr, one hint per change, rename-first (see `blockedHintLines`). */
|
|
459
|
+
function logBlocked(entries: readonly BlockedEntry[]): void {
|
|
460
|
+
log.error(`migrate: ${entries.length} destructive change(s) blocked; nothing written`);
|
|
461
|
+
for (const e of entries) for (const l of blockedHintLines(e)) log.error(`migrate: ${l}`);
|
|
454
462
|
}
|
|
455
463
|
|
|
456
464
|
function ambiguousToEntries(amb: AmbiguousChange[]): AmbiguousEntry[] {
|
|
@@ -695,6 +703,7 @@ export async function migrateCommand(
|
|
|
695
703
|
reportLoadError(log, "failed to load metadata", err);
|
|
696
704
|
return 2;
|
|
697
705
|
}
|
|
706
|
+
warnReferentialActionConflicts(metadata, collection);
|
|
698
707
|
|
|
699
708
|
let kysely;
|
|
700
709
|
try {
|
|
@@ -873,7 +882,7 @@ export async function migrateCommand(
|
|
|
873
882
|
});
|
|
874
883
|
} catch (err) {
|
|
875
884
|
if (isBlockedChangesError(err)) {
|
|
876
|
-
blocked =
|
|
885
|
+
blocked = blockedEntriesFor(err.blocked, diffResult.changes);
|
|
877
886
|
exitCode = 1;
|
|
878
887
|
} else {
|
|
879
888
|
throw err;
|
|
@@ -1269,6 +1278,7 @@ export async function runOfflineGenerate(
|
|
|
1269
1278
|
reportLoadError(log, "migrate: failed to load metadata", err);
|
|
1270
1279
|
return 2;
|
|
1271
1280
|
}
|
|
1281
|
+
warnReferentialActionConflicts(metadata, collection);
|
|
1272
1282
|
|
|
1273
1283
|
const offlineDialect = config.dialect;
|
|
1274
1284
|
const offlineViews = buildProjectionViews(metadata, { dialect: offlineDialect, columnNamingStrategy: offlineStrategy });
|
|
@@ -1351,7 +1361,7 @@ export async function runOfflineGenerate(
|
|
|
1351
1361
|
logOutOfScope(plan.outOfScope, plan.importedOutOfScope ?? [], fmt);
|
|
1352
1362
|
|
|
1353
1363
|
if (diffResult.blocked.length > 0) {
|
|
1354
|
-
|
|
1364
|
+
logBlocked(blockedEntriesFor(diffResult.blocked, diffResult.changes));
|
|
1355
1365
|
return 1;
|
|
1356
1366
|
}
|
|
1357
1367
|
if (diffResult.changes.length === 0) {
|
|
@@ -1537,6 +1547,7 @@ async function runD1Migrate(
|
|
|
1537
1547
|
reportLoadError(log, "migrate: failed to load metadata", err);
|
|
1538
1548
|
return 2;
|
|
1539
1549
|
}
|
|
1550
|
+
warnReferentialActionConflicts(metadata, collection);
|
|
1540
1551
|
|
|
1541
1552
|
// 4. Build expected schema + introspect actual.
|
|
1542
1553
|
let columnNamingStrategy: "snake_case" | "literal" | "kebab-case" = "snake_case";
|
|
@@ -1631,10 +1642,7 @@ async function runD1Migrate(
|
|
|
1631
1642
|
emitResult = renderD1(diffResult.changes, expected, actual.meta, actual);
|
|
1632
1643
|
} catch (err) {
|
|
1633
1644
|
if (isBlockedChangesError(err)) {
|
|
1634
|
-
|
|
1635
|
-
for (const e of entries) {
|
|
1636
|
-
log.error(`migrate: blocked '${e.kind}' on ${e.description} (allow with --allow ${e.allowFlag})`);
|
|
1637
|
-
}
|
|
1645
|
+
logBlocked(blockedEntriesFor(err.blocked, diffResult.changes));
|
|
1638
1646
|
return 1;
|
|
1639
1647
|
}
|
|
1640
1648
|
throw err;
|
package/src/commands/verify.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// silently break a prompt" guarantee, enforced at the last fixed point before
|
|
8
8
|
// the text ships. Required-slot misses are warnings (don't fail the build).
|
|
9
9
|
|
|
10
|
-
import { join, resolve as resolvePath } from "node:path";
|
|
10
|
+
import { join, relative, resolve as resolvePath } from "node:path";
|
|
11
11
|
import { parseVerifyArgs, type MigrateFlags } from "../lib/args.js";
|
|
12
12
|
import { log } from "../lib/log.js";
|
|
13
13
|
import { emitStructured, type OutputFormat } from "../lib/format.js";
|
|
@@ -15,15 +15,19 @@ import {
|
|
|
15
15
|
antiPatternRows, missingBaseUrlRows, removedPropRows, ranSection, skippedSection, warnCapped,
|
|
16
16
|
type AdvisoryDiagnosticRow, type AdvisoryFindingRow, type AdvisorySection,
|
|
17
17
|
libraryPrefixRows,
|
|
18
|
+
unindexedFkRows,
|
|
19
|
+
referentialActionConflictRows,
|
|
18
20
|
} from "../lib/advisory.js";
|
|
19
21
|
import { scanForUnprovenancedLibraryPrefix } from "../lib/library-prefix-advisory.js";
|
|
22
|
+
import { scanForUnindexedForeignKeys, type UnindexedFkFinding } from "../lib/fk-index-advisory.js";
|
|
23
|
+
import { scanForReferentialActionConflicts, type ReferentialActionConflictFinding } from "../lib/referential-action-advisory.js";
|
|
20
24
|
import { warnIfAgentContextStale } from "../lib/agent-context-staleness.js";
|
|
21
25
|
import { warnIfManifestIgnored } from "../lib/manifest-ignored-check.js";
|
|
22
26
|
import { scanSourceForAntiPatterns } from "../lib/anti-patterns.js";
|
|
23
27
|
import { scanForMissingBaseUrl, type BaseUrlFinding } from "../lib/base-url-advisory.js";
|
|
24
28
|
import { scanForRemovedProps, type RemovedPropFinding } from "../lib/removed-prop-advisory.js";
|
|
25
29
|
import { replayRemedy } from "../lib/replay-remedy.js";
|
|
26
|
-
import { FileProvider } from "../lib/file-provider.js";
|
|
30
|
+
import { FileProvider, mustacheTagLine } from "../lib/file-provider.js";
|
|
27
31
|
import { derivePayloadFieldTree } from "../lib/payload-field-tree.js";
|
|
28
32
|
import { loadMemoryOptionsFrom, loadMetaobjectsConfig, resolveGenCollection, resolveGenConfigDir } from "../lib/load-metaobjects-config.js";
|
|
29
33
|
import { collectionLoadOptions } from "../lib/collection-load-options.js";
|
|
@@ -396,22 +400,33 @@ export async function verifyCommand(
|
|
|
396
400
|
replayExit,
|
|
397
401
|
);
|
|
398
402
|
|
|
403
|
+
const gates: VerifyGateRow[] = [
|
|
404
|
+
{ gate: "templates", ran: runTemplates, ok: templateExit === 0 },
|
|
405
|
+
// The schema gate decides internally whether it is selected (--db, or
|
|
406
|
+
// --dialect d1), so "ran" is read off the same signals rather than
|
|
407
|
+
// restated: a payload that claims a gate ran when it did not is the
|
|
408
|
+
// failure mode this whole change exists to remove.
|
|
409
|
+
{ gate: "schema", ran: ranSchemaGate, ok: schemaExit === 0 },
|
|
410
|
+
{ gate: "codegen", ran: runCodegen, ok: codegenExit === 0 },
|
|
411
|
+
{ gate: "docs", ran: runDocs, ok: docsExit === 0 },
|
|
412
|
+
{ gate: "deps", ran: runDeps, ok: depsExit === 0 },
|
|
413
|
+
{ gate: "requirements", ran: true, ok: requirementExit === 0 },
|
|
414
|
+
{ gate: "replay", ran: flags.replay || flags.replaySnapshot, ok: replayExit === 0 },
|
|
415
|
+
];
|
|
416
|
+
|
|
417
|
+
// Naming a gate runs ONLY the gates named (ADR-0021 D2), so `verify --codegen --db <url>`
|
|
418
|
+
// exits 0 without ever looking at the prompt templates. A green partial run must not read
|
|
419
|
+
// as a full one: say which gates did not run and how to select each. A bare `verify` has
|
|
420
|
+
// already said so in its default note above.
|
|
421
|
+
if (flags.anyExplicit) {
|
|
422
|
+
const note = notRunNote(gates);
|
|
423
|
+
if (note !== undefined) say(note);
|
|
424
|
+
}
|
|
425
|
+
|
|
399
426
|
if (structured) {
|
|
400
427
|
emitStructured(
|
|
401
428
|
buildVerifyPayload({
|
|
402
|
-
gates
|
|
403
|
-
{ gate: "templates", ran: runTemplates, ok: templateExit === 0 },
|
|
404
|
-
// The schema gate decides internally whether it is selected (--db, or
|
|
405
|
-
// --dialect d1), so "ran" is read off the same signals rather than
|
|
406
|
-
// restated: a payload that claims a gate ran when it did not is the
|
|
407
|
-
// failure mode this whole change exists to remove.
|
|
408
|
-
{ gate: "schema", ran: ranSchemaGate, ok: schemaExit === 0 },
|
|
409
|
-
{ gate: "codegen", ran: runCodegen, ok: codegenExit === 0 },
|
|
410
|
-
{ gate: "docs", ran: runDocs, ok: docsExit === 0 },
|
|
411
|
-
{ gate: "deps", ran: runDeps, ok: depsExit === 0 },
|
|
412
|
-
{ gate: "requirements", ran: true, ok: requirementExit === 0 },
|
|
413
|
-
{ gate: "replay", ran: flags.replay || flags.replaySnapshot, ok: replayExit === 0 },
|
|
414
|
-
],
|
|
429
|
+
gates,
|
|
415
430
|
exitCode,
|
|
416
431
|
requirements: requirementSection,
|
|
417
432
|
requirementCounts,
|
|
@@ -839,11 +854,39 @@ export async function verifyCommand(
|
|
|
839
854
|
// Same discipline as its siblings: an advisory scan never breaks verify.
|
|
840
855
|
}
|
|
841
856
|
|
|
857
|
+
// Foreign keys migrate emits with no index on the referencing columns. Advisory: an
|
|
858
|
+
// automatic index would propose a migration to every existing adopter, so this names
|
|
859
|
+
// each one and says how to declare it (`index.lookup`) instead. Read off the SAME
|
|
860
|
+
// expected schema `meta migrate` builds, so "covered" means covered in its DDL.
|
|
861
|
+
let unindexedFks: UnindexedFkFinding[] = [];
|
|
862
|
+
try {
|
|
863
|
+
unindexedFks = scanForUnindexedForeignKeys(root, {
|
|
864
|
+
dialect: flags.dialect ?? forgeConfig?.dialect ?? "postgres",
|
|
865
|
+
columnNamingStrategy: forgeConfig?.columnNamingStrategy ?? "snake_case",
|
|
866
|
+
skip: collection.imported,
|
|
867
|
+
});
|
|
868
|
+
} catch {
|
|
869
|
+
// Same discipline as its siblings: an advisory scan never breaks verify. A model the
|
|
870
|
+
// schema builder refuses is migrate's to report, with its own message.
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
// Relationships on both sides of one FK that disagree on its ON DELETE / ON UPDATE:
|
|
874
|
+
// the FK-owning side governs, so the parent's (typically a composition meant to
|
|
875
|
+
// cascade) silently has no effect. Same discipline as its siblings.
|
|
876
|
+
let actionConflicts: ReferentialActionConflictFinding[] = [];
|
|
877
|
+
try {
|
|
878
|
+
actionConflicts = scanForReferentialActionConflicts(root, { skip: collection.imported });
|
|
879
|
+
} catch {
|
|
880
|
+
// advisory only — a model the schema builder refuses is migrate's to report.
|
|
881
|
+
}
|
|
882
|
+
|
|
842
883
|
antiPatternSection = ranSection([
|
|
843
884
|
...antiPatternRows(findings),
|
|
844
885
|
...missingBaseUrlRows(baseUrl),
|
|
845
886
|
...removedPropRows(removedProps),
|
|
846
887
|
...libraryPrefixRows(libraryPrefix),
|
|
888
|
+
...unindexedFkRows(unindexedFks),
|
|
889
|
+
...referentialActionConflictRows(actionConflicts),
|
|
847
890
|
]);
|
|
848
891
|
if (findings.length > 0) {
|
|
849
892
|
log.warn(
|
|
@@ -866,6 +909,20 @@ export async function verifyCommand(
|
|
|
866
909
|
);
|
|
867
910
|
warnCapped(removedProps.map((f) => ` ${f.message}`), flags.limit, { structured });
|
|
868
911
|
}
|
|
912
|
+
if (unindexedFks.length > 0) {
|
|
913
|
+
log.warn(
|
|
914
|
+
`meta verify — ${unindexedFks.length} foreign key(s) with no index on the referencing ` +
|
|
915
|
+
`column(s) (advisory — does not fail the build):`,
|
|
916
|
+
);
|
|
917
|
+
warnCapped(unindexedFks.map((f) => ` ${f.message}`), flags.limit, { structured });
|
|
918
|
+
}
|
|
919
|
+
if (actionConflicts.length > 0) {
|
|
920
|
+
log.warn(
|
|
921
|
+
`meta verify — ${actionConflicts.length} foreign key(s) whose two sides declare relationships ` +
|
|
922
|
+
`that disagree on its referential action (advisory — does not fail the build):`,
|
|
923
|
+
);
|
|
924
|
+
warnCapped(actionConflicts.map((f) => ` ${f.message}`), flags.limit, { structured });
|
|
925
|
+
}
|
|
869
926
|
if (libraryPrefix.length > 0) {
|
|
870
927
|
log.warn(
|
|
871
928
|
`meta verify — ${libraryPrefix.length} node(s) declared under "metaobjects::" with ` +
|
|
@@ -987,12 +1044,22 @@ export async function verifyCommand(
|
|
|
987
1044
|
}
|
|
988
1045
|
const drift = verify(text, fieldTree, { provider, requiredSlots, requiredTags });
|
|
989
1046
|
anyBodyChecked = true;
|
|
1047
|
+
// WHERE to look. The {code, path} diagnostic is pinned by the cross-port verify
|
|
1048
|
+
// corpus, so the location is added here, in the display only: the body's file
|
|
1049
|
+
// (project-relative) and the line the variable's tag first appears on, when the
|
|
1050
|
+
// tag is in this body rather than a partial.
|
|
1051
|
+
const bodyFile = provider.pathOf(ref);
|
|
1052
|
+
const where = (varPath: string): string => {
|
|
1053
|
+
if (bodyFile === undefined) return "";
|
|
1054
|
+
const line = mustacheTagLine(text, varPath);
|
|
1055
|
+
return ` (${relative(projectRoot, bodyFile)}${line !== undefined ? `:${line}` : ""})`;
|
|
1056
|
+
};
|
|
990
1057
|
for (const e of drift) {
|
|
991
1058
|
if (e.code === ERR_REQUIRED_SLOT_UNUSED) {
|
|
992
|
-
log.warn(`[${tmpl.name}] (${label}) ${e.code}: ${e.path}`);
|
|
1059
|
+
log.warn(`[${tmpl.name}] (${label}) ${e.code}: ${e.path}${where(e.path)}`);
|
|
993
1060
|
warnCount++;
|
|
994
1061
|
} else {
|
|
995
|
-
log.error(`[${tmpl.name}] (${label}) ${e.code}: ${e.path}`);
|
|
1062
|
+
log.error(`[${tmpl.name}] (${label}) ${e.code}: ${e.path}${where(e.path)}`);
|
|
996
1063
|
errorCount++;
|
|
997
1064
|
anyErrorHere = true;
|
|
998
1065
|
}
|
|
@@ -1587,7 +1654,6 @@ const DRIFT_PRESENTATION: Record<Change["kind"], { glyph: string; noun: string }
|
|
|
1587
1654
|
function summarizeDrift(changes: Change[]): string[] {
|
|
1588
1655
|
return changes.map((c) => {
|
|
1589
1656
|
const p = DRIFT_PRESENTATION[c.kind];
|
|
1590
|
-
if (p === undefined) return JSON.stringify(c);
|
|
1591
1657
|
return `${p.glyph} ${p.noun} ${describeChange(c)}`;
|
|
1592
1658
|
});
|
|
1593
1659
|
}
|
|
@@ -1617,6 +1683,30 @@ interface VerifyGateRow {
|
|
|
1617
1683
|
ok: boolean;
|
|
1618
1684
|
}
|
|
1619
1685
|
|
|
1686
|
+
/** The flag that selects each gate, for the "not run" note. `requirements` always runs. */
|
|
1687
|
+
const GATE_SELECTOR: Record<string, string> = {
|
|
1688
|
+
templates: "--templates",
|
|
1689
|
+
schema: "--db <url>",
|
|
1690
|
+
codegen: "--codegen",
|
|
1691
|
+
docs: "--docs",
|
|
1692
|
+
deps: "--deps",
|
|
1693
|
+
replay: "--replay",
|
|
1694
|
+
};
|
|
1695
|
+
|
|
1696
|
+
/**
|
|
1697
|
+
* One line naming every gate this run did NOT run, each with the flag that selects it —
|
|
1698
|
+
* undefined when every gate ran. Exported for its test.
|
|
1699
|
+
*/
|
|
1700
|
+
export function notRunNote(gates: readonly VerifyGateRow[]): string | undefined {
|
|
1701
|
+
const skipped = gates.filter((g) => !g.ran);
|
|
1702
|
+
if (skipped.length === 0) return undefined;
|
|
1703
|
+
const named = skipped.map((g) => {
|
|
1704
|
+
const flag = GATE_SELECTOR[g.gate];
|
|
1705
|
+
return flag !== undefined ? `${g.gate} (${flag})` : g.gate;
|
|
1706
|
+
});
|
|
1707
|
+
return `meta verify — not run: ${named.join(", ")}`;
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1620
1710
|
/**
|
|
1621
1711
|
* Format one `Diagnostic` as a printed TEXT line. Named `formatDiagnostic`, not
|
|
1622
1712
|
* `fmt`: `fmt` is this command's OUTPUT FORMAT parameter, and a shadow of it
|