prisma-next 0.12.0-dev.47 → 0.12.0-dev.49

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 (102) hide show
  1. package/dist/cli.mjs +12 -12
  2. package/dist/{client-CJWPvdKj.mjs → client-DC-UlBLy.mjs} +4 -4
  3. package/dist/{client-CJWPvdKj.mjs.map → client-DC-UlBLy.mjs.map} +1 -1
  4. package/dist/{command-helpers-C6lqKJG1.mjs → command-helpers-esJGBD4W.mjs} +5 -5
  5. package/dist/command-helpers-esJGBD4W.mjs.map +1 -0
  6. package/dist/commands/contract-emit.mjs +1 -1
  7. package/dist/commands/contract-infer.mjs +1 -1
  8. package/dist/commands/db-init.mjs +3 -3
  9. package/dist/commands/db-schema.mjs +3 -3
  10. package/dist/commands/db-sign.mjs +4 -4
  11. package/dist/commands/db-update.mjs +4 -4
  12. package/dist/commands/db-verify.mjs +1 -1
  13. package/dist/commands/migrate.d.mts +1 -1
  14. package/dist/commands/migrate.mjs +4 -4
  15. package/dist/commands/migration-check.d.mts +3 -15
  16. package/dist/commands/migration-check.d.mts.map +1 -1
  17. package/dist/commands/migration-check.mjs +3 -2
  18. package/dist/commands/migration-graph.d.mts +9 -18
  19. package/dist/commands/migration-graph.d.mts.map +1 -1
  20. package/dist/commands/migration-graph.mjs +33 -20
  21. package/dist/commands/migration-graph.mjs.map +1 -1
  22. package/dist/commands/migration-list.d.mts +4 -4
  23. package/dist/commands/migration-list.mjs +1 -1
  24. package/dist/commands/migration-log.d.mts +5 -20
  25. package/dist/commands/migration-log.d.mts.map +1 -1
  26. package/dist/commands/migration-log.mjs +1 -1
  27. package/dist/commands/migration-new.mjs +3 -3
  28. package/dist/commands/migration-plan.d.mts +1 -1
  29. package/dist/commands/migration-plan.mjs +1 -1
  30. package/dist/commands/migration-show.d.mts +17 -18
  31. package/dist/commands/migration-show.d.mts.map +1 -1
  32. package/dist/commands/migration-show.mjs +13 -13
  33. package/dist/commands/migration-show.mjs.map +1 -1
  34. package/dist/commands/migration-status.d.mts +24 -26
  35. package/dist/commands/migration-status.d.mts.map +1 -1
  36. package/dist/commands/migration-status.mjs +3 -2
  37. package/dist/commands/ref.d.mts +1 -1
  38. package/dist/commands/ref.mjs +2 -2
  39. package/dist/commands/telemetry/index.mjs +1 -1
  40. package/dist/{contract-at-errors-CVQsgp3V.mjs → contract-at-errors-COZAemUl.mjs} +2 -2
  41. package/dist/{contract-at-errors-CVQsgp3V.mjs.map → contract-at-errors-COZAemUl.mjs.map} +1 -1
  42. package/dist/{contract-emit-DnUkRd-7.mjs → contract-emit-Bv46RAIO.mjs} +3 -3
  43. package/dist/{contract-emit-DnUkRd-7.mjs.map → contract-emit-Bv46RAIO.mjs.map} +1 -1
  44. package/dist/{contract-emit-Iyq5V7OU.mjs → contract-emit-DIWImLqS.mjs} +3 -3
  45. package/dist/{contract-emit-Iyq5V7OU.mjs.map → contract-emit-DIWImLqS.mjs.map} +1 -1
  46. package/dist/{contract-infer-MmQMIms7.mjs → contract-infer-DpGN9SAj.mjs} +3 -3
  47. package/dist/{contract-infer-MmQMIms7.mjs.map → contract-infer-DpGN9SAj.mjs.map} +1 -1
  48. package/dist/{contract-space-aggregate-loader-BSWfMkFY.mjs → contract-space-aggregate-loader-CpNVrBqW.mjs} +2 -2
  49. package/dist/{contract-space-aggregate-loader-BSWfMkFY.mjs.map → contract-space-aggregate-loader-CpNVrBqW.mjs.map} +1 -1
  50. package/dist/{db-verify-B-YOEESk.mjs → db-verify-Cq16Obsw.mjs} +4 -4
  51. package/dist/{db-verify-B-YOEESk.mjs.map → db-verify-Cq16Obsw.mjs.map} +1 -1
  52. package/dist/exports/control-api.d.mts +1 -1
  53. package/dist/exports/control-api.mjs +2 -2
  54. package/dist/exports/index.mjs +1 -1
  55. package/dist/exports/init-output.mjs +1 -1
  56. package/dist/{framework-components-D6VMhw2T.mjs → framework-components-BO9VO43s.mjs} +2 -2
  57. package/dist/{framework-components-D6VMhw2T.mjs.map → framework-components-BO9VO43s.mjs.map} +1 -1
  58. package/dist/{global-flags-DG4uY5tV.d.mts → global-flags-CV5LhrFg.d.mts} +1 -1
  59. package/dist/{global-flags-DG4uY5tV.d.mts.map → global-flags-CV5LhrFg.d.mts.map} +1 -1
  60. package/dist/{init-Ceib8PNc.mjs → init-C0rjiQ9I.mjs} +4 -4
  61. package/dist/{init-Ceib8PNc.mjs.map → init-C0rjiQ9I.mjs.map} +1 -1
  62. package/dist/{inspect-live-schema-CjMZ0RkS.mjs → inspect-live-schema-CRDKTNcf.mjs} +3 -3
  63. package/dist/{inspect-live-schema-CjMZ0RkS.mjs.map → inspect-live-schema-CRDKTNcf.mjs.map} +1 -1
  64. package/dist/{migration-check-DkNcCXZC.mjs → migration-check-CCXNXMXJ.mjs} +49 -30
  65. package/dist/migration-check-CCXNXMXJ.mjs.map +1 -0
  66. package/dist/{migration-command-scaffold-CrRysYxV.mjs → migration-command-scaffold-BDd9abqW.mjs} +3 -3
  67. package/dist/{migration-command-scaffold-CrRysYxV.mjs.map → migration-command-scaffold-BDd9abqW.mjs.map} +1 -1
  68. package/dist/{migration-graph-space-render-ByJ83gxp.mjs → migration-graph-space-render-CeNXh_Wy.mjs} +13 -13
  69. package/dist/migration-graph-space-render-CeNXh_Wy.mjs.map +1 -0
  70. package/dist/{migration-list-ip7fKesI.mjs → migration-list-vJWFuXca.mjs} +17 -17
  71. package/dist/migration-list-vJWFuXca.mjs.map +1 -0
  72. package/dist/{migration-log-BX9vu5c9.mjs → migration-log-6rcHQSI4.mjs} +15 -8
  73. package/dist/migration-log-6rcHQSI4.mjs.map +1 -0
  74. package/dist/{migration-path-target-ByduK0eI.mjs → migration-path-target-UkxkgXnv.mjs} +2 -2
  75. package/dist/{migration-path-target-ByduK0eI.mjs.map → migration-path-target-UkxkgXnv.mjs.map} +1 -1
  76. package/dist/{migration-plan-DLbbc_7z.mjs → migration-plan-CHu_erQ5.mjs} +5 -5
  77. package/dist/{migration-plan-DLbbc_7z.mjs.map → migration-plan-CHu_erQ5.mjs.map} +1 -1
  78. package/dist/{migration-status-BtdaOuQJ.mjs → migration-status-DzdlZQJ3.mjs} +39 -35
  79. package/dist/migration-status-DzdlZQJ3.mjs.map +1 -0
  80. package/dist/{output-CF_hqzI-.mjs → output-BD61elic.mjs} +1 -1
  81. package/dist/{output-CF_hqzI-.mjs.map → output-BD61elic.mjs.map} +1 -1
  82. package/dist/schemas-BL33A3i-.d.mts +193 -0
  83. package/dist/schemas-BL33A3i-.d.mts.map +1 -0
  84. package/dist/schemas-DJY2O09F.mjs +112 -0
  85. package/dist/schemas-DJY2O09F.mjs.map +1 -0
  86. package/dist/{telemetry-CxbY4NKn.mjs → telemetry-CZkgkR_O.mjs} +2 -2
  87. package/dist/{telemetry-CxbY4NKn.mjs.map → telemetry-CZkgkR_O.mjs.map} +1 -1
  88. package/dist/{terminal-ui-5Y6mrg93.d.mts → terminal-ui-BgLiAOYi.d.mts} +1 -1
  89. package/dist/{terminal-ui-5Y6mrg93.d.mts.map → terminal-ui-BgLiAOYi.d.mts.map} +1 -1
  90. package/dist/{types-Cculk5KV.d.mts → types-qV41eEXH.d.mts} +1 -1
  91. package/dist/{types-Cculk5KV.d.mts.map → types-qV41eEXH.d.mts.map} +1 -1
  92. package/dist/{verify-Df-8Kwat.mjs → verify-IilvIk_E.mjs} +2 -2
  93. package/dist/{verify-Df-8Kwat.mjs.map → verify-IilvIk_E.mjs.map} +1 -1
  94. package/package.json +11 -11
  95. package/dist/command-helpers-C6lqKJG1.mjs.map +0 -1
  96. package/dist/migration-check-DkNcCXZC.mjs.map +0 -1
  97. package/dist/migration-graph-space-render-ByJ83gxp.mjs.map +0 -1
  98. package/dist/migration-list-ip7fKesI.mjs.map +0 -1
  99. package/dist/migration-list-types-DS63IdFd.d.mts +0 -23
  100. package/dist/migration-list-types-DS63IdFd.d.mts.map +0 -1
  101. package/dist/migration-log-BX9vu5c9.mjs.map +0 -1
  102. package/dist/migration-status-BtdaOuQJ.mjs.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { t as loadConfig } from "./config-loader-B6sJjXTv.mjs";
2
- import { A as formatStyledHeader, F as CliStructuredError, _ as createTerminalUI, a as readContractEnvelope, ct as errorUnexpected, d as setCommandSeeAlso, dt as requireLiveDatabase, g as parseGlobalFlagsOrExit, i as maskConnectionUrl, l as setCommandDescriptions, lt as mapMigrationToolsError, n as collectDeclaredInvariants, p as toStructuralEdge, s as resolveMigrationPaths, t as addGlobalOptions, u as setCommandExamples, ut as mapRefResolutionError, y as handleResult } from "./command-helpers-C6lqKJG1.mjs";
3
- import { t as createControlClient } from "./client-CJWPvdKj.mjs";
4
- import { n as buildReadAggregate, o as refusePackageCorruptionOnAggregate, r as loadContractRawSafely } from "./contract-space-aggregate-loader-BSWfMkFY.mjs";
5
- import { a as renderMigrationGraphLegend, i as renderMigrationGraphSpaceTree, n as computeGlobalMaxEdgeTreePrefixWidth, r as indentMigrationGraphTreeBlock, t as computeGlobalMaxDirNameWidth } from "./migration-graph-space-render-ByJ83gxp.mjs";
6
- import { c as validateLegendOptions, i as migrationSpaceListEntriesFromAggregate, o as runMigrationList, r as listRefsByContractHash, s as shouldShowLegend } from "./migration-list-ip7fKesI.mjs";
2
+ import { A as formatStyledHeader, F as CliStructuredError, _ as createTerminalUI, a as readContractEnvelope, ct as errorUnexpected, d as setCommandSeeAlso, dt as requireLiveDatabase, g as parseGlobalFlagsOrExit, i as maskConnectionUrl, l as setCommandDescriptions, lt as mapMigrationToolsError, n as collectDeclaredInvariants, p as toStructuralEdge, s as resolveMigrationPaths, t as addGlobalOptions, u as setCommandExamples, ut as mapRefResolutionError, y as handleResult } from "./command-helpers-esJGBD4W.mjs";
3
+ import { t as createControlClient } from "./client-DC-UlBLy.mjs";
4
+ import { n as buildReadAggregate, o as refusePackageCorruptionOnAggregate, r as loadContractRawSafely } from "./contract-space-aggregate-loader-CpNVrBqW.mjs";
5
+ import { a as renderMigrationGraphLegend, i as renderMigrationGraphSpaceTree, n as computeGlobalMaxEdgeTreePrefixWidth, r as indentMigrationGraphTreeBlock, t as computeGlobalMaxDirNameWidth } from "./migration-graph-space-render-CeNXh_Wy.mjs";
6
+ import { c as validateLegendOptions, i as migrationSpaceListEntriesFromAggregate, o as runMigrationList, r as listRefsByContractHash, s as shouldShowLegend } from "./migration-list-vJWFuXca.mjs";
7
7
  import { Command } from "commander";
8
8
  import { ifDefined } from "@prisma-next/utils/defined";
9
9
  import { notOk, ok } from "@prisma-next/utils/result";
@@ -46,7 +46,7 @@ function resolveTarget(contractHash, activeRefHash) {
46
46
  function buildStatusMigrations(listMigrations, annotations) {
47
47
  return listMigrations.map((migration) => ({
48
48
  ...migration,
49
- status: statusForMigrationHash(migration.migrationHash, annotations)
49
+ status: statusForMigrationHash(migration.hash, annotations)
50
50
  }));
51
51
  }
52
52
  function renderSpaceTree(args) {
@@ -85,13 +85,14 @@ function formatStatusSummary(result, colorize) {
85
85
  const pendingTotal = result.spaces.reduce((sum, space) => sum + countPending(space.migrations), 0);
86
86
  if (result.diagnostics.some((d) => d.code === "MIGRATION.MARKER_NOT_IN_HISTORY") || pendingTotal > 0) lines.push(c(yellow, result.summary));
87
87
  else lines.push(result.summary);
88
- if (result.missingInvariantsLine !== void 0) lines.push(c(dim, result.missingInvariantsLine));
88
+ const missingInvariantsDiagnostic = result.diagnostics.find((d) => d.code === "MIGRATION.MISSING_INVARIANTS");
89
+ if (missingInvariantsDiagnostic !== void 0) lines.push(c(dim, missingInvariantsDiagnostic.message));
89
90
  return lines.join("\n");
90
91
  }
91
92
  function formatStatusHumanOutput(result, colorize) {
92
93
  const sections = [];
93
94
  for (const section of result.treeSections) {
94
- if (section.showHeading) sections.push(`${section.spaceId}:`);
95
+ if (section.showHeading) sections.push(`${section.space}:`);
95
96
  if (section.tree.length > 0) sections.push(section.tree);
96
97
  else sections.push("(no migrations)");
97
98
  sections.push("");
@@ -239,7 +240,7 @@ async function executeMigrationStatusCommand(options, flags, ui) {
239
240
  connected = true;
240
241
  const read = await readMarkersAndLedgers({
241
242
  client,
242
- spaceIds: scopedSpaces.map((s) => s.spaceId)
243
+ spaceIds: scopedSpaces.map((s) => s.space)
243
244
  });
244
245
  markersBySpace = new Map(read.markersBySpace);
245
246
  ledgersBySpace = new Map(read.ledgersBySpace);
@@ -273,19 +274,19 @@ async function executeMigrationStatusCommand(options, flags, ui) {
273
274
  let headlineTargetHash = activeRefHash ?? contractHash;
274
275
  let totalPending = 0;
275
276
  const globalLayoutInputs = showSpaceHeadings ? scopedSpaces.filter((spaceEntry) => spaceEntry.migrations.length > 0).map((spaceEntry) => ({
276
- graph: aggregate.space(spaceEntry.spaceId).graph(),
277
+ graph: aggregate.space(spaceEntry.space).graph(),
277
278
  liveContractHash: contractHash
278
279
  })) : [];
279
280
  const globalMaxEdgeTreePrefixWidth = globalLayoutInputs.length > 0 ? computeGlobalMaxEdgeTreePrefixWidth(globalLayoutInputs) : void 0;
280
281
  const globalMaxDirNameWidth = globalLayoutInputs.length > 0 ? computeGlobalMaxDirNameWidth(globalLayoutInputs) : void 0;
281
282
  for (const spaceEntry of scopedSpaces) {
282
- const member = aggregate.space(spaceEntry.spaceId);
283
+ const member = aggregate.space(spaceEntry.space);
283
284
  if (member === void 0) continue;
284
285
  const graph = member.graph();
285
286
  const spaceContractHash = member.contract().storage.storageHash;
286
287
  const targetHash = resolveTarget(spaceContractHash, activeRefHash);
287
- if (spaceEntry.spaceId === aggregate.app.spaceId) headlineTargetHash = targetHash;
288
- const markerRecord = markersBySpace.get(spaceEntry.spaceId);
288
+ if (spaceEntry.space === aggregate.app.spaceId) headlineTargetHash = targetHash;
289
+ const markerRecord = markersBySpace.get(spaceEntry.space);
289
290
  const markerHash = usingFromOverride ? fromOverrideHash : markerRecord?.storageHash ?? void 0;
290
291
  const originHash = markerHash ?? EMPTY_CONTRACT_HASH;
291
292
  const markerInGraph = markerHash === void 0 || graph.nodes.has(markerHash) || markerHash === spaceContractHash;
@@ -299,7 +300,7 @@ async function executeMigrationStatusCommand(options, flags, ui) {
299
300
  hints: ["Run 'prisma-next db sign' to overwrite the marker if the database already matches the contract", "Run 'prisma-next db update' to push the current contract to the database"]
300
301
  });
301
302
  }
302
- const ledger = ledgersBySpace.get(spaceEntry.spaceId) ?? [];
303
+ const ledger = ledgersBySpace.get(spaceEntry.space) ?? [];
303
304
  const annotations = deriveStatusEdgeAnnotations({
304
305
  graph,
305
306
  targetHash,
@@ -323,25 +324,29 @@ async function executeMigrationStatusCommand(options, flags, ui) {
323
324
  const pending = countPending(migrations);
324
325
  totalPending += pending;
325
326
  statusSpaces.push({
326
- spaceId: spaceEntry.spaceId,
327
- markerHash: markerHash ?? null,
328
- targetHash,
329
- migrations
327
+ space: spaceEntry.space,
328
+ currentContract: markerHash ?? null,
329
+ targetContract: targetHash,
330
+ migrations: [...migrations]
330
331
  });
331
332
  const displayTree = showSpaceHeadings && tree.length > 0 ? indentMigrationGraphTreeBlock(tree, " ") : tree;
332
333
  treeSections.push({
333
- spaceId: spaceEntry.spaceId,
334
+ space: spaceEntry.space,
334
335
  tree: displayTree,
335
336
  showHeading: showSpaceHeadings
336
337
  });
337
338
  }
338
- let missingInvariantsLine;
339
339
  if (connected && requiredInvariants.length > 0) {
340
340
  const markerInvariants = markersBySpace.get(aggregate.app.spaceId)?.invariants ?? [];
341
341
  const markerSet = new Set(markerInvariants);
342
342
  const missing = requiredInvariants.filter((id) => !markerSet.has(id));
343
343
  if (missing.length > 0) {
344
- missingInvariantsLine = `missing invariant(s): ${missing.join(", ")}`;
344
+ diagnostics.push({
345
+ code: "MIGRATION.MISSING_INVARIANTS",
346
+ ...ifDefined("ref", activeRefName),
347
+ invariants: missing,
348
+ message: `missing invariant(s): ${missing.join(", ")}`
349
+ });
345
350
  if (activeRefHash !== void 0) {
346
351
  const outcome = findPathWithDecision(appGraph, markersBySpace.get(aggregate.app.spaceId)?.storageHash ?? EMPTY_CONTRACT_HASH, activeRefHash, {
347
352
  ...ifDefined("refName", activeRefName),
@@ -373,16 +378,14 @@ async function executeMigrationStatusCommand(options, flags, ui) {
373
378
  spaces: statusSpaces,
374
379
  summary: "No migrations found",
375
380
  diagnostics,
376
- treeSections,
377
- ...ifDefined("missingInvariantsLine", missingInvariantsLine)
381
+ treeSections
378
382
  });
379
383
  return ok({
380
384
  ok: true,
381
385
  spaces: statusSpaces,
382
386
  summary,
383
387
  diagnostics,
384
- treeSections,
385
- ...ifDefined("missingInvariantsLine", missingInvariantsLine)
388
+ treeSections
386
389
  });
387
390
  }
388
391
  function createMigrationStatusCommand() {
@@ -420,20 +423,21 @@ function createMigrationStatusCommand() {
420
423
  const legendValidation = validateLegendOptions(options, flags);
421
424
  if (!legendValidation.ok) process.exit(handleResult(legendValidation, flags, ui));
422
425
  const exitCode = handleResult(await executeMigrationStatusCommand(options, flags, ui), flags, ui, (statusResult) => {
423
- if (flags.json) ui.output(JSON.stringify({
424
- ok: true,
425
- spaces: statusResult.spaces,
426
- summary: statusResult.summary,
427
- ...statusResult.diagnostics.length > 0 ? { diagnostics: statusResult.diagnostics } : {},
428
- ...statusResult.missingInvariantsLine ? { missingInvariants: statusResult.missingInvariantsLine } : {}
429
- }, null, 2));
430
- else if (!flags.quiet) ui.output(formatStatusHumanOutput(statusResult, flags.color !== false));
426
+ if (flags.json) {
427
+ const jsonResult = {
428
+ ok: true,
429
+ spaces: [...statusResult.spaces],
430
+ summary: statusResult.summary,
431
+ diagnostics: [...statusResult.diagnostics]
432
+ };
433
+ ui.output(JSON.stringify(jsonResult, null, 2));
434
+ } else if (!flags.quiet) ui.output(formatStatusHumanOutput(statusResult, flags.color !== false));
431
435
  });
432
436
  process.exit(exitCode);
433
437
  });
434
438
  return command;
435
439
  }
436
440
  //#endregion
437
- export { formatStatusSummary as a, formatStatusHumanOutput as i, buildStatusHeadline as n, createMigrationStatusCommand as r, buildNoPathSummary as t };
441
+ export { formatStatusHumanOutput as a, executeMigrationStatusCommand as i, buildStatusHeadline as n, formatStatusSummary as o, createMigrationStatusCommand as r, buildNoPathSummary as t };
438
442
 
439
- //# sourceMappingURL=migration-status-BtdaOuQJ.mjs.map
443
+ //# sourceMappingURL=migration-status-DzdlZQJ3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-status-DzdlZQJ3.mjs","names":[],"sources":["../src/commands/migration-status-overlay.ts","../src/commands/migration-status.ts"],"sourcesContent":["import type { MigrationGraph } from '@prisma-next/migration-tools/graph';\nimport { findPath } from '@prisma-next/migration-tools/migration-graph';\nimport type { MigrationEdgeAnnotation } from '../utils/formatters/migration-graph-tree-render';\n\nexport interface DeriveStatusEdgeAnnotationsInput {\n readonly graph: MigrationGraph;\n readonly targetHash: string;\n readonly originHash: string;\n readonly appliedMigrationHashes: ReadonlySet<string>;\n readonly showAppliedOverlay: boolean;\n}\n\nexport function deriveStatusEdgeAnnotations(\n input: DeriveStatusEdgeAnnotationsInput,\n): ReadonlyMap<string, MigrationEdgeAnnotation> {\n const annotations = new Map<string, MigrationEdgeAnnotation>();\n\n if (input.showAppliedOverlay) {\n for (const edge of input.graph.migrationByHash.values()) {\n if (input.appliedMigrationHashes.has(edge.migrationHash)) {\n annotations.set(edge.migrationHash, { status: 'applied' });\n }\n }\n }\n\n if (!input.graph.nodes.has(input.originHash)) {\n return annotations;\n }\n\n const pendingPath = findPath(input.graph, input.originHash, input.targetHash);\n if (!pendingPath) {\n return annotations;\n }\n\n for (const edge of pendingPath) {\n if (input.appliedMigrationHashes.has(edge.migrationHash)) {\n continue;\n }\n const existing = annotations.get(edge.migrationHash);\n if (existing?.status === 'applied') {\n continue;\n }\n annotations.set(edge.migrationHash, { status: 'pending' });\n }\n\n return annotations;\n}\n\nexport function appliedHashesFromLedger(\n ledgerEntries: ReadonlyArray<{ readonly migrationHash: string }>,\n): ReadonlySet<string> {\n return new Set(ledgerEntries.map((entry) => entry.migrationHash));\n}\n\nexport function statusForMigrationHash(\n migrationHash: string,\n annotations: ReadonlyMap<string, MigrationEdgeAnnotation>,\n): 'applied' | 'pending' | null {\n const status = annotations.get(migrationHash)?.status;\n return status ?? null;\n}\n","import type { LedgerEntryRecord } from '@prisma-next/contract/types';\nimport type {\n ContractMarkerRecordLike,\n ContractSpaceMember,\n} from '@prisma-next/migration-tools/aggregate';\nimport { EMPTY_CONTRACT_HASH } from '@prisma-next/migration-tools/constants';\nimport {\n errorNoInvariantPath,\n errorUnknownInvariant,\n MigrationToolsError,\n} from '@prisma-next/migration-tools/errors';\nimport { findPath, findPathWithDecision } from '@prisma-next/migration-tools/migration-graph';\nimport { parseContractRef } from '@prisma-next/migration-tools/ref-resolution';\nimport type { RefEntry, Refs } from '@prisma-next/migration-tools/refs';\nimport { readRefs } from '@prisma-next/migration-tools/refs';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { notOk, ok, type Result } from '@prisma-next/utils/result';\nimport { dim, yellow } from 'colorette';\nimport { Command } from 'commander';\nimport { loadConfig } from '../config-loader';\nimport { createControlClient } from '../control-api/client';\nimport {\n CliStructuredError,\n errorUnexpected,\n mapMigrationToolsError,\n mapRefResolutionError,\n requireLiveDatabase,\n} from '../utils/cli-errors';\nimport {\n addGlobalOptions,\n collectDeclaredInvariants,\n maskConnectionUrl,\n readContractEnvelope,\n resolveMigrationPaths,\n setCommandDescriptions,\n setCommandExamples,\n setCommandSeeAlso,\n toStructuralEdge,\n} from '../utils/command-helpers';\nimport {\n buildReadAggregate,\n loadContractRawSafely,\n refusePackageCorruptionOnAggregate,\n} from '../utils/contract-space-aggregate-loader';\nimport {\n computeGlobalMaxDirNameWidth,\n computeGlobalMaxEdgeTreePrefixWidth,\n indentMigrationGraphTreeBlock,\n renderMigrationGraphSpaceTree,\n} from '../utils/formatters/migration-graph-space-render';\nimport type { MigrationEdgeAnnotation } from '../utils/formatters/migration-graph-tree-render';\nimport { renderMigrationGraphLegend } from '../utils/formatters/migration-graph-tree-render';\nimport type { MigrationListEntry } from '../utils/formatters/migration-list-types';\nimport { formatStyledHeader } from '../utils/formatters/styled';\nimport type { CommonCommandOptions } from '../utils/global-flags';\nimport { type GlobalFlags, parseGlobalFlagsOrExit } from '../utils/global-flags';\nimport { shouldShowLegend, validateLegendOptions } from '../utils/legend';\nimport { handleResult } from '../utils/result-handler';\nimport { createTerminalUI, type TerminalUI } from '../utils/terminal-ui';\nimport type {\n MigrationStatusEntry,\n MigrationStatusResult,\n MigrationStatusSpace,\n StatusDiagnosticJson,\n} from './json/schemas';\nimport { migrationStatusJsonResultSchema } from './json/schemas';\nimport {\n listRefsByContractHash,\n migrationSpaceListEntriesFromAggregate,\n runMigrationList,\n} from './migration-list';\nimport {\n appliedHashesFromLedger,\n deriveStatusEdgeAnnotations,\n statusForMigrationHash,\n} from './migration-status-overlay';\n\nexport type { StatusRef } from '../utils/migration-types';\nexport type {\n MigrationStatusEntry,\n MigrationStatusResult,\n MigrationStatusSpace,\n StatusDiagnosticJson,\n};\nexport { migrationStatusJsonResultSchema };\n\nexport interface MigrationStatusOptions extends CommonCommandOptions {\n readonly db?: string;\n readonly config?: string;\n readonly to?: string;\n readonly from?: string;\n readonly space?: string;\n readonly legend?: boolean;\n readonly ascii?: boolean;\n}\n\nexport interface MigrationStatusTreeSection {\n readonly space: string;\n readonly tree: string;\n readonly showHeading: boolean;\n}\n\ninterface MigrationStatusCommandResult {\n readonly ok: true;\n readonly spaces: readonly MigrationStatusSpace[];\n readonly summary: string;\n readonly diagnostics: readonly StatusDiagnosticJson[];\n readonly treeSections: readonly MigrationStatusTreeSection[];\n}\n\nfunction shortDisplayHash(hash: string): string {\n const stripped = hash.startsWith('sha256:') ? hash.slice(7) : hash;\n return stripped.slice(0, 12);\n}\n\nfunction resolveTarget(contractHash: string, activeRefHash: string | undefined): string {\n return activeRefHash ?? contractHash;\n}\n\nfunction buildStatusMigrations(\n listMigrations: readonly MigrationListEntry[],\n annotations: ReadonlyMap<string, MigrationEdgeAnnotation>,\n): readonly MigrationStatusEntry[] {\n return listMigrations.map((migration) => ({\n ...migration,\n status: statusForMigrationHash(migration.hash, annotations),\n }));\n}\n\nfunction renderSpaceTree(args: {\n readonly member: ContractSpaceMember;\n readonly liveContractHash: string;\n readonly migrations: readonly MigrationListEntry[];\n readonly markerHash: string | undefined;\n readonly showDbMarker: boolean;\n readonly statusOverlay: ReadonlyMap<string, MigrationEdgeAnnotation>;\n readonly colorize: boolean;\n readonly glyphMode: 'unicode' | 'ascii';\n readonly globalMaxEdgeTreePrefixWidth?: number;\n readonly globalMaxDirNameWidth?: number;\n}): string {\n const graph = args.member.graph();\n if (graph.nodes.size === 0) {\n return '';\n }\n return renderMigrationGraphSpaceTree({\n graph,\n migrations: args.migrations,\n liveContractHash: args.liveContractHash,\n refsByHash: listRefsByContractHash(args.member),\n statusOverlayByHash: args.statusOverlay,\n colorize: args.colorize,\n glyphMode: args.glyphMode,\n ...(args.showDbMarker && args.markerHash !== undefined ? { dbHash: args.markerHash } : {}),\n ...(args.globalMaxEdgeTreePrefixWidth !== undefined\n ? { globalMaxEdgeTreePrefixWidth: args.globalMaxEdgeTreePrefixWidth }\n : {}),\n ...(args.globalMaxDirNameWidth !== undefined\n ? { globalMaxDirNameWidth: args.globalMaxDirNameWidth }\n : {}),\n });\n}\n\nfunction countPending(migrations: readonly MigrationStatusEntry[]): number {\n return migrations.filter((m) => m.status === 'pending').length;\n}\n\nexport function buildNoPathSummary(args: {\n readonly markerHash: string | undefined;\n readonly targetHash: string;\n readonly explicitTarget: boolean;\n readonly refName: string | undefined;\n}): string {\n const markerPart =\n args.markerHash !== undefined\n ? `the database state (${shortDisplayHash(args.markerHash)})`\n : 'the database state';\n const targetShort = shortDisplayHash(args.targetHash);\n if (!args.explicitTarget) {\n return `No migration path from ${markerPart} to the application's contract (${targetShort}). Run \\`prisma-next migration plan --name <name>\\` to author one.`;\n }\n const targetLabel =\n args.refName !== undefined\n ? `the target (${targetShort} via \\`${args.refName}\\`)`\n : `the target (${targetShort})`;\n return `No migration path from ${markerPart} to ${targetLabel}. Run \\`prisma-next migration plan --name <name>\\` to author one, or pass \\`--to <contract>\\` to pick a reachable target.`;\n}\n\nexport function buildStatusHeadline(args: {\n readonly pendingCount: number;\n readonly targetHash: string;\n readonly markerDiverged: boolean;\n readonly markerHash: string | undefined;\n}): string {\n if (args.markerDiverged && args.markerHash !== undefined) {\n return `Database marker ${shortDisplayHash(args.markerHash)} is not in the on-disk migration graph`;\n }\n if (args.pendingCount === 0) {\n return 'Up to date';\n }\n return `${args.pendingCount} pending — run \\`prisma-next migrate --to ${shortDisplayHash(args.targetHash)}\\``;\n}\n\nexport function formatStatusSummary(\n result: MigrationStatusCommandResult,\n colorize: boolean,\n): string {\n const c = (fn: (s: string) => string, s: string) => (colorize ? fn(s) : s);\n const lines: string[] = [];\n const pendingTotal = result.spaces.reduce(\n (sum, space) => sum + countPending(space.migrations),\n 0,\n );\n const hasDivergence = result.diagnostics.some(\n (d) => d.code === 'MIGRATION.MARKER_NOT_IN_HISTORY',\n );\n if (hasDivergence || pendingTotal > 0) {\n lines.push(c(yellow, result.summary));\n } else {\n lines.push(result.summary);\n }\n const missingInvariantsDiagnostic = result.diagnostics.find(\n (d) => d.code === 'MIGRATION.MISSING_INVARIANTS',\n );\n if (missingInvariantsDiagnostic !== undefined) {\n lines.push(c(dim, missingInvariantsDiagnostic.message));\n }\n return lines.join('\\n');\n}\n\nexport function formatStatusHumanOutput(\n result: MigrationStatusCommandResult,\n colorize: boolean,\n): string {\n const sections: string[] = [];\n for (const section of result.treeSections) {\n if (section.showHeading) {\n sections.push(`${section.space}:`);\n }\n if (section.tree.length > 0) {\n sections.push(section.tree);\n } else {\n sections.push('(no migrations)');\n }\n sections.push('');\n }\n sections.push(formatStatusSummary(result, colorize));\n return sections.join('\\n').trimEnd();\n}\n\nasync function readMarkersAndLedgers(args: {\n readonly client: ReturnType<typeof createControlClient>;\n readonly spaceIds: readonly string[];\n}): Promise<{\n readonly markersBySpace: ReadonlyMap<string, ContractMarkerRecordLike>;\n readonly ledgersBySpace: ReadonlyMap<string, readonly LedgerEntryRecord[]>;\n}> {\n const markersBySpace = new Map<string, ContractMarkerRecordLike>();\n const all = await args.client.readAllMarkers();\n for (const [spaceId, marker] of all) {\n markersBySpace.set(spaceId, marker);\n }\n const ledgersBySpace = new Map<string, readonly LedgerEntryRecord[]>();\n for (const spaceId of args.spaceIds) {\n ledgersBySpace.set(spaceId, await args.client.readLedger(spaceId));\n }\n return { markersBySpace, ledgersBySpace };\n}\n\nexport async function executeMigrationStatusCommand(\n options: MigrationStatusOptions,\n flags: GlobalFlags,\n ui: TerminalUI,\n): Promise<Result<MigrationStatusCommandResult, CliStructuredError>> {\n const config = await loadConfig(options.config);\n const { configPath, migrationsDir, migrationsRelative, refsDir } = resolveMigrationPaths(\n options.config,\n config,\n );\n\n const dbConnection = options.db ?? config.db?.connection;\n const hasDriver = !!config.driver;\n const usingFromOverride = options.from !== undefined;\n\n if (!usingFromOverride) {\n const missingDb = requireLiveDatabase({\n dbConnection,\n hasDriver,\n why: 'migration status needs a database connection to read the marker and ledger (or pass --from for offline path preview)',\n retryCommand: 'prisma-next migration status --from <contract>',\n });\n if (missingDb) {\n return notOk(missingDb);\n }\n }\n\n let allRefs: Refs = {};\n try {\n allRefs = await readRefs(refsDir);\n } catch (error) {\n if (MigrationToolsError.is(error)) {\n return notOk(mapMigrationToolsError(error));\n }\n throw error;\n }\n\n const diagnostics: StatusDiagnosticJson[] = [];\n let contractHash: string = EMPTY_CONTRACT_HASH;\n try {\n const envelope = await readContractEnvelope(config);\n contractHash = envelope.storageHash;\n } catch (error) {\n diagnostics.push({\n code: 'CONTRACT.UNREADABLE',\n severity: 'warn',\n message: `Could not read contract: ${error instanceof Error ? error.message : 'unknown error'}`,\n hints: [\"Run 'prisma-next contract emit' to generate a valid contract\"],\n });\n }\n\n const loaded = await buildReadAggregate(config, { migrationsDir });\n if (!loaded.ok) {\n return notOk(loaded.failure);\n }\n\n const { aggregate } = loaded.value;\n const contractRawForAggregate = await loadContractRawSafely(config);\n if (contractRawForAggregate !== null) {\n const corruptionFailure = refusePackageCorruptionOnAggregate(aggregate);\n if (corruptionFailure) {\n return notOk(corruptionFailure);\n }\n }\n const appGraph = aggregate.app.graph();\n\n let activeRefHash: string | undefined;\n let activeRefName: string | undefined;\n let activeRefEntry: RefEntry | undefined;\n let fromOverrideHash: string | undefined;\n\n if (options.to) {\n const refResult = parseContractRef(options.to, { graph: appGraph, refs: allRefs });\n if (!refResult.ok) {\n return notOk(mapRefResolutionError(refResult.failure));\n }\n activeRefHash = refResult.value.hash;\n if (refResult.value.provenance.kind === 'ref') {\n activeRefName = refResult.value.provenance.refName;\n activeRefEntry = allRefs[activeRefName];\n }\n }\n\n if (options.from) {\n const fromResult = parseContractRef(options.from, { graph: appGraph, refs: allRefs });\n if (!fromResult.ok) {\n return notOk(mapRefResolutionError(fromResult.failure));\n }\n fromOverrideHash = fromResult.value.hash;\n }\n\n const requiredInvariants: readonly string[] = [...(activeRefEntry?.invariants ?? [])].sort();\n\n if (!flags.json && !flags.quiet) {\n const details: Array<{ label: string; value: string }> = [\n { label: 'config', value: configPath },\n { label: 'migrations', value: migrationsRelative },\n ];\n if (dbConnection && hasDriver) {\n details.push({ label: 'database', value: maskConnectionUrl(String(dbConnection)) });\n }\n if (activeRefName) {\n details.push({ label: 'ref', value: activeRefName });\n }\n if (options.from) {\n details.push({ label: 'from', value: options.from });\n }\n if (options.space) {\n details.push({ label: 'space', value: options.space });\n }\n const header = formatStyledHeader({\n command: 'migration status',\n description: 'Show migration history and applied status',\n details,\n flags,\n });\n ui.stderr(header);\n if (shouldShowLegend(options, flags)) {\n ui.stderr(\n renderMigrationGraphLegend({\n colorize: flags.color !== false,\n glyphMode: ui.resolveGlyphMode(options.ascii === true),\n }),\n );\n ui.stderr('');\n }\n }\n\n const listSpaces = await migrationSpaceListEntriesFromAggregate(aggregate, migrationsDir);\n const listResult = runMigrationList({\n spaces: listSpaces,\n ...ifDefined('spaceFilter', options.space),\n });\n if (!listResult.ok) {\n return listResult;\n }\n\n const scopedSpaces = listResult.value.spaces;\n const showSpaceHeadings = scopedSpaces.length > 1;\n\n let markersBySpace = new Map<string, ContractMarkerRecordLike>();\n let ledgersBySpace = new Map<string, readonly LedgerEntryRecord[]>();\n let connected = false;\n\n if (dbConnection && hasDriver && !usingFromOverride) {\n const client = createControlClient({\n family: config.family,\n target: config.target,\n adapter: config.adapter,\n driver: config.driver,\n extensionPacks: config.extensionPacks ?? [],\n });\n try {\n await client.connect(dbConnection);\n connected = true;\n const read = await readMarkersAndLedgers({\n client,\n spaceIds: scopedSpaces.map((s) => s.space),\n });\n markersBySpace = new Map(read.markersBySpace);\n ledgersBySpace = new Map(read.ledgersBySpace);\n } catch (error) {\n if (CliStructuredError.is(error)) {\n return notOk(error);\n }\n return notOk(\n errorUnexpected(error instanceof Error ? error.message : String(error), {\n why: `Failed to read database state: ${error instanceof Error ? error.message : String(error)}`,\n }),\n );\n } finally {\n await client.close();\n }\n }\n\n if (activeRefEntry && activeRefEntry.invariants.length > 0 && connected) {\n const declared = collectDeclaredInvariants(appGraph);\n const markerInvariants = markersBySpace.get(aggregate.app.spaceId)?.invariants ?? [];\n const known = new Set<string>(declared);\n for (const id of markerInvariants) known.add(id);\n const unknown = activeRefEntry.invariants.filter((id) => !known.has(id));\n if (unknown.length > 0) {\n return notOk(\n mapMigrationToolsError(\n errorUnknownInvariant({\n ...ifDefined('refName', activeRefName),\n unknown,\n declared: [...declared].sort(),\n }),\n ),\n );\n }\n }\n\n const showAppliedOverlay = connected && !usingFromOverride;\n const showDbMarker = connected && !usingFromOverride;\n const glyphMode = ui.resolveGlyphMode(options.ascii === true);\n const colorize = flags.color !== false;\n\n const statusSpaces: MigrationStatusSpace[] = [];\n const treeSections: MigrationStatusTreeSection[] = [];\n let markerDiverged = false;\n let markerCannotReachTarget = false;\n let headlineTargetHash = activeRefHash ?? contractHash;\n let totalPending = 0;\n\n const globalLayoutInputs = showSpaceHeadings\n ? scopedSpaces\n .filter((spaceEntry) => spaceEntry.migrations.length > 0)\n .map((spaceEntry) => ({\n graph: aggregate.space(spaceEntry.space)!.graph(),\n liveContractHash: contractHash,\n }))\n : [];\n const globalMaxEdgeTreePrefixWidth =\n globalLayoutInputs.length > 0\n ? computeGlobalMaxEdgeTreePrefixWidth(globalLayoutInputs)\n : undefined;\n const globalMaxDirNameWidth =\n globalLayoutInputs.length > 0 ? computeGlobalMaxDirNameWidth(globalLayoutInputs) : undefined;\n\n for (const spaceEntry of scopedSpaces) {\n const member = aggregate.space(spaceEntry.space);\n if (member === undefined) {\n continue;\n }\n const graph = member.graph();\n const spaceContractHash = member.contract().storage.storageHash;\n const targetHash = resolveTarget(spaceContractHash, activeRefHash);\n if (spaceEntry.space === aggregate.app.spaceId) {\n headlineTargetHash = targetHash;\n }\n\n const markerRecord = markersBySpace.get(spaceEntry.space);\n const markerHash = usingFromOverride\n ? fromOverrideHash\n : (markerRecord?.storageHash ?? undefined);\n const originHash = markerHash ?? EMPTY_CONTRACT_HASH;\n const markerInGraph =\n markerHash === undefined || graph.nodes.has(markerHash) || markerHash === spaceContractHash;\n if (\n connected &&\n !usingFromOverride &&\n markerInGraph &&\n originHash !== targetHash &&\n findPath(graph, originHash, targetHash) === null\n ) {\n markerCannotReachTarget = true;\n }\n\n if (connected && !usingFromOverride && markerHash !== undefined && !markerInGraph) {\n markerDiverged = true;\n diagnostics.push({\n code: 'MIGRATION.MARKER_NOT_IN_HISTORY',\n severity: 'warn',\n message:\n 'Database was updated outside the migration system (marker does not match any migration)',\n hints: [\n \"Run 'prisma-next db sign' to overwrite the marker if the database already matches the contract\",\n \"Run 'prisma-next db update' to push the current contract to the database\",\n ],\n });\n }\n\n const ledger = ledgersBySpace.get(spaceEntry.space) ?? [];\n const appliedHashes = showAppliedOverlay ? appliedHashesFromLedger(ledger) : new Set<string>();\n\n const annotations = deriveStatusEdgeAnnotations({\n graph,\n targetHash,\n originHash,\n appliedMigrationHashes: appliedHashes,\n showAppliedOverlay,\n });\n const tree = renderSpaceTree({\n member,\n liveContractHash: contractHash,\n migrations: spaceEntry.migrations,\n markerHash,\n showDbMarker,\n statusOverlay: annotations,\n colorize,\n glyphMode,\n ...(globalMaxEdgeTreePrefixWidth !== undefined ? { globalMaxEdgeTreePrefixWidth } : {}),\n ...(globalMaxDirNameWidth !== undefined ? { globalMaxDirNameWidth } : {}),\n });\n const migrations = buildStatusMigrations(spaceEntry.migrations, annotations);\n const pending = countPending(migrations);\n totalPending += pending;\n\n statusSpaces.push({\n space: spaceEntry.space,\n currentContract: markerHash ?? null,\n targetContract: targetHash,\n migrations: [...migrations],\n });\n const displayTree =\n showSpaceHeadings && tree.length > 0 ? indentMigrationGraphTreeBlock(tree, ' ') : tree;\n treeSections.push({\n space: spaceEntry.space,\n tree: displayTree,\n showHeading: showSpaceHeadings,\n });\n }\n\n if (connected && requiredInvariants.length > 0) {\n const markerInvariants = markersBySpace.get(aggregate.app.spaceId)?.invariants ?? [];\n const markerSet = new Set(markerInvariants);\n const missing = requiredInvariants.filter((id) => !markerSet.has(id));\n if (missing.length > 0) {\n diagnostics.push({\n code: 'MIGRATION.MISSING_INVARIANTS',\n ...ifDefined('ref', activeRefName),\n invariants: missing,\n message: `missing invariant(s): ${missing.join(', ')}`,\n });\n if (activeRefHash !== undefined) {\n const originHash =\n markersBySpace.get(aggregate.app.spaceId)?.storageHash ?? EMPTY_CONTRACT_HASH;\n const outcome = findPathWithDecision(appGraph, originHash, activeRefHash, {\n ...ifDefined('refName', activeRefName),\n required: new Set(missing),\n });\n if (outcome.kind === 'unsatisfiable') {\n return notOk(\n mapMigrationToolsError(\n errorNoInvariantPath({\n ...ifDefined('refName', activeRefName),\n required: [...missing].sort(),\n missing: outcome.missing,\n structuralPath: outcome.structuralPath.map(toStructuralEdge),\n }),\n ),\n );\n }\n }\n }\n }\n\n const appMarkerHash = markersBySpace.get(aggregate.app.spaceId)?.storageHash;\n const summary = markerCannotReachTarget\n ? buildNoPathSummary({\n markerHash: appMarkerHash,\n targetHash: headlineTargetHash,\n explicitTarget: options.to !== undefined,\n refName: activeRefName,\n })\n : buildStatusHeadline({\n pendingCount: totalPending,\n targetHash: headlineTargetHash,\n markerDiverged,\n markerHash: appMarkerHash,\n });\n\n if (scopedSpaces.every((s) => s.migrations.length === 0)) {\n return ok({\n ok: true,\n spaces: statusSpaces,\n summary: 'No migrations found',\n diagnostics,\n treeSections,\n });\n }\n\n return ok({\n ok: true,\n spaces: statusSpaces,\n summary,\n diagnostics,\n treeSections,\n });\n}\n\nexport function createMigrationStatusCommand(): Command {\n const command = new Command('status');\n setCommandDescriptions(\n command,\n 'Show migration path and pending status',\n 'Shows which migrations are pending between the database marker and\\n' +\n 'the target contract. Requires a database connection.\\n' +\n 'Pass --from for an offline path preview without a database.\\n' +\n 'Use `migration graph` for topology, `migration log` for history,\\n' +\n 'and `migration list` for on-disk enumeration.',\n );\n setCommandExamples(command, [\n 'prisma-next migration status --db $DATABASE_URL',\n 'prisma-next migration status --to production --db $DATABASE_URL',\n 'prisma-next migration status --from sha256:abc --to production',\n 'prisma-next migration status --from sha256:abc --to production --json',\n 'prisma-next migration status --ascii --from sha256:abc --to production',\n 'prisma-next migration status --legend --from sha256:abc --to production',\n ]);\n setCommandSeeAlso(command, [\n { verb: 'migration log', oneLiner: 'Show executed migration history' },\n { verb: 'migration list', oneLiner: 'List on-disk migrations' },\n { verb: 'migration graph', oneLiner: 'Show the migration graph topology' },\n { verb: 'migration show', oneLiner: 'Display migration package contents' },\n ]);\n addGlobalOptions(command)\n .option('--db <url>', 'Database connection string')\n .option('--config <path>', 'Path to prisma-next.config.ts')\n .option('--space <id>', 'Narrow output to a single contract space')\n .option(\n '--to <contract>',\n 'Target contract reference (hash, prefix, ref name, migration dir name, <dir>^, or ./path)',\n )\n .option(\n '--from <contract>',\n 'Origin contract reference; same grammar as --to. Supplying --from switches to offline path computation.',\n )\n .option('--legend', 'Print a key for the tree glyphs and lane colors')\n .option('--ascii', 'Use ASCII glyphs (pipe-friendly)')\n .action(async (options: MigrationStatusOptions) => {\n const flags = parseGlobalFlagsOrExit(options);\n const ui = createTerminalUI(flags);\n\n const legendValidation = validateLegendOptions(options, flags);\n if (!legendValidation.ok) {\n process.exit(handleResult(legendValidation, flags, ui));\n }\n\n const result = await executeMigrationStatusCommand(options, flags, ui);\n\n const exitCode = handleResult(result, flags, ui, (statusResult) => {\n if (flags.json) {\n const jsonResult: MigrationStatusResult = {\n ok: true,\n spaces: [...statusResult.spaces],\n summary: statusResult.summary,\n diagnostics: [...statusResult.diagnostics],\n };\n ui.output(JSON.stringify(jsonResult, null, 2));\n } else if (!flags.quiet) {\n ui.output(formatStatusHumanOutput(statusResult, flags.color !== false));\n }\n });\n\n process.exit(exitCode);\n });\n\n return command;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAYA,SAAgB,4BACd,OAC8C;CAC9C,MAAM,8BAAc,IAAI,IAAqC;CAE7D,IAAI,MAAM;OACH,MAAM,QAAQ,MAAM,MAAM,gBAAgB,OAAO,GACpD,IAAI,MAAM,uBAAuB,IAAI,KAAK,aAAa,GACrD,YAAY,IAAI,KAAK,eAAe,EAAE,QAAQ,UAAU,CAAC;CAAA;CAK/D,IAAI,CAAC,MAAM,MAAM,MAAM,IAAI,MAAM,UAAU,GACzC,OAAO;CAGT,MAAM,cAAc,SAAS,MAAM,OAAO,MAAM,YAAY,MAAM,UAAU;CAC5E,IAAI,CAAC,aACH,OAAO;CAGT,KAAK,MAAM,QAAQ,aAAa;EAC9B,IAAI,MAAM,uBAAuB,IAAI,KAAK,aAAa,GACrD;EAGF,IADiB,YAAY,IAAI,KAAK,aAC3B,GAAG,WAAW,WACvB;EAEF,YAAY,IAAI,KAAK,eAAe,EAAE,QAAQ,UAAU,CAAC;CAC3D;CAEA,OAAO;AACT;AAEA,SAAgB,wBACd,eACqB;CACrB,OAAO,IAAI,IAAI,cAAc,KAAK,UAAU,MAAM,aAAa,CAAC;AAClE;AAEA,SAAgB,uBACd,eACA,aAC8B;CAE9B,OADe,YAAY,IAAI,aAAa,GAAG,UAC9B;AACnB;;;ACkDA,SAAS,iBAAiB,MAAsB;CAE9C,QADiB,KAAK,WAAW,SAAS,IAAI,KAAK,MAAM,CAAC,IAAI,MAC9C,MAAM,GAAG,EAAE;AAC7B;AAEA,SAAS,cAAc,cAAsB,eAA2C;CACtF,OAAO,iBAAiB;AAC1B;AAEA,SAAS,sBACP,gBACA,aACiC;CACjC,OAAO,eAAe,KAAK,eAAe;EACxC,GAAG;EACH,QAAQ,uBAAuB,UAAU,MAAM,WAAW;CAC5D,EAAE;AACJ;AAEA,SAAS,gBAAgB,MAWd;CACT,MAAM,QAAQ,KAAK,OAAO,MAAM;CAChC,IAAI,MAAM,MAAM,SAAS,GACvB,OAAO;CAET,OAAO,8BAA8B;EACnC;EACA,YAAY,KAAK;EACjB,kBAAkB,KAAK;EACvB,YAAY,uBAAuB,KAAK,MAAM;EAC9C,qBAAqB,KAAK;EAC1B,UAAU,KAAK;EACf,WAAW,KAAK;EAChB,GAAI,KAAK,gBAAgB,KAAK,eAAe,KAAA,IAAY,EAAE,QAAQ,KAAK,WAAW,IAAI,CAAC;EACxF,GAAI,KAAK,iCAAiC,KAAA,IACtC,EAAE,8BAA8B,KAAK,6BAA6B,IAClE,CAAC;EACL,GAAI,KAAK,0BAA0B,KAAA,IAC/B,EAAE,uBAAuB,KAAK,sBAAsB,IACpD,CAAC;CACP,CAAC;AACH;AAEA,SAAS,aAAa,YAAqD;CACzE,OAAO,WAAW,QAAQ,MAAM,EAAE,WAAW,SAAS,EAAE;AAC1D;AAEA,SAAgB,mBAAmB,MAKxB;CACT,MAAM,aACJ,KAAK,eAAe,KAAA,IAChB,uBAAuB,iBAAiB,KAAK,UAAU,EAAE,KACzD;CACN,MAAM,cAAc,iBAAiB,KAAK,UAAU;CACpD,IAAI,CAAC,KAAK,gBACR,OAAO,0BAA0B,WAAW,kCAAkC,YAAY;CAM5F,OAAO,0BAA0B,WAAW,MAH1C,KAAK,YAAY,KAAA,IACb,eAAe,YAAY,SAAS,KAAK,QAAQ,OACjD,eAAe,YAAY,GAC6B;AAChE;AAEA,SAAgB,oBAAoB,MAKzB;CACT,IAAI,KAAK,kBAAkB,KAAK,eAAe,KAAA,GAC7C,OAAO,mBAAmB,iBAAiB,KAAK,UAAU,EAAE;CAE9D,IAAI,KAAK,iBAAiB,GACxB,OAAO;CAET,OAAO,GAAG,KAAK,aAAa,4CAA4C,iBAAiB,KAAK,UAAU,EAAE;AAC5G;AAEA,SAAgB,oBACd,QACA,UACQ;CACR,MAAM,KAAK,IAA2B,MAAe,WAAW,GAAG,CAAC,IAAI;CACxE,MAAM,QAAkB,CAAC;CACzB,MAAM,eAAe,OAAO,OAAO,QAChC,KAAK,UAAU,MAAM,aAAa,MAAM,UAAU,GACnD,CACF;CAIA,IAHsB,OAAO,YAAY,MACtC,MAAM,EAAE,SAAS,iCAEJ,KAAK,eAAe,GAClC,MAAM,KAAK,EAAE,QAAQ,OAAO,OAAO,CAAC;MAEpC,MAAM,KAAK,OAAO,OAAO;CAE3B,MAAM,8BAA8B,OAAO,YAAY,MACpD,MAAM,EAAE,SAAS,8BACpB;CACA,IAAI,gCAAgC,KAAA,GAClC,MAAM,KAAK,EAAE,KAAK,4BAA4B,OAAO,CAAC;CAExD,OAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAgB,wBACd,QACA,UACQ;CACR,MAAM,WAAqB,CAAC;CAC5B,KAAK,MAAM,WAAW,OAAO,cAAc;EACzC,IAAI,QAAQ,aACV,SAAS,KAAK,GAAG,QAAQ,MAAM,EAAE;EAEnC,IAAI,QAAQ,KAAK,SAAS,GACxB,SAAS,KAAK,QAAQ,IAAI;OAE1B,SAAS,KAAK,iBAAiB;EAEjC,SAAS,KAAK,EAAE;CAClB;CACA,SAAS,KAAK,oBAAoB,QAAQ,QAAQ,CAAC;CACnD,OAAO,SAAS,KAAK,IAAI,EAAE,QAAQ;AACrC;AAEA,eAAe,sBAAsB,MAMlC;CACD,MAAM,iCAAiB,IAAI,IAAsC;CACjE,MAAM,MAAM,MAAM,KAAK,OAAO,eAAe;CAC7C,KAAK,MAAM,CAAC,SAAS,WAAW,KAC9B,eAAe,IAAI,SAAS,MAAM;CAEpC,MAAM,iCAAiB,IAAI,IAA0C;CACrE,KAAK,MAAM,WAAW,KAAK,UACzB,eAAe,IAAI,SAAS,MAAM,KAAK,OAAO,WAAW,OAAO,CAAC;CAEnE,OAAO;EAAE;EAAgB;CAAe;AAC1C;AAEA,eAAsB,8BACpB,SACA,OACA,IACmE;CACnE,MAAM,SAAS,MAAM,WAAW,QAAQ,MAAM;CAC9C,MAAM,EAAE,YAAY,eAAe,oBAAoB,YAAY,sBACjE,QAAQ,QACR,MACF;CAEA,MAAM,eAAe,QAAQ,MAAM,OAAO,IAAI;CAC9C,MAAM,YAAY,CAAC,CAAC,OAAO;CAC3B,MAAM,oBAAoB,QAAQ,SAAS,KAAA;CAE3C,IAAI,CAAC,mBAAmB;EACtB,MAAM,YAAY,oBAAoB;GACpC;GACA;GACA,KAAK;GACL,cAAc;EAChB,CAAC;EACD,IAAI,WACF,OAAO,MAAM,SAAS;CAE1B;CAEA,IAAI,UAAgB,CAAC;CACrB,IAAI;EACF,UAAU,MAAM,SAAS,OAAO;CAClC,SAAS,OAAO;EACd,IAAI,oBAAoB,GAAG,KAAK,GAC9B,OAAO,MAAM,uBAAuB,KAAK,CAAC;EAE5C,MAAM;CACR;CAEA,MAAM,cAAsC,CAAC;CAC7C,IAAI,eAAuB;CAC3B,IAAI;EAEF,gBAAe,MADQ,qBAAqB,MAAM,GAC1B;CAC1B,SAAS,OAAO;EACd,YAAY,KAAK;GACf,MAAM;GACN,UAAU;GACV,SAAS,4BAA4B,iBAAiB,QAAQ,MAAM,UAAU;GAC9E,OAAO,CAAC,8DAA8D;EACxE,CAAC;CACH;CAEA,MAAM,SAAS,MAAM,mBAAmB,QAAQ,EAAE,cAAc,CAAC;CACjE,IAAI,CAAC,OAAO,IACV,OAAO,MAAM,OAAO,OAAO;CAG7B,MAAM,EAAE,cAAc,OAAO;CAE7B,IAAI,MADkC,sBAAsB,MAAM,MAClC,MAAM;EACpC,MAAM,oBAAoB,mCAAmC,SAAS;EACtE,IAAI,mBACF,OAAO,MAAM,iBAAiB;CAElC;CACA,MAAM,WAAW,UAAU,IAAI,MAAM;CAErC,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CAEJ,IAAI,QAAQ,IAAI;EACd,MAAM,YAAY,iBAAiB,QAAQ,IAAI;GAAE,OAAO;GAAU,MAAM;EAAQ,CAAC;EACjF,IAAI,CAAC,UAAU,IACb,OAAO,MAAM,sBAAsB,UAAU,OAAO,CAAC;EAEvD,gBAAgB,UAAU,MAAM;EAChC,IAAI,UAAU,MAAM,WAAW,SAAS,OAAO;GAC7C,gBAAgB,UAAU,MAAM,WAAW;GAC3C,iBAAiB,QAAQ;EAC3B;CACF;CAEA,IAAI,QAAQ,MAAM;EAChB,MAAM,aAAa,iBAAiB,QAAQ,MAAM;GAAE,OAAO;GAAU,MAAM;EAAQ,CAAC;EACpF,IAAI,CAAC,WAAW,IACd,OAAO,MAAM,sBAAsB,WAAW,OAAO,CAAC;EAExD,mBAAmB,WAAW,MAAM;CACtC;CAEA,MAAM,qBAAwC,CAAC,GAAI,gBAAgB,cAAc,CAAC,CAAE,EAAE,KAAK;CAE3F,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,OAAO;EAC/B,MAAM,UAAmD,CACvD;GAAE,OAAO;GAAU,OAAO;EAAW,GACrC;GAAE,OAAO;GAAc,OAAO;EAAmB,CACnD;EACA,IAAI,gBAAgB,WAClB,QAAQ,KAAK;GAAE,OAAO;GAAY,OAAO,kBAAkB,OAAO,YAAY,CAAC;EAAE,CAAC;EAEpF,IAAI,eACF,QAAQ,KAAK;GAAE,OAAO;GAAO,OAAO;EAAc,CAAC;EAErD,IAAI,QAAQ,MACV,QAAQ,KAAK;GAAE,OAAO;GAAQ,OAAO,QAAQ;EAAK,CAAC;EAErD,IAAI,QAAQ,OACV,QAAQ,KAAK;GAAE,OAAO;GAAS,OAAO,QAAQ;EAAM,CAAC;EAEvD,MAAM,SAAS,mBAAmB;GAChC,SAAS;GACT,aAAa;GACb;GACA;EACF,CAAC;EACD,GAAG,OAAO,MAAM;EAChB,IAAI,iBAAiB,SAAS,KAAK,GAAG;GACpC,GAAG,OACD,2BAA2B;IACzB,UAAU,MAAM,UAAU;IAC1B,WAAW,GAAG,iBAAiB,QAAQ,UAAU,IAAI;GACvD,CAAC,CACH;GACA,GAAG,OAAO,EAAE;EACd;CACF;CAGA,MAAM,aAAa,iBAAiB;EAClC,QAAQ,MAFe,uCAAuC,WAAW,aAAa;EAGtF,GAAG,UAAU,eAAe,QAAQ,KAAK;CAC3C,CAAC;CACD,IAAI,CAAC,WAAW,IACd,OAAO;CAGT,MAAM,eAAe,WAAW,MAAM;CACtC,MAAM,oBAAoB,aAAa,SAAS;CAEhD,IAAI,iCAAiB,IAAI,IAAsC;CAC/D,IAAI,iCAAiB,IAAI,IAA0C;CACnE,IAAI,YAAY;CAEhB,IAAI,gBAAgB,aAAa,CAAC,mBAAmB;EACnD,MAAM,SAAS,oBAAoB;GACjC,QAAQ,OAAO;GACf,QAAQ,OAAO;GACf,SAAS,OAAO;GAChB,QAAQ,OAAO;GACf,gBAAgB,OAAO,kBAAkB,CAAC;EAC5C,CAAC;EACD,IAAI;GACF,MAAM,OAAO,QAAQ,YAAY;GACjC,YAAY;GACZ,MAAM,OAAO,MAAM,sBAAsB;IACvC;IACA,UAAU,aAAa,KAAK,MAAM,EAAE,KAAK;GAC3C,CAAC;GACD,iBAAiB,IAAI,IAAI,KAAK,cAAc;GAC5C,iBAAiB,IAAI,IAAI,KAAK,cAAc;EAC9C,SAAS,OAAO;GACd,IAAI,mBAAmB,GAAG,KAAK,GAC7B,OAAO,MAAM,KAAK;GAEpB,OAAO,MACL,gBAAgB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,EACtE,KAAK,kCAAkC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,IAC9F,CAAC,CACH;EACF,UAAU;GACR,MAAM,OAAO,MAAM;EACrB;CACF;CAEA,IAAI,kBAAkB,eAAe,WAAW,SAAS,KAAK,WAAW;EACvE,MAAM,WAAW,0BAA0B,QAAQ;EACnD,MAAM,mBAAmB,eAAe,IAAI,UAAU,IAAI,OAAO,GAAG,cAAc,CAAC;EACnF,MAAM,QAAQ,IAAI,IAAY,QAAQ;EACtC,KAAK,MAAM,MAAM,kBAAkB,MAAM,IAAI,EAAE;EAC/C,MAAM,UAAU,eAAe,WAAW,QAAQ,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;EACvE,IAAI,QAAQ,SAAS,GACnB,OAAO,MACL,uBACE,sBAAsB;GACpB,GAAG,UAAU,WAAW,aAAa;GACrC;GACA,UAAU,CAAC,GAAG,QAAQ,EAAE,KAAK;EAC/B,CAAC,CACH,CACF;CAEJ;CAEA,MAAM,qBAAqB,aAAa,CAAC;CACzC,MAAM,eAAe,aAAa,CAAC;CACnC,MAAM,YAAY,GAAG,iBAAiB,QAAQ,UAAU,IAAI;CAC5D,MAAM,WAAW,MAAM,UAAU;CAEjC,MAAM,eAAuC,CAAC;CAC9C,MAAM,eAA6C,CAAC;CACpD,IAAI,iBAAiB;CACrB,IAAI,0BAA0B;CAC9B,IAAI,qBAAqB,iBAAiB;CAC1C,IAAI,eAAe;CAEnB,MAAM,qBAAqB,oBACvB,aACG,QAAQ,eAAe,WAAW,WAAW,SAAS,CAAC,EACvD,KAAK,gBAAgB;EACpB,OAAO,UAAU,MAAM,WAAW,KAAK,EAAG,MAAM;EAChD,kBAAkB;CACpB,EAAE,IACJ,CAAC;CACL,MAAM,+BACJ,mBAAmB,SAAS,IACxB,oCAAoC,kBAAkB,IACtD,KAAA;CACN,MAAM,wBACJ,mBAAmB,SAAS,IAAI,6BAA6B,kBAAkB,IAAI,KAAA;CAErF,KAAK,MAAM,cAAc,cAAc;EACrC,MAAM,SAAS,UAAU,MAAM,WAAW,KAAK;EAC/C,IAAI,WAAW,KAAA,GACb;EAEF,MAAM,QAAQ,OAAO,MAAM;EAC3B,MAAM,oBAAoB,OAAO,SAAS,EAAE,QAAQ;EACpD,MAAM,aAAa,cAAc,mBAAmB,aAAa;EACjE,IAAI,WAAW,UAAU,UAAU,IAAI,SACrC,qBAAqB;EAGvB,MAAM,eAAe,eAAe,IAAI,WAAW,KAAK;EACxD,MAAM,aAAa,oBACf,mBACC,cAAc,eAAe,KAAA;EAClC,MAAM,aAAa,cAAc;EACjC,MAAM,gBACJ,eAAe,KAAA,KAAa,MAAM,MAAM,IAAI,UAAU,KAAK,eAAe;EAC5E,IACE,aACA,CAAC,qBACD,iBACA,eAAe,cACf,SAAS,OAAO,YAAY,UAAU,MAAM,MAE5C,0BAA0B;EAG5B,IAAI,aAAa,CAAC,qBAAqB,eAAe,KAAA,KAAa,CAAC,eAAe;GACjF,iBAAiB;GACjB,YAAY,KAAK;IACf,MAAM;IACN,UAAU;IACV,SACE;IACF,OAAO,CACL,kGACA,0EACF;GACF,CAAC;EACH;EAEA,MAAM,SAAS,eAAe,IAAI,WAAW,KAAK,KAAK,CAAC;EAGxD,MAAM,cAAc,4BAA4B;GAC9C;GACA;GACA;GACA,wBANoB,qBAAqB,wBAAwB,MAAM,oBAAI,IAAI,IAAY;GAO3F;EACF,CAAC;EACD,MAAM,OAAO,gBAAgB;GAC3B;GACA,kBAAkB;GAClB,YAAY,WAAW;GACvB;GACA;GACA,eAAe;GACf;GACA;GACA,GAAI,iCAAiC,KAAA,IAAY,EAAE,6BAA6B,IAAI,CAAC;GACrF,GAAI,0BAA0B,KAAA,IAAY,EAAE,sBAAsB,IAAI,CAAC;EACzE,CAAC;EACD,MAAM,aAAa,sBAAsB,WAAW,YAAY,WAAW;EAC3E,MAAM,UAAU,aAAa,UAAU;EACvC,gBAAgB;EAEhB,aAAa,KAAK;GAChB,OAAO,WAAW;GAClB,iBAAiB,cAAc;GAC/B,gBAAgB;GAChB,YAAY,CAAC,GAAG,UAAU;EAC5B,CAAC;EACD,MAAM,cACJ,qBAAqB,KAAK,SAAS,IAAI,8BAA8B,MAAM,IAAI,IAAI;EACrF,aAAa,KAAK;GAChB,OAAO,WAAW;GAClB,MAAM;GACN,aAAa;EACf,CAAC;CACH;CAEA,IAAI,aAAa,mBAAmB,SAAS,GAAG;EAC9C,MAAM,mBAAmB,eAAe,IAAI,UAAU,IAAI,OAAO,GAAG,cAAc,CAAC;EACnF,MAAM,YAAY,IAAI,IAAI,gBAAgB;EAC1C,MAAM,UAAU,mBAAmB,QAAQ,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;EACpE,IAAI,QAAQ,SAAS,GAAG;GACtB,YAAY,KAAK;IACf,MAAM;IACN,GAAG,UAAU,OAAO,aAAa;IACjC,YAAY;IACZ,SAAS,yBAAyB,QAAQ,KAAK,IAAI;GACrD,CAAC;GACD,IAAI,kBAAkB,KAAA,GAAW;IAG/B,MAAM,UAAU,qBAAqB,UADnC,eAAe,IAAI,UAAU,IAAI,OAAO,GAAG,eAAe,qBACD,eAAe;KACxE,GAAG,UAAU,WAAW,aAAa;KACrC,UAAU,IAAI,IAAI,OAAO;IAC3B,CAAC;IACD,IAAI,QAAQ,SAAS,iBACnB,OAAO,MACL,uBACE,qBAAqB;KACnB,GAAG,UAAU,WAAW,aAAa;KACrC,UAAU,CAAC,GAAG,OAAO,EAAE,KAAK;KAC5B,SAAS,QAAQ;KACjB,gBAAgB,QAAQ,eAAe,IAAI,gBAAgB;IAC7D,CAAC,CACH,CACF;GAEJ;EACF;CACF;CAEA,MAAM,gBAAgB,eAAe,IAAI,UAAU,IAAI,OAAO,GAAG;CACjE,MAAM,UAAU,0BACZ,mBAAmB;EACjB,YAAY;EACZ,YAAY;EACZ,gBAAgB,QAAQ,OAAO,KAAA;EAC/B,SAAS;CACX,CAAC,IACD,oBAAoB;EAClB,cAAc;EACd,YAAY;EACZ;EACA,YAAY;CACd,CAAC;CAEL,IAAI,aAAa,OAAO,MAAM,EAAE,WAAW,WAAW,CAAC,GACrD,OAAO,GAAG;EACR,IAAI;EACJ,QAAQ;EACR,SAAS;EACT;EACA;CACF,CAAC;CAGH,OAAO,GAAG;EACR,IAAI;EACJ,QAAQ;EACR;EACA;EACA;CACF,CAAC;AACH;AAEA,SAAgB,+BAAwC;CACtD,MAAM,UAAU,IAAI,QAAQ,QAAQ;CACpC,uBACE,SACA,0CACA,wSAKF;CACA,mBAAmB,SAAS;EAC1B;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,kBAAkB,SAAS;EACzB;GAAE,MAAM;GAAiB,UAAU;EAAkC;EACrE;GAAE,MAAM;GAAkB,UAAU;EAA0B;EAC9D;GAAE,MAAM;GAAmB,UAAU;EAAoC;EACzE;GAAE,MAAM;GAAkB,UAAU;EAAqC;CAC3E,CAAC;CACD,iBAAiB,OAAO,EACrB,OAAO,cAAc,4BAA4B,EACjD,OAAO,mBAAmB,+BAA+B,EACzD,OAAO,gBAAgB,0CAA0C,EACjE,OACC,mBACA,2FACF,EACC,OACC,qBACA,yGACF,EACC,OAAO,YAAY,iDAAiD,EACpE,OAAO,WAAW,kCAAkC,EACpD,OAAO,OAAO,YAAoC;EACjD,MAAM,QAAQ,uBAAuB,OAAO;EAC5C,MAAM,KAAK,iBAAiB,KAAK;EAEjC,MAAM,mBAAmB,sBAAsB,SAAS,KAAK;EAC7D,IAAI,CAAC,iBAAiB,IACpB,QAAQ,KAAK,aAAa,kBAAkB,OAAO,EAAE,CAAC;EAKxD,MAAM,WAAW,aAAa,MAFT,8BAA8B,SAAS,OAAO,EAAE,GAE/B,OAAO,KAAK,iBAAiB;GACjE,IAAI,MAAM,MAAM;IACd,MAAM,aAAoC;KACxC,IAAI;KACJ,QAAQ,CAAC,GAAG,aAAa,MAAM;KAC/B,SAAS,aAAa;KACtB,aAAa,CAAC,GAAG,aAAa,WAAW;IAC3C;IACA,GAAG,OAAO,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC;GAC/C,OAAO,IAAI,CAAC,MAAM,OAChB,GAAG,OAAO,wBAAwB,cAAc,MAAM,UAAU,KAAK,CAAC;EAE1E,CAAC;EAED,QAAQ,KAAK,QAAQ;CACvB,CAAC;CAEH,OAAO;AACT"}
@@ -107,4 +107,4 @@ function buildNextSteps(options) {
107
107
  //#endregion
108
108
  export { renderInitOutro as i, buildNextSteps as n, formatInitJson as r, InitOutputSchema as t };
109
109
 
110
- //# sourceMappingURL=output-CF_hqzI-.mjs.map
110
+ //# sourceMappingURL=output-BD61elic.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"output-CF_hqzI-.mjs","names":[],"sources":["../src/commands/init/output.ts"],"sourcesContent":["import { type } from 'arktype';\nimport type { GlobalFlags } from '../../utils/global-flags';\nimport type { TerminalUI } from '../../utils/terminal-ui';\n\n/**\n * arktype schema for the structured success document `init --json` writes\n * to stdout (FR1.5). The same shape backs the human-readable outro\n * renderer (FR10), so the two output modes carry identical information.\n *\n * `target` is normalised to the user-facing flag value (`mongodb` rather\n * than the internal `mongo`) so consumers can round-trip the document\n * straight into a follow-up `--target` invocation.\n *\n * The `ok: true` literal is the documented success/error discriminator —\n * see [Style Guide § JSON Semantics](../../../../../../../docs/CLI%20Style%20Guide.md#json-semantics).\n * Error envelopes (`CliErrorEnvelope`) carry `ok: false` so consumers can\n * branch with `if (doc.ok)` without inspecting the rest of the structure.\n */\nexport const InitOutputSchema = type({\n ok: 'true',\n target: \"'postgres'|'mongodb'\",\n authoring: \"'psl'|'typescript'\",\n schemaPath: 'string',\n filesWritten: 'string[]',\n /**\n * FR9.1 — files removed from disk during this run. Populated only on\n * re-init when previously-emitted contract artefacts (`contract.json`,\n * `contract.d.ts`, `start-/end-contract.*`, `ops.json`,\n * `migration.json`) were left behind by an earlier run. Empty on a\n * green-field init.\n */\n filesDeleted: 'string[]',\n packagesInstalled: {\n skipped: 'boolean',\n deps: 'string[]',\n devDeps: 'string[]',\n },\n contractEmitted: 'boolean',\n nextSteps: 'string[]',\n warnings: 'string[]',\n});\n\nexport type InitOutput = typeof InitOutputSchema.infer;\n\n/**\n * Serialises the output document for `--json`. Sorted keys are not enforced\n * — `JSON.stringify` preserves insertion order, and the schema field order\n * is the documented order, which matches what users will see when they\n * `jq .` the result.\n */\nexport function formatInitJson(output: InitOutput): string {\n return JSON.stringify(output, null, 2);\n}\n\n/**\n * Renders the human-readable outro on stderr (FR10.1). Re-uses the same\n * data structure as the JSON output so the two stay in lock-step.\n *\n * Warnings come before \"Next steps\" because they describe state the user\n * needs to be aware of before acting on the next-steps list.\n */\nexport function renderInitOutro(ui: TerminalUI, output: InitOutput, flags: GlobalFlags): void {\n if (flags.quiet || flags.json) {\n return;\n }\n\n for (const warning of output.warnings) {\n ui.warn(warning);\n }\n\n const lines: string[] = [];\n lines.push(`Target: ${output.target}`);\n lines.push(`Authoring: ${output.authoring}`);\n lines.push(`Schema: ${output.schemaPath}`);\n lines.push('');\n lines.push('Files written:');\n for (const file of output.filesWritten) {\n lines.push(` • ${file}`);\n }\n\n if (output.filesDeleted.length > 0) {\n lines.push('');\n lines.push('Files deleted (stale contract artefacts):');\n for (const file of output.filesDeleted) {\n lines.push(` • ${file}`);\n }\n }\n\n if (!output.packagesInstalled.skipped) {\n lines.push('');\n lines.push('Packages installed:');\n for (const dep of output.packagesInstalled.deps) {\n lines.push(` • ${dep}`);\n }\n for (const dep of output.packagesInstalled.devDeps) {\n lines.push(` • ${dep} (dev)`);\n }\n }\n\n lines.push('');\n lines.push('Next steps:');\n for (const step of output.nextSteps) {\n lines.push(` ${step}`);\n }\n\n ui.note(lines.join('\\n'), 'Done');\n}\n\n/**\n * Builds the `nextSteps` array from the resolved scaffold state. Steps are\n * ordered by the workflow a user needs to follow: configure connection →\n * (emit if not yet done) → run a starter query → docs / agent skill.\n *\n * The strings are stable and human-readable; agents wanting to act on them\n * should match on substrings (e.g. \"DATABASE_URL\") rather than exact text,\n * since copy may evolve.\n */\nexport function buildNextSteps(options: {\n readonly target: 'postgres' | 'mongodb';\n readonly contractEmitted: boolean;\n readonly emitCommand: string;\n readonly schemaPath: string;\n /**\n * Whether the project-level Prisma Next skills install actually ran\n * and succeeded during this `init`. When false (the user passed\n * `--no-skill`, so the install was skipped), the\n * \"registered with your agent runtime\" step is omitted — the skip is\n * already surfaced in the warnings array with a manual-install hint.\n */\n readonly skillRegistered: boolean;\n}): string[] {\n const steps: string[] = [];\n let stepNumber = 1;\n const push = (text: string): void => {\n steps.push(`${stepNumber}. ${text}`);\n stepNumber += 1;\n };\n push('Set DATABASE_URL in your environment (export it or add it to .env).');\n if (!options.contractEmitted) {\n push(`Emit the contract: \\`${options.emitCommand}\\``);\n push(`Edit your schema at ${options.schemaPath}, then re-run the emit command.`);\n } else {\n push(`Edit your schema at ${options.schemaPath}, then re-run \\`${options.emitCommand}\\`.`);\n }\n push('Open prisma-next.md for a quick reference on how to write your first typed query.');\n if (options.skillRegistered) {\n push(\n 'Prisma Next skills are registered with your agent runtime — open the project in your IDE and ask the agent to add a model, run a query, or plan a migration.',\n );\n }\n return steps;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,MAAa,mBAAmB,KAAK;CACnC,IAAI;CACJ,QAAQ;CACR,WAAW;CACX,YAAY;CACZ,cAAc;;;;;;;;CAQd,cAAc;CACd,mBAAmB;EACjB,SAAS;EACT,MAAM;EACN,SAAS;CACX;CACA,iBAAiB;CACjB,WAAW;CACX,UAAU;AACZ,CAAC;;;;;;;AAUD,SAAgB,eAAe,QAA4B;CACzD,OAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AACvC;;;;;;;;AASA,SAAgB,gBAAgB,IAAgB,QAAoB,OAA0B;CAC5F,IAAI,MAAM,SAAS,MAAM,MACvB;CAGF,KAAK,MAAM,WAAW,OAAO,UAC3B,GAAG,KAAK,OAAO;CAGjB,MAAM,QAAkB,CAAC;CACzB,MAAM,KAAK,cAAc,OAAO,QAAQ;CACxC,MAAM,KAAK,cAAc,OAAO,WAAW;CAC3C,MAAM,KAAK,cAAc,OAAO,YAAY;CAC5C,MAAM,KAAK,EAAE;CACb,MAAM,KAAK,gBAAgB;CAC3B,KAAK,MAAM,QAAQ,OAAO,cACxB,MAAM,KAAK,OAAO,MAAM;CAG1B,IAAI,OAAO,aAAa,SAAS,GAAG;EAClC,MAAM,KAAK,EAAE;EACb,MAAM,KAAK,2CAA2C;EACtD,KAAK,MAAM,QAAQ,OAAO,cACxB,MAAM,KAAK,OAAO,MAAM;CAE5B;CAEA,IAAI,CAAC,OAAO,kBAAkB,SAAS;EACrC,MAAM,KAAK,EAAE;EACb,MAAM,KAAK,qBAAqB;EAChC,KAAK,MAAM,OAAO,OAAO,kBAAkB,MACzC,MAAM,KAAK,OAAO,KAAK;EAEzB,KAAK,MAAM,OAAO,OAAO,kBAAkB,SACzC,MAAM,KAAK,OAAO,IAAI,OAAO;CAEjC;CAEA,MAAM,KAAK,EAAE;CACb,MAAM,KAAK,aAAa;CACxB,KAAK,MAAM,QAAQ,OAAO,WACxB,MAAM,KAAK,KAAK,MAAM;CAGxB,GAAG,KAAK,MAAM,KAAK,IAAI,GAAG,MAAM;AAClC;;;;;;;;;;AAWA,SAAgB,eAAe,SAalB;CACX,MAAM,QAAkB,CAAC;CACzB,IAAI,aAAa;CACjB,MAAM,QAAQ,SAAuB;EACnC,MAAM,KAAK,GAAG,WAAW,IAAI,MAAM;EACnC,cAAc;CAChB;CACA,KAAK,qEAAqE;CAC1E,IAAI,CAAC,QAAQ,iBAAiB;EAC5B,KAAK,wBAAwB,QAAQ,YAAY,GAAG;EACpD,KAAK,uBAAuB,QAAQ,WAAW,gCAAgC;CACjF,OACE,KAAK,uBAAuB,QAAQ,WAAW,kBAAkB,QAAQ,YAAY,IAAI;CAE3F,KAAK,mFAAmF;CACxF,IAAI,QAAQ,iBACV,KACE,8JACF;CAEF,OAAO;AACT"}
1
+ {"version":3,"file":"output-BD61elic.mjs","names":[],"sources":["../src/commands/init/output.ts"],"sourcesContent":["import { type } from 'arktype';\nimport type { GlobalFlags } from '../../utils/global-flags';\nimport type { TerminalUI } from '../../utils/terminal-ui';\n\n/**\n * arktype schema for the structured success document `init --json` writes\n * to stdout (FR1.5). The same shape backs the human-readable outro\n * renderer (FR10), so the two output modes carry identical information.\n *\n * `target` is normalised to the user-facing flag value (`mongodb` rather\n * than the internal `mongo`) so consumers can round-trip the document\n * straight into a follow-up `--target` invocation.\n *\n * The `ok: true` literal is the documented success/error discriminator —\n * see [Style Guide § JSON Semantics](../../../../../../../docs/CLI%20Style%20Guide.md#json-semantics).\n * Error envelopes (`CliErrorEnvelope`) carry `ok: false` so consumers can\n * branch with `if (doc.ok)` without inspecting the rest of the structure.\n */\nexport const InitOutputSchema = type({\n ok: 'true',\n target: \"'postgres'|'mongodb'\",\n authoring: \"'psl'|'typescript'\",\n schemaPath: 'string',\n filesWritten: 'string[]',\n /**\n * FR9.1 — files removed from disk during this run. Populated only on\n * re-init when previously-emitted contract artefacts (`contract.json`,\n * `contract.d.ts`, `start-/end-contract.*`, `ops.json`,\n * `migration.json`) were left behind by an earlier run. Empty on a\n * green-field init.\n */\n filesDeleted: 'string[]',\n packagesInstalled: {\n skipped: 'boolean',\n deps: 'string[]',\n devDeps: 'string[]',\n },\n contractEmitted: 'boolean',\n nextSteps: 'string[]',\n warnings: 'string[]',\n});\n\nexport type InitOutput = typeof InitOutputSchema.infer;\n\n/**\n * Serialises the output document for `--json`. Sorted keys are not enforced\n * — `JSON.stringify` preserves insertion order, and the schema field order\n * is the documented order, which matches what users will see when they\n * `jq .` the result.\n */\nexport function formatInitJson(output: InitOutput): string {\n return JSON.stringify(output, null, 2);\n}\n\n/**\n * Renders the human-readable outro on stderr (FR10.1). Re-uses the same\n * data structure as the JSON output so the two stay in lock-step.\n *\n * Warnings come before \"Next steps\" because they describe state the user\n * needs to be aware of before acting on the next-steps list.\n */\nexport function renderInitOutro(ui: TerminalUI, output: InitOutput, flags: GlobalFlags): void {\n if (flags.quiet || flags.json) {\n return;\n }\n\n for (const warning of output.warnings) {\n ui.warn(warning);\n }\n\n const lines: string[] = [];\n lines.push(`Target: ${output.target}`);\n lines.push(`Authoring: ${output.authoring}`);\n lines.push(`Schema: ${output.schemaPath}`);\n lines.push('');\n lines.push('Files written:');\n for (const file of output.filesWritten) {\n lines.push(` • ${file}`);\n }\n\n if (output.filesDeleted.length > 0) {\n lines.push('');\n lines.push('Files deleted (stale contract artefacts):');\n for (const file of output.filesDeleted) {\n lines.push(` • ${file}`);\n }\n }\n\n if (!output.packagesInstalled.skipped) {\n lines.push('');\n lines.push('Packages installed:');\n for (const dep of output.packagesInstalled.deps) {\n lines.push(` • ${dep}`);\n }\n for (const dep of output.packagesInstalled.devDeps) {\n lines.push(` • ${dep} (dev)`);\n }\n }\n\n lines.push('');\n lines.push('Next steps:');\n for (const step of output.nextSteps) {\n lines.push(` ${step}`);\n }\n\n ui.note(lines.join('\\n'), 'Done');\n}\n\n/**\n * Builds the `nextSteps` array from the resolved scaffold state. Steps are\n * ordered by the workflow a user needs to follow: configure connection →\n * (emit if not yet done) → run a starter query → docs / agent skill.\n *\n * The strings are stable and human-readable; agents wanting to act on them\n * should match on substrings (e.g. \"DATABASE_URL\") rather than exact text,\n * since copy may evolve.\n */\nexport function buildNextSteps(options: {\n readonly target: 'postgres' | 'mongodb';\n readonly contractEmitted: boolean;\n readonly emitCommand: string;\n readonly schemaPath: string;\n /**\n * Whether the project-level Prisma Next skills install actually ran\n * and succeeded during this `init`. When false (the user passed\n * `--no-skill`, so the install was skipped), the\n * \"registered with your agent runtime\" step is omitted — the skip is\n * already surfaced in the warnings array with a manual-install hint.\n */\n readonly skillRegistered: boolean;\n}): string[] {\n const steps: string[] = [];\n let stepNumber = 1;\n const push = (text: string): void => {\n steps.push(`${stepNumber}. ${text}`);\n stepNumber += 1;\n };\n push('Set DATABASE_URL in your environment (export it or add it to .env).');\n if (!options.contractEmitted) {\n push(`Emit the contract: \\`${options.emitCommand}\\``);\n push(`Edit your schema at ${options.schemaPath}, then re-run the emit command.`);\n } else {\n push(`Edit your schema at ${options.schemaPath}, then re-run \\`${options.emitCommand}\\`.`);\n }\n push('Open prisma-next.md for a quick reference on how to write your first typed query.');\n if (options.skillRegistered) {\n push(\n 'Prisma Next skills are registered with your agent runtime — open the project in your IDE and ask the agent to add a model, run a query, or plan a migration.',\n );\n }\n return steps;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,MAAa,mBAAmB,KAAK;CACnC,IAAI;CACJ,QAAQ;CACR,WAAW;CACX,YAAY;CACZ,cAAc;;;;;;;;CAQd,cAAc;CACd,mBAAmB;EACjB,SAAS;EACT,MAAM;EACN,SAAS;CACX;CACA,iBAAiB;CACjB,WAAW;CACX,UAAU;AACZ,CAAC;;;;;;;AAUD,SAAgB,eAAe,QAA4B;CACzD,OAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AACvC;;;;;;;;AASA,SAAgB,gBAAgB,IAAgB,QAAoB,OAA0B;CAC5F,IAAI,MAAM,SAAS,MAAM,MACvB;CAGF,KAAK,MAAM,WAAW,OAAO,UAC3B,GAAG,KAAK,OAAO;CAGjB,MAAM,QAAkB,CAAC;CACzB,MAAM,KAAK,cAAc,OAAO,QAAQ;CACxC,MAAM,KAAK,cAAc,OAAO,WAAW;CAC3C,MAAM,KAAK,cAAc,OAAO,YAAY;CAC5C,MAAM,KAAK,EAAE;CACb,MAAM,KAAK,gBAAgB;CAC3B,KAAK,MAAM,QAAQ,OAAO,cACxB,MAAM,KAAK,OAAO,MAAM;CAG1B,IAAI,OAAO,aAAa,SAAS,GAAG;EAClC,MAAM,KAAK,EAAE;EACb,MAAM,KAAK,2CAA2C;EACtD,KAAK,MAAM,QAAQ,OAAO,cACxB,MAAM,KAAK,OAAO,MAAM;CAE5B;CAEA,IAAI,CAAC,OAAO,kBAAkB,SAAS;EACrC,MAAM,KAAK,EAAE;EACb,MAAM,KAAK,qBAAqB;EAChC,KAAK,MAAM,OAAO,OAAO,kBAAkB,MACzC,MAAM,KAAK,OAAO,KAAK;EAEzB,KAAK,MAAM,OAAO,OAAO,kBAAkB,SACzC,MAAM,KAAK,OAAO,IAAI,OAAO;CAEjC;CAEA,MAAM,KAAK,EAAE;CACb,MAAM,KAAK,aAAa;CACxB,KAAK,MAAM,QAAQ,OAAO,WACxB,MAAM,KAAK,KAAK,MAAM;CAGxB,GAAG,KAAK,MAAM,KAAK,IAAI,GAAG,MAAM;AAClC;;;;;;;;;;AAWA,SAAgB,eAAe,SAalB;CACX,MAAM,QAAkB,CAAC;CACzB,IAAI,aAAa;CACjB,MAAM,QAAQ,SAAuB;EACnC,MAAM,KAAK,GAAG,WAAW,IAAI,MAAM;EACnC,cAAc;CAChB;CACA,KAAK,qEAAqE;CAC1E,IAAI,CAAC,QAAQ,iBAAiB;EAC5B,KAAK,wBAAwB,QAAQ,YAAY,GAAG;EACpD,KAAK,uBAAuB,QAAQ,WAAW,gCAAgC;CACjF,OACE,KAAK,uBAAuB,QAAQ,WAAW,kBAAkB,QAAQ,YAAY,IAAI;CAE3F,KAAK,mFAAmF;CACxF,IAAI,QAAQ,iBACV,KACE,8JACF;CAEF,OAAO;AACT"}
@@ -0,0 +1,193 @@
1
+ import * as _$arktype_internal_variants_object_ts0 from "arktype/internal/variants/object.ts";
2
+
3
+ //#region src/commands/json/schemas.d.ts
4
+ declare const migrationSpaceListEntrySchema: _$arktype_internal_variants_object_ts0.ObjectType<{
5
+ space: string;
6
+ migrations: {
7
+ name: string;
8
+ hash: string;
9
+ fromContract: string | null;
10
+ toContract: string;
11
+ operationCount: number;
12
+ createdAt: string;
13
+ refs: string[];
14
+ providedInvariants: string[];
15
+ }[];
16
+ }, {}>;
17
+ type MigrationSpaceListEntry = typeof migrationSpaceListEntrySchema.infer;
18
+ declare const migrationListResultSchema: _$arktype_internal_variants_object_ts0.ObjectType<{
19
+ ok: true;
20
+ summary: string;
21
+ spaces: {
22
+ space: string;
23
+ migrations: {
24
+ name: string;
25
+ hash: string;
26
+ fromContract: string | null;
27
+ toContract: string;
28
+ operationCount: number;
29
+ createdAt: string;
30
+ refs: string[];
31
+ providedInvariants: string[];
32
+ }[];
33
+ }[];
34
+ }, {}>;
35
+ type MigrationListResult = typeof migrationListResultSchema.infer;
36
+ declare const migrationSpaceGraphEntrySchema: _$arktype_internal_variants_object_ts0.ObjectType<{
37
+ space: string;
38
+ contracts: {
39
+ hash: string;
40
+ refs: string[];
41
+ }[];
42
+ migrations: {
43
+ name: string;
44
+ hash: string;
45
+ fromContract: string | null;
46
+ toContract: string;
47
+ }[];
48
+ }, {}>;
49
+ type MigrationSpaceGraphEntry = typeof migrationSpaceGraphEntrySchema.infer;
50
+ declare const migrationStatusEntrySchema: _$arktype_internal_variants_object_ts0.ObjectType<{
51
+ name: string;
52
+ hash: string;
53
+ fromContract: string | null;
54
+ toContract: string;
55
+ operationCount: number;
56
+ createdAt: string;
57
+ refs: string[];
58
+ providedInvariants: string[];
59
+ status: "applied" | "pending" | null;
60
+ }, {}>;
61
+ type MigrationStatusEntry = typeof migrationStatusEntrySchema.infer;
62
+ declare const statusDiagnosticSchema: _$arktype_internal_variants_object_ts0.ObjectType<{
63
+ code: "CONTRACT.UNREADABLE";
64
+ severity: "warn" | "info";
65
+ message: string;
66
+ hints: string[];
67
+ } | {
68
+ code: "MIGRATION.MARKER_NOT_IN_HISTORY";
69
+ severity: "warn" | "info";
70
+ message: string;
71
+ hints: string[];
72
+ } | {
73
+ code: "MIGRATION.MISSING_INVARIANTS";
74
+ invariants: string[];
75
+ message: string;
76
+ ref?: string;
77
+ }, {}>;
78
+ type StatusDiagnosticJson = typeof statusDiagnosticSchema.infer;
79
+ declare const migrationStatusSpaceSchema: _$arktype_internal_variants_object_ts0.ObjectType<{
80
+ space: string;
81
+ currentContract: string | null;
82
+ targetContract: string;
83
+ migrations: {
84
+ name: string;
85
+ hash: string;
86
+ fromContract: string | null;
87
+ toContract: string;
88
+ operationCount: number;
89
+ createdAt: string;
90
+ refs: string[];
91
+ providedInvariants: string[];
92
+ status: "applied" | "pending" | null;
93
+ }[];
94
+ }, {}>;
95
+ type MigrationStatusSpace = typeof migrationStatusSpaceSchema.infer;
96
+ declare const migrationStatusJsonResultSchema: _$arktype_internal_variants_object_ts0.ObjectType<{
97
+ ok: true;
98
+ summary: string;
99
+ spaces: {
100
+ space: string;
101
+ currentContract: string | null;
102
+ targetContract: string;
103
+ migrations: {
104
+ name: string;
105
+ hash: string;
106
+ fromContract: string | null;
107
+ toContract: string;
108
+ operationCount: number;
109
+ createdAt: string;
110
+ refs: string[];
111
+ providedInvariants: string[];
112
+ status: "applied" | "pending" | null;
113
+ }[];
114
+ }[];
115
+ diagnostics: ({
116
+ code: "CONTRACT.UNREADABLE";
117
+ severity: "warn" | "info";
118
+ message: string;
119
+ hints: string[];
120
+ } | {
121
+ code: "MIGRATION.MARKER_NOT_IN_HISTORY";
122
+ severity: "warn" | "info";
123
+ message: string;
124
+ hints: string[];
125
+ } | {
126
+ code: "MIGRATION.MISSING_INVARIANTS";
127
+ invariants: string[];
128
+ message: string;
129
+ ref?: string;
130
+ })[];
131
+ }, {}>;
132
+ type MigrationStatusResult = typeof migrationStatusJsonResultSchema.infer;
133
+ declare const migrationLogResultSchema: _$arktype_internal_variants_object_ts0.ObjectType<{
134
+ ok: true;
135
+ summary: string;
136
+ records: {
137
+ space: string;
138
+ name: string;
139
+ hash: string;
140
+ fromContract: string | null;
141
+ toContract: string;
142
+ appliedAt: string;
143
+ operationCount: number;
144
+ }[];
145
+ }, {}>;
146
+ type MigrationLogResult = typeof migrationLogResultSchema.infer;
147
+ declare const migrationShowResultSchema: _$arktype_internal_variants_object_ts0.ObjectType<{
148
+ ok: true;
149
+ summary: string;
150
+ migration: {
151
+ space: string;
152
+ name: string;
153
+ hash: string;
154
+ fromContract: string | null;
155
+ toContract: string;
156
+ createdAt: string;
157
+ operations: {
158
+ id: string;
159
+ label: string;
160
+ operationClass: string;
161
+ }[];
162
+ preview: {
163
+ statements: {
164
+ text: string;
165
+ language: string;
166
+ }[];
167
+ };
168
+ };
169
+ }, {}>;
170
+ type MigrationShowResult = typeof migrationShowResultSchema.infer;
171
+ declare const checkFailureSchema: _$arktype_internal_variants_object_ts0.ObjectType<{
172
+ space: string;
173
+ code: string;
174
+ where: string;
175
+ why: string;
176
+ fix: string;
177
+ }, {}>;
178
+ type CheckFailure = typeof checkFailureSchema.infer;
179
+ declare const migrationCheckResultSchema: _$arktype_internal_variants_object_ts0.ObjectType<{
180
+ ok: boolean;
181
+ failures: {
182
+ space: string;
183
+ code: string;
184
+ where: string;
185
+ why: string;
186
+ fix: string;
187
+ }[];
188
+ summary: string;
189
+ }, {}>;
190
+ type MigrationCheckResult = typeof migrationCheckResultSchema.infer;
191
+ //#endregion
192
+ export { MigrationShowResult as a, MigrationStatusEntry as c, StatusDiagnosticJson as d, migrationCheckResultSchema as f, MigrationLogResult as i, MigrationStatusResult as l, MigrationCheckResult as n, MigrationSpaceGraphEntry as o, migrationStatusJsonResultSchema as p, MigrationListResult as r, MigrationSpaceListEntry as s, CheckFailure as t, MigrationStatusSpace as u };
193
+ //# sourceMappingURL=schemas-BL33A3i-.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas-BL33A3i-.d.mts","names":[],"sources":["../src/commands/json/schemas.ts"],"mappings":";;;cA6Ba,6BAAA,EAGX,sCAAA,CAHwC,UAAA;;;;;;;;;;;;;KAK9B,uBAAA,UAAiC,6BAAA,CAA8B,KAAK;AAAA,cAEnE,yBAAA,EAIZ,sCAAA,CAJqC,UAAA;;;;;;;;;;;;;;;;;KAM1B,mBAAA,UAA6B,yBAAA,CAA0B,KAAK;AAAA,cAW3D,8BAAA,EAIX,sCAAA,CAJyC,UAAA;;;;;;;;;;;;;KAM/B,wBAAA,UAAkC,8BAAA,CAA+B,KAAK;AAAA,cAUrE,0BAAA,EAIZ,sCAAA,CAJsC,UAAA;;;;;;;;;;;KAM3B,oBAAA,UAA8B,0BAAA,CAA2B,KAAK;AAAA,cAuB7D,sBAAA,EAE2B,sCAAA,CAFL,UAAA;;;;;;;;;;;;;;;;KAIvB,oBAAA,UAA8B,sBAAA,CAAuB,KAAK;AAAA,cAEzD,0BAAA,EAKX,sCAAA,CALqC,UAAA;;;;;;;;;;;;;;;;KAO3B,oBAAA,UAA8B,0BAAA,CAA2B,KAAK;AAAA,cAE7D,+BAAA,EAKZ,sCAAA,CAL2C,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAOhC,qBAAA,UAA+B,+BAAA,CAAgC,KAAK;AAAA,cAcnE,wBAAA,EAIZ,sCAAA,CAJoC,UAAA;;;;;;;;;;;;;KAMzB,kBAAA,UAA4B,wBAAA,CAAyB,KAAK;AAAA,cA8BzD,yBAAA,EAIZ,sCAAA,CAJqC,UAAA;;;;;;;;;;;;;;;;;;;;;;;KAM1B,mBAAA,UAA6B,yBAAA,CAA0B,KAAK;AAAA,cAE3D,kBAAA,EAMX,sCAAA,CAN6B,UAAA;;;;;;;KAQnB,YAAA,UAAsB,kBAAA,CAAmB,KAAK;AAAA,cAE7C,0BAAA,EAIX,sCAAA,CAJqC,UAAA;;;;;;;;;;;KAM3B,oBAAA,UAA8B,0BAAA,CAA2B,KAAK"}
@@ -0,0 +1,112 @@
1
+ import { type } from "arktype";
2
+ //#region src/commands/json/schemas.ts
3
+ const migrationEntrySchema = type({
4
+ name: "string",
5
+ hash: "string",
6
+ fromContract: "string | null",
7
+ toContract: "string",
8
+ operationCount: "number",
9
+ createdAt: "string",
10
+ refs: "string[]",
11
+ providedInvariants: "string[]"
12
+ });
13
+ const contractRefSchema = type({
14
+ hash: "string",
15
+ refs: "string[]"
16
+ });
17
+ const successEnvelopeBaseSchema = type({
18
+ ok: "true",
19
+ summary: "string"
20
+ });
21
+ const migrationSpaceListEntrySchema = type({
22
+ space: "string",
23
+ migrations: migrationEntrySchema.array()
24
+ });
25
+ successEnvelopeBaseSchema.and(type({ spaces: migrationSpaceListEntrySchema.array() }));
26
+ const graphMigrationSchema = type({
27
+ name: "string",
28
+ hash: "string",
29
+ fromContract: "string | null",
30
+ toContract: "string"
31
+ });
32
+ const migrationSpaceGraphEntrySchema = type({
33
+ space: "string",
34
+ contracts: contractRefSchema.array(),
35
+ migrations: graphMigrationSchema.array()
36
+ });
37
+ successEnvelopeBaseSchema.and(type({ spaces: migrationSpaceGraphEntrySchema.array() }));
38
+ const migrationStatusEntrySchema = migrationEntrySchema.and(type({ status: "\"applied\" | \"pending\" | null" }));
39
+ const contractUnreadableDiagnosticSchema = type({
40
+ code: "\"CONTRACT.UNREADABLE\"",
41
+ severity: "\"warn\" | \"info\"",
42
+ message: "string",
43
+ hints: "string[]"
44
+ });
45
+ const markerNotInHistoryDiagnosticSchema = type({
46
+ code: "\"MIGRATION.MARKER_NOT_IN_HISTORY\"",
47
+ severity: "\"warn\" | \"info\"",
48
+ message: "string",
49
+ hints: "string[]"
50
+ });
51
+ const missingInvariantsDiagnosticSchema = type({
52
+ code: "\"MIGRATION.MISSING_INVARIANTS\"",
53
+ "ref?": "string",
54
+ invariants: "string[]",
55
+ message: "string"
56
+ });
57
+ const statusDiagnosticSchema = contractUnreadableDiagnosticSchema.or(markerNotInHistoryDiagnosticSchema).or(missingInvariantsDiagnosticSchema);
58
+ const migrationStatusSpaceSchema = type({
59
+ space: "string",
60
+ currentContract: "string | null",
61
+ targetContract: "string",
62
+ migrations: migrationStatusEntrySchema.array()
63
+ });
64
+ const migrationStatusJsonResultSchema = successEnvelopeBaseSchema.and(type({
65
+ spaces: migrationStatusSpaceSchema.array(),
66
+ diagnostics: statusDiagnosticSchema.array()
67
+ }));
68
+ const ledgerRecordSchema = type({
69
+ space: "string",
70
+ name: "string",
71
+ hash: "string",
72
+ fromContract: "string | null",
73
+ toContract: "string",
74
+ appliedAt: "string",
75
+ operationCount: "number"
76
+ });
77
+ successEnvelopeBaseSchema.and(type({ records: ledgerRecordSchema.array() }));
78
+ const showOperationSchema = type({
79
+ id: "string",
80
+ label: "string",
81
+ operationClass: "string"
82
+ });
83
+ const showPreviewStatementSchema = type({
84
+ text: "string",
85
+ language: "string"
86
+ });
87
+ const showMigrationSchema = type({
88
+ space: "string",
89
+ name: "string",
90
+ hash: "string",
91
+ fromContract: "string | null",
92
+ toContract: "string",
93
+ createdAt: "string",
94
+ operations: showOperationSchema.array(),
95
+ preview: type({ statements: showPreviewStatementSchema.array() })
96
+ });
97
+ successEnvelopeBaseSchema.and(type({ migration: showMigrationSchema }));
98
+ const migrationCheckResultSchema = type({
99
+ ok: "boolean",
100
+ failures: type({
101
+ space: "string",
102
+ code: "string",
103
+ where: "string",
104
+ why: "string",
105
+ fix: "string"
106
+ }).array(),
107
+ summary: "string"
108
+ });
109
+ //#endregion
110
+ export { migrationStatusJsonResultSchema as n, migrationCheckResultSchema as t };
111
+
112
+ //# sourceMappingURL=schemas-DJY2O09F.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas-DJY2O09F.mjs","names":[],"sources":["../src/commands/json/schemas.ts"],"sourcesContent":["import { type } from 'arktype';\n\nexport const migrationEntrySchema = type({\n name: 'string',\n hash: 'string',\n fromContract: 'string | null',\n toContract: 'string',\n operationCount: 'number',\n createdAt: 'string',\n refs: 'string[]',\n providedInvariants: 'string[]',\n});\n\nexport type MigrationEntry = typeof migrationEntrySchema.infer;\n\nexport const contractRefSchema = type({\n hash: 'string',\n refs: 'string[]',\n});\n\nexport type ContractRef = typeof contractRefSchema.infer;\n\nexport const successEnvelopeBaseSchema = type({\n ok: 'true',\n summary: 'string',\n});\n\nexport type SuccessEnvelopeBase = typeof successEnvelopeBaseSchema.infer;\n\nexport const migrationSpaceListEntrySchema = type({\n space: 'string',\n migrations: migrationEntrySchema.array(),\n});\n\nexport type MigrationSpaceListEntry = typeof migrationSpaceListEntrySchema.infer;\n\nexport const migrationListResultSchema = successEnvelopeBaseSchema.and(\n type({\n spaces: migrationSpaceListEntrySchema.array(),\n }),\n);\n\nexport type MigrationListResult = typeof migrationListResultSchema.infer;\n\nexport const graphMigrationSchema = type({\n name: 'string',\n hash: 'string',\n fromContract: 'string | null',\n toContract: 'string',\n});\n\nexport type GraphMigration = typeof graphMigrationSchema.infer;\n\nexport const migrationSpaceGraphEntrySchema = type({\n space: 'string',\n contracts: contractRefSchema.array(),\n migrations: graphMigrationSchema.array(),\n});\n\nexport type MigrationSpaceGraphEntry = typeof migrationSpaceGraphEntrySchema.infer;\n\nexport const migrationGraphJsonResultSchema = successEnvelopeBaseSchema.and(\n type({\n spaces: migrationSpaceGraphEntrySchema.array(),\n }),\n);\n\nexport type MigrationGraphJsonResult = typeof migrationGraphJsonResultSchema.infer;\n\nexport const migrationStatusEntrySchema = migrationEntrySchema.and(\n type({\n status: '\"applied\" | \"pending\" | null',\n }),\n);\n\nexport type MigrationStatusEntry = typeof migrationStatusEntrySchema.infer;\n\nconst contractUnreadableDiagnosticSchema = type({\n code: '\"CONTRACT.UNREADABLE\"',\n severity: '\"warn\" | \"info\"',\n message: 'string',\n hints: 'string[]',\n});\n\nconst markerNotInHistoryDiagnosticSchema = type({\n code: '\"MIGRATION.MARKER_NOT_IN_HISTORY\"',\n severity: '\"warn\" | \"info\"',\n message: 'string',\n hints: 'string[]',\n});\n\nconst missingInvariantsDiagnosticSchema = type({\n code: '\"MIGRATION.MISSING_INVARIANTS\"',\n 'ref?': 'string',\n invariants: 'string[]',\n message: 'string',\n});\n\nexport const statusDiagnosticSchema = contractUnreadableDiagnosticSchema\n .or(markerNotInHistoryDiagnosticSchema)\n .or(missingInvariantsDiagnosticSchema);\n\nexport type StatusDiagnosticJson = typeof statusDiagnosticSchema.infer;\n\nexport const migrationStatusSpaceSchema = type({\n space: 'string',\n currentContract: 'string | null',\n targetContract: 'string',\n migrations: migrationStatusEntrySchema.array(),\n});\n\nexport type MigrationStatusSpace = typeof migrationStatusSpaceSchema.infer;\n\nexport const migrationStatusJsonResultSchema = successEnvelopeBaseSchema.and(\n type({\n spaces: migrationStatusSpaceSchema.array(),\n diagnostics: statusDiagnosticSchema.array(),\n }),\n);\n\nexport type MigrationStatusResult = typeof migrationStatusJsonResultSchema.infer;\n\nexport const ledgerRecordSchema = type({\n space: 'string',\n name: 'string',\n hash: 'string',\n fromContract: 'string | null',\n toContract: 'string',\n appliedAt: 'string',\n operationCount: 'number',\n});\n\nexport type LedgerRecord = typeof ledgerRecordSchema.infer;\n\nexport const migrationLogResultSchema = successEnvelopeBaseSchema.and(\n type({\n records: ledgerRecordSchema.array(),\n }),\n);\n\nexport type MigrationLogResult = typeof migrationLogResultSchema.infer;\n\nexport const showOperationSchema = type({\n id: 'string',\n label: 'string',\n operationClass: 'string',\n});\n\nexport type ShowOperation = typeof showOperationSchema.infer;\n\nexport const showPreviewStatementSchema = type({\n text: 'string',\n language: 'string',\n});\n\nexport const showMigrationSchema = type({\n space: 'string',\n name: 'string',\n hash: 'string',\n fromContract: 'string | null',\n toContract: 'string',\n createdAt: 'string',\n operations: showOperationSchema.array(),\n preview: type({\n statements: showPreviewStatementSchema.array(),\n }),\n});\n\nexport type ShowMigration = typeof showMigrationSchema.infer;\n\nexport const migrationShowResultSchema = successEnvelopeBaseSchema.and(\n type({\n migration: showMigrationSchema,\n }),\n);\n\nexport type MigrationShowResult = typeof migrationShowResultSchema.infer;\n\nexport const checkFailureSchema = type({\n space: 'string',\n code: 'string',\n where: 'string',\n why: 'string',\n fix: 'string',\n});\n\nexport type CheckFailure = typeof checkFailureSchema.infer;\n\nexport const migrationCheckResultSchema = type({\n ok: 'boolean',\n failures: checkFailureSchema.array(),\n summary: 'string',\n});\n\nexport type MigrationCheckResult = typeof migrationCheckResultSchema.infer;\n"],"mappings":";;AAEA,MAAa,uBAAuB,KAAK;CACvC,MAAM;CACN,MAAM;CACN,cAAc;CACd,YAAY;CACZ,gBAAgB;CAChB,WAAW;CACX,MAAM;CACN,oBAAoB;AACtB,CAAC;AAID,MAAa,oBAAoB,KAAK;CACpC,MAAM;CACN,MAAM;AACR,CAAC;AAID,MAAa,4BAA4B,KAAK;CAC5C,IAAI;CACJ,SAAS;AACX,CAAC;AAID,MAAa,gCAAgC,KAAK;CAChD,OAAO;CACP,YAAY,qBAAqB,MAAM;AACzC,CAAC;AAIwC,0BAA0B,IACjE,KAAK,EACH,QAAQ,8BAA8B,MAAM,EAC9C,CAAC,CACH;AAIA,MAAa,uBAAuB,KAAK;CACvC,MAAM;CACN,MAAM;CACN,cAAc;CACd,YAAY;AACd,CAAC;AAID,MAAa,iCAAiC,KAAK;CACjD,OAAO;CACP,WAAW,kBAAkB,MAAM;CACnC,YAAY,qBAAqB,MAAM;AACzC,CAAC;AAI6C,0BAA0B,IACtE,KAAK,EACH,QAAQ,+BAA+B,MAAM,EAC/C,CAAC,CACH;AAIA,MAAa,6BAA6B,qBAAqB,IAC7D,KAAK,EACH,QAAQ,mCACV,CAAC,CACH;AAIA,MAAM,qCAAqC,KAAK;CAC9C,MAAM;CACN,UAAU;CACV,SAAS;CACT,OAAO;AACT,CAAC;AAED,MAAM,qCAAqC,KAAK;CAC9C,MAAM;CACN,UAAU;CACV,SAAS;CACT,OAAO;AACT,CAAC;AAED,MAAM,oCAAoC,KAAK;CAC7C,MAAM;CACN,QAAQ;CACR,YAAY;CACZ,SAAS;AACX,CAAC;AAED,MAAa,yBAAyB,mCACnC,GAAG,kCAAkC,EACrC,GAAG,iCAAiC;AAIvC,MAAa,6BAA6B,KAAK;CAC7C,OAAO;CACP,iBAAiB;CACjB,gBAAgB;CAChB,YAAY,2BAA2B,MAAM;AAC/C,CAAC;AAID,MAAa,kCAAkC,0BAA0B,IACvE,KAAK;CACH,QAAQ,2BAA2B,MAAM;CACzC,aAAa,uBAAuB,MAAM;AAC5C,CAAC,CACH;AAIA,MAAa,qBAAqB,KAAK;CACrC,OAAO;CACP,MAAM;CACN,MAAM;CACN,cAAc;CACd,YAAY;CACZ,WAAW;CACX,gBAAgB;AAClB,CAAC;AAIuC,0BAA0B,IAChE,KAAK,EACH,SAAS,mBAAmB,MAAM,EACpC,CAAC,CACH;AAIA,MAAa,sBAAsB,KAAK;CACtC,IAAI;CACJ,OAAO;CACP,gBAAgB;AAClB,CAAC;AAID,MAAa,6BAA6B,KAAK;CAC7C,MAAM;CACN,UAAU;AACZ,CAAC;AAED,MAAa,sBAAsB,KAAK;CACtC,OAAO;CACP,MAAM;CACN,MAAM;CACN,cAAc;CACd,YAAY;CACZ,WAAW;CACX,YAAY,oBAAoB,MAAM;CACtC,SAAS,KAAK,EACZ,YAAY,2BAA2B,MAAM,EAC/C,CAAC;AACH,CAAC;AAIwC,0BAA0B,IACjE,KAAK,EACH,WAAW,oBACb,CAAC,CACH;AAcA,MAAa,6BAA6B,KAAK;CAC7C,IAAI;CACJ,UAZgC,KAAK;EACrC,OAAO;EACP,MAAM;EACN,OAAO;EACP,KAAK;EACL,KAAK;CACP,CAMY,EAAmB,MAAM;CACnC,SAAS;AACX,CAAC"}
@@ -1,4 +1,4 @@
1
- import { D as isCI, O as formatCommandHelp, _ as createTerminalUI, g as parseGlobalFlagsOrExit, h as parseGlobalFlags, l as setCommandDescriptions, t as addGlobalOptions, u as setCommandExamples } from "./command-helpers-C6lqKJG1.mjs";
1
+ import { D as isCI, O as formatCommandHelp, _ as createTerminalUI, g as parseGlobalFlagsOrExit, h as parseGlobalFlags, l as setCommandDescriptions, t as addGlobalOptions, u as setCommandExamples } from "./command-helpers-esJGBD4W.mjs";
2
2
  import { Command } from "commander";
3
3
  import { readUserConfig, resolveGating, userConfigPath, writeUserConfig } from "@prisma-next/cli-telemetry";
4
4
  //#region src/commands/telemetry/status.ts
@@ -119,4 +119,4 @@ function createTelemetryCommand() {
119
119
  //#endregion
120
120
  export { createTelemetryCommand as t };
121
121
 
122
- //# sourceMappingURL=telemetry-CxbY4NKn.mjs.map
122
+ //# sourceMappingURL=telemetry-CZkgkR_O.mjs.map