@prisma/orm-family-sql 8.0.0-rc.18-dev.25 → 8.0.0-rc.18-dev.26

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 (126) hide show
  1. package/dist/{attribute-specs-BaasqvID.d.mts → attribute-specs-D9QcPJpj.d.mts} +3 -3
  2. package/dist/{attribute-specs-BaasqvID.d.mts.map → attribute-specs-D9QcPJpj.d.mts.map} +1 -1
  3. package/dist/{authoring-entity-types-CZ-vdwYS-CLLXZPhj.d.mts → authoring-entity-types-CZ-vdwYS-CSU65LVs.d.mts} +2 -2
  4. package/dist/{authoring-entity-types-CZ-vdwYS-CLLXZPhj.d.mts.map → authoring-entity-types-CZ-vdwYS-CSU65LVs.d.mts.map} +1 -1
  5. package/dist/{authoring-type-constructors-0Iv2zdwS-CJbLWgCh.mjs → authoring-type-constructors-0Iv2zdwS-D4LlP1q2.mjs} +2 -2
  6. package/dist/{authoring-type-constructors-0Iv2zdwS-CJbLWgCh.mjs.map → authoring-type-constructors-0Iv2zdwS-D4LlP1q2.mjs.map} +1 -1
  7. package/dist/{config-types-BFS-ivzi.mjs → config-types-BJxHMPGt.mjs} +2 -2
  8. package/dist/{config-types-BFS-ivzi.mjs.map → config-types-BJxHMPGt.mjs.map} +1 -1
  9. package/dist/{contract-builder-CKO_xspE.mjs → contract-builder-CrWbrtE4.mjs} +3 -3
  10. package/dist/{contract-builder-CKO_xspE.mjs.map → contract-builder-CrWbrtE4.mjs.map} +1 -1
  11. package/dist/{contract-builder-DkaXfJoe.d.mts → contract-builder-D-RSOsnc.d.mts} +3 -10
  12. package/dist/contract-builder-D-RSOsnc.d.mts.map +1 -0
  13. package/dist/contract-prisma7__provider.mjs +6 -6
  14. package/dist/contract-psl.d.mts +1 -1
  15. package/dist/contract-psl.mjs +1 -1
  16. package/dist/contract-psl__attribute-specs.d.mts +1 -1
  17. package/dist/contract-psl__attribute-specs.mjs +1 -1
  18. package/dist/contract-psl__provider.mjs +2 -2
  19. package/dist/contract-psl__provider.mjs.map +1 -1
  20. package/dist/contract-ts.d.mts +1 -1
  21. package/dist/contract-ts.mjs +3 -3
  22. package/dist/contract-ts__config-types.mjs +1 -1
  23. package/dist/contract-ts__contract-builder.d.mts +1 -1
  24. package/dist/contract-ts__contract-builder.mjs +2 -2
  25. package/dist/contract.d.mts +3 -3
  26. package/dist/contract.mjs +5 -5
  27. package/dist/contract__data-type.d.mts +2 -2
  28. package/dist/contract__data-type.mjs +2 -2
  29. package/dist/contract__foreign-key-materialization.d.mts +1 -1
  30. package/dist/contract__foreign-key-materialization.mjs +2 -2
  31. package/dist/contract__validators.mjs +1 -1
  32. package/dist/{control-ZtRWQJi1.mjs → control-D7jPD-Tk.mjs} +27 -22
  33. package/dist/control-D7jPD-Tk.mjs.map +1 -0
  34. package/dist/{control-DpPGeOJY.d.mts → control-D9zFmpo0.d.mts} +18 -14
  35. package/dist/control-D9zFmpo0.d.mts.map +1 -0
  36. package/dist/{control-adapter-BCopdpsT-BpC5YbAf.d.mts → control-adapter-BCopdpsT-BPHa2Frw.d.mts} +3 -3
  37. package/dist/{control-adapter-BCopdpsT-BpC5YbAf.d.mts.map → control-adapter-BCopdpsT-BPHa2Frw.d.mts.map} +1 -1
  38. package/dist/control-adapter-ChJhp5vV.d.mts +13 -0
  39. package/dist/control-adapter-ChJhp5vV.d.mts.map +1 -0
  40. package/dist/control-adapter-DhX77V61.mjs +16 -0
  41. package/dist/control-adapter-DhX77V61.mjs.map +1 -0
  42. package/dist/{data-type-pNwyyJpr.d.mts → data-type-C84xngfv.d.mts} +22 -15
  43. package/dist/data-type-C84xngfv.d.mts.map +1 -0
  44. package/dist/data-type-DKk8Unnz.mjs.map +1 -1
  45. package/dist/{derived-checks-sRZp_gTF-Dvk3wkm9.mjs → derived-checks-sRZp_gTF-ermwhVGQ.mjs} +4 -4
  46. package/dist/{derived-checks-sRZp_gTF-Dvk3wkm9.mjs.map → derived-checks-sRZp_gTF-ermwhVGQ.mjs.map} +1 -1
  47. package/dist/{diff-BScSarWr.d.mts → diff-ClZvIVOl.d.mts} +5 -5
  48. package/dist/{diff-BScSarWr.d.mts.map → diff-ClZvIVOl.d.mts.map} +1 -1
  49. package/dist/{exports-DVsHk8HP-DrH_2a-H.mjs → exports-DVsHk8HP-M-qeQrkz.mjs} +2 -2
  50. package/dist/{exports-DVsHk8HP-DrH_2a-H.mjs.map → exports-DVsHk8HP-M-qeQrkz.mjs.map} +1 -1
  51. package/dist/family.d.mts +11 -11
  52. package/dist/family.mjs +8 -7
  53. package/dist/family__control-adapter.d.mts +3 -3
  54. package/dist/family__control-adapter.mjs +2 -1
  55. package/dist/family__control.d.mts +4 -4
  56. package/dist/family__control.mjs +3 -3
  57. package/dist/family__diff.d.mts +1 -1
  58. package/dist/family__diff.mjs +1 -1
  59. package/dist/family__ir.mjs +1 -1
  60. package/dist/family__migration.d.mts +1 -1
  61. package/dist/family__pack.d.mts +1 -1
  62. package/dist/family__pack.mjs +2 -2
  63. package/dist/family__psl-build.d.mts +1 -1
  64. package/dist/family__psl-build.mjs +1 -1
  65. package/dist/family__psl-infer.d.mts +1 -1
  66. package/dist/family__psl-infer.mjs +1 -1
  67. package/dist/{foreign-key-materialization-BiWTp2vi.d.mts → foreign-key-materialization-3vQnPT_D.d.mts} +3 -3
  68. package/dist/{foreign-key-materialization-BiWTp2vi.d.mts.map → foreign-key-materialization-3vQnPT_D.d.mts.map} +1 -1
  69. package/dist/{foreign-key-materialization-BIvQTfz8.mjs → foreign-key-materialization-C_FPLzj3.mjs} +2 -2
  70. package/dist/{foreign-key-materialization-BIvQTfz8.mjs.map → foreign-key-materialization-C_FPLzj3.mjs.map} +1 -1
  71. package/dist/{index-equivalence-DswCiq5l-Cp2V5nhL.mjs → index-equivalence-DswCiq5l-C6SAs-Yz.mjs} +2 -2
  72. package/dist/{index-equivalence-DswCiq5l-Cp2V5nhL.mjs.map → index-equivalence-DswCiq5l-C6SAs-Yz.mjs.map} +1 -1
  73. package/dist/{interpreter-B9wNACvu-Bk0vkYDs.mjs → interpreter-kQuqdyeP-B-rzJDWE.mjs} +5 -5
  74. package/dist/{interpreter-B9wNACvu-Bk0vkYDs.mjs.map → interpreter-kQuqdyeP-B-rzJDWE.mjs.map} +1 -1
  75. package/dist/{migration-lr0tqLnS.d.mts → migration-RrhpTP1o.d.mts} +2 -2
  76. package/dist/{migration-lr0tqLnS.d.mts.map → migration-RrhpTP1o.d.mts.map} +1 -1
  77. package/dist/orm-client.mjs +1 -1
  78. package/dist/{pack-mrYskO6T.d.mts → pack-DNdZwm5w.d.mts} +3 -3
  79. package/dist/{pack-mrYskO6T.d.mts.map → pack-DNdZwm5w.d.mts.map} +1 -1
  80. package/dist/{psl-build-DB-x01oH.mjs → psl-build-BT8Ue6gd.mjs} +4 -4
  81. package/dist/psl-build-BT8Ue6gd.mjs.map +1 -0
  82. package/dist/{psl-build-CTj6JAX3.d.mts → psl-build-DU55bjfu.d.mts} +4 -4
  83. package/dist/{psl-build-CTj6JAX3.d.mts.map → psl-build-DU55bjfu.d.mts.map} +1 -1
  84. package/dist/{psl-column-resolution-BCkhNzOK-DOvdhSCj.d.mts → psl-column-resolution-BCkhNzOK-DyfXnB-9.d.mts} +2 -2
  85. package/dist/{psl-column-resolution-BCkhNzOK-DOvdhSCj.d.mts.map → psl-column-resolution-BCkhNzOK-DyfXnB-9.d.mts.map} +1 -1
  86. package/dist/{psl-field-resolution-BOJPyV5I-CQ7I2lbC.mjs → psl-field-resolution-C1E-_fQq-VUYD8cnS.mjs} +18 -13
  87. package/dist/psl-field-resolution-C1E-_fQq-VUYD8cnS.mjs.map +1 -0
  88. package/dist/{psl-infer-CvUWefHM.mjs → psl-infer-Bz34csvN.mjs} +2 -2
  89. package/dist/{psl-infer-CvUWefHM.mjs.map → psl-infer-Bz34csvN.mjs.map} +1 -1
  90. package/dist/{psl-infer-1C9FqGO2.d.mts → psl-infer-I75woGr4.d.mts} +4 -4
  91. package/dist/{psl-infer-1C9FqGO2.d.mts.map → psl-infer-I75woGr4.d.mts.map} +1 -1
  92. package/dist/runtime.mjs +1 -1
  93. package/dist/{schema-differ-DmP74bB8-Dn53wZD1.d.mts → schema-differ-DmP74bB8-CIQ17HTk.d.mts} +3 -3
  94. package/dist/{schema-differ-DmP74bB8-Dn53wZD1.d.mts.map → schema-differ-DmP74bB8-CIQ17HTk.d.mts.map} +1 -1
  95. package/dist/schema-ir.d.mts +2 -2
  96. package/dist/schema-ir.mjs +2 -2
  97. package/dist/schema-ir__types.d.mts +3 -3
  98. package/dist/schema-ir__types.mjs +2 -2
  99. package/dist/{schema-verify-BwRdzbHb-CxnJN-Lm.mjs → schema-verify-BwRdzbHb-nDeE75xa.mjs} +2 -2
  100. package/dist/{schema-verify-BwRdzbHb-CxnJN-Lm.mjs.map → schema-verify-BwRdzbHb-nDeE75xa.mjs.map} +1 -1
  101. package/dist/{sql-contract-serializer-sMY3prTx-BDTNHOOy.mjs → sql-contract-serializer-sMY3prTx-BT6HdXAE.mjs} +2 -2
  102. package/dist/{sql-contract-serializer-sMY3prTx-BDTNHOOy.mjs.map → sql-contract-serializer-sMY3prTx-BT6HdXAE.mjs.map} +1 -1
  103. package/dist/{sql-data-type-DwLa_dK9-2eTvrYhA.mjs → sql-data-type-BSi0X331-OXbBFXDh.mjs} +40 -12
  104. package/dist/sql-data-type-BSi0X331-OXbBFXDh.mjs.map +1 -0
  105. package/dist/{types-Bqe0AXuw-xqQnkIj4.d.mts → types-B3AHHPDh-BHh-89fY.d.mts} +33 -48
  106. package/dist/types-B3AHHPDh-BHh-89fY.d.mts.map +1 -0
  107. package/dist/types-BGERR8XF.d.mts +1 -0
  108. package/dist/{types-DKU4GeqD-DUVn8zcv.d.mts → types-DKU4GeqD-CUClXCme.d.mts} +4 -4
  109. package/dist/{types-DKU4GeqD-DUVn8zcv.d.mts.map → types-DKU4GeqD-CUClXCme.d.mts.map} +1 -1
  110. package/dist/{types-CfPB-Kz_-ByWDfwMj.mjs → types-egs_vme1-DRhYFwIT.mjs} +50 -22
  111. package/dist/types-egs_vme1-DRhYFwIT.mjs.map +1 -0
  112. package/dist/{validators-Uim8vh59.mjs → validators-BCRydDG7.mjs} +6 -13
  113. package/dist/validators-BCRydDG7.mjs.map +1 -0
  114. package/package.json +18 -18
  115. package/dist/contract-builder-DkaXfJoe.d.mts.map +0 -1
  116. package/dist/control-DpPGeOJY.d.mts.map +0 -1
  117. package/dist/control-ZtRWQJi1.mjs.map +0 -1
  118. package/dist/control-adapter-DVjkUph8.d.mts +0 -1
  119. package/dist/data-type-pNwyyJpr.d.mts.map +0 -1
  120. package/dist/psl-build-DB-x01oH.mjs.map +0 -1
  121. package/dist/psl-field-resolution-BOJPyV5I-CQ7I2lbC.mjs.map +0 -1
  122. package/dist/sql-data-type-DwLa_dK9-2eTvrYhA.mjs.map +0 -1
  123. package/dist/types-Bqe0AXuw-xqQnkIj4.d.mts.map +0 -1
  124. package/dist/types-CTdsm45r.d.mts +0 -1
  125. package/dist/types-CfPB-Kz_-ByWDfwMj.mjs.map +0 -1
  126. package/dist/validators-Uim8vh59.mjs.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { r as SqlObjectNaming } from "./naming-BcD36g9T-DFyaudUa.mjs";
2
2
  import { IRNodeBase } from "@prisma/orm-framework/components/ir";
3
- import { CodecRef, DataType, DataTypeValue } from "@prisma/orm-framework/components/codec";
3
+ import { CodecRef, DataType, DataTypeParams, DataTypeValue } from "@prisma/orm-framework/components/codec";
4
4
  import { ColumnDefault } from "@prisma/orm-framework/contract/types";
5
5
  import { DiffSubjectGranularity, DiffableNode, MismatchExplanation, SchemaNodeRef } from "@prisma/orm-framework/components/control";
6
- //#region ../../../2-sql/1-core/schema-ir/dist/types-Bqe0AXuw.d.mts
6
+ //#region ../../../2-sql/1-core/schema-ir/dist/types-B3AHHPDh.d.mts
7
7
  //#region src/ir/sql-schema-ir-node.d.ts
8
8
  /**
9
9
  * SQL Schema IR node base. Carries the family-level
@@ -212,8 +212,6 @@ interface SqlColumnDefaultIRInput {
212
212
  * {@link import('./sql-column-ir').SqlColumnIRInput.codecRef}.
213
213
  */
214
214
  readonly codecRef?: CodecRef;
215
- /** See {@link import('./sql-column-ir').SqlColumnIRInput.codecBaseNativeType}. */
216
- readonly codecBaseNativeType?: string;
217
215
  /** See {@link import('./sql-column-ir').SqlColumnIRInput.sqlExpressionLiteralFor}. */
218
216
  readonly sqlExpressionLiteralFor?: SqlExpressionLiteralFor;
219
217
  }
@@ -246,8 +244,6 @@ declare class SqlColumnDefaultIR extends SqlSchemaIRNode implements DiffableNode
246
244
  readonly many?: boolean;
247
245
  /** See {@link SqlColumnDefaultIRInput.codecRef}. Non-enumerable, same reason as {@link many}. */
248
246
  readonly codecRef?: CodecRef;
249
- /** See {@link SqlColumnDefaultIRInput.codecBaseNativeType}. Non-enumerable, same reason as {@link many}. */
250
- readonly codecBaseNativeType?: string;
251
247
  /** See {@link SqlColumnDefaultIRInput.sqlExpressionLiteralFor}. Non-enumerable, same reason as {@link many}. */
252
248
  readonly sqlExpressionLiteralFor?: SqlExpressionLiteralFor;
253
249
  constructor(input: SqlColumnDefaultIRInput);
@@ -293,22 +289,16 @@ interface ReportedSqlType {
293
289
  }
294
290
  interface SqlColumnIRInput {
295
291
  readonly name: string;
296
- readonly nativeType: string;
292
+ /**
293
+ * The column's element type as text; nothing compares it. On the contract-derived side, the name a migration writes for the type the column is stored as, with an enum named as the contract names it. On the introspected side, the type as introspection reads it: on Postgres the `format_type` text, which keeps the schema of a type off the search path, except that an enum is named as a contract names it; on SQLite the declared type, lower-cased. Mismatch messages and the schema tree show it, and default parsing reads it: the target's `resolveDefault` hook on the contract side, and SQLite's default reader on the introspected side. Columns are compared by {@link storedType} and {@link storedTypeParams}.
294
+ */
295
+ readonly typeText: string;
297
296
  readonly nullable: boolean;
298
297
  /** Raw database default expression (e.g. `'hello'::text`, `nextval('seq')`). */
299
298
  readonly default?: string;
300
299
  readonly annotations?: SqlAnnotations;
301
- /** True when the column is a native array (e.g. `text[]`, `int4[]`). The `nativeType` carries the element type only (e.g. `text`, `int4`). */
300
+ /** True when the column is a native array (e.g. `text[]`, `int4[]`). The `typeText` carries the element type only (e.g. `text`, `int4`). */
302
301
  readonly many?: boolean;
303
- /**
304
- * Fully resolved native type, comparable across the two diff sides:
305
- * the contract-derived side stamps the codec-expanded type (typeRef
306
- * resolved, parameterized types expanded, `[]` appended for arrays);
307
- * the introspected side stamps the target-normalized type with the same
308
- * `[]` convention. Stamped at construction by derivation/introspection;
309
- * absent on raw hand-built nodes.
310
- */
311
- readonly resolvedNativeType?: string;
312
302
  /**
313
303
  * Structured default, comparable across the two diff sides: the
314
304
  * contract-derived side stamps the contract's `ColumnDefault`; the
@@ -338,19 +328,11 @@ interface SqlColumnIRInput {
338
328
  */
339
329
  readonly codecRef?: CodecRef;
340
330
  /**
341
- * The column's resolved BASE native type: pre-parameter-expansion,
342
- * pre-array-suffix (e.g. `character`, not `character(36)` or
343
- * `character[]`). Distinct from {@link resolvedNativeType} (the EXPANDED
344
- * comparison value) — DDL rendering re-expands a parameterized type at
345
- * plan time from this base, so it must not already carry the expansion.
346
- * Stamped alongside {@link codecRef}.
331
+ * The type the column is stored as, whose name DDL writes and the database reports (ADR 254): on the contract-derived side the type its codec's data type is stored as, on the introspected side the type that claims the reported type. Absent on an introspected column no data type claims.
347
332
  */
348
- readonly codecBaseNativeType?: string;
349
- /**
350
- * The data type the column's codec represents, from the assembled stack (ADR 254). Stamped on the
351
- * contract-derived column; absent on introspected nodes.
352
- */
353
- readonly dataType?: DataType;
333
+ readonly storedType?: DataType;
334
+ /** The parameters of {@link storedType} in its normal form, for comparing; empty for a type without parameters. Present exactly when `storedType` is. DDL writes the parameters as written, from {@link codecRef}. */
335
+ readonly storedTypeParams?: DataTypeParams;
354
336
  /**
355
337
  * A literal default as a value of the column's data type (ADR 254): on the contract-derived side read from the contract by the column's type, on the introspected side read from the database by the column's codec. The diff compares defaults by it. Absent when no type or codec read one.
356
338
  */
@@ -379,32 +361,28 @@ interface SqlColumnIRInput {
379
361
  *
380
362
  * Implements `DiffableNode` so a column is directly a table's diff-tree
381
363
  * child: `id` is the column name (unique among a table's columns); `isEqualTo`
382
- * compares this column's own attributes only — never children, since a
383
- * column is a leaf. When both sides carry `resolvedNativeType` (stamped at
384
- * derivation/introspection), the comparison uses the resolved values —
385
- * resolved native type, nullability, and structured default equality per
386
- * the relational walk's `columnDefaultsEqual` semantics, with `this` as the
387
- * expected side. Otherwise it falls back to comparing raw fields.
364
+ * compares this column's own attributes only, never its default, which is a
365
+ * child node: the type by {@link sqlColumnTypesEqual}, and nullability.
388
366
  */
389
367
  declare class SqlColumnIR extends SqlSchemaIRNode implements DiffableNode {
390
368
  readonly nodeKind: "sql-column";
391
369
  readonly name: string;
392
- readonly nativeType: string;
370
+ /** See {@link SqlColumnIRInput.typeText}. */
371
+ readonly typeText: string;
393
372
  readonly nullable: boolean;
394
373
  readonly default?: string;
395
374
  readonly annotations?: SqlAnnotations;
396
- /** True when the column is a native array (e.g. `text[]`, `int4[]`). The `nativeType` carries the element type only (e.g. `text`, `int4`). */
375
+ /** True when the column is a native array (e.g. `text[]`, `int4[]`). The `typeText` carries the element type only (e.g. `text`, `int4`). */
397
376
  readonly many?: boolean;
398
- readonly resolvedNativeType?: string;
399
377
  readonly resolvedDefault?: ColumnDefault;
400
378
  /** See {@link SqlColumnIRInput.authoredDefault}. Non-enumerable so it stays out of JSON and structural equality. */
401
379
  readonly authoredDefault?: ColumnDefault;
402
380
  /** See {@link SqlColumnIRInput.codecRef}. Non-enumerable so it stays out of JSON and structural equality. */
403
381
  readonly codecRef?: CodecRef;
404
- /** See {@link SqlColumnIRInput.codecBaseNativeType}. Non-enumerable, same reason as {@link codecRef}. */
405
- readonly codecBaseNativeType?: string;
406
- /** See {@link SqlColumnIRInput.dataType}. Non-enumerable, same reason as {@link codecRef}. */
407
- readonly dataType?: DataType;
382
+ /** See {@link SqlColumnIRInput.storedType}. Non-enumerable, same reason as {@link codecRef}. */
383
+ readonly storedType?: DataType;
384
+ /** See {@link SqlColumnIRInput.storedTypeParams}. Non-enumerable, same reason as {@link codecRef}. */
385
+ readonly storedTypeParams?: DataTypeParams;
408
386
  /** See {@link SqlColumnIRInput.defaultValue}. Non-enumerable, same reason as {@link codecRef}. */
409
387
  readonly defaultValue?: SqlDefaultValue;
410
388
  /** See {@link SqlColumnIRInput.defaultUnreadable}. Non-enumerable, same reason as {@link codecRef}. */
@@ -424,15 +402,22 @@ declare class SqlColumnIR extends SqlSchemaIRNode implements DiffableNode {
424
402
  * from this column's own fields.
425
403
  */
426
404
  children(): readonly DiffableNode[];
405
+ /** This column under another name, with every other field as it is. */
406
+ withName(name: string): SqlColumnIR;
427
407
  static is(node: SqlSchemaIRNode): node is SqlColumnIR;
428
408
  /**
429
- * Compares the column's own attributes only — the default lives on the
430
- * child node. When both sides carry `resolvedNativeType`, the resolved
431
- * value governs (array-ness rides on its `[]` suffix); otherwise raw
432
- * fields compare.
409
+ * Compares the column's own attributes only — the default lives on the child node: the type, by {@link sqlColumnTypesEqual}, and nullability.
433
410
  */
434
411
  isEqualTo(other: DiffableNode): boolean;
412
+ /** Why `actual` is not this column: the two types as written and reported, or the nullability of each. The two sides always hold different values. */
413
+ explainMismatch(actual: DiffableNode | undefined): MismatchExplanation | undefined;
435
414
  }
415
+ /** The parts of a column that make its type. */
416
+ type SqlColumnType = Pick<SqlColumnIR, 'storedType' | 'storedTypeParams' | 'many'>;
417
+ /**
418
+ * Whether two columns have the same type: both have a stored type, the two are one data type, their parameters are equal as canonical JSON, and both or neither are lists. A column no data type claims has no stored type and never has the same type as another. ADR 254.
419
+ */
420
+ declare function sqlColumnTypesEqual(a: SqlColumnType, b: SqlColumnType): boolean;
436
421
  //#endregion
437
422
  //#region src/ir/sql-foreign-key-ir.d.ts
438
423
  type SqlReferentialAction = 'noAction' | 'restrict' | 'cascade' | 'setNull' | 'setDefault';
@@ -753,5 +738,5 @@ declare class SqlSchemaIR extends SqlSchemaIRNode implements DiffableNode {
753
738
  children(): readonly DiffableNode[];
754
739
  }
755
740
  //#endregion
756
- export { sqlDefaultValuesEqual as A, SqlTableIRInput as C, defineNonEnumerable as D, assertNode as E, relationalNodeEntityKind as O, SqlTableIR as S, SqlUniqueIRInput as T, SqlIndexIRInput as _, SqlAnnotations as a, SqlSchemaIRInput as b, SqlColumnDefaultIR as c, SqlColumnIRInput as d, SqlDefaultValue as f, SqlIndexIR as g, SqlForeignKeyIRInput as h, ReportedSqlType as i, relationalNodeGranularity as k, SqlColumnDefaultIRInput as l, SqlForeignKeyIR as m, PrimaryKeyInput as n, SqlCheckConstraintIR as o, SqlExpressionLiteralFor as p, RelationalSchemaNodeKind as r, SqlCheckConstraintIRInput as s, PrimaryKey as t, SqlColumnIR as u, SqlReferentialAction as v, SqlUniqueIR as w, SqlSchemaIRNode as x, SqlSchemaIR as y };
757
- //# sourceMappingURL=types-Bqe0AXuw-xqQnkIj4.d.mts.map
741
+ export { relationalNodeGranularity as A, SqlTableIR as C, assertNode as D, SqlUniqueIRInput as E, sqlDefaultValuesEqual as M, defineNonEnumerable as O, SqlSchemaIRNode as S, SqlUniqueIR as T, SqlIndexIR as _, SqlAnnotations as a, SqlSchemaIR as b, SqlColumnDefaultIR as c, SqlColumnIRInput as d, SqlColumnType as f, SqlForeignKeyIRInput as g, SqlForeignKeyIR as h, ReportedSqlType as i, sqlColumnTypesEqual as j, relationalNodeEntityKind as k, SqlColumnDefaultIRInput as l, SqlExpressionLiteralFor as m, PrimaryKeyInput as n, SqlCheckConstraintIR as o, SqlDefaultValue as p, RelationalSchemaNodeKind as r, SqlCheckConstraintIRInput as s, PrimaryKey as t, SqlColumnIR as u, SqlIndexIRInput as v, SqlTableIRInput as w, SqlSchemaIRInput as x, SqlReferentialAction as y };
742
+ //# sourceMappingURL=types-B3AHHPDh-BHh-89fY.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-B3AHHPDh-BHh-89fY.d.mts","names":[],"sources":["../../../../2-sql/1-core/schema-ir/dist/types-B3AHHPDh.d.mts"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import "./types-B3AHHPDh-BHh-89fY.mjs";
@@ -3,9 +3,9 @@ import { f as StorageTypeInstance, l as SqlStorage } from "./sql-storage-tZhB8nS
3
3
  import { j as SqlControlDriverInstance } from "./types-Dqf87mfA-BOElvimQ.mjs";
4
4
  import "./types-B2Dee96w.mjs";
5
5
  import { r as SqlOperationDescriptors } from "./index-BRFLss5v.mjs";
6
- import { x as SqlSchemaIRNode } from "./types-Bqe0AXuw-xqQnkIj4.mjs";
7
- import "./types-CTdsm45r.mjs";
8
- import { r as SqlControlAdapter } from "./control-adapter-BCopdpsT-BpC5YbAf.mjs";
6
+ import { S as SqlSchemaIRNode } from "./types-B3AHHPDh-BHh-89fY.mjs";
7
+ import "./types-BGERR8XF.mjs";
8
+ import { r as SqlControlAdapter } from "./control-adapter-BCopdpsT-BPHa2Frw.mjs";
9
9
  import { Contract } from "@prisma/orm-framework/contract/types";
10
10
  import { TargetBoundComponentDescriptor } from "@prisma/orm-framework/components/components";
11
11
  import { Result } from "@prisma/orm-framework/utils/result";
@@ -408,4 +408,4 @@ interface CreateSqlMigrationPlanOptions<TTargetDetails> {
408
408
  }
409
409
  //#endregion
410
410
  export { StorageTypePlanResult as A, SqlPlanTargetDetails as C, SqlPlannerFailureResult as D, SqlPlannerConflictLocation as E, SqlPlannerResult as O, SqlMigrationRunnerSuccessValue as S, SqlPlannerConflictKind as T, SqlMigrationRunnerErrorCode as _, FieldEventContext as a, SqlMigrationRunnerFailure as b, SqlControlExtensionDescriptor as c, SqlMigrationPlanOperation as d, SqlMigrationPlanOperationStep as f, SqlMigrationRunner as g, SqlMigrationPlannerPlanOptions as h, FieldEvent as i, SqlPlannerSuccessResult as k, SqlMigrationPlan as l, SqlMigrationPlanner as m, CodecControlHooks as n, ResolveIdentityValueInput as o, SqlMigrationPlanOperationTarget as p, CreateSqlMigrationPlanOptions as r, SqlControlAdapterDescriptor as s, AnyRecord as t, SqlMigrationPlanContractInfo as u, SqlMigrationRunnerExecuteCallbacks as v, SqlPlannerConflict as w, SqlMigrationRunnerResult as x, SqlMigrationRunnerExecuteOptions as y };
411
- //# sourceMappingURL=types-DKU4GeqD-DUVn8zcv.d.mts.map
411
+ //# sourceMappingURL=types-DKU4GeqD-CUClXCme.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-DKU4GeqD-DUVn8zcv.d.mts","names":[],"sources":["../../../../2-sql/9-family/dist/types-DKU4GeqD.d.mts"],"mappings":";;;;;;;;;;;;;;;KAUK,YAAY,SAAS;UAChB,sBAAsB;WACrB,qBAAqB,0BAA0B;;;;;;;;;UAShD;;WAEC;WACA;WACA,aAAa;;;;;;;;;;;;;;;;KAgBnB;;;;;;;;;;;;;UAaK;WACC;WACA;WACA;WACA,aAAa;WACb,WAAW;WACX,aAAa;WACb,WAAW;;UAEZ,kBAAkB;;;;;;;;;EAS1B,sBAAsB;aACX;aACA,cAAc;aACd,UAAU,SAAS;aACnB,QAAQ;aACR;aACA,QAAQ;QACb,sBAAsB;EAC5B,cAAc;aACH;aACA,cAAc;aACd,QAAQ;aACR;iBACI;EACf,mBAAmB;aACR,QAAQ;aACR;QACL,QAAQ,eAAe;;;;;;;;;;EAU7B,wBAAwB,OAAO;;;;;;;;;;;;;;;EAe/B,gBAAgB,OAAO,YAAY,KAAK,+BAA+B;;UAE/D,8BAA8B,kCAAkC,kCAAkC;WACjG,wBAAwB;;;;;;;;;;;;WAYxB,gBAAgB,cAAc,SAAS;;UAExC,4BAA4B,kCAAkC,gCAAgC,WAAW,kBAAkB;WAC1H,wBAAwB;;UAEzB;WACC;WACA;;;;;;;;;WASA;WACA,OAAO;;;;;;;;;UASR;WACC;WACA;;UAED,gCAAgC;WAC/B;WACA,UAAU;;UAEX,0BAA0B,wBAAwB;WACjD;WACA,QAAQ,gCAAgC;WACxC,mBAAmB;WACnB,kBAAkB;WAClB,oBAAoB;WACpB,OAAO;;UAER;WACC;WACA;;UAED,iBAAiB,wBAAwB;;;;;;;;;;;;;;;WAexC;;;;;WAKA,SAAS;;;;WAIT,aAAa;WACb,sBAAsB,0BAA0B,kBAAkB,QAAQ,0BAA0B;;;;;;;;;WASpG;WACA,OAAO;;KAEb;UACK;WACC;WACA;WACA;WACA;WACA;WACA;WACA;;UAED,2BAA2B;WAC1B,MAAM;WACN,WAAW;WACX,OAAO;;UAER,wBAAwB,wBAAwB,KAAK;WACpD;WACA,MAAM,iBAAiB;;UAExB,gCAAgC,KAAK;WACpC;WACA,oBAAoB;;KAE1B,iBAAiB,kBAAkB,wBAAwB,kBAAkB;UACxE;WACC,UAAU,SAAS;;;;;;WAMnB,QAAQ;WACR,QAAQ;WACR;;;;;;;;WAQA;;;;;;;;;;;;;;WAcA,cAAc,SAAS;;WAEvB,QAAQ;;;;;WAKR,qBAAqB;;;;;;;WAOrB;;;;;;;WAOA,qBAAqB,cAAc;;;;;;;;;;WAUnC,YAAY;;UAEb,oBAAoB;EAC5B,KAAK,SAAS,iCAAiC,iBAAiB;;UAExD,mCAAmC;EAC3C,kBAAkB,WAAW,0BAA0B;EACvD,qBAAqB,WAAW,0BAA0B;;UAElD,iCAAiC;WAChC,MAAM,iBAAiB;WACvB,QAAQ;;;;;;;;WAQR;;;;;WAKA,qBAAqB,SAAS;;;;;WAK9B,QAAQ;WACR;WACA,YAAY,mCAAmC;WAC/C,UAAU;;;;;WAKV,kBAAkB;;;;;;;WAOlB,qBAAqB,cAAc;;;;;WAKnC,yBAAyB;;KAE/B;UACK,kCAAkC;WACjC,MAAM;WACN,OAAO;;UAER,uCAAuC;KAC5C,2BAA2B,OAAO,gCAAgC;UAC7D,mBAAmB;;;;;;;;;;;;;;EAc3B,QAAQ;aACG,QAAQ;aACR,iBAAiB,cAAc,iCAAiC;MACvE,QAAQ;;;;;;;;;;;EAWZ,oBAAoB,SAAS,iCAAiC,kBAAkB,QAAQ;;UAEhF,8BAA8B;WAC7B;;;;WAIA;WACA,SAAS;WACT,aAAa;WACb,qBAAqB,0BAA0B;;;;;;WAM/C;WACA,OAAO"}
1
+ {"version":3,"file":"types-DKU4GeqD-CUClXCme.d.mts","names":[],"sources":["../../../../2-sql/9-family/dist/types-DKU4GeqD.d.mts"],"mappings":";;;;;;;;;;;;;;;KAUK,YAAY,SAAS;UAChB,sBAAsB;WACrB,qBAAqB,0BAA0B;;;;;;;;;UAShD;;WAEC;WACA;WACA,aAAa;;;;;;;;;;;;;;;;KAgBnB;;;;;;;;;;;;;UAaK;WACC;WACA;WACA;WACA,aAAa;WACb,WAAW;WACX,aAAa;WACb,WAAW;;UAEZ,kBAAkB;;;;;;;;;EAS1B,sBAAsB;aACX;aACA,cAAc;aACd,UAAU,SAAS;aACnB,QAAQ;aACR;aACA,QAAQ;QACb,sBAAsB;EAC5B,cAAc;aACH;aACA,cAAc;aACd,QAAQ;aACR;iBACI;EACf,mBAAmB;aACR,QAAQ;aACR;QACL,QAAQ,eAAe;;;;;;;;;;EAU7B,wBAAwB,OAAO;;;;;;;;;;;;;;;EAe/B,gBAAgB,OAAO,YAAY,KAAK,+BAA+B;;UAE/D,8BAA8B,kCAAkC,kCAAkC;WACjG,wBAAwB;;;;;;;;;;;;WAYxB,gBAAgB,cAAc,SAAS;;UAExC,4BAA4B,kCAAkC,gCAAgC,WAAW,kBAAkB;WAC1H,wBAAwB;;UAEzB;WACC;WACA;;;;;;;;;WASA;WACA,OAAO;;;;;;;;;UASR;WACC;WACA;;UAED,gCAAgC;WAC/B;WACA,UAAU;;UAEX,0BAA0B,wBAAwB;WACjD;WACA,QAAQ,gCAAgC;WACxC,mBAAmB;WACnB,kBAAkB;WAClB,oBAAoB;WACpB,OAAO;;UAER;WACC;WACA;;UAED,iBAAiB,wBAAwB;;;;;;;;;;;;;;;WAexC;;;;;WAKA,SAAS;;;;WAIT,aAAa;WACb,sBAAsB,0BAA0B,kBAAkB,QAAQ,0BAA0B;;;;;;;;;WASpG;WACA,OAAO;;KAEb;UACK;WACC;WACA;WACA;WACA;WACA;WACA;WACA;;UAED,2BAA2B;WAC1B,MAAM;WACN,WAAW;WACX,OAAO;;UAER,wBAAwB,wBAAwB,KAAK;WACpD;WACA,MAAM,iBAAiB;;UAExB,gCAAgC,KAAK;WACpC;WACA,oBAAoB;;KAE1B,iBAAiB,kBAAkB,wBAAwB,kBAAkB;UACxE;WACC,UAAU,SAAS;;;;;;WAMnB,QAAQ;WACR,QAAQ;WACR;;;;;;;;WAQA;;;;;;;;;;;;;;WAcA,cAAc,SAAS;;WAEvB,QAAQ;;;;;WAKR,qBAAqB;;;;;;;WAOrB;;;;;;;WAOA,qBAAqB,cAAc;;;;;;;;;;WAUnC,YAAY;;UAEb,oBAAoB;EAC5B,KAAK,SAAS,iCAAiC,iBAAiB;;UAExD,mCAAmC;EAC3C,kBAAkB,WAAW,0BAA0B;EACvD,qBAAqB,WAAW,0BAA0B;;UAElD,iCAAiC;WAChC,MAAM,iBAAiB;WACvB,QAAQ;;;;;;;;WAQR;;;;;WAKA,qBAAqB,SAAS;;;;;WAK9B,QAAQ;WACR;WACA,YAAY,mCAAmC;WAC/C,UAAU;;;;;WAKV,kBAAkB;;;;;;;WAOlB,qBAAqB,cAAc;;;;;WAKnC,yBAAyB;;KAE/B;UACK,kCAAkC;WACjC,MAAM;WACN,OAAO;;UAER,uCAAuC;KAC5C,2BAA2B,OAAO,gCAAgC;UAC7D,mBAAmB;;;;;;;;;;;;;;EAc3B,QAAQ;aACG,QAAQ;aACR,iBAAiB,cAAc,iCAAiC;MACvE,QAAQ;;;;;;;;;;;EAWZ,oBAAoB,SAAS,iCAAiC,kBAAkB,QAAQ;;UAEhF,8BAA8B;WAC7B;;;;WAIA;WACA,SAAS;WACT,aAAa;WACb,qBAAqB,0BAA0B;;;;;;WAM/C;WACA,OAAO"}
@@ -2,11 +2,12 @@ import { f as normalizeIndexOptionValue, l as nameOf } from "./naming-bM5qm5PY-D
2
2
  import { ifDefined } from "@prisma/orm-framework/utils/defined";
3
3
  import { IRNodeBase, freezeNode } from "@prisma/orm-framework/components/ir";
4
4
  import { dataTypeValuesEqual } from "@prisma/orm-framework/components/codec";
5
+ import { canonicalizeJson } from "@prisma/orm-framework/components/utils";
5
6
  import { blindCast } from "@prisma/orm-framework/utils/casts";
6
7
  import { InternalError } from "@prisma/orm-framework/utils/internal-error";
7
8
  import { canonicalStringify } from "@prisma/orm-framework/utils/canonical-stringify";
8
9
  import { isArrayEqual } from "@prisma/orm-framework/utils/array-equal";
9
- //#region ../../../2-sql/1-core/schema-ir/dist/types-CfPB-Kz_.mjs
10
+ //#region ../../../2-sql/1-core/schema-ir/dist/types-egs_vme1.mjs
10
11
  /**
11
12
  * The `nodeKind` discriminant for each relational schema-diff leaf node.
12
13
  * Each node carries a unique value; the differ pairs siblings by `id`, and
@@ -258,7 +259,6 @@ var SqlColumnDefaultIR = class SqlColumnDefaultIR extends SqlSchemaIRNode {
258
259
  defineNonEnumerable(this, "expressionValue", input.expressionValue);
259
260
  defineNonEnumerable(this, "many", input.many);
260
261
  defineNonEnumerable(this, "codecRef", input.codecRef);
261
- defineNonEnumerable(this, "codecBaseNativeType", input.codecBaseNativeType);
262
262
  defineNonEnumerable(this, "sqlExpressionLiteralFor", input.sqlExpressionLiteralFor);
263
263
  freezeNode(this);
264
264
  }
@@ -365,32 +365,28 @@ function comparableExpression(expression) {
365
365
  *
366
366
  * Implements `DiffableNode` so a column is directly a table's diff-tree
367
367
  * child: `id` is the column name (unique among a table's columns); `isEqualTo`
368
- * compares this column's own attributes only — never children, since a
369
- * column is a leaf. When both sides carry `resolvedNativeType` (stamped at
370
- * derivation/introspection), the comparison uses the resolved values —
371
- * resolved native type, nullability, and structured default equality per
372
- * the relational walk's `columnDefaultsEqual` semantics, with `this` as the
373
- * expected side. Otherwise it falls back to comparing raw fields.
368
+ * compares this column's own attributes only, never its default, which is a
369
+ * child node: the type by {@link sqlColumnTypesEqual}, and nullability.
374
370
  */
375
371
  var SqlColumnIR = class SqlColumnIR extends SqlSchemaIRNode {
376
372
  nodeKind = RelationalSchemaNodeKind.column;
377
373
  name;
378
- nativeType;
374
+ /** See {@link SqlColumnIRInput.typeText}. */
375
+ typeText;
379
376
  nullable;
380
377
  constructor(input) {
381
378
  super();
382
379
  this.name = input.name;
383
- this.nativeType = input.nativeType;
380
+ this.typeText = input.typeText;
384
381
  this.nullable = input.nullable;
385
382
  if (input.default !== void 0) this.default = input.default;
386
383
  if (input.annotations !== void 0) this.annotations = input.annotations;
387
384
  if (input.many !== void 0) this.many = input.many;
388
- if (input.resolvedNativeType !== void 0) this.resolvedNativeType = input.resolvedNativeType;
389
385
  if (input.resolvedDefault !== void 0) this.resolvedDefault = input.resolvedDefault;
390
386
  defineNonEnumerable(this, "authoredDefault", input.authoredDefault);
391
387
  defineNonEnumerable(this, "codecRef", input.codecRef);
392
- defineNonEnumerable(this, "codecBaseNativeType", input.codecBaseNativeType);
393
- defineNonEnumerable(this, "dataType", input.dataType);
388
+ defineNonEnumerable(this, "storedType", input.storedType);
389
+ defineNonEnumerable(this, "storedTypeParams", input.storedTypeParams);
394
390
  defineNonEnumerable(this, "defaultValue", input.defaultValue);
395
391
  defineNonEnumerable(this, "defaultUnreadable", input.defaultUnreadable);
396
392
  defineNonEnumerable(this, "defaultExpressionValue", input.defaultExpressionValue);
@@ -418,27 +414,59 @@ var SqlColumnIR = class SqlColumnIR extends SqlSchemaIRNode {
418
414
  ...ifDefined("expressionValue", this.defaultExpressionValue),
419
415
  ...ifDefined("many", this.many ?? this.codecRef?.many),
420
416
  ...ifDefined("codecRef", this.codecRef),
421
- ...ifDefined("codecBaseNativeType", this.codecBaseNativeType),
422
417
  ...ifDefined("sqlExpressionLiteralFor", this.sqlExpressionLiteralFor)
423
418
  })];
424
419
  }
420
+ /** This column under another name, with every other field as it is. */
421
+ withName(name) {
422
+ const fields = Object.fromEntries(Object.getOwnPropertyNames(this).map((key) => [key, Reflect.get(this, key)]));
423
+ return new SqlColumnIR({
424
+ ...blindCast(fields),
425
+ name
426
+ });
427
+ }
425
428
  static is(node) {
426
429
  return node.nodeKind === RelationalSchemaNodeKind.column;
427
430
  }
428
431
  /**
429
- * Compares the column's own attributes only — the default lives on the
430
- * child node. When both sides carry `resolvedNativeType`, the resolved
431
- * value governs (array-ness rides on its `[]` suffix); otherwise raw
432
- * fields compare.
432
+ * Compares the column's own attributes only — the default lives on the child node: the type, by {@link sqlColumnTypesEqual}, and nullability.
433
433
  */
434
434
  isEqualTo(other) {
435
435
  const node = blindCast(other);
436
436
  assertNode(node, "SqlColumnIR", SqlColumnIR.is);
437
- if (this.resolvedNativeType !== void 0 && node.resolvedNativeType !== void 0) return this.resolvedNativeType === node.resolvedNativeType && this.nullable === node.nullable;
438
- return this.nativeType === node.nativeType && this.nullable === node.nullable && Boolean(this.many) === Boolean(node.many);
437
+ return sqlColumnTypesEqual(this, node) && this.nullable === node.nullable;
438
+ }
439
+ /** Why `actual` is not this column: the two types as written and reported, or the nullability of each. The two sides always hold different values. */
440
+ explainMismatch(actual) {
441
+ if (actual === void 0) return void 0;
442
+ const node = blindCast(actual);
443
+ assertNode(node, "SqlColumnIR", SqlColumnIR.is);
444
+ if (node.storedType === void 0 && node.reportedType !== void 0) return differs(node.typeText === "" ? "The database column has no declared type." : `The database column is ${shownTypeOf(node)}, which no data type in the configured stack declares.`);
445
+ if (!sqlColumnTypesEqual(this, node)) return differs(`The contract column is ${shownTypeOf(this)} and the database column is ${shownTypeOf(node)}.`);
446
+ if (this.nullable !== node.nullable) return differs(`The contract column is ${nullability(this)} and the database column is ${nullability(node)}.`);
439
447
  }
440
448
  };
441
449
  /**
450
+ * Whether two columns have the same type: both have a stored type, the two are one data type, their parameters are equal as canonical JSON, and both or neither are lists. A column no data type claims has no stored type and never has the same type as another. ADR 254.
451
+ */
452
+ function sqlColumnTypesEqual(a, b) {
453
+ return a.storedType !== void 0 && b.storedType !== void 0 && a.storedType.id === b.storedType.id && canonicalizeJson(a.storedTypeParams ?? {}) === canonicalizeJson(b.storedTypeParams ?? {}) && Boolean(a.many) === Boolean(b.many);
454
+ }
455
+ /** The column's type as the contract writes it, or as introspection gives it, with `[]` for a list, in double quotes unless the text has double quotes of its own, as `"char"` does. */
456
+ function shownTypeOf(column) {
457
+ const text = `${column.typeText}${column.many === true ? "[]" : ""}`;
458
+ return text.includes("\"") ? text : `"${text}"`;
459
+ }
460
+ function differs(text) {
461
+ return {
462
+ text,
463
+ cause: "differs"
464
+ };
465
+ }
466
+ function nullability(column) {
467
+ return column.nullable ? "nullable" : "not nullable";
468
+ }
469
+ /**
442
470
  * Schema IR node for a foreign-key constraint as observed by
443
471
  * introspection. The `referencedTable` / `referencedColumns` field
444
472
  * names match the introspection vocabulary (`pg_constraint.confkey`,
@@ -768,6 +796,6 @@ var SqlSchemaIR = class extends SqlSchemaIRNode {
768
796
  }
769
797
  };
770
798
  //#endregion
771
- export { SqlColumnIR as a, SqlSchemaIR as c, SqlUniqueIR as d, assertNode as f, sqlDefaultValuesEqual as g, relationalNodeGranularity as h, SqlColumnDefaultIR as i, SqlSchemaIRNode as l, relationalNodeEntityKind as m, RelationalSchemaNodeKind as n, SqlForeignKeyIR as o, defineNonEnumerable as p, SqlCheckConstraintIR as r, SqlIndexIR as s, PrimaryKey as t, SqlTableIR as u };
799
+ export { sqlDefaultValuesEqual as _, SqlColumnIR as a, SqlSchemaIR as c, SqlUniqueIR as d, assertNode as f, sqlColumnTypesEqual as g, relationalNodeGranularity as h, SqlColumnDefaultIR as i, SqlSchemaIRNode as l, relationalNodeEntityKind as m, RelationalSchemaNodeKind as n, SqlForeignKeyIR as o, defineNonEnumerable as p, SqlCheckConstraintIR as r, SqlIndexIR as s, PrimaryKey as t, SqlTableIR as u };
772
800
 
773
- //# sourceMappingURL=types-CfPB-Kz_-ByWDfwMj.mjs.map
801
+ //# sourceMappingURL=types-egs_vme1-DRhYFwIT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-egs_vme1-DRhYFwIT.mjs","names":[],"sources":["../../../../2-sql/1-core/schema-ir/dist/types-egs_vme1.mjs"],"sourcesContent":["import { f as normalizeIndexOptionValue, l as nameOf } from \"./naming-bM5qm5PY.mjs\";\nimport { IRNodeBase, freezeNode } from \"@internal/framework-components/ir\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { canonicalStringify } from \"@internal/utils/canonical-stringify\";\nimport { dataTypeValuesEqual } from \"@internal/framework-components/codec\";\nimport { canonicalizeJson } from \"@internal/framework-components/utils\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { isArrayEqual } from \"@internal/utils/array-equal\";\n//#region src/ir/schema-node-kinds.ts\n/**\n* The `nodeKind` discriminant for each relational schema-diff leaf node.\n* Each node carries a unique value; the differ pairs siblings by `id`, and\n* these kinds distinguish the node types that appear as `PostgresTableSchemaNode`\n* children (columns, primary key, foreign keys, uniques, indexes, checks) from\n* each other and from the RLS policy/role kinds a target defines separately.\n*/\nconst RelationalSchemaNodeKind = {\n\tschema: \"sql-schema\",\n\ttable: \"sql-table\",\n\tcolumn: \"sql-column\",\n\tcolumnDefault: \"sql-column-default\",\n\tprimaryKey: \"sql-primary-key\",\n\tforeignKey: \"sql-foreign-key\",\n\tunique: \"sql-unique\",\n\tindex: \"sql-index\",\n\tcheck: \"sql-check-constraint\"\n};\n/**\n* The one real map from a relational `nodeKind` to the framework-neutral\n* {@link DiffSubjectGranularity} its diff issues carry — the SQL family's\n* post-diff filters (issue category, strict-mode gating) and the framework\n* aggregate's unclaimed-elements sweep key on the granularity, never on the\n* `nodeKind` spelling and never on anything stamped on the node. Resolution\n* is by `nodeKind` equality against this map, not a suffix string match.\n* Target-specific node kinds (Postgres namespace/table/policy/role) are\n* outside this family layer's vocabulary and map their own kinds directly.\n*/\nconst RELATIONAL_NODE_GRANULARITY = {\n\t[RelationalSchemaNodeKind.schema]: \"structural\",\n\t[RelationalSchemaNodeKind.table]: \"entity\",\n\t[RelationalSchemaNodeKind.column]: \"field\",\n\t[RelationalSchemaNodeKind.columnDefault]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.primaryKey]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.foreignKey]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.unique]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.index]: \"auxiliary\",\n\t[RelationalSchemaNodeKind.check]: \"auxiliary\"\n};\nfunction isRelationalSchemaNodeKind(nodeKind) {\n\treturn Object.hasOwn(RELATIONAL_NODE_GRANULARITY, nodeKind);\n}\n/**\n* Looks up the subject granularity for a relational `nodeKind`. Throws for a\n* `nodeKind` outside this map (a target-specific kind, e.g. Postgres's\n* namespace/table/policy/role) — those map their own kinds directly rather\n* than through this family-level map.\n*/\nfunction relationalNodeGranularity(nodeKind) {\n\tif (!isRelationalSchemaNodeKind(nodeKind)) throw new InternalError(`relationalNodeGranularity: unrecognized relational node kind \"${nodeKind}\"`);\n\treturn RELATIONAL_NODE_GRANULARITY[nodeKind];\n}\n/**\n* The one real map from a relational `nodeKind` to its storage `entityKind`\n* — the same vocabulary the contract storage's `entries` dictionary keys use\n* (`elementCoordinates` walks it). Only the whole-table kind has an entity of\n* its own; every other relational node (a column, an index, …) is nested\n* under one and maps to nothing here.\n*/\nconst RELATIONAL_NODE_ENTITY_KIND = { [RelationalSchemaNodeKind.table]: \"table\" };\n/**\n* Looks up the storage `entityKind` for a relational `nodeKind` — sibling of\n* {@link relationalNodeGranularity}, resolved by `nodeKind` equality against\n* {@link RELATIONAL_NODE_ENTITY_KIND}. `undefined` for a target-specific kind\n* (targets map their own kinds directly) or a relational kind with no entity\n* of its own.\n*/\nfunction relationalNodeEntityKind(nodeKind) {\n\treturn isRelationalSchemaNodeKind(nodeKind) ? RELATIONAL_NODE_ENTITY_KIND[nodeKind] : void 0;\n}\n//#endregion\n//#region src/ir/sql-schema-ir-node.ts\n/**\n* SQL Schema IR node base. Carries the family-level\n* `kind = 'sql-schema-ir'` discriminator and inherits the framework's\n* `freezeNode` affordance.\n*\n* SQL Schema IR represents the actual database state as discovered by\n* introspection (the parallel to SQL Contract IR, which represents the\n* desired state).\n*\n* The discriminator is installed as a non-enumerable own property,\n* matching the SqlNode pattern. This keeps `JSON.stringify(node)`\n* canonical (no `kind` field), keeps `toEqual({...})` test assertions\n* against pre-lift flat shapes passing, and keeps `node.kind` readable\n* for dispatch.\n*\n* Both `kind` and `nodeKind` are required: every concrete leaf is a node\n* the generic differ can pair and compare, so every leaf must declare which\n* node it is. `nodeKind` has no default here — every direct subclass sets its\n* own literal value (the relational leaves via `RelationalSchemaNodeKind`,\n* target concretions via their own vocabulary, e.g. `PostgresSchemaNodeKind`).\n*/\nvar SqlSchemaIRNode = class extends IRNodeBase {\n\tconstructor() {\n\t\tsuper();\n\t\tObject.defineProperty(this, \"kind\", {\n\t\t\tvalue: \"sql-schema-ir\",\n\t\t\twritable: false,\n\t\t\tenumerable: false,\n\t\t\tconfigurable: false\n\t\t});\n\t}\n};\n/**\n* Asserts `node` matches `predicate`, narrowing its type to `T`. The one\n* shared implementation every node class's `static assert` and `isEqualTo`\n* reach for, instead of each hand-writing its own throw: the message names\n* the class the caller expected.\n*/\nfunction assertNode(node, className, predicate) {\n\tif (node === void 0 || !predicate(node)) throw new InternalError(`Expected a ${className} but got nodeKind=${node?.nodeKind ?? \"undefined\"}`);\n}\n/**\n* Defines a non-enumerable own property, the same treatment `kind` gets\n* above: a derivation-time render-support field stays out of\n* `JSON.stringify`, `toEqual({...})` structural assertions, and spreads,\n* while remaining directly readable (`node.field`) for the one consumer\n* that resolves it at plan time. A no-op when `value` is `undefined` — the\n* property is simply absent, matching every other optional field on these\n* nodes.\n*/\nfunction defineNonEnumerable(target, key, value) {\n\tif (value === void 0) return;\n\tObject.defineProperty(target, key, {\n\t\tvalue,\n\t\tenumerable: false,\n\t\twritable: false,\n\t\tconfigurable: false\n\t});\n}\n//#endregion\n//#region src/ir/primary-key.ts\n/**\n* Primary-key Schema IR node. Mirrors the Contract IR `PrimaryKey`\n* shape (same `columns` + optional `name`) so verification can compare\n* intent and actual structurally. Defined here independently to avoid\n* a sql-schema-ir -> sql-contract dependency.\n*\n* Implements `DiffableNode` so a primary key is directly a table's diff-tree\n* child. `id` is a fixed sentinel — a table has at most one primary key, so\n* there is never a sibling to disambiguate against. `isEqualTo` compares the\n* column tuple; the PK's own `name` is a database-assigned label with no\n* semantic weight, so it is not compared (mirrors the policy node's\n* name-insensitivity to non-identifying detail).\n*/\nvar PrimaryKey = class PrimaryKey extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.primaryKey;\n\tcolumns;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.columns = input.columns;\n\t\tif (input.name !== void 0) this.name = input.name;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn \"primary-key\";\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic from(value) {\n\t\treturn value instanceof PrimaryKey ? value : new PrimaryKey(value);\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.primaryKey;\n\t}\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"PrimaryKey\", PrimaryKey.is);\n\t\treturn this.columns.length === node.columns.length && this.columns.every((c, i) => c === node.columns[i]);\n\t}\n};\n//#endregion\n//#region src/ir/sql-check-constraint-ir.ts\n/**\n* Schema IR node for a table-level check constraint, carried as an opaque\n* predicate. The expression is never parsed — a database reprints predicates\n* in its own normalized form, so any structured reading of it would drift.\n*\n* Implements `DiffableNode` so a check is directly a table's diff-tree child;\n* `id` is `check:<name>`. `isEqualTo` is mode-selected by the receiver's\n* `prefix` (the differ always calls `expected.isEqualTo(actual)`): a\n* wire-named receiver compares ids only — the wire name's hash already\n* commits to the predicate — while an exact-named receiver byte-compares the\n* expression, which is reliable precisely when both sides came from the same\n* reprint.\n*/\nvar SqlCheckConstraintIR = class SqlCheckConstraintIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.check;\n\tname;\n\texpression;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.name = nameOf(input.naming);\n\t\tif (input.naming.kind === \"wire\") this.prefix = input.naming.prefix;\n\t\tthis.expression = input.expression;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn `check:${this.name}`;\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic from(value) {\n\t\treturn value instanceof SqlCheckConstraintIR ? value : new SqlCheckConstraintIR(value);\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.check;\n\t}\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlCheckConstraintIR\", SqlCheckConstraintIR.is);\n\t\tif (this.prefix !== void 0) return this.id === node.id;\n\t\treturn this.expression === node.expression;\n\t}\n};\n//#endregion\n//#region src/ir/sql-default-value.ts\nfunction isList(value) {\n\treturn Array.isArray(value);\n}\n/** Whether two defaults are one value: the same type, parameters and value, element by element for a list. */\nfunction sqlDefaultValuesEqual(a, b) {\n\tif (!isList(a) || !isList(b)) return !isList(a) && !isList(b) && dataTypeValuesEqual(a, b);\n\treturn a.length === b.length && a.every((element, index) => {\n\t\tconst other = b[index];\n\t\tif (element === null || other === null || other === void 0) return element === other;\n\t\treturn dataTypeValuesEqual(element, other);\n\t});\n}\n//#endregion\n//#region src/ir/sql-column-default-ir.ts\n/**\n* Schema-diff node for a column's default value. The default is the one\n* column attribute with an extra/missing/drift lifecycle of its own, so it\n* is a child node of the column rather than a compared attribute: an\n* undeclared live default surfaces as `not-expected`, a declared default the\n* database lacks as `not-found`, and a divergent value as `not-equal` — the\n* three reasons cover the legacy `extra_default` / `default_missing` /\n* `default_mismatch` vocabulary with no attribute inspection.\n*\n* `id` is a fixed sentinel — a column has at most one default. Built\n* transiently by `SqlColumnIR.children()` from the column's own fields;\n* never constructed by derivation or introspection directly.\n*/\nvar SqlColumnDefaultIR = class SqlColumnDefaultIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.columnDefault;\n\tconstructor(input) {\n\t\tsuper();\n\t\tif (input.resolved !== void 0) this.resolved = input.resolved;\n\t\tif (input.raw !== void 0) this.raw = input.raw;\n\t\tdefineNonEnumerable(this, \"authored\", input.authored);\n\t\tdefineNonEnumerable(this, \"value\", input.value);\n\t\tdefineNonEnumerable(this, \"unreadable\", input.unreadable);\n\t\tdefineNonEnumerable(this, \"expressionValue\", input.expressionValue);\n\t\tdefineNonEnumerable(this, \"many\", input.many);\n\t\tdefineNonEnumerable(this, \"codecRef\", input.codecRef);\n\t\tdefineNonEnumerable(this, \"sqlExpressionLiteralFor\", input.sqlExpressionLiteralFor);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn \"default\";\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.columnDefault;\n\t}\n\t/**\n\t* Compares with `this` as the expected side. Two literals compare as values of the column's type\n\t* when both sides hold one, and as canonical JSON otherwise; a `Date` the column's codec could not\n\t* read into a value equals nothing. Two expressions compare as text, with\n\t* case and whitespace ignored outside quotes. An expected expression that writes a literal, read by\n\t* the column's codec during introspection, matches a reported literal when the two values are\n\t* equal; when the codec could not read one of them, it compares with the reported text. A resolved\n\t* side against a raw-only side is a mismatch; two raw-only nodes compare their text.\n\t*/\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlColumnDefaultIR\", SqlColumnDefaultIR.is);\n\t\tconst expected = this.resolved;\n\t\tconst actual = node.resolved;\n\t\tif (expected?.kind === \"function\" && actual === void 0) return node.raw !== void 0 && sameExpression(expected.expression, node.raw);\n\t\tif (expected === void 0 || actual === void 0) return expected === actual && this.raw === node.raw;\n\t\tif (expected.kind === \"function\") {\n\t\t\tif (actual.kind === \"function\") return sameExpression(expected.expression, actual.expression);\n\t\t\tif (node.value !== void 0 && node.expressionValue !== void 0) return sqlDefaultValuesEqual(node.expressionValue, node.value);\n\t\t\treturn node.raw !== void 0 && sameExpression(expected.expression, node.raw);\n\t\t}\n\t\tif (actual.kind !== \"literal\") return false;\n\t\tif (this.value !== void 0 && node.value !== void 0) return sqlDefaultValuesEqual(this.value, node.value);\n\t\tif (expected.value instanceof Date || actual.value instanceof Date) return false;\n\t\treturn canonicalStringify(expected.value) === canonicalStringify(actual.value);\n\t}\n\t/**\n\t* For two default expressions, the text the database reads back, since it may store an expression\n\t* in a form of its own. Otherwise why the column's codec could not read the database's default, or\n\t* the value each side holds.\n\t*/\n\texplainMismatch(actual) {\n\t\tif (!(actual instanceof SqlColumnDefaultIR)) return void 0;\n\t\tif (actual.unreadable !== void 0) return {\n\t\t\ttext: actual.unreadable,\n\t\t\tcause: \"differs\"\n\t\t};\n\t\treturn this.storedExpressionForm(actual) ?? {\n\t\t\ttext: `The contract holds ${describeDefault(this)}, and the database holds ${describeDefault(actual)}.`,\n\t\t\tcause: \"differs\"\n\t\t};\n\t}\n\tstoredExpressionForm(actual) {\n\t\tif (this.resolved?.kind !== \"function\" || actual.resolved?.kind !== \"function\") return void 0;\n\t\tconst literalFor = this.sqlExpressionLiteralFor;\n\t\tconst shown = (text) => literalFor?.(text) ?? JSON.stringify(text);\n\t\tconst stored = actual.raw ?? actual.resolved.expression;\n\t\tconst written = literalFor === void 0 ? stored : [stored, actual.resolved.expression].find((text) => literalFor(text) !== void 0);\n\t\tconst advice = written === void 0 ? \"No `sql` literal writes that text unchanged, so change the default's SQL in the contract until the database stores it as written.\" : `If they do, write the default as ${shown(written)}.`;\n\t\treturn {\n\t\t\ttext: `The database reads this default back as ${shown(written ?? stored)}; the contract declares ${shown(this.resolved.expression)}. The database may store a default expression in its own form, so the two can mean the same. ${advice}`,\n\t\t\tcause: \"possibly-equivalent\"\n\t\t};\n\t}\n};\n/** A default as a person reads it: a literal as JSON, the value its type read when there is one, an expression as its text, and the text the database reports beside a value read from it. */\nfunction describeDefault(node) {\n\tconst resolved = node.resolved;\n\tif (resolved === void 0) return node.raw ?? \"no default\";\n\tif (resolved.kind === \"function\") return resolved.expression;\n\tconst shown = JSON.stringify(node.value === void 0 ? resolved.value : jsonOfDefaultValue(node.value));\n\treturn node.raw === void 0 || node.raw === shown ? shown : `${shown} (${node.raw})`;\n}\nfunction isDefaultList(value) {\n\treturn Array.isArray(value);\n}\nfunction jsonOfDefaultValue(value) {\n\treturn isDefaultList(value) ? value.map((element) => element === null ? null : element.value) : value.value;\n}\nfunction sameExpression(a, b) {\n\treturn comparableExpression(a) === comparableExpression(b);\n}\n/** The expression with case and whitespace dropped outside quotes; a quoted literal or identifier keeps both, since they change what it means. */\nfunction comparableExpression(expression) {\n\tlet result = \"\";\n\tlet quote;\n\tfor (const char of expression) if (quote !== void 0) {\n\t\tresult += char;\n\t\tif (char === quote) quote = void 0;\n\t} else if (char === \"'\" || char === \"\\\"\") {\n\t\tquote = char;\n\t\tresult += char;\n\t} else if (!/\\s/.test(char)) result += char.toLowerCase();\n\treturn result;\n}\n//#endregion\n//#region src/ir/sql-column-ir.ts\n/**\n* Schema IR node for a single column on a table, as observed by\n* introspection. Unlike the Contract IR `StorageColumn`, this carries\n* the column's `name` (Schema IR columns are returned as arrays from\n* introspection queries; the parent table re-keys them into a record\n* for downstream consumers).\n*\n* Implements `DiffableNode` so a column is directly a table's diff-tree\n* child: `id` is the column name (unique among a table's columns); `isEqualTo`\n* compares this column's own attributes only, never its default, which is a\n* child node: the type by {@link sqlColumnTypesEqual}, and nullability.\n*/\nvar SqlColumnIR = class SqlColumnIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.column;\n\tname;\n\t/** See {@link SqlColumnIRInput.typeText}. */\n\ttypeText;\n\tnullable;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.name = input.name;\n\t\tthis.typeText = input.typeText;\n\t\tthis.nullable = input.nullable;\n\t\tif (input.default !== void 0) this.default = input.default;\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tif (input.many !== void 0) this.many = input.many;\n\t\tif (input.resolvedDefault !== void 0) this.resolvedDefault = input.resolvedDefault;\n\t\tdefineNonEnumerable(this, \"authoredDefault\", input.authoredDefault);\n\t\tdefineNonEnumerable(this, \"codecRef\", input.codecRef);\n\t\tdefineNonEnumerable(this, \"storedType\", input.storedType);\n\t\tdefineNonEnumerable(this, \"storedTypeParams\", input.storedTypeParams);\n\t\tdefineNonEnumerable(this, \"defaultValue\", input.defaultValue);\n\t\tdefineNonEnumerable(this, \"defaultUnreadable\", input.defaultUnreadable);\n\t\tdefineNonEnumerable(this, \"defaultExpressionValue\", input.defaultExpressionValue);\n\t\tdefineNonEnumerable(this, \"sqlExpressionLiteralFor\", input.sqlExpressionLiteralFor);\n\t\tdefineNonEnumerable(this, \"reportedType\", input.reportedType);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn `column:${this.name}`;\n\t}\n\t/**\n\t* The column's default, when declared/present, is the column's one child\n\t* node — it has an extra/missing/drift lifecycle of its own, so the differ\n\t* recurses to it rather than `isEqualTo` comparing it. Built transiently\n\t* from this column's own fields.\n\t*/\n\tchildren() {\n\t\tif (this.resolvedDefault === void 0 && this.default === void 0) return [];\n\t\treturn [new SqlColumnDefaultIR({\n\t\t\t...ifDefined(\"resolved\", this.resolvedDefault),\n\t\t\t...ifDefined(\"raw\", this.default),\n\t\t\t...ifDefined(\"authored\", this.authoredDefault),\n\t\t\t...ifDefined(\"value\", this.defaultValue),\n\t\t\t...ifDefined(\"unreadable\", this.defaultUnreadable),\n\t\t\t...ifDefined(\"expressionValue\", this.defaultExpressionValue),\n\t\t\t...ifDefined(\"many\", this.many ?? this.codecRef?.many),\n\t\t\t...ifDefined(\"codecRef\", this.codecRef),\n\t\t\t...ifDefined(\"sqlExpressionLiteralFor\", this.sqlExpressionLiteralFor)\n\t\t})];\n\t}\n\t/** This column under another name, with every other field as it is. */\n\twithName(name) {\n\t\tconst fields = Object.fromEntries(Object.getOwnPropertyNames(this).map((key) => [key, Reflect.get(this, key)]));\n\t\treturn new SqlColumnIR({\n\t\t\t...blindCast(fields),\n\t\t\tname\n\t\t});\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.column;\n\t}\n\t/**\n\t* Compares the column's own attributes only — the default lives on the child node: the type, by {@link sqlColumnTypesEqual}, and nullability.\n\t*/\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlColumnIR\", SqlColumnIR.is);\n\t\treturn sqlColumnTypesEqual(this, node) && this.nullable === node.nullable;\n\t}\n\t/** Why `actual` is not this column: the two types as written and reported, or the nullability of each. The two sides always hold different values. */\n\texplainMismatch(actual) {\n\t\tif (actual === void 0) return void 0;\n\t\tconst node = blindCast(actual);\n\t\tassertNode(node, \"SqlColumnIR\", SqlColumnIR.is);\n\t\tif (node.storedType === void 0 && node.reportedType !== void 0) return differs(node.typeText === \"\" ? \"The database column has no declared type.\" : `The database column is ${shownTypeOf(node)}, which no data type in the configured stack declares.`);\n\t\tif (!sqlColumnTypesEqual(this, node)) return differs(`The contract column is ${shownTypeOf(this)} and the database column is ${shownTypeOf(node)}.`);\n\t\tif (this.nullable !== node.nullable) return differs(`The contract column is ${nullability(this)} and the database column is ${nullability(node)}.`);\n\t}\n};\n/**\n* Whether two columns have the same type: both have a stored type, the two are one data type, their parameters are equal as canonical JSON, and both or neither are lists. A column no data type claims has no stored type and never has the same type as another. ADR 254.\n*/\nfunction sqlColumnTypesEqual(a, b) {\n\treturn a.storedType !== void 0 && b.storedType !== void 0 && a.storedType.id === b.storedType.id && canonicalizeJson(a.storedTypeParams ?? {}) === canonicalizeJson(b.storedTypeParams ?? {}) && Boolean(a.many) === Boolean(b.many);\n}\n/** The column's type as the contract writes it, or as introspection gives it, with `[]` for a list, in double quotes unless the text has double quotes of its own, as `\"char\"` does. */\nfunction shownTypeOf(column) {\n\tconst text = `${column.typeText}${column.many === true ? \"[]\" : \"\"}`;\n\treturn text.includes(\"\\\"\") ? text : `\"${text}\"`;\n}\nfunction differs(text) {\n\treturn {\n\t\ttext,\n\t\tcause: \"differs\"\n\t};\n}\nfunction nullability(column) {\n\treturn column.nullable ? \"nullable\" : \"not nullable\";\n}\n//#endregion\n//#region src/ir/sql-foreign-key-ir.ts\n/**\n* Schema IR node for a foreign-key constraint as observed by\n* introspection. The `referencedTable` / `referencedColumns` field\n* names match the introspection vocabulary (`pg_constraint.confkey`,\n* etc.) and intentionally differ from the Contract IR's nested\n* `references: { table, columns }` shape so that the verifier's\n* structural comparison stays explicit about which side it's reading.\n*\n* Implements `DiffableNode` so a foreign key is directly a table's diff-tree\n* child. Foreign keys are frequently unnamed (introspection may not carry a\n* constraint name, and the contract side never invents one), so `id` is\n* derived from the referencing/referenced coordinates rather than `name` —\n* the same tuple that makes two FK constraints the same constraint. This\n* also serves as the comparison key: two FKs with the same coordinates are\n* paired by the differ, and `isEqualTo` then compares the remaining\n* attribute — the referential actions.\n*/\nvar SqlForeignKeyIR = class SqlForeignKeyIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.foreignKey;\n\tcolumns;\n\treferencedTable;\n\treferencedColumns;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.columns = input.columns;\n\t\tthis.referencedTable = input.referencedTable;\n\t\tthis.referencedColumns = input.referencedColumns;\n\t\tif (input.referencedSchema !== void 0) this.referencedSchema = input.referencedSchema;\n\t\tif (input.name !== void 0) this.name = input.name;\n\t\tif (input.onDelete !== void 0) this.onDelete = input.onDelete;\n\t\tif (input.onUpdate !== void 0) this.onUpdate = input.onUpdate;\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tconst resolvedReferencedNamespace = input.resolvedReferencedNamespace ?? input.referencedSchema;\n\t\tif (resolvedReferencedNamespace !== void 0) this.resolvedReferencedNamespace = resolvedReferencedNamespace;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\tconst referencedNamespace = this.resolvedReferencedNamespace ?? \"\";\n\t\treturn `foreign-key:${this.columns.join(\",\")}->${referencedNamespace}.${this.referencedTable}(${this.referencedColumns.join(\",\")})`;\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.foreignKey;\n\t}\n\t/**\n\t* Referential-action comparison with `this` as the expected side, matching\n\t* the relational walk's `getReferentialActionMismatches`: `noAction` is the\n\t* database default and equivalent to an undeclared action, and drift is\n\t* flagged only when the expected side declares a (normalized) action.\n\t*/\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlForeignKeyIR\", SqlForeignKeyIR.is);\n\t\treturn referentialActionMatches(this.onDelete, node.onDelete) && referentialActionMatches(this.onUpdate, node.onUpdate);\n\t}\n};\nfunction referentialActionMatches(expected, actual) {\n\tconst normalizedExpected = expected === \"noAction\" ? void 0 : expected;\n\tif (normalizedExpected === void 0) return true;\n\treturn normalizedExpected === (actual === \"noAction\" ? void 0 : actual);\n}\n//#endregion\n//#region src/ir/sql-index-ir.ts\n/**\n* Schema IR node for a secondary index as observed by introspection.\n* Unlike the Contract IR `Index`, the Schema IR carries an explicit\n* `unique` field — introspection sees the underlying index regardless\n* of whether the user expressed it as `@@index` or `@@unique`, and the\n* verifier needs to distinguish them when comparing to the Contract.\n*\n* Implements `DiffableNode` so an index is directly a table's diff-tree\n* child. Indexes are name-identified: every index — contract-derived or\n* introspected — carries its full physical name, and `id` is that name.\n* Names are catalog-unique per schema, so two indexes legitimately sharing\n* one column tuple (a unique index beside a redundant plain index) are two\n* distinct siblings, and expression indexes need no column tuple at all.\n*\n* `isEqualTo` is selected by the receiver (the differ always calls\n* `expected.isEqualTo(actual)`) and delegates to {@link contentEquals} —\n* the single node-owned content relation: both modes compare `unique`\n* strict, `type` and option values through the named normalization seams,\n* and `columns` ordered-strict when both sides carry them; an exact-named\n* receiver (`prefix === undefined`) additionally byte-compares\n* `expression`/`where` (both sides are reprints in the supported flow —\n* normalizing would only mask real drift); a wire-named receiver never\n* compares bodies (the wire-name hash already commits to them).\n*\n* `expression`, `where`, and `unique` are genuine SQL-family attributes —\n* functional and partial indexes are standard SQL that any SQL target may\n* introspect, so the family node must represent them; a target declining\n* to author them is a capability decision, not target-specificity.\n*/\nvar SqlIndexIR = class SqlIndexIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.index;\n\tname;\n\tunique;\n\tconstructor(input) {\n\t\tsuper();\n\t\tconst name = nameOf(input.naming);\n\t\tif (input.columns === void 0 === (input.expression === void 0)) throw new InternalError(`SqlIndexIR \"${name}\": exactly one of columns or expression must be set.`);\n\t\tthis.name = name;\n\t\tthis.unique = input.unique;\n\t\tif (input.naming.kind === \"wire\") this.prefix = input.naming.prefix;\n\t\tif (input.columns !== void 0) this.columns = input.columns;\n\t\tif (input.expression !== void 0) this.expression = input.expression;\n\t\tif (input.where !== void 0) this.where = input.where;\n\t\tconst normalizedType = normalizeIndexType(input.type);\n\t\tif (normalizedType !== void 0) this.type = normalizedType;\n\t\tif (input.options !== void 0) this.options = input.options;\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tdefineNonEnumerable(this, \"partial\", input.partial);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn `index:${this.name}`;\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic from(value) {\n\t\treturn value instanceof SqlIndexIR ? value : new SqlIndexIR(value);\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.index;\n\t}\n\t/**\n\t* Mode-selected structural equality — see the class doc. Delegates to the\n\t* single node-owned relation: `columns` compare ordered-strict when both\n\t* sides carry them; an exact receiver (`prefix === undefined`)\n\t* byte-compares `expression ?? ''` and `where ?? ''`; a wire-named receiver\n\t* never compares bodies (the wire-name hash already commits to them).\n\t*/\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlIndexIR\", SqlIndexIR.is);\n\t\treturn this.contentEquals(node, {\n\t\t\tcolumnPresence: \"when-both-defined\",\n\t\t\tbodies: this.prefix !== void 0 ? \"ignored\" : \"verbatim\"\n\t\t});\n\t}\n\t/**\n\t* The single index content-equality relation — every comparer (the differ\n\t* via {@link isEqualTo}, the planner's rename content-pairing) calls this\n\t* with its mode-appropriate strictness rather than growing a parallel\n\t* relation:\n\t*\n\t* - `columnPresence: 'when-both-defined'` (the differ's rule) compares\n\t* the tuples ordered-strict only when both sides carry them — a paired\n\t* node's identity already agreed, so a column node meeting an\n\t* expression node skips the tuple.\n\t* - `columnPresence: 'matching'` (the rename-pairing rule) additionally\n\t* requires presence to agree: a column index never pairs an expression\n\t* index.\n\t* - `bodies: 'verbatim'` byte-compares `expression ?? ''` / `where ?? ''`\n\t* (absent ≡ empty, no normalization — both sides are reprints in the\n\t* supported flow); `bodies: 'ignored'` skips them (wire identity —\n\t* the wire-name hash commits to the content).\n\t*\n\t* `unique` compares strictly; `type` and option VALUES compare through\n\t* the named normalization seams below.\n\t*/\n\tcontentEquals(other, strictness) {\n\t\tconst columnsEqual = strictness.columnPresence === \"matching\" ? this.columns === void 0 === (other.columns === void 0) && (this.columns === void 0 || isArrayEqual(this.columns, other.columns ?? [])) : this.columns === void 0 || other.columns === void 0 || isArrayEqual(this.columns, other.columns);\n\t\tif (!(this.unique === other.unique && normalizeIndexType(this.type) === normalizeIndexType(other.type) && indexOptionsEqual(this.options, other.options) && columnsEqual)) return false;\n\t\tif (strictness.bodies === \"ignored\") return true;\n\t\treturn (this.expression ?? \"\") === (other.expression ?? \"\") && (this.where ?? \"\") === (other.where ?? \"\");\n\t}\n};\n/**\n* The btree-default normalization seam: the default access method (`btree`\n* in every supported SQL target) normalizes to absent. Applied at\n* construction — every derivation path (contract tree, introspection, flat\n* family tree) builds through the class, so both compare sides are\n* symmetric by definition — and again inside\n* {@link SqlIndexIR.contentEquals} so the relation holds for any input.\n* The contract JSON and the wire-name content hash keep the authored\n* spelling: `@@index([a], type: \"btree\")` and `@@index([a])` are distinct\n* wire names — but content-equal after normalization, so a spelling change\n* between them converges as a rename via the planner's content\n* pairing (the hashes differ, so hash pairing never pairs them).\n*/\nfunction normalizeIndexType(type) {\n\treturn type === \"btree\" ? void 0 : type;\n}\n/**\n* Option-bag equality: same key set, values compared through\n* {@link normalizeIndexOptionValue} — Postgres introspection returns\n* reloptions values as catalog-reprint strings (`'70'`, `'on'`) while\n* contract option leaves are typed (number, boolean, string).\n*/\nfunction indexOptionsEqual(a, b) {\n\tconst aKeys = a ? Object.keys(a).sort() : [];\n\tconst bKeys = b ? Object.keys(b).sort() : [];\n\tif (aKeys.length !== bKeys.length) return false;\n\tfor (let i = 0; i < aKeys.length; i += 1) if (aKeys[i] !== bKeys[i]) return false;\n\tif (aKeys.length === 0) return true;\n\tfor (const key of aKeys) if (normalizeIndexOptionValue(a?.[key]) !== normalizeIndexOptionValue(b?.[key])) return false;\n\treturn true;\n}\n//#endregion\n//#region src/ir/sql-unique-ir.ts\n/**\n* Schema IR node for a table-level unique constraint as observed by\n* introspection.\n*\n* Implements `DiffableNode` so a unique constraint is directly a table's\n* diff-tree child. Unique constraints are frequently unnamed, so `id` is\n* derived from the column tuple rather than `name` — the column tuple is\n* also what makes two unique constraints the same constraint, so it doubles\n* as the pairing key. There are no further attributes to compare once\n* columns are equal (the differ pairs on `id`), so `isEqualTo` is identity.\n*/\nvar SqlUniqueIR = class SqlUniqueIR extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.unique;\n\tcolumns;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.columns = [...input.columns];\n\t\tif (input.name !== void 0) this.name = input.name;\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tdefineNonEnumerable(this, \"dependsOn\", input.dependsOn);\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn `unique:${this.columns.join(\",\")}`;\n\t}\n\tchildren() {\n\t\treturn [];\n\t}\n\tstatic is(node) {\n\t\treturn node.nodeKind === RelationalSchemaNodeKind.unique;\n\t}\n\tisEqualTo(other) {\n\t\tconst node = blindCast(other);\n\t\tassertNode(node, \"SqlUniqueIR\", SqlUniqueIR.is);\n\t\treturn this.id === node.id;\n\t}\n};\n//#endregion\n//#region src/ir/sql-table-ir.ts\n/**\n* Schema IR node for a single table as observed by introspection.\n*\n* Unlike the Contract IR `StorageTable`, this carries the table's\n* `name` — introspection queries return tables as arrays and the\n* verifier keys them into `SqlSchemaIR.tables` afterwards, so the name\n* stays on the table object for downstream call sites that walk\n* `Object.values(schema.tables)`.\n*\n* The constructor normalises nested IR-class fields so downstream\n* walks see a uniform AST regardless of whether the input was a\n* plain-data literal (from introspection) or already-constructed\n* class instances.\n*\n* Implements `DiffableNode` so a flat (single-schema) tree is directly\n* diffable: `id` is the table name; `isEqualTo` is identity (the table's\n* structural drift is entirely expressed by its children); `children()`\n* yields every column, the primary key (when present), every foreign key,\n* unique, index, and check constraint — the same composition and order as\n* the Postgres table node, minus policies.\n*/\nvar SqlTableIR = class extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.table;\n\tname;\n\tcolumns;\n\tforeignKeys;\n\tuniques;\n\tindexes;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.name = input.name;\n\t\tthis.columns = Object.freeze(Object.fromEntries(Object.entries(input.columns).map(([key, col]) => [key, col instanceof SqlColumnIR ? col : new SqlColumnIR(col)])));\n\t\tthis.foreignKeys = Object.freeze(input.foreignKeys.map((fk) => fk instanceof SqlForeignKeyIR ? fk : new SqlForeignKeyIR(fk)));\n\t\tthis.uniques = Object.freeze(input.uniques.map((u) => u instanceof SqlUniqueIR ? u : new SqlUniqueIR(u)));\n\t\tthis.indexes = Object.freeze(input.indexes.map(SqlIndexIR.from));\n\t\tif (input.primaryKey !== void 0) this.primaryKey = PrimaryKey.from(input.primaryKey);\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tif (input.checks !== void 0 && input.checks.length > 0) this.checks = Object.freeze(input.checks.map(SqlCheckConstraintIR.from));\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn this.name;\n\t}\n\tisEqualTo(other) {\n\t\treturn this.id === other.id;\n\t}\n\tchildren() {\n\t\treturn [\n\t\t\t...Object.values(this.columns),\n\t\t\t...this.primaryKey ? [this.primaryKey] : [],\n\t\t\t...this.foreignKeys,\n\t\t\t...this.uniques,\n\t\t\t...this.indexes,\n\t\t\t...this.checks ?? []\n\t\t];\n\t}\n};\n//#endregion\n//#region src/ir/sql-schema-ir.ts\n/**\n* Root Schema IR node representing the complete database schema as\n* observed by introspection. Target-agnostic; used by both verifiers\n* (compare against intended Contract storage) and migration planners\n* (derive operations needed to reconcile).\n*\n* The constructor normalises nested `SqlTableIR` instances so\n* downstream walks see a uniform AST regardless of whether the input\n* was a plain-data literal or already-constructed class instances.\n*\n* Implements `DiffableNode` as the root of a flat (single-schema) diff\n* tree: `id` is the fixed sentinel `'database'` (roots have no siblings),\n* `isEqualTo` is identity (a container has no own attributes), and\n* `children()` yields the table nodes.\n*/\nvar SqlSchemaIR = class extends SqlSchemaIRNode {\n\tnodeKind = RelationalSchemaNodeKind.schema;\n\ttables;\n\tconstructor(input) {\n\t\tsuper();\n\t\tthis.tables = Object.freeze(Object.fromEntries(Object.entries(input.tables).map(([key, t]) => [key, t instanceof SqlTableIR ? t : new SqlTableIR(t)])));\n\t\tif (input.annotations !== void 0) this.annotations = input.annotations;\n\t\tfreezeNode(this);\n\t}\n\tget id() {\n\t\treturn \"database\";\n\t}\n\tisEqualTo(other) {\n\t\treturn this.id === other.id;\n\t}\n\tchildren() {\n\t\treturn Object.values(this.tables);\n\t}\n};\n//#endregion\nexport { relationalNodeGranularity as _, SqlForeignKeyIR as a, SqlColumnDefaultIR as c, PrimaryKey as d, SqlSchemaIRNode as f, relationalNodeEntityKind as g, RelationalSchemaNodeKind as h, SqlIndexIR as i, sqlDefaultValuesEqual as l, defineNonEnumerable as m, SqlTableIR as n, SqlColumnIR as o, assertNode as p, SqlUniqueIR as r, sqlColumnTypesEqual as s, SqlSchemaIR as t, SqlCheckConstraintIR as u };\n\n//# sourceMappingURL=types-egs_vme1.mjs.map"],"mappings":"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"}
@@ -1,17 +1,17 @@
1
1
  import { t as contractError } from "./contract-errors-BCN6RVI5-5IHBF_lg.mjs";
2
2
  import { a as computeIndexContentHash, i as computeCheckContentHash } from "./naming-bM5qm5PY-DdginUhA.mjs";
3
- import { d as sqlStorageTypeId } from "./sql-data-type-DwLa_dK9-2eTvrYhA.mjs";
3
+ import { s as sameSqlColumnType } from "./sql-data-type-BSi0X331-OXbBFXDh.mjs";
4
4
  import { f as composeSqlEntityKinds } from "./entity-kinds-CQ_jwgYv-DoOBWwvX.mjs";
5
- import { a as sameColumns$1, s as startsWithColumns } from "./index-equivalence-DswCiq5l-Cp2V5nhL.mjs";
5
+ import { a as sameColumns$1, s as startsWithColumns } from "./index-equivalence-DswCiq5l-C6SAs-Yz.mjs";
6
6
  import { ifDefined } from "@prisma/orm-framework/utils/defined";
7
7
  import { ContractValidationError } from "@prisma/orm-framework/contract/contract-validation-error";
8
8
  import { isPlainRecord } from "@prisma/orm-framework/components/ir";
9
9
  import { DATA_TYPE_ID_PATTERN, createDataTypeLookup } from "@prisma/orm-framework/components/codec";
10
+ import { canonicalizeJson } from "@prisma/orm-framework/components/utils";
10
11
  import { blindCast } from "@prisma/orm-framework/utils/casts";
11
12
  import { type } from "arktype";
12
13
  import { ContractExecutionSectionSchema, CrossReferenceSchema } from "@prisma/orm-framework/contract/types";
13
14
  import { validateContractDomain } from "@prisma/orm-framework/contract/validate-domain";
14
- import { canonicalizeJson } from "@prisma/orm-framework/components/utils";
15
15
  //#region ../../../2-sql/1-core/contract/dist/validators.mjs
16
16
  const UNSAFE_DEFAULT_TEXT = /;|--|\/\*|\$\$|\bSELECT\b/i;
17
17
  /** Returns undefined when the text may be rendered as `DEFAULT (<text>)`, else the reason. */
@@ -678,20 +678,13 @@ function lookupStorageColumn(contract, namespaceId, tableName, columnName) {
678
678
  if (rawTable === void 0) return;
679
679
  return blindCast(rawTable).columns[columnName];
680
680
  }
681
- /**
682
- * Two storage columns share a type when the types their `dataType`s are stored as and their `typeParams` match. `codecId` and
683
- * `nullable` are not compared: they do not change the database type that governs a join.
684
- */
685
- function sameStorageType(a, b, dataTypes) {
686
- return sqlStorageTypeId(a.dataType, dataTypes) === sqlStorageTypeId(b.dataType, dataTypes) && canonicalizeJson(a.typeParams ?? {}) === canonicalizeJson(b.typeParams ?? {});
687
- }
688
681
  function describeColumnType(column) {
689
682
  return column.typeParams === void 0 ? column.dataType : `${column.dataType} ${canonicalizeJson(column.typeParams)}`;
690
683
  }
691
684
  /**
692
685
  * Validates one side of an N:M join: the junction columns and the model
693
686
  * columns they pair against positionally must be equal in number, exist in
694
- * their tables, and share the same storage type (`dataType` + `typeParams`).
687
+ * their tables, and have the same type by `sameSqlColumnType`.
695
688
  * The junction's storage foreign keys already guarantee this for user-declared
696
689
  * FK constraints, but `through` is a logical descriptor never tied to them by
697
690
  * the rest of validation — and the TS builder accepts explicit join columns
@@ -722,7 +715,7 @@ function validateThroughJoinSide(input) {
722
715
  }
723
716
  const modelColumn = lookupStorageColumn(input.contract, model.namespaceId, model.table, modelColumnName);
724
717
  if (modelColumn === void 0) throw fail(`${input.modelColumnsLabel} references column "${modelColumnName}" absent from table "${model.namespaceId}.${model.table}".`);
725
- if (!sameStorageType(junctionColumn, modelColumn, input.dataTypes)) throw fail(`joins "${input.junctionTable}.${junctionColumnName}" (${describeColumnType(junctionColumn)}) with "${model.table}.${modelColumnName}" (${describeColumnType(modelColumn)}) of differing storage type; junction columns must match the type of the column they reference.`);
718
+ if (!sameSqlColumnType(junctionColumn, modelColumn, input.dataTypes)) throw fail(`joins "${input.junctionTable}.${junctionColumnName}" (${describeColumnType(junctionColumn)}) with "${model.table}.${modelColumnName}" (${describeColumnType(modelColumn)}) of differing storage type; junction columns must match the type of the column they reference.`);
726
719
  }
727
720
  }
728
721
  /**
@@ -776,4 +769,4 @@ function validateRelationThroughConsistency(contract, dataTypes) {
776
769
  //#endregion
777
770
  export { createSqlStorageSchema as a, validateExecutionDefaultsTargetMappedColumns as c, validateRelationJoinFields as d, validateSqlContractFully as f, valueObjectStorageTypeMissingMessage as g, validateStorageSemantics as h, createSqlContractSchema as i, validateModel as l, validateStorage as m, checkSqlDefaultText as n, reservedSqlDefaultText as o, validateSqlStorageConsistency as p, createNamespaceEntrySchema as r, resolveSqlToOneRelationStorage as s, ContractEnumSchema as t, validateModelStorageReferences as u };
778
771
 
779
- //# sourceMappingURL=validators-Uim8vh59.mjs.map
772
+ //# sourceMappingURL=validators-BCRydDG7.mjs.map