@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,4 +1,4 @@
1
- import { i as leadingBackingObjectName, t as derivedBackingIndexIsRedundant } from "./index-equivalence-DswCiq5l-Cp2V5nhL.mjs";
1
+ import { i as leadingBackingObjectName, t as derivedBackingIndexIsRedundant } from "./index-equivalence-DswCiq5l-C6SAs-Yz.mjs";
2
2
  import { t as defaultTableName } from "./default-table-name-BfFY8qYR-lHNcVmY5.mjs";
3
3
  import { a as snakeToCamelCase, i as needsEscaping, n as escapeName, o as snakeToPascalCase, r as hasSeparators, t as escapeIfNeeded } from "./psl-names-C3cwe0rg-CsuHOV7E.mjs";
4
4
  import { InternalError } from "@prisma/orm-framework/utils/internal-error";
@@ -198,4 +198,4 @@ function addRelationField(map, tableName, field) {
198
198
  //#endregion
199
199
  export { pluralize as a, toModelName as c, inferRelations as i, deriveBackRelationFieldName as n, toEnumName as o, deriveRelationFieldName as r, toFieldName as s, buildChildRelationField as t };
200
200
 
201
- //# sourceMappingURL=psl-infer-CvUWefHM.mjs.map
201
+ //# sourceMappingURL=psl-infer-Bz34csvN.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"psl-infer-CvUWefHM.mjs","names":[],"sources":["../../../../2-sql/9-family/dist/psl-infer.mjs"],"sourcesContent":["import { a as snakeToCamelCase, i as needsEscaping, n as escapeName, o as snakeToPascalCase, r as hasSeparators, t as escapeIfNeeded } from \"./psl-names-C3cwe0rg.mjs\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { defaultTableName } from \"@internal/sql-contract-psl/default-table-name\";\nimport pluralizeLib from \"pluralize\";\nimport { derivedBackingIndexIsRedundant, leadingBackingObjectName } from \"@internal/sql-contract/foreign-key-materialization\";\n//#region src/core/psl-contract-infer/name-transforms.ts\nfunction toModelName(tableName) {\n\tlet name;\n\tif (hasSeparators(tableName)) name = snakeToPascalCase(tableName);\n\telse name = tableName.charAt(0).toUpperCase() + tableName.slice(1);\n\tif (needsEscaping(name)) return {\n\t\tname: escapeName(name),\n\t\tmap: tableName\n\t};\n\tif (defaultTableName(name) !== tableName) return {\n\t\tname,\n\t\tmap: tableName\n\t};\n\treturn { name };\n}\nfunction toFieldName(columnName) {\n\tlet name;\n\tif (hasSeparators(columnName)) name = snakeToCamelCase(columnName);\n\telse name = columnName.charAt(0).toLowerCase() + columnName.slice(1);\n\tif (needsEscaping(name)) return {\n\t\tname: escapeName(name),\n\t\tmap: columnName\n\t};\n\tif (name !== columnName) return {\n\t\tname,\n\t\tmap: columnName\n\t};\n\treturn { name };\n}\nfunction toEnumName(pgTypeName) {\n\tlet name;\n\tif (hasSeparators(pgTypeName)) name = snakeToPascalCase(pgTypeName);\n\telse name = pgTypeName.charAt(0).toUpperCase() + pgTypeName.slice(1);\n\tif (needsEscaping(name)) return {\n\t\tname: escapeName(name),\n\t\tmap: pgTypeName\n\t};\n\tif (name !== pgTypeName) return {\n\t\tname,\n\t\tmap: pgTypeName\n\t};\n\treturn { name };\n}\nfunction pluralize(word) {\n\treturn pluralizeLib.plural(word);\n}\nfunction deriveRelationFieldName(fkColumns, referencedTableName) {\n\tif (fkColumns.length === 1) {\n\t\tconst [col = referencedTableName] = fkColumns;\n\t\tconst stripped = col.replace(/_id$/i, \"\").replace(/Id$/, \"\");\n\t\tif (stripped.length > 0 && stripped !== col) return escapeIfNeeded(snakeToCamelCase(stripped));\n\t\treturn escapeIfNeeded(snakeToCamelCase(referencedTableName));\n\t}\n\treturn escapeIfNeeded(snakeToCamelCase(referencedTableName));\n}\nfunction deriveBackRelationFieldName(childModelName, isOneToOne) {\n\tconst base = childModelName.charAt(0).toLowerCase() + childModelName.slice(1);\n\treturn isOneToOne ? base : pluralize(base);\n}\n//#endregion\n//#region src/core/psl-contract-infer/relation-inference.ts\nconst DEFAULT_ON_DELETE = \"noAction\";\nconst DEFAULT_ON_UPDATE = \"noAction\";\nconst REFERENTIAL_ACTION_PSL = {\n\tnoAction: \"NoAction\",\n\trestrict: \"Restrict\",\n\tcascade: \"Cascade\",\n\tsetNull: \"SetNull\",\n\tsetDefault: \"SetDefault\"\n};\nfunction inferRelations(tables, modelNameMap) {\n\tconst relationsByTable = /* @__PURE__ */ new Map();\n\tconst fkCountByPair = /* @__PURE__ */ new Map();\n\tfor (const table of Object.values(tables)) for (const fk of table.foreignKeys) {\n\t\tconst pairKey = `${table.name}→${fk.referencedTable}`;\n\t\tfkCountByPair.set(pairKey, (fkCountByPair.get(pairKey) ?? 0) + 1);\n\t}\n\tconst usedFieldNames = /* @__PURE__ */ new Map();\n\tfor (const table of Object.values(tables)) {\n\t\tconst names = /* @__PURE__ */ new Set();\n\t\tfor (const col of Object.values(table.columns)) names.add(col.name);\n\t\tusedFieldNames.set(table.name, names);\n\t}\n\tfor (const table of Object.values(tables)) for (const fk of table.foreignKeys) {\n\t\tconst childTableName = table.name;\n\t\tconst parentTableName = fk.referencedTable;\n\t\tconst childUsed = usedFieldNames.get(childTableName);\n\t\tif (childUsed === void 0) throw new InternalError(`Missing inferred field-name set for table \"${childTableName}\"`);\n\t\tconst childModelName = modelNameMap.get(childTableName) ?? childTableName;\n\t\tconst parentModelName = modelNameMap.get(parentTableName) ?? parentTableName;\n\t\tconst pairKey = `${childTableName}→${parentTableName}`;\n\t\tconst isSelfRelation = childTableName === parentTableName;\n\t\tconst needsRelationName = (fkCountByPair.get(pairKey) ?? 0) > 1 || isSelfRelation;\n\t\tconst isOneToOne = detectOneToOne(fk, table);\n\t\tconst childRelFieldName = resolveUniqueFieldName(deriveRelationFieldName(fk.columns, parentTableName), childUsed, parentModelName);\n\t\tconst relationName = needsRelationName ? deriveRelationName(fk, childRelFieldName, parentModelName, isSelfRelation) : void 0;\n\t\taddRelationField(relationsByTable, childTableName, buildChildRelationField(childRelFieldName, parentModelName, fk, fk.columns.some((columnName) => table.columns[columnName]?.nullable ?? false), relationName, table));\n\t\tchildUsed.add(childRelFieldName);\n\t\tconst parentUsed = usedFieldNames.get(parentTableName) ?? /* @__PURE__ */ new Set();\n\t\tusedFieldNames.set(parentTableName, parentUsed);\n\t\tconst backRelFieldName = resolveUniqueFieldName(deriveBackRelationFieldName(childModelName, isOneToOne), parentUsed, childModelName);\n\t\taddRelationField(relationsByTable, parentTableName, {\n\t\t\tfieldName: backRelFieldName,\n\t\t\ttypeName: childModelName,\n\t\t\toptional: isOneToOne,\n\t\t\tlist: !isOneToOne,\n\t\t\trelationName\n\t\t});\n\t\tparentUsed.add(backRelFieldName);\n\t}\n\treturn { relationsByTable };\n}\nfunction detectOneToOne(fk, table) {\n\tconst fkCols = [...fk.columns].sort();\n\tif (table.primaryKey) {\n\t\tconst pkCols = [...table.primaryKey.columns].sort();\n\t\tif (pkCols.length === fkCols.length && pkCols.every((c, i) => c === fkCols[i])) return true;\n\t}\n\tfor (const unique of table.uniques) {\n\t\tconst uniqueCols = [...unique.columns].sort();\n\t\tif (uniqueCols.length === fkCols.length && uniqueCols.every((c, i) => c === fkCols[i])) return true;\n\t}\n\tfor (const index of table.indexes) {\n\t\tif (!index.unique || index.partial || index.columns === void 0) continue;\n\t\tconst indexCols = [...index.columns].sort();\n\t\tif (indexCols.length === fkCols.length && indexCols.every((c, i) => c === fkCols[i])) return true;\n\t}\n\treturn false;\n}\nfunction deriveRelationName(fk, childRelationFieldName, parentModelName, isSelfRelation) {\n\tif (fk.name) return fk.name;\n\tif (isSelfRelation) return `${childRelationFieldName.charAt(0).toUpperCase() + childRelationFieldName.slice(1)}${pluralize(parentModelName)}`;\n\treturn fk.columns.join(\"_\");\n}\n/**\n* Builds the child-side {@link RelationField} for a single foreign key:\n* `typeName` is the parent model name, `fields`/`references` are the FK's raw\n* columns, and `onDelete`/`onUpdate` are normalized to their PSL spelling.\n* Exported so a caller resolving a foreign key against a model outside\n* `tables` (e.g. a cross-space reference into another contract) can reuse the\n* same normalization instead of duplicating it.\n*\n* `hostTable` is the table the FK is declared on (not the referenced\n* parent). `contract emit` derives a backing index for every relation and\n* drops it again when the table has an identical index or a key serving its\n* lookups, by the same rule (`derivedBackingIndexIsRedundant`). Otherwise\n* the relation names a live named key or plain index whose first columns are\n* the foreign key's (`leadingBackingObjectName`), or says `index: false`, so\n* the emitted contract expects no index the database lacks. Without a host\n* table, the relation keeps the default.\n*/\nfunction buildChildRelationField(fieldName, parentModelName, fk, optional, relationName, hostTable) {\n\tconst onDelete = fk.onDelete && fk.onDelete !== DEFAULT_ON_DELETE ? fk.onDelete : void 0;\n\tconst onUpdate = fk.onUpdate && fk.onUpdate !== DEFAULT_ON_UPDATE ? fk.onUpdate : void 0;\n\tconst index = hostTable === void 0 ? void 0 : relationIndexArgument(fk.columns, hostTable);\n\treturn {\n\t\tfieldName,\n\t\ttypeName: parentModelName,\n\t\treferencedTableName: fk.referencedTable,\n\t\toptional,\n\t\tlist: false,\n\t\trelationName,\n\t\tfkName: fk.name,\n\t\tfields: fk.columns,\n\t\treferences: fk.referencedColumns,\n\t\tonDelete: onDelete ? REFERENTIAL_ACTION_PSL[onDelete] : void 0,\n\t\tonUpdate: onUpdate ? REFERENTIAL_ACTION_PSL[onUpdate] : void 0,\n\t\tindex\n\t};\n}\nfunction relationIndexArgument(columns, hostTable) {\n\tconst table = {\n\t\tindexes: hostTable.indexes,\n\t\tnodeOf: (index) => index,\n\t\tnameOf: (index) => index.name,\n\t\tuniques: hostTable.uniques,\n\t\tprimaryKey: hostTable.primaryKey\n\t};\n\tif (derivedBackingIndexIsRedundant(columns, table)) return void 0;\n\treturn leadingBackingObjectName(columns, table) ?? false;\n}\nfunction resolveUniqueFieldName(desired, usedNames, fallbackSuffix) {\n\tif (!usedNames.has(desired)) return desired;\n\tconst withSuffix = `${desired}${fallbackSuffix}`;\n\tif (!usedNames.has(withSuffix)) return withSuffix;\n\tlet counter = 2;\n\twhile (usedNames.has(`${desired}${counter}`)) counter++;\n\treturn `${desired}${counter}`;\n}\nfunction addRelationField(map, tableName, field) {\n\tconst existing = map.get(tableName);\n\tif (existing) existing.push(field);\n\telse map.set(tableName, [field]);\n}\n//#endregion\nexport { buildChildRelationField, deriveBackRelationFieldName, deriveRelationFieldName, inferRelations, pluralize, toEnumName, toFieldName, toModelName };\n\n//# sourceMappingURL=psl-infer.mjs.map"],"mappings":";;;;;;AAMA,SAAS,YAAY,WAAW;CAC/B,IAAI;CACJ,IAAI,cAAc,SAAS,GAAG,OAAO,kBAAkB,SAAS;MAC3D,OAAO,UAAU,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,UAAU,MAAM,CAAC;CACjE,IAAI,cAAc,IAAI,GAAG,OAAO;EAC/B,MAAM,WAAW,IAAI;EACrB,KAAK;CACN;CACA,IAAI,iBAAiB,IAAI,MAAM,WAAW,OAAO;EAChD;EACA,KAAK;CACN;CACA,OAAO,EAAE,KAAK;AACf;AACA,SAAS,YAAY,YAAY;CAChC,IAAI;CACJ,IAAI,cAAc,UAAU,GAAG,OAAO,iBAAiB,UAAU;MAC5D,OAAO,WAAW,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,WAAW,MAAM,CAAC;CACnE,IAAI,cAAc,IAAI,GAAG,OAAO;EAC/B,MAAM,WAAW,IAAI;EACrB,KAAK;CACN;CACA,IAAI,SAAS,YAAY,OAAO;EAC/B;EACA,KAAK;CACN;CACA,OAAO,EAAE,KAAK;AACf;AACA,SAAS,WAAW,YAAY;CAC/B,IAAI;CACJ,IAAI,cAAc,UAAU,GAAG,OAAO,kBAAkB,UAAU;MAC7D,OAAO,WAAW,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,WAAW,MAAM,CAAC;CACnE,IAAI,cAAc,IAAI,GAAG,OAAO;EAC/B,MAAM,WAAW,IAAI;EACrB,KAAK;CACN;CACA,IAAI,SAAS,YAAY,OAAO;EAC/B;EACA,KAAK;CACN;CACA,OAAO,EAAE,KAAK;AACf;AACA,SAAS,UAAU,MAAM;CACxB,OAAO,aAAa,OAAO,IAAI;AAChC;AACA,SAAS,wBAAwB,WAAW,qBAAqB;CAChE,IAAI,UAAU,WAAW,GAAG;EAC3B,MAAM,CAAC,MAAM,uBAAuB;EACpC,MAAM,WAAW,IAAI,QAAQ,SAAS,EAAE,CAAC,CAAC,QAAQ,OAAO,EAAE;EAC3D,IAAI,SAAS,SAAS,KAAK,aAAa,KAAK,OAAO,eAAe,iBAAiB,QAAQ,CAAC;EAC7F,OAAO,eAAe,iBAAiB,mBAAmB,CAAC;CAC5D;CACA,OAAO,eAAe,iBAAiB,mBAAmB,CAAC;AAC5D;AACA,SAAS,4BAA4B,gBAAgB,YAAY;CAChE,MAAM,OAAO,eAAe,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,eAAe,MAAM,CAAC;CAC5E,OAAO,aAAa,OAAO,UAAU,IAAI;AAC1C;AAGA,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAC1B,MAAM,yBAAyB;CAC9B,UAAU;CACV,UAAU;CACV,SAAS;CACT,SAAS;CACT,YAAY;AACb;AACA,SAAS,eAAe,QAAQ,cAAc;CAC7C,MAAM,mCAAmC,IAAI,IAAI;CACjD,MAAM,gCAAgC,IAAI,IAAI;CAC9C,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG,KAAK,MAAM,MAAM,MAAM,aAAa;EAC9E,MAAM,UAAU,GAAG,MAAM,KAAK,GAAG,GAAG;EACpC,cAAc,IAAI,UAAU,cAAc,IAAI,OAAO,KAAK,KAAK,CAAC;CACjE;CACA,MAAM,iCAAiC,IAAI,IAAI;CAC/C,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;EAC1C,MAAM,wBAAwB,IAAI,IAAI;EACtC,KAAK,MAAM,OAAO,OAAO,OAAO,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,IAAI;EAClE,eAAe,IAAI,MAAM,MAAM,KAAK;CACrC;CACA,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG,KAAK,MAAM,MAAM,MAAM,aAAa;EAC9E,MAAM,iBAAiB,MAAM;EAC7B,MAAM,kBAAkB,GAAG;EAC3B,MAAM,YAAY,eAAe,IAAI,cAAc;EACnD,IAAI,cAAc,KAAK,GAAG,MAAM,IAAI,cAAc,8CAA8C,eAAe,EAAE;EACjH,MAAM,iBAAiB,aAAa,IAAI,cAAc,KAAK;EAC3D,MAAM,kBAAkB,aAAa,IAAI,eAAe,KAAK;EAC7D,MAAM,UAAU,GAAG,eAAe,GAAG;EACrC,MAAM,iBAAiB,mBAAmB;EAC1C,MAAM,qBAAqB,cAAc,IAAI,OAAO,KAAK,KAAK,KAAK;EACnE,MAAM,aAAa,eAAe,IAAI,KAAK;EAC3C,MAAM,oBAAoB,uBAAuB,wBAAwB,GAAG,SAAS,eAAe,GAAG,WAAW,eAAe;EACjI,MAAM,eAAe,oBAAoB,mBAAmB,IAAI,mBAAmB,iBAAiB,cAAc,IAAI,KAAK;EAC3H,iBAAiB,kBAAkB,gBAAgB,wBAAwB,mBAAmB,iBAAiB,IAAI,GAAG,QAAQ,MAAM,eAAe,MAAM,QAAQ,WAAW,EAAE,YAAY,KAAK,GAAG,cAAc,KAAK,CAAC;EACtN,UAAU,IAAI,iBAAiB;EAC/B,MAAM,aAAa,eAAe,IAAI,eAAe,qBAAqB,IAAI,IAAI;EAClF,eAAe,IAAI,iBAAiB,UAAU;EAC9C,MAAM,mBAAmB,uBAAuB,4BAA4B,gBAAgB,UAAU,GAAG,YAAY,cAAc;EACnI,iBAAiB,kBAAkB,iBAAiB;GACnD,WAAW;GACX,UAAU;GACV,UAAU;GACV,MAAM,CAAC;GACP;EACD,CAAC;EACD,WAAW,IAAI,gBAAgB;CAChC;CACA,OAAO,EAAE,iBAAiB;AAC3B;AACA,SAAS,eAAe,IAAI,OAAO;CAClC,MAAM,SAAS,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK;CACpC,IAAI,MAAM,YAAY;EACrB,MAAM,SAAS,CAAC,GAAG,MAAM,WAAW,OAAO,CAAC,CAAC,KAAK;EAClD,IAAI,OAAO,WAAW,OAAO,UAAU,OAAO,OAAO,GAAG,MAAM,MAAM,OAAO,EAAE,GAAG,OAAO;CACxF;CACA,KAAK,MAAM,UAAU,MAAM,SAAS;EACnC,MAAM,aAAa,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC,KAAK;EAC5C,IAAI,WAAW,WAAW,OAAO,UAAU,WAAW,OAAO,GAAG,MAAM,MAAM,OAAO,EAAE,GAAG,OAAO;CAChG;CACA,KAAK,MAAM,SAAS,MAAM,SAAS;EAClC,IAAI,CAAC,MAAM,UAAU,MAAM,WAAW,MAAM,YAAY,KAAK,GAAG;EAChE,MAAM,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,KAAK;EAC1C,IAAI,UAAU,WAAW,OAAO,UAAU,UAAU,OAAO,GAAG,MAAM,MAAM,OAAO,EAAE,GAAG,OAAO;CAC9F;CACA,OAAO;AACR;AACA,SAAS,mBAAmB,IAAI,wBAAwB,iBAAiB,gBAAgB;CACxF,IAAI,GAAG,MAAM,OAAO,GAAG;CACvB,IAAI,gBAAgB,OAAO,GAAG,uBAAuB,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,uBAAuB,MAAM,CAAC,IAAI,UAAU,eAAe;CAC1I,OAAO,GAAG,QAAQ,KAAK,GAAG;AAC3B;;;;;;;;;;;;;;;;;;AAkBA,SAAS,wBAAwB,WAAW,iBAAiB,IAAI,UAAU,cAAc,WAAW;CACnG,MAAM,WAAW,GAAG,YAAY,GAAG,aAAa,oBAAoB,GAAG,WAAW,KAAK;CACvF,MAAM,WAAW,GAAG,YAAY,GAAG,aAAa,oBAAoB,GAAG,WAAW,KAAK;CACvF,MAAM,QAAQ,cAAc,KAAK,IAAI,KAAK,IAAI,sBAAsB,GAAG,SAAS,SAAS;CACzF,OAAO;EACN;EACA,UAAU;EACV,qBAAqB,GAAG;EACxB;EACA,MAAM;EACN;EACA,QAAQ,GAAG;EACX,QAAQ,GAAG;EACX,YAAY,GAAG;EACf,UAAU,WAAW,uBAAuB,YAAY,KAAK;EAC7D,UAAU,WAAW,uBAAuB,YAAY,KAAK;EAC7D;CACD;AACD;AACA,SAAS,sBAAsB,SAAS,WAAW;CAClD,MAAM,QAAQ;EACb,SAAS,UAAU;EACnB,SAAS,UAAU;EACnB,SAAS,UAAU,MAAM;EACzB,SAAS,UAAU;EACnB,YAAY,UAAU;CACvB;CACA,IAAI,+BAA+B,SAAS,KAAK,GAAG,OAAO,KAAK;CAChE,OAAO,yBAAyB,SAAS,KAAK,KAAK;AACpD;AACA,SAAS,uBAAuB,SAAS,WAAW,gBAAgB;CACnE,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,OAAO;CACpC,MAAM,aAAa,GAAG,UAAU;CAChC,IAAI,CAAC,UAAU,IAAI,UAAU,GAAG,OAAO;CACvC,IAAI,UAAU;CACd,OAAO,UAAU,IAAI,GAAG,UAAU,SAAS,GAAG;CAC9C,OAAO,GAAG,UAAU;AACrB;AACA,SAAS,iBAAiB,KAAK,WAAW,OAAO;CAChD,MAAM,WAAW,IAAI,IAAI,SAAS;CAClC,IAAI,UAAU,SAAS,KAAK,KAAK;MAC5B,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC;AAChC"}
1
+ {"version":3,"file":"psl-infer-Bz34csvN.mjs","names":[],"sources":["../../../../2-sql/9-family/dist/psl-infer.mjs"],"sourcesContent":["import { a as snakeToCamelCase, i as needsEscaping, n as escapeName, o as snakeToPascalCase, r as hasSeparators, t as escapeIfNeeded } from \"./psl-names-C3cwe0rg.mjs\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { defaultTableName } from \"@internal/sql-contract-psl/default-table-name\";\nimport pluralizeLib from \"pluralize\";\nimport { derivedBackingIndexIsRedundant, leadingBackingObjectName } from \"@internal/sql-contract/foreign-key-materialization\";\n//#region src/core/psl-contract-infer/name-transforms.ts\nfunction toModelName(tableName) {\n\tlet name;\n\tif (hasSeparators(tableName)) name = snakeToPascalCase(tableName);\n\telse name = tableName.charAt(0).toUpperCase() + tableName.slice(1);\n\tif (needsEscaping(name)) return {\n\t\tname: escapeName(name),\n\t\tmap: tableName\n\t};\n\tif (defaultTableName(name) !== tableName) return {\n\t\tname,\n\t\tmap: tableName\n\t};\n\treturn { name };\n}\nfunction toFieldName(columnName) {\n\tlet name;\n\tif (hasSeparators(columnName)) name = snakeToCamelCase(columnName);\n\telse name = columnName.charAt(0).toLowerCase() + columnName.slice(1);\n\tif (needsEscaping(name)) return {\n\t\tname: escapeName(name),\n\t\tmap: columnName\n\t};\n\tif (name !== columnName) return {\n\t\tname,\n\t\tmap: columnName\n\t};\n\treturn { name };\n}\nfunction toEnumName(pgTypeName) {\n\tlet name;\n\tif (hasSeparators(pgTypeName)) name = snakeToPascalCase(pgTypeName);\n\telse name = pgTypeName.charAt(0).toUpperCase() + pgTypeName.slice(1);\n\tif (needsEscaping(name)) return {\n\t\tname: escapeName(name),\n\t\tmap: pgTypeName\n\t};\n\tif (name !== pgTypeName) return {\n\t\tname,\n\t\tmap: pgTypeName\n\t};\n\treturn { name };\n}\nfunction pluralize(word) {\n\treturn pluralizeLib.plural(word);\n}\nfunction deriveRelationFieldName(fkColumns, referencedTableName) {\n\tif (fkColumns.length === 1) {\n\t\tconst [col = referencedTableName] = fkColumns;\n\t\tconst stripped = col.replace(/_id$/i, \"\").replace(/Id$/, \"\");\n\t\tif (stripped.length > 0 && stripped !== col) return escapeIfNeeded(snakeToCamelCase(stripped));\n\t\treturn escapeIfNeeded(snakeToCamelCase(referencedTableName));\n\t}\n\treturn escapeIfNeeded(snakeToCamelCase(referencedTableName));\n}\nfunction deriveBackRelationFieldName(childModelName, isOneToOne) {\n\tconst base = childModelName.charAt(0).toLowerCase() + childModelName.slice(1);\n\treturn isOneToOne ? base : pluralize(base);\n}\n//#endregion\n//#region src/core/psl-contract-infer/relation-inference.ts\nconst DEFAULT_ON_DELETE = \"noAction\";\nconst DEFAULT_ON_UPDATE = \"noAction\";\nconst REFERENTIAL_ACTION_PSL = {\n\tnoAction: \"NoAction\",\n\trestrict: \"Restrict\",\n\tcascade: \"Cascade\",\n\tsetNull: \"SetNull\",\n\tsetDefault: \"SetDefault\"\n};\nfunction inferRelations(tables, modelNameMap) {\n\tconst relationsByTable = /* @__PURE__ */ new Map();\n\tconst fkCountByPair = /* @__PURE__ */ new Map();\n\tfor (const table of Object.values(tables)) for (const fk of table.foreignKeys) {\n\t\tconst pairKey = `${table.name}→${fk.referencedTable}`;\n\t\tfkCountByPair.set(pairKey, (fkCountByPair.get(pairKey) ?? 0) + 1);\n\t}\n\tconst usedFieldNames = /* @__PURE__ */ new Map();\n\tfor (const table of Object.values(tables)) {\n\t\tconst names = /* @__PURE__ */ new Set();\n\t\tfor (const col of Object.values(table.columns)) names.add(col.name);\n\t\tusedFieldNames.set(table.name, names);\n\t}\n\tfor (const table of Object.values(tables)) for (const fk of table.foreignKeys) {\n\t\tconst childTableName = table.name;\n\t\tconst parentTableName = fk.referencedTable;\n\t\tconst childUsed = usedFieldNames.get(childTableName);\n\t\tif (childUsed === void 0) throw new InternalError(`Missing inferred field-name set for table \"${childTableName}\"`);\n\t\tconst childModelName = modelNameMap.get(childTableName) ?? childTableName;\n\t\tconst parentModelName = modelNameMap.get(parentTableName) ?? parentTableName;\n\t\tconst pairKey = `${childTableName}→${parentTableName}`;\n\t\tconst isSelfRelation = childTableName === parentTableName;\n\t\tconst needsRelationName = (fkCountByPair.get(pairKey) ?? 0) > 1 || isSelfRelation;\n\t\tconst isOneToOne = detectOneToOne(fk, table);\n\t\tconst childRelFieldName = resolveUniqueFieldName(deriveRelationFieldName(fk.columns, parentTableName), childUsed, parentModelName);\n\t\tconst relationName = needsRelationName ? deriveRelationName(fk, childRelFieldName, parentModelName, isSelfRelation) : void 0;\n\t\taddRelationField(relationsByTable, childTableName, buildChildRelationField(childRelFieldName, parentModelName, fk, fk.columns.some((columnName) => table.columns[columnName]?.nullable ?? false), relationName, table));\n\t\tchildUsed.add(childRelFieldName);\n\t\tconst parentUsed = usedFieldNames.get(parentTableName) ?? /* @__PURE__ */ new Set();\n\t\tusedFieldNames.set(parentTableName, parentUsed);\n\t\tconst backRelFieldName = resolveUniqueFieldName(deriveBackRelationFieldName(childModelName, isOneToOne), parentUsed, childModelName);\n\t\taddRelationField(relationsByTable, parentTableName, {\n\t\t\tfieldName: backRelFieldName,\n\t\t\ttypeName: childModelName,\n\t\t\toptional: isOneToOne,\n\t\t\tlist: !isOneToOne,\n\t\t\trelationName\n\t\t});\n\t\tparentUsed.add(backRelFieldName);\n\t}\n\treturn { relationsByTable };\n}\nfunction detectOneToOne(fk, table) {\n\tconst fkCols = [...fk.columns].sort();\n\tif (table.primaryKey) {\n\t\tconst pkCols = [...table.primaryKey.columns].sort();\n\t\tif (pkCols.length === fkCols.length && pkCols.every((c, i) => c === fkCols[i])) return true;\n\t}\n\tfor (const unique of table.uniques) {\n\t\tconst uniqueCols = [...unique.columns].sort();\n\t\tif (uniqueCols.length === fkCols.length && uniqueCols.every((c, i) => c === fkCols[i])) return true;\n\t}\n\tfor (const index of table.indexes) {\n\t\tif (!index.unique || index.partial || index.columns === void 0) continue;\n\t\tconst indexCols = [...index.columns].sort();\n\t\tif (indexCols.length === fkCols.length && indexCols.every((c, i) => c === fkCols[i])) return true;\n\t}\n\treturn false;\n}\nfunction deriveRelationName(fk, childRelationFieldName, parentModelName, isSelfRelation) {\n\tif (fk.name) return fk.name;\n\tif (isSelfRelation) return `${childRelationFieldName.charAt(0).toUpperCase() + childRelationFieldName.slice(1)}${pluralize(parentModelName)}`;\n\treturn fk.columns.join(\"_\");\n}\n/**\n* Builds the child-side {@link RelationField} for a single foreign key:\n* `typeName` is the parent model name, `fields`/`references` are the FK's raw\n* columns, and `onDelete`/`onUpdate` are normalized to their PSL spelling.\n* Exported so a caller resolving a foreign key against a model outside\n* `tables` (e.g. a cross-space reference into another contract) can reuse the\n* same normalization instead of duplicating it.\n*\n* `hostTable` is the table the FK is declared on (not the referenced\n* parent). `contract emit` derives a backing index for every relation and\n* drops it again when the table has an identical index or a key serving its\n* lookups, by the same rule (`derivedBackingIndexIsRedundant`). Otherwise\n* the relation names a live named key or plain index whose first columns are\n* the foreign key's (`leadingBackingObjectName`), or says `index: false`, so\n* the emitted contract expects no index the database lacks. Without a host\n* table, the relation keeps the default.\n*/\nfunction buildChildRelationField(fieldName, parentModelName, fk, optional, relationName, hostTable) {\n\tconst onDelete = fk.onDelete && fk.onDelete !== DEFAULT_ON_DELETE ? fk.onDelete : void 0;\n\tconst onUpdate = fk.onUpdate && fk.onUpdate !== DEFAULT_ON_UPDATE ? fk.onUpdate : void 0;\n\tconst index = hostTable === void 0 ? void 0 : relationIndexArgument(fk.columns, hostTable);\n\treturn {\n\t\tfieldName,\n\t\ttypeName: parentModelName,\n\t\treferencedTableName: fk.referencedTable,\n\t\toptional,\n\t\tlist: false,\n\t\trelationName,\n\t\tfkName: fk.name,\n\t\tfields: fk.columns,\n\t\treferences: fk.referencedColumns,\n\t\tonDelete: onDelete ? REFERENTIAL_ACTION_PSL[onDelete] : void 0,\n\t\tonUpdate: onUpdate ? REFERENTIAL_ACTION_PSL[onUpdate] : void 0,\n\t\tindex\n\t};\n}\nfunction relationIndexArgument(columns, hostTable) {\n\tconst table = {\n\t\tindexes: hostTable.indexes,\n\t\tnodeOf: (index) => index,\n\t\tnameOf: (index) => index.name,\n\t\tuniques: hostTable.uniques,\n\t\tprimaryKey: hostTable.primaryKey\n\t};\n\tif (derivedBackingIndexIsRedundant(columns, table)) return void 0;\n\treturn leadingBackingObjectName(columns, table) ?? false;\n}\nfunction resolveUniqueFieldName(desired, usedNames, fallbackSuffix) {\n\tif (!usedNames.has(desired)) return desired;\n\tconst withSuffix = `${desired}${fallbackSuffix}`;\n\tif (!usedNames.has(withSuffix)) return withSuffix;\n\tlet counter = 2;\n\twhile (usedNames.has(`${desired}${counter}`)) counter++;\n\treturn `${desired}${counter}`;\n}\nfunction addRelationField(map, tableName, field) {\n\tconst existing = map.get(tableName);\n\tif (existing) existing.push(field);\n\telse map.set(tableName, [field]);\n}\n//#endregion\nexport { buildChildRelationField, deriveBackRelationFieldName, deriveRelationFieldName, inferRelations, pluralize, toEnumName, toFieldName, toModelName };\n\n//# sourceMappingURL=psl-infer.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { S as SqlTableIR, m as SqlForeignKeyIR } from "./types-Bqe0AXuw-xqQnkIj4.mjs";
2
- import "./types-CTdsm45r.mjs";
1
+ import { C as SqlTableIR, h as SqlForeignKeyIR } from "./types-B3AHHPDh-BHh-89fY.mjs";
2
+ import "./types-BGERR8XF.mjs";
3
3
  import { t as DefaultMappingOptions } from "./default-mapping-CEISdj2g-DF1LzGBR.mjs";
4
4
  import { ColumnDefault } from "@prisma/orm-framework/contract/types";
5
5
  //#region ../../../2-sql/9-family/dist/psl-infer.d.mts
@@ -22,7 +22,7 @@ interface EnumInfo {
22
22
  interface PslPrinterOptions {
23
23
  readonly defaultMapping?: DefaultMappingOptions;
24
24
  readonly enumInfo?: EnumInfo;
25
- readonly parseRawDefault?: (rawDefault: string, nativeType?: string) => ColumnDefault | undefined;
25
+ readonly parseRawDefault?: (rawDefault: string, typeText?: string) => ColumnDefault | undefined;
26
26
  }
27
27
  type RelationField = {
28
28
  readonly fieldName: string;
@@ -77,4 +77,4 @@ declare function inferRelations(tables: Record<string, SqlTableIR>, modelNameMap
77
77
  declare function buildChildRelationField(fieldName: string, parentModelName: string, fk: SqlForeignKeyIR, optional: boolean, relationName?: string, hostTable?: SqlTableIR): RelationField;
78
78
  //#endregion
79
79
  export { buildChildRelationField as a, inferRelations as c, toFieldName as d, toModelName as f, RelationField as i, pluralize as l, InferredRelations as n, deriveBackRelationFieldName as o, PslPrinterOptions as r, deriveRelationFieldName as s, EnumInfo as t, toEnumName as u };
80
- //# sourceMappingURL=psl-infer-1C9FqGO2.d.mts.map
80
+ //# sourceMappingURL=psl-infer-I75woGr4.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"psl-infer-1C9FqGO2.d.mts","names":[],"sources":["../../../../2-sql/9-family/dist/psl-infer.d.mts"],"mappings":";;;;;;KAIK;WACM;WACA;;iBAEM,YAAY,oBAAoB;iBAChC,YAAY,qBAAqB;iBACjC,WAAW,qBAAqB;iBAChC,UAAU;iBACV,wBAAwB,8BAA8B;iBACtD,4BAA4B,wBAAwB;;;UAG3D;WACC,aAAa;;UAEd;WACC,iBAAiB;WACjB,WAAW;WACX,mBAAmB,oBAAoB,wBAAwB;;KAErE;WACM;WACA;;;;;;WAMA;;;;;;WAMA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;;;;KAIN;WACM,kBAAkB,6BAA6B;;iBAEzC,eAAe,QAAQ,eAAe,aAAa,cAAc,8BAA8B;;;;;;;;;;;;;;;;;;iBAkB/F,wBAAwB,mBAAmB,yBAAyB,IAAI,iBAAiB,mBAAmB,uBAAuB,YAAY,aAAa"}
1
+ {"version":3,"file":"psl-infer-I75woGr4.d.mts","names":[],"sources":["../../../../2-sql/9-family/dist/psl-infer.d.mts"],"mappings":";;;;;;KAIK;WACM;WACA;;iBAEM,YAAY,oBAAoB;iBAChC,YAAY,qBAAqB;iBACjC,WAAW,qBAAqB;iBAChC,UAAU;iBACV,wBAAwB,8BAA8B;iBACtD,4BAA4B,wBAAwB;;;UAG3D;WACC,aAAa;;UAEd;WACC,iBAAiB;WACjB,WAAW;WACX,mBAAmB,oBAAoB,sBAAsB;;KAEnE;WACM;WACA;;;;;;WAMA;;;;;;WAMA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;;;;KAIN;WACM,kBAAkB,6BAA6B;;iBAEzC,eAAe,QAAQ,eAAe,aAAa,cAAc,8BAA8B;;;;;;;;;;;;;;;;;;iBAkB/F,wBAAwB,mBAAmB,yBAAyB,IAAI,iBAAiB,mBAAmB,uBAAuB,YAAY,aAAa"}
package/dist/runtime.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as startActivityOn, a as budgets, b as withTransaction, c as createSqlExecutionStack, d as encodeParamsWithMetadata, f as extractCodecIds, g as planContentHashOn, h as lowerSqlPlan, i as activitySource, l as delegatingActivitySource, m as lints, n as PreparedStatementImpl, o as createAstCodecRegistry, p as findActivitySource, r as SqlRuntimeBase, s as createExecutionContext, t as PreparedExecutionImpl, u as deriveParamMetadata, v as validateCodecRegistryCompleteness, y as validateContractCodecMappings } from "./exports-DVsHk8HP-DrH_2a-H.mjs";
1
+ import { _ as startActivityOn, a as budgets, b as withTransaction, c as createSqlExecutionStack, d as encodeParamsWithMetadata, f as extractCodecIds, g as planContentHashOn, h as lowerSqlPlan, i as activitySource, l as delegatingActivitySource, m as lints, n as PreparedStatementImpl, o as createAstCodecRegistry, p as findActivitySource, r as SqlRuntimeBase, s as createExecutionContext, t as PreparedExecutionImpl, u as deriveParamMetadata, v as validateCodecRegistryCompleteness, y as validateContractCodecMappings } from "./exports-DVsHk8HP-M-qeQrkz.mjs";
2
2
  export { PreparedExecutionImpl, PreparedStatementImpl, SqlRuntimeBase, activitySource, budgets, createAstCodecRegistry, createExecutionContext, createSqlExecutionStack, delegatingActivitySource, deriveParamMetadata, encodeParamsWithMetadata, extractCodecIds, findActivitySource, lints, lowerSqlPlan, planContentHashOn, startActivityOn, validateCodecRegistryCompleteness, validateContractCodecMappings, withTransaction };
@@ -1,7 +1,7 @@
1
1
  import { l as SqlStorage } from "./sql-storage-tZhB8nS5-8NSWT0TW.mjs";
2
2
  import "./types-B2Dee96w.mjs";
3
- import { x as SqlSchemaIRNode } from "./types-Bqe0AXuw-xqQnkIj4.mjs";
4
- import "./types-CTdsm45r.mjs";
3
+ import { S as SqlSchemaIRNode } from "./types-B3AHHPDh-BHh-89fY.mjs";
4
+ import "./types-BGERR8XF.mjs";
5
5
  import { Contract, ControlPolicy } from "@prisma/orm-framework/contract/types";
6
6
  import { TargetBoundComponentDescriptor } from "@prisma/orm-framework/components/components";
7
7
  import { SchemaDiffIssue } from "@prisma/orm-framework/components/control";
@@ -44,4 +44,4 @@ interface SqlSchemaDiffInput {
44
44
  type SqlSchemaDiffFn = (input: SqlSchemaDiffInput) => SqlSchemaDiffResult;
45
45
  //#endregion
46
46
  export { SqlSchemaDiffInput as n, SqlSchemaDiffResult as r, SqlSchemaDiffFn as t };
47
- //# sourceMappingURL=schema-differ-DmP74bB8-Dn53wZD1.d.mts.map
47
+ //# sourceMappingURL=schema-differ-DmP74bB8-CIQ17HTk.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-differ-DmP74bB8-Dn53wZD1.d.mts","names":[],"sources":["../../../../2-sql/9-family/dist/schema-differ-DmP74bB8.d.mts"],"mappings":";;;;;;;;;;;;;;;;;UAcU;;WAEC,iBAAiB;;;;;;;;;WASjB,uBAAuB,OAAO,oBAAoB;;;;;;WAMlD,gBAAgB;aACd,QAAQ;;;UAGX;WACC,UAAU,SAAS;WACnB,QAAQ;WACR,qBAAqB,cAAc;;KAEzC,mBAAmB,OAAO,uBAAuB"}
1
+ {"version":3,"file":"schema-differ-DmP74bB8-CIQ17HTk.d.mts","names":[],"sources":["../../../../2-sql/9-family/dist/schema-differ-DmP74bB8.d.mts"],"mappings":";;;;;;;;;;;;;;;;;UAcU;;WAEC,iBAAiB;;;;;;;;;WASjB,uBAAuB,OAAO,oBAAoB;;;;;;WAMlD,gBAAgB;aACd,QAAQ;;;UAGX;WACC,UAAU,SAAS;WACnB,QAAQ;WACR,qBAAqB,cAAc;;KAEzC,mBAAmB,OAAO,uBAAuB"}
@@ -1,2 +1,2 @@
1
- import { A as sqlDefaultValuesEqual, C as SqlTableIRInput, D as defineNonEnumerable, E as assertNode, O as relationalNodeEntityKind, S as SqlTableIR, T as SqlUniqueIRInput, _ as SqlIndexIRInput, a as SqlAnnotations, b as SqlSchemaIRInput, c as SqlColumnDefaultIR, d as SqlColumnIRInput, f as SqlDefaultValue, g as SqlIndexIR, h as SqlForeignKeyIRInput, i as ReportedSqlType, k as relationalNodeGranularity, l as SqlColumnDefaultIRInput, m as SqlForeignKeyIR, n as PrimaryKeyInput, o as SqlCheckConstraintIR, p as SqlExpressionLiteralFor, r as RelationalSchemaNodeKind, s as SqlCheckConstraintIRInput, t as PrimaryKey, u as SqlColumnIR, v as SqlReferentialAction, w as SqlUniqueIR, x as SqlSchemaIRNode, y as SqlSchemaIR } from "./types-Bqe0AXuw-xqQnkIj4.mjs";
2
- export { PrimaryKey, type PrimaryKeyInput, RelationalSchemaNodeKind, type ReportedSqlType, type SqlAnnotations, SqlCheckConstraintIR, type SqlCheckConstraintIRInput, SqlColumnDefaultIR, type SqlColumnDefaultIRInput, SqlColumnIR, type SqlColumnIRInput, type SqlDefaultValue, type SqlExpressionLiteralFor, SqlForeignKeyIR, type SqlForeignKeyIRInput, SqlIndexIR, type SqlIndexIRInput, type SqlReferentialAction, SqlSchemaIR, type SqlSchemaIRInput, SqlSchemaIRNode, SqlTableIR, type SqlTableIRInput, SqlUniqueIR, type SqlUniqueIRInput, assertNode, defineNonEnumerable, relationalNodeEntityKind, relationalNodeGranularity, sqlDefaultValuesEqual };
1
+ import { A as relationalNodeGranularity, C as SqlTableIR, D as assertNode, E as SqlUniqueIRInput, M as sqlDefaultValuesEqual, O as defineNonEnumerable, S as SqlSchemaIRNode, T as SqlUniqueIR, _ as SqlIndexIR, a as SqlAnnotations, b as SqlSchemaIR, c as SqlColumnDefaultIR, d as SqlColumnIRInput, f as SqlColumnType, g as SqlForeignKeyIRInput, h as SqlForeignKeyIR, i as ReportedSqlType, j as sqlColumnTypesEqual, k as relationalNodeEntityKind, l as SqlColumnDefaultIRInput, m as SqlExpressionLiteralFor, n as PrimaryKeyInput, o as SqlCheckConstraintIR, p as SqlDefaultValue, r as RelationalSchemaNodeKind, s as SqlCheckConstraintIRInput, t as PrimaryKey, u as SqlColumnIR, v as SqlIndexIRInput, w as SqlTableIRInput, x as SqlSchemaIRInput, y as SqlReferentialAction } from "./types-B3AHHPDh-BHh-89fY.mjs";
2
+ export { PrimaryKey, type PrimaryKeyInput, RelationalSchemaNodeKind, type ReportedSqlType, type SqlAnnotations, SqlCheckConstraintIR, type SqlCheckConstraintIRInput, SqlColumnDefaultIR, type SqlColumnDefaultIRInput, SqlColumnIR, type SqlColumnIRInput, type SqlColumnType, type SqlDefaultValue, type SqlExpressionLiteralFor, SqlForeignKeyIR, type SqlForeignKeyIRInput, SqlIndexIR, type SqlIndexIRInput, type SqlReferentialAction, SqlSchemaIR, type SqlSchemaIRInput, SqlSchemaIRNode, SqlTableIR, type SqlTableIRInput, SqlUniqueIR, type SqlUniqueIRInput, assertNode, defineNonEnumerable, relationalNodeEntityKind, relationalNodeGranularity, sqlColumnTypesEqual, sqlDefaultValuesEqual };
@@ -1,2 +1,2 @@
1
- import { a as SqlColumnIR, c as SqlSchemaIR, d as SqlUniqueIR, f as assertNode, g as sqlDefaultValuesEqual, h as relationalNodeGranularity, i as SqlColumnDefaultIR, l as SqlSchemaIRNode, m as relationalNodeEntityKind, n as RelationalSchemaNodeKind, o as SqlForeignKeyIR, p as defineNonEnumerable, r as SqlCheckConstraintIR, s as SqlIndexIR, t as PrimaryKey, u as SqlTableIR } from "./types-CfPB-Kz_-ByWDfwMj.mjs";
2
- export { PrimaryKey, RelationalSchemaNodeKind, SqlCheckConstraintIR, SqlColumnDefaultIR, SqlColumnIR, SqlForeignKeyIR, SqlIndexIR, SqlSchemaIR, SqlSchemaIRNode, SqlTableIR, SqlUniqueIR, assertNode, defineNonEnumerable, relationalNodeEntityKind, relationalNodeGranularity, sqlDefaultValuesEqual };
1
+ import { _ as sqlDefaultValuesEqual, a as SqlColumnIR, c as SqlSchemaIR, d as SqlUniqueIR, f as assertNode, g as sqlColumnTypesEqual, h as relationalNodeGranularity, i as SqlColumnDefaultIR, l as SqlSchemaIRNode, m as relationalNodeEntityKind, n as RelationalSchemaNodeKind, o as SqlForeignKeyIR, p as defineNonEnumerable, r as SqlCheckConstraintIR, s as SqlIndexIR, t as PrimaryKey, u as SqlTableIR } from "./types-egs_vme1-DRhYFwIT.mjs";
2
+ export { PrimaryKey, RelationalSchemaNodeKind, SqlCheckConstraintIR, SqlColumnDefaultIR, SqlColumnIR, SqlForeignKeyIR, SqlIndexIR, SqlSchemaIR, SqlSchemaIRNode, SqlTableIR, SqlUniqueIR, assertNode, defineNonEnumerable, relationalNodeEntityKind, relationalNodeGranularity, sqlColumnTypesEqual, sqlDefaultValuesEqual };
@@ -1,3 +1,3 @@
1
- import { A as sqlDefaultValuesEqual, C as SqlTableIRInput, D as defineNonEnumerable, E as assertNode, O as relationalNodeEntityKind, S as SqlTableIR, T as SqlUniqueIRInput, _ as SqlIndexIRInput, a as SqlAnnotations, b as SqlSchemaIRInput, c as SqlColumnDefaultIR, d as SqlColumnIRInput, f as SqlDefaultValue, g as SqlIndexIR, h as SqlForeignKeyIRInput, i as ReportedSqlType, k as relationalNodeGranularity, l as SqlColumnDefaultIRInput, m as SqlForeignKeyIR, n as PrimaryKeyInput, o as SqlCheckConstraintIR, p as SqlExpressionLiteralFor, r as RelationalSchemaNodeKind, s as SqlCheckConstraintIRInput, t as PrimaryKey, u as SqlColumnIR, v as SqlReferentialAction, w as SqlUniqueIR, x as SqlSchemaIRNode, y as SqlSchemaIR } from "./types-Bqe0AXuw-xqQnkIj4.mjs";
2
- import "./types-CTdsm45r.mjs";
3
- export { PrimaryKey, type PrimaryKeyInput, RelationalSchemaNodeKind, type ReportedSqlType, type SqlAnnotations, SqlCheckConstraintIR, type SqlCheckConstraintIRInput, SqlColumnDefaultIR, type SqlColumnDefaultIRInput, SqlColumnIR, type SqlColumnIRInput, type SqlDefaultValue, type SqlExpressionLiteralFor, SqlForeignKeyIR, type SqlForeignKeyIRInput, SqlIndexIR, type SqlIndexIRInput, type SqlReferentialAction, SqlSchemaIR, type SqlSchemaIRInput, SqlSchemaIRNode, SqlTableIR, type SqlTableIRInput, SqlUniqueIR, type SqlUniqueIRInput, assertNode, defineNonEnumerable, relationalNodeEntityKind, relationalNodeGranularity, sqlDefaultValuesEqual };
1
+ import { A as relationalNodeGranularity, C as SqlTableIR, D as assertNode, E as SqlUniqueIRInput, M as sqlDefaultValuesEqual, O as defineNonEnumerable, S as SqlSchemaIRNode, T as SqlUniqueIR, _ as SqlIndexIR, a as SqlAnnotations, b as SqlSchemaIR, c as SqlColumnDefaultIR, d as SqlColumnIRInput, f as SqlColumnType, g as SqlForeignKeyIRInput, h as SqlForeignKeyIR, i as ReportedSqlType, j as sqlColumnTypesEqual, k as relationalNodeEntityKind, l as SqlColumnDefaultIRInput, m as SqlExpressionLiteralFor, n as PrimaryKeyInput, o as SqlCheckConstraintIR, p as SqlDefaultValue, r as RelationalSchemaNodeKind, s as SqlCheckConstraintIRInput, t as PrimaryKey, u as SqlColumnIR, v as SqlIndexIRInput, w as SqlTableIRInput, x as SqlSchemaIRInput, y as SqlReferentialAction } from "./types-B3AHHPDh-BHh-89fY.mjs";
2
+ import "./types-BGERR8XF.mjs";
3
+ export { PrimaryKey, type PrimaryKeyInput, RelationalSchemaNodeKind, type ReportedSqlType, type SqlAnnotations, SqlCheckConstraintIR, type SqlCheckConstraintIRInput, SqlColumnDefaultIR, type SqlColumnDefaultIRInput, SqlColumnIR, type SqlColumnIRInput, type SqlColumnType, type SqlDefaultValue, type SqlExpressionLiteralFor, SqlForeignKeyIR, type SqlForeignKeyIRInput, SqlIndexIR, type SqlIndexIRInput, type SqlReferentialAction, SqlSchemaIR, type SqlSchemaIRInput, SqlSchemaIRNode, SqlTableIR, type SqlTableIRInput, SqlUniqueIR, type SqlUniqueIRInput, assertNode, defineNonEnumerable, relationalNodeEntityKind, relationalNodeGranularity, sqlColumnTypesEqual, sqlDefaultValuesEqual };
@@ -1,2 +1,2 @@
1
- import { a as SqlColumnIR, c as SqlSchemaIR, d as SqlUniqueIR, f as assertNode, g as sqlDefaultValuesEqual, h as relationalNodeGranularity, i as SqlColumnDefaultIR, l as SqlSchemaIRNode, m as relationalNodeEntityKind, n as RelationalSchemaNodeKind, o as SqlForeignKeyIR, p as defineNonEnumerable, r as SqlCheckConstraintIR, s as SqlIndexIR, t as PrimaryKey, u as SqlTableIR } from "./types-CfPB-Kz_-ByWDfwMj.mjs";
2
- export { PrimaryKey, RelationalSchemaNodeKind, SqlCheckConstraintIR, SqlColumnDefaultIR, SqlColumnIR, SqlForeignKeyIR, SqlIndexIR, SqlSchemaIR, SqlSchemaIRNode, SqlTableIR, SqlUniqueIR, assertNode, defineNonEnumerable, relationalNodeEntityKind, relationalNodeGranularity, sqlDefaultValuesEqual };
1
+ import { _ as sqlDefaultValuesEqual, a as SqlColumnIR, c as SqlSchemaIR, d as SqlUniqueIR, f as assertNode, g as sqlColumnTypesEqual, h as relationalNodeGranularity, i as SqlColumnDefaultIR, l as SqlSchemaIRNode, m as relationalNodeEntityKind, n as RelationalSchemaNodeKind, o as SqlForeignKeyIR, p as defineNonEnumerable, r as SqlCheckConstraintIR, s as SqlIndexIR, t as PrimaryKey, u as SqlTableIR } from "./types-egs_vme1-DRhYFwIT.mjs";
2
+ export { PrimaryKey, RelationalSchemaNodeKind, SqlCheckConstraintIR, SqlColumnDefaultIR, SqlColumnIR, SqlForeignKeyIR, SqlIndexIR, SqlSchemaIR, SqlSchemaIRNode, SqlTableIR, SqlUniqueIR, assertNode, defineNonEnumerable, relationalNodeEntityKind, relationalNodeGranularity, sqlColumnTypesEqual, sqlDefaultValuesEqual };
@@ -1,4 +1,4 @@
1
- import { n as isSqlDataType, t as findSqlDataTypeCollision } from "./sql-data-type-DwLa_dK9-2eTvrYhA.mjs";
1
+ import { n as isSqlDataType, t as findSqlDataTypeCollision } from "./sql-data-type-BSi0X331-OXbBFXDh.mjs";
2
2
  import { i as assertNothingCastsFromSqlExpression } from "./sql-expression-BJCuy-WI.mjs";
3
3
  import { u as isStorageTypeInstance } from "./types-M_FeBD9w.mjs";
4
4
  import { ifDefined } from "@prisma/orm-framework/utils/defined";
@@ -259,4 +259,4 @@ function verifySqlSchemaByDiff(input) {
259
259
  //#endregion
260
260
  export { computeStorageTypeVerdict as a, verifySqlSchemaByDiff as c, computeSqlDiffVerdict as i, classifyDiffSubjectGranularity as n, enforceSqlDataTypeInvariants as o, classifySqlDiffIssue as r, extractCodecControlHooks as s, classifyDiffEntityKind as t };
261
261
 
262
- //# sourceMappingURL=schema-verify-BwRdzbHb-CxnJN-Lm.mjs.map
262
+ //# sourceMappingURL=schema-verify-BwRdzbHb-nDeE75xa.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-verify-BwRdzbHb-CxnJN-Lm.mjs","names":[],"sources":["../../../../2-sql/9-family/dist/schema-verify-BwRdzbHb.mjs"],"sourcesContent":["import { assertNothingCastsFromSqlExpression } from \"@internal/sql-contract/sql-expression\";\nimport { VERIFY_CODE_SCHEMA_FAILURE, assertUniqueCodecOwner, dispositionForCategory, issueOutcome } from \"@internal/framework-components/control\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { runtimeError } from \"@internal/framework-components/components\";\nimport { findSqlDataTypeCollision, isSqlDataType } from \"@internal/sql-contract/data-type\";\nimport { isStorageTypeInstance } from \"@internal/sql-contract/types\";\nimport { effectiveControlPolicy } from \"@internal/contract/types\";\n//#region src/core/assembly.ts\nfunction hasCodecControlHooks(descriptor) {\n\tif (typeof descriptor !== \"object\" || descriptor === null) return false;\n\tconst hooks = blindCast(descriptor).types?.codecTypes?.controlPlaneHooks;\n\treturn hooks !== null && hooks !== void 0 && typeof hooks === \"object\";\n}\nfunction extractCodecControlHooks(descriptors) {\n\tconst hooks = /* @__PURE__ */ new Map();\n\tconst owners = /* @__PURE__ */ new Map();\n\tfor (const descriptor of descriptors) {\n\t\tif (typeof descriptor !== \"object\" || descriptor === null) continue;\n\t\tif (!hasCodecControlHooks(descriptor)) continue;\n\t\tconst controlPlaneHooks = descriptor.types.codecTypes.controlPlaneHooks;\n\t\tfor (const [codecId, hook] of Object.entries(controlPlaneHooks)) {\n\t\t\tassertUniqueCodecOwner({\n\t\t\t\tcodecId,\n\t\t\t\towners,\n\t\t\t\tdescriptorId: descriptor.id,\n\t\t\t\tentityLabel: \"control hooks\",\n\t\t\t\tentityOwnershipLabel: \"owner\"\n\t\t\t});\n\t\t\thooks.set(codecId, hook);\n\t\t\towners.set(codecId, descriptor.id);\n\t\t}\n\t}\n\treturn hooks;\n}\n/**\n* The SQL family's checks of the stack's data types and codecs, each naming the contributor:\n* no two SQL data types would both recognise one reported type, by colliding claiming texts or by\n* claiming the same kind; no data type casts from `sql/expression`; every type stored as another\n* names a registered SQL data type; and every codec represents a\n* SQL data type, because a codec represents a column's type and `sql/expression` is the one data\n* type no column has.\n*/\nfunction enforceSqlDataTypeInvariants(declaredDataTypes, codecDescriptors) {\n\tconst declaredById = new Map(declaredDataTypes.map((declared) => [declared.type.id, declared]));\n\tconst capitalized = (text) => `${text.charAt(0).toUpperCase()}${text.slice(1)}`;\n\tconst describe = (type) => `data type \"${type.id}\" contributed by \"${declaredById.get(type.id)?.contributedBy ?? \"<unknown>\"}\"`;\n\tconst collision = findSqlDataTypeCollision(declaredDataTypes.map(({ type }) => type));\n\tif (collision !== void 0) {\n\t\tconst { first, second, claims } = collision;\n\t\tif (claims.by === \"kind\") throw new InternalError(`The ${describe(first)} and the ${describe(second)} both claim the kind \"${claims.kind}\".`);\n\t\tthrow new InternalError(`The ${describe(first)} claims the text \"${claims.first}\", which collides with the text \"${claims.second}\" claimed by the ${describe(second)}.`);\n\t}\n\tassertNothingCastsFromSqlExpression(declaredDataTypes);\n\tfor (const { type, contributedBy } of declaredDataTypes) {\n\t\tif (!isSqlDataType(type) || type.sql.storedAs === void 0) continue;\n\t\tconst storage = declaredById.get(type.sql.storedAs)?.type;\n\t\tif (storage !== void 0 && isSqlDataType(storage)) {\n\t\t\tconst further = storage.sql.storedAs;\n\t\t\tif (further === void 0) continue;\n\t\t\tthrow new InternalError(`${capitalized(describe(type))} is stored as \"${storage.id}\", which is itself stored as \"${further}\". Name \"${further}\" as the type it is stored as.`);\n\t\t}\n\t\tthrow runtimeError(\"CONTRACT.DATA_TYPE_UNREGISTERED\", `Data type \"${type.id}\" is stored as data type \"${type.sql.storedAs}\", which no component registers. Contributed by \"${contributedBy}\".`, {\n\t\t\tdataType: type.sql.storedAs,\n\t\t\tcontributedBy\n\t\t});\n\t}\n\tfor (const codec of codecDescriptors) {\n\t\tconst represented = declaredById.get(codec.dataType)?.type;\n\t\tif (represented === void 0 || isSqlDataType(represented)) continue;\n\t\tthrow new InternalError(`Codec \"${codec.codecId}\" represents ${describe(represented)}, which is not a SQL data type. In a SQL stack a codec represents a column's type, so its data type is declared with sqlDataType.`);\n\t}\n}\n//#endregion\n//#region src/core/diff/verifier-disposition.ts\n/**\n* Classifies a codec `verifyType` hook finding into the target-neutral\n* categories the framework grades. A storage type is a named type instance\n* (e.g. a native enum); the only shape divergence it can carry is a change\n* to its value set, so a paired mismatch always classifies as `valueDrift`.\n*/\nfunction classifyStorageTypeDiffIssue(issue) {\n\tif (issueOutcome(issue) === \"not-found\") return \"declaredMissing\";\n\tif (issueOutcome(issue) === \"not-expected\") return \"extraAuxiliary\";\n\treturn \"valueDrift\";\n}\nfunction verifierDisposition(controlPolicy, issue) {\n\treturn dispositionForCategory(controlPolicy, classifyStorageTypeDiffIssue(issue));\n}\n//#endregion\n//#region src/core/diff/schema-verify.ts\nfunction issueNode(issue) {\n\tconst node = issue.expected ?? issue.actual;\n\tif (node === void 0) return void 0;\n\treturn blindCast(node);\n}\n/**\n* Resolves an issue's framework-neutral {@link DiffSubjectGranularity} on\n* demand, from the issue's node's `nodeKind` via the target-provided\n* `granularityOf` map. The node carries only its `nodeKind` identity, never a\n* classification, and nothing is stamped onto the issue — every consumer\n* (the family verdict below, the framework aggregate's unclaimed-elements\n* sweep via {@link import('@internal/framework-components/control').SchemaSubjectClassifierCapable})\n* calls this the same way, resolved by the family/target that owns the node\n* vocabulary. `undefined` for an issue with no node.\n*/\nfunction classifyDiffSubjectGranularity(issue, granularityOf) {\n\tconst node = issueNode(issue);\n\treturn node === void 0 ? void 0 : granularityOf(node.nodeKind);\n}\n/**\n* Resolves an issue's storage `entityKind` on demand, from the issue's\n* node's `nodeKind` via the target-provided `entityKindOf` map — the sibling\n* of {@link classifyDiffSubjectGranularity}, called the same way by the same\n* consumers (via\n* {@link import('@internal/framework-components/control').SchemaSubjectClassifierCapable}).\n* `undefined` for an issue with no node, or for a node kind with no storage\n* entity of its own.\n*/\nfunction classifyDiffEntityKind(issue, entityKindOf) {\n\tconst node = issueNode(issue);\n\treturn node === void 0 ? void 0 : entityKindOf(node.nodeKind);\n}\n/**\n* Re-keys the legacy `classifySqlVerifierIssueKind` category mapping on the\n* issue's {@link DiffSubjectGranularity} (resolved via `granularityOf`) + the\n* issue reason. The vocabulary maps one-to-one: an undeclared live entity or\n* namespace is `extraTopLevelObject`, an undeclared live field\n* `extraNestedElement`, undeclared auxiliaries (constraints, indexes,\n* defaults) and structural leaves (policies) `extraAuxiliary`; every paired\n* divergence is `declaredIncompatible`; anything the database lacks is\n* `declaredMissing`.\n* `granularityOf` is the target's classifier, so target and extension node\n* kinds classify without the family importing them.\n*/\nfunction classifySqlDiffIssue(issue, granularityOf) {\n\tif (issueOutcome(issue) === \"not-found\") return \"declaredMissing\";\n\tif (issueOutcome(issue) === \"not-expected\") {\n\t\tconst granularity = classifyDiffSubjectGranularity(issue, granularityOf);\n\t\tif (granularity === \"entity\" || granularity === \"namespace\") return \"extraTopLevelObject\";\n\t\tif (granularity === \"field\") return \"extraNestedElement\";\n\t\treturn \"extraAuxiliary\";\n\t}\n\treturn \"declaredIncompatible\";\n}\n/**\n* Whether a `not-expected` issue is a strict-mode-only finding. The legacy\n* walk detected every relational extra (namespaces, entities, fields, and\n* their auxiliaries) only under `--strict`; the structural diff (roots, RLS\n* policies, roles) was never strict-gated — its extras fail in both modes.\n* Keyed on the issue's granularity, resolved via `granularityOf`.\n*/\nfunction isStrictOnlyExtra(issue, granularityOf) {\n\tconst granularity = classifyDiffSubjectGranularity(issue, granularityOf);\n\treturn granularity === \"namespace\" || granularity === \"entity\" || granularity === \"field\" || granularity === \"auxiliary\";\n}\n/**\n* Applies the two consumer filters to a diff issue list: strict gating\n* (relational `not-expected` findings drop in lenient mode) and\n* control-policy disposition (each surviving issue grades against its\n* subject table's effective policy; suppressed issues drop, `observed`\n* subjects warn). The verify verdict is `failures.length === 0`.\n*/\nfunction computeSqlDiffVerdict(input) {\n\tconst failures = [];\n\tconst warnings = [];\n\tfor (const issue of input.issues) {\n\t\tif (!input.strict && issueOutcome(issue) === \"not-expected\" && isStrictOnlyExtra(issue, input.granularityOf)) continue;\n\t\tconst disposition = dispositionForCategory(effectiveControlPolicy(input.resolveControlPolicy(issue), input.defaultControlPolicy), classifySqlDiffIssue(issue, input.granularityOf));\n\t\tif (disposition === \"suppress\") continue;\n\t\tif (disposition === \"warn\") {\n\t\t\twarnings.push(issue);\n\t\t\tcontinue;\n\t\t}\n\t\tfailures.push(issue);\n\t}\n\treturn {\n\t\tfailures,\n\t\twarnings\n\t};\n}\nfunction computeStorageTypeVerdict(input) {\n\tconst failures = [];\n\tconst warnings = [];\n\tconst policy = effectiveControlPolicy(void 0, input.contract.defaultControlPolicy);\n\tfor (const pair of input.namespacePairs) {\n\t\tif (pair.actual === void 0) continue;\n\t\tfor (const [typeName, typeInstance] of Object.entries(input.contract.storage.types ?? {})) {\n\t\t\tif (!isStorageTypeInstance(typeInstance)) continue;\n\t\t\tconst hook = input.codecHooks.get(typeInstance.codecId);\n\t\t\tif (!hook?.verifyType) continue;\n\t\t\tconst typeIssues = hook.verifyType({\n\t\t\t\ttypeName,\n\t\t\t\ttypeInstance,\n\t\t\t\tschema: pair.actual\n\t\t\t});\n\t\t\tfor (const issue of typeIssues) {\n\t\t\t\tconst disposition = verifierDisposition(policy, issue);\n\t\t\t\tif (disposition === \"suppress\") continue;\n\t\t\t\tif (disposition === \"warn\") {\n\t\t\t\t\twarnings.push(issue);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfailures.push(issue);\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tfailures,\n\t\twarnings\n\t};\n}\n/**\n* THE SQL schema verify: runs the target's full-tree node diff, grades it\n* through the family's post-diff filters (strict gating + control-policy\n* disposition) plus the codec `verifyType` hook findings, and wraps the\n* verdict in the issue-based result envelope. `ok` holds exactly when both\n* issue lists are empty — the lists carry the verdict's failures.\n*/\nfunction verifySqlSchemaByDiff(input) {\n\tconst startTime = Date.now();\n\tconst verdictDiff = input.diffSchema({\n\t\tcontract: input.contract,\n\t\tschema: input.schema,\n\t\tframeworkComponents: input.frameworkComponents\n\t});\n\tconst diffVerdict = computeSqlDiffVerdict({\n\t\tissues: verdictDiff.issues,\n\t\tresolveControlPolicy: verdictDiff.resolveControlPolicy,\n\t\tstrict: input.strict,\n\t\tdefaultControlPolicy: input.contract.defaultControlPolicy,\n\t\tgranularityOf: input.granularityOf\n\t});\n\tconst storageTypeVerdict = computeStorageTypeVerdict({\n\t\tcontract: input.contract,\n\t\tnamespacePairs: verdictDiff.namespacePairs,\n\t\tcodecHooks: extractCodecControlHooks(input.frameworkComponents)\n\t});\n\tconst failCount = diffVerdict.failures.length + storageTypeVerdict.failures.length;\n\tconst ok = failCount === 0;\n\tconst profileHash = \"profileHash\" in input.contract && typeof input.contract.profileHash === \"string\" ? input.contract.profileHash : void 0;\n\treturn {\n\t\tok,\n\t\t...ok ? {} : { code: VERIFY_CODE_SCHEMA_FAILURE },\n\t\tsummary: ok ? \"Database schema satisfies contract\" : `Database schema does not satisfy contract (${failCount} failure${failCount === 1 ? \"\" : \"s\"})`,\n\t\tcontract: {\n\t\t\tstorageHash: input.contract.storage.storageHash,\n\t\t\t...ifDefined(\"profileHash\", profileHash)\n\t\t},\n\t\ttarget: {\n\t\t\texpected: input.contract.target,\n\t\t\tactual: input.contract.target\n\t\t},\n\t\tschema: {\n\t\t\tissues: [...diffVerdict.failures, ...storageTypeVerdict.failures],\n\t\t\twarnings: { issues: [...diffVerdict.warnings, ...storageTypeVerdict.warnings] }\n\t\t},\n\t\tmeta: { strict: input.strict },\n\t\ttimings: { total: Date.now() - startTime }\n\t};\n}\n//#endregion\nexport { computeStorageTypeVerdict as a, extractCodecControlHooks as c, computeSqlDiffVerdict as i, classifyDiffSubjectGranularity as n, verifySqlSchemaByDiff as o, classifySqlDiffIssue as r, enforceSqlDataTypeInvariants as s, classifyDiffEntityKind as t };\n\n//# sourceMappingURL=schema-verify-BwRdzbHb.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"schema-verify-BwRdzbHb-nDeE75xa.mjs","names":[],"sources":["../../../../2-sql/9-family/dist/schema-verify-BwRdzbHb.mjs"],"sourcesContent":["import { assertNothingCastsFromSqlExpression } from \"@internal/sql-contract/sql-expression\";\nimport { VERIFY_CODE_SCHEMA_FAILURE, assertUniqueCodecOwner, dispositionForCategory, issueOutcome } from \"@internal/framework-components/control\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { runtimeError } from \"@internal/framework-components/components\";\nimport { findSqlDataTypeCollision, isSqlDataType } from \"@internal/sql-contract/data-type\";\nimport { isStorageTypeInstance } from \"@internal/sql-contract/types\";\nimport { effectiveControlPolicy } from \"@internal/contract/types\";\n//#region src/core/assembly.ts\nfunction hasCodecControlHooks(descriptor) {\n\tif (typeof descriptor !== \"object\" || descriptor === null) return false;\n\tconst hooks = blindCast(descriptor).types?.codecTypes?.controlPlaneHooks;\n\treturn hooks !== null && hooks !== void 0 && typeof hooks === \"object\";\n}\nfunction extractCodecControlHooks(descriptors) {\n\tconst hooks = /* @__PURE__ */ new Map();\n\tconst owners = /* @__PURE__ */ new Map();\n\tfor (const descriptor of descriptors) {\n\t\tif (typeof descriptor !== \"object\" || descriptor === null) continue;\n\t\tif (!hasCodecControlHooks(descriptor)) continue;\n\t\tconst controlPlaneHooks = descriptor.types.codecTypes.controlPlaneHooks;\n\t\tfor (const [codecId, hook] of Object.entries(controlPlaneHooks)) {\n\t\t\tassertUniqueCodecOwner({\n\t\t\t\tcodecId,\n\t\t\t\towners,\n\t\t\t\tdescriptorId: descriptor.id,\n\t\t\t\tentityLabel: \"control hooks\",\n\t\t\t\tentityOwnershipLabel: \"owner\"\n\t\t\t});\n\t\t\thooks.set(codecId, hook);\n\t\t\towners.set(codecId, descriptor.id);\n\t\t}\n\t}\n\treturn hooks;\n}\n/**\n* The SQL family's checks of the stack's data types and codecs, each naming the contributor:\n* no two SQL data types would both recognise one reported type, by colliding claiming texts or by\n* claiming the same kind; no data type casts from `sql/expression`; every type stored as another\n* names a registered SQL data type; and every codec represents a\n* SQL data type, because a codec represents a column's type and `sql/expression` is the one data\n* type no column has.\n*/\nfunction enforceSqlDataTypeInvariants(declaredDataTypes, codecDescriptors) {\n\tconst declaredById = new Map(declaredDataTypes.map((declared) => [declared.type.id, declared]));\n\tconst capitalized = (text) => `${text.charAt(0).toUpperCase()}${text.slice(1)}`;\n\tconst describe = (type) => `data type \"${type.id}\" contributed by \"${declaredById.get(type.id)?.contributedBy ?? \"<unknown>\"}\"`;\n\tconst collision = findSqlDataTypeCollision(declaredDataTypes.map(({ type }) => type));\n\tif (collision !== void 0) {\n\t\tconst { first, second, claims } = collision;\n\t\tif (claims.by === \"kind\") throw new InternalError(`The ${describe(first)} and the ${describe(second)} both claim the kind \"${claims.kind}\".`);\n\t\tthrow new InternalError(`The ${describe(first)} claims the text \"${claims.first}\", which collides with the text \"${claims.second}\" claimed by the ${describe(second)}.`);\n\t}\n\tassertNothingCastsFromSqlExpression(declaredDataTypes);\n\tfor (const { type, contributedBy } of declaredDataTypes) {\n\t\tif (!isSqlDataType(type) || type.sql.storedAs === void 0) continue;\n\t\tconst storage = declaredById.get(type.sql.storedAs)?.type;\n\t\tif (storage !== void 0 && isSqlDataType(storage)) {\n\t\t\tconst further = storage.sql.storedAs;\n\t\t\tif (further === void 0) continue;\n\t\t\tthrow new InternalError(`${capitalized(describe(type))} is stored as \"${storage.id}\", which is itself stored as \"${further}\". Name \"${further}\" as the type it is stored as.`);\n\t\t}\n\t\tthrow runtimeError(\"CONTRACT.DATA_TYPE_UNREGISTERED\", `Data type \"${type.id}\" is stored as data type \"${type.sql.storedAs}\", which no component registers. Contributed by \"${contributedBy}\".`, {\n\t\t\tdataType: type.sql.storedAs,\n\t\t\tcontributedBy\n\t\t});\n\t}\n\tfor (const codec of codecDescriptors) {\n\t\tconst represented = declaredById.get(codec.dataType)?.type;\n\t\tif (represented === void 0 || isSqlDataType(represented)) continue;\n\t\tthrow new InternalError(`Codec \"${codec.codecId}\" represents ${describe(represented)}, which is not a SQL data type. In a SQL stack a codec represents a column's type, so its data type is declared with sqlDataType.`);\n\t}\n}\n//#endregion\n//#region src/core/diff/verifier-disposition.ts\n/**\n* Classifies a codec `verifyType` hook finding into the target-neutral\n* categories the framework grades. A storage type is a named type instance\n* (e.g. a native enum); the only shape divergence it can carry is a change\n* to its value set, so a paired mismatch always classifies as `valueDrift`.\n*/\nfunction classifyStorageTypeDiffIssue(issue) {\n\tif (issueOutcome(issue) === \"not-found\") return \"declaredMissing\";\n\tif (issueOutcome(issue) === \"not-expected\") return \"extraAuxiliary\";\n\treturn \"valueDrift\";\n}\nfunction verifierDisposition(controlPolicy, issue) {\n\treturn dispositionForCategory(controlPolicy, classifyStorageTypeDiffIssue(issue));\n}\n//#endregion\n//#region src/core/diff/schema-verify.ts\nfunction issueNode(issue) {\n\tconst node = issue.expected ?? issue.actual;\n\tif (node === void 0) return void 0;\n\treturn blindCast(node);\n}\n/**\n* Resolves an issue's framework-neutral {@link DiffSubjectGranularity} on\n* demand, from the issue's node's `nodeKind` via the target-provided\n* `granularityOf` map. The node carries only its `nodeKind` identity, never a\n* classification, and nothing is stamped onto the issue — every consumer\n* (the family verdict below, the framework aggregate's unclaimed-elements\n* sweep via {@link import('@internal/framework-components/control').SchemaSubjectClassifierCapable})\n* calls this the same way, resolved by the family/target that owns the node\n* vocabulary. `undefined` for an issue with no node.\n*/\nfunction classifyDiffSubjectGranularity(issue, granularityOf) {\n\tconst node = issueNode(issue);\n\treturn node === void 0 ? void 0 : granularityOf(node.nodeKind);\n}\n/**\n* Resolves an issue's storage `entityKind` on demand, from the issue's\n* node's `nodeKind` via the target-provided `entityKindOf` map — the sibling\n* of {@link classifyDiffSubjectGranularity}, called the same way by the same\n* consumers (via\n* {@link import('@internal/framework-components/control').SchemaSubjectClassifierCapable}).\n* `undefined` for an issue with no node, or for a node kind with no storage\n* entity of its own.\n*/\nfunction classifyDiffEntityKind(issue, entityKindOf) {\n\tconst node = issueNode(issue);\n\treturn node === void 0 ? void 0 : entityKindOf(node.nodeKind);\n}\n/**\n* Re-keys the legacy `classifySqlVerifierIssueKind` category mapping on the\n* issue's {@link DiffSubjectGranularity} (resolved via `granularityOf`) + the\n* issue reason. The vocabulary maps one-to-one: an undeclared live entity or\n* namespace is `extraTopLevelObject`, an undeclared live field\n* `extraNestedElement`, undeclared auxiliaries (constraints, indexes,\n* defaults) and structural leaves (policies) `extraAuxiliary`; every paired\n* divergence is `declaredIncompatible`; anything the database lacks is\n* `declaredMissing`.\n* `granularityOf` is the target's classifier, so target and extension node\n* kinds classify without the family importing them.\n*/\nfunction classifySqlDiffIssue(issue, granularityOf) {\n\tif (issueOutcome(issue) === \"not-found\") return \"declaredMissing\";\n\tif (issueOutcome(issue) === \"not-expected\") {\n\t\tconst granularity = classifyDiffSubjectGranularity(issue, granularityOf);\n\t\tif (granularity === \"entity\" || granularity === \"namespace\") return \"extraTopLevelObject\";\n\t\tif (granularity === \"field\") return \"extraNestedElement\";\n\t\treturn \"extraAuxiliary\";\n\t}\n\treturn \"declaredIncompatible\";\n}\n/**\n* Whether a `not-expected` issue is a strict-mode-only finding. The legacy\n* walk detected every relational extra (namespaces, entities, fields, and\n* their auxiliaries) only under `--strict`; the structural diff (roots, RLS\n* policies, roles) was never strict-gated — its extras fail in both modes.\n* Keyed on the issue's granularity, resolved via `granularityOf`.\n*/\nfunction isStrictOnlyExtra(issue, granularityOf) {\n\tconst granularity = classifyDiffSubjectGranularity(issue, granularityOf);\n\treturn granularity === \"namespace\" || granularity === \"entity\" || granularity === \"field\" || granularity === \"auxiliary\";\n}\n/**\n* Applies the two consumer filters to a diff issue list: strict gating\n* (relational `not-expected` findings drop in lenient mode) and\n* control-policy disposition (each surviving issue grades against its\n* subject table's effective policy; suppressed issues drop, `observed`\n* subjects warn). The verify verdict is `failures.length === 0`.\n*/\nfunction computeSqlDiffVerdict(input) {\n\tconst failures = [];\n\tconst warnings = [];\n\tfor (const issue of input.issues) {\n\t\tif (!input.strict && issueOutcome(issue) === \"not-expected\" && isStrictOnlyExtra(issue, input.granularityOf)) continue;\n\t\tconst disposition = dispositionForCategory(effectiveControlPolicy(input.resolveControlPolicy(issue), input.defaultControlPolicy), classifySqlDiffIssue(issue, input.granularityOf));\n\t\tif (disposition === \"suppress\") continue;\n\t\tif (disposition === \"warn\") {\n\t\t\twarnings.push(issue);\n\t\t\tcontinue;\n\t\t}\n\t\tfailures.push(issue);\n\t}\n\treturn {\n\t\tfailures,\n\t\twarnings\n\t};\n}\nfunction computeStorageTypeVerdict(input) {\n\tconst failures = [];\n\tconst warnings = [];\n\tconst policy = effectiveControlPolicy(void 0, input.contract.defaultControlPolicy);\n\tfor (const pair of input.namespacePairs) {\n\t\tif (pair.actual === void 0) continue;\n\t\tfor (const [typeName, typeInstance] of Object.entries(input.contract.storage.types ?? {})) {\n\t\t\tif (!isStorageTypeInstance(typeInstance)) continue;\n\t\t\tconst hook = input.codecHooks.get(typeInstance.codecId);\n\t\t\tif (!hook?.verifyType) continue;\n\t\t\tconst typeIssues = hook.verifyType({\n\t\t\t\ttypeName,\n\t\t\t\ttypeInstance,\n\t\t\t\tschema: pair.actual\n\t\t\t});\n\t\t\tfor (const issue of typeIssues) {\n\t\t\t\tconst disposition = verifierDisposition(policy, issue);\n\t\t\t\tif (disposition === \"suppress\") continue;\n\t\t\t\tif (disposition === \"warn\") {\n\t\t\t\t\twarnings.push(issue);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfailures.push(issue);\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tfailures,\n\t\twarnings\n\t};\n}\n/**\n* THE SQL schema verify: runs the target's full-tree node diff, grades it\n* through the family's post-diff filters (strict gating + control-policy\n* disposition) plus the codec `verifyType` hook findings, and wraps the\n* verdict in the issue-based result envelope. `ok` holds exactly when both\n* issue lists are empty — the lists carry the verdict's failures.\n*/\nfunction verifySqlSchemaByDiff(input) {\n\tconst startTime = Date.now();\n\tconst verdictDiff = input.diffSchema({\n\t\tcontract: input.contract,\n\t\tschema: input.schema,\n\t\tframeworkComponents: input.frameworkComponents\n\t});\n\tconst diffVerdict = computeSqlDiffVerdict({\n\t\tissues: verdictDiff.issues,\n\t\tresolveControlPolicy: verdictDiff.resolveControlPolicy,\n\t\tstrict: input.strict,\n\t\tdefaultControlPolicy: input.contract.defaultControlPolicy,\n\t\tgranularityOf: input.granularityOf\n\t});\n\tconst storageTypeVerdict = computeStorageTypeVerdict({\n\t\tcontract: input.contract,\n\t\tnamespacePairs: verdictDiff.namespacePairs,\n\t\tcodecHooks: extractCodecControlHooks(input.frameworkComponents)\n\t});\n\tconst failCount = diffVerdict.failures.length + storageTypeVerdict.failures.length;\n\tconst ok = failCount === 0;\n\tconst profileHash = \"profileHash\" in input.contract && typeof input.contract.profileHash === \"string\" ? input.contract.profileHash : void 0;\n\treturn {\n\t\tok,\n\t\t...ok ? {} : { code: VERIFY_CODE_SCHEMA_FAILURE },\n\t\tsummary: ok ? \"Database schema satisfies contract\" : `Database schema does not satisfy contract (${failCount} failure${failCount === 1 ? \"\" : \"s\"})`,\n\t\tcontract: {\n\t\t\tstorageHash: input.contract.storage.storageHash,\n\t\t\t...ifDefined(\"profileHash\", profileHash)\n\t\t},\n\t\ttarget: {\n\t\t\texpected: input.contract.target,\n\t\t\tactual: input.contract.target\n\t\t},\n\t\tschema: {\n\t\t\tissues: [...diffVerdict.failures, ...storageTypeVerdict.failures],\n\t\t\twarnings: { issues: [...diffVerdict.warnings, ...storageTypeVerdict.warnings] }\n\t\t},\n\t\tmeta: { strict: input.strict },\n\t\ttimings: { total: Date.now() - startTime }\n\t};\n}\n//#endregion\nexport { computeStorageTypeVerdict as a, extractCodecControlHooks as c, computeSqlDiffVerdict as i, classifyDiffSubjectGranularity as n, verifySqlSchemaByDiff as o, classifySqlDiffIssue as r, enforceSqlDataTypeInvariants as s, classifyDiffEntityKind as t };\n\n//# sourceMappingURL=schema-verify-BwRdzbHb.mjs.map"],"mappings":";;;;;;;;;;AAUA,SAAS,qBAAqB,YAAY;CACzC,IAAI,OAAO,eAAe,YAAY,eAAe,MAAM,OAAO;CAClE,MAAM,QAAQ,UAAU,UAAU,CAAC,CAAC,OAAO,YAAY;CACvD,OAAO,UAAU,QAAQ,UAAU,KAAK,KAAK,OAAO,UAAU;AAC/D;AACA,SAAS,yBAAyB,aAAa;CAC9C,MAAM,wBAAwB,IAAI,IAAI;CACtC,MAAM,yBAAyB,IAAI,IAAI;CACvC,KAAK,MAAM,cAAc,aAAa;EACrC,IAAI,OAAO,eAAe,YAAY,eAAe,MAAM;EAC3D,IAAI,CAAC,qBAAqB,UAAU,GAAG;EACvC,MAAM,oBAAoB,WAAW,MAAM,WAAW;EACtD,KAAK,MAAM,CAAC,SAAS,SAAS,OAAO,QAAQ,iBAAiB,GAAG;GAChE,uBAAuB;IACtB;IACA;IACA,cAAc,WAAW;IACzB,aAAa;IACb,sBAAsB;GACvB,CAAC;GACD,MAAM,IAAI,SAAS,IAAI;GACvB,OAAO,IAAI,SAAS,WAAW,EAAE;EAClC;CACD;CACA,OAAO;AACR;;;;;;;;;AASA,SAAS,6BAA6B,mBAAmB,kBAAkB;CAC1E,MAAM,eAAe,IAAI,IAAI,kBAAkB,KAAK,aAAa,CAAC,SAAS,KAAK,IAAI,QAAQ,CAAC,CAAC;CAC9F,MAAM,eAAe,SAAS,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,KAAK,MAAM,CAAC;CAC5E,MAAM,YAAY,SAAS,cAAc,KAAK,GAAG,oBAAoB,aAAa,IAAI,KAAK,EAAE,CAAC,EAAE,iBAAiB,YAAY;CAC7H,MAAM,YAAY,yBAAyB,kBAAkB,KAAK,EAAE,WAAW,IAAI,CAAC;CACpF,IAAI,cAAc,KAAK,GAAG;EACzB,MAAM,EAAE,OAAO,QAAQ,WAAW;EAClC,IAAI,OAAO,OAAO,QAAQ,MAAM,IAAI,cAAc,OAAO,SAAS,KAAK,EAAE,WAAW,SAAS,MAAM,EAAE,wBAAwB,OAAO,KAAK,GAAG;EAC5I,MAAM,IAAI,cAAc,OAAO,SAAS,KAAK,EAAE,oBAAoB,OAAO,MAAM,mCAAmC,OAAO,OAAO,mBAAmB,SAAS,MAAM,EAAE,EAAE;CACxK;CACA,oCAAoC,iBAAiB;CACrD,KAAK,MAAM,EAAE,MAAM,mBAAmB,mBAAmB;EACxD,IAAI,CAAC,cAAc,IAAI,KAAK,KAAK,IAAI,aAAa,KAAK,GAAG;EAC1D,MAAM,UAAU,aAAa,IAAI,KAAK,IAAI,QAAQ,CAAC,EAAE;EACrD,IAAI,YAAY,KAAK,KAAK,cAAc,OAAO,GAAG;GACjD,MAAM,UAAU,QAAQ,IAAI;GAC5B,IAAI,YAAY,KAAK,GAAG;GACxB,MAAM,IAAI,cAAc,GAAG,YAAY,SAAS,IAAI,CAAC,EAAE,iBAAiB,QAAQ,GAAG,gCAAgC,QAAQ,WAAW,QAAQ,+BAA+B;EAC9K;EACA,MAAM,aAAa,mCAAmC,cAAc,KAAK,GAAG,4BAA4B,KAAK,IAAI,SAAS,mDAAmD,cAAc,KAAK;GAC/L,UAAU,KAAK,IAAI;GACnB;EACD,CAAC;CACF;CACA,KAAK,MAAM,SAAS,kBAAkB;EACrC,MAAM,cAAc,aAAa,IAAI,MAAM,QAAQ,CAAC,EAAE;EACtD,IAAI,gBAAgB,KAAK,KAAK,cAAc,WAAW,GAAG;EAC1D,MAAM,IAAI,cAAc,UAAU,MAAM,QAAQ,eAAe,SAAS,WAAW,EAAE,kIAAkI;CACxN;AACD;;;;;;;AASA,SAAS,6BAA6B,OAAO;CAC5C,IAAI,aAAa,KAAK,MAAM,aAAa,OAAO;CAChD,IAAI,aAAa,KAAK,MAAM,gBAAgB,OAAO;CACnD,OAAO;AACR;AACA,SAAS,oBAAoB,eAAe,OAAO;CAClD,OAAO,uBAAuB,eAAe,6BAA6B,KAAK,CAAC;AACjF;AAGA,SAAS,UAAU,OAAO;CACzB,MAAM,OAAO,MAAM,YAAY,MAAM;CACrC,IAAI,SAAS,KAAK,GAAG,OAAO,KAAK;CACjC,OAAO,UAAU,IAAI;AACtB;;;;;;;;;;;AAWA,SAAS,+BAA+B,OAAO,eAAe;CAC7D,MAAM,OAAO,UAAU,KAAK;CAC5B,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,cAAc,KAAK,QAAQ;AAC9D;;;;;;;;;;AAUA,SAAS,uBAAuB,OAAO,cAAc;CACpD,MAAM,OAAO,UAAU,KAAK;CAC5B,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,aAAa,KAAK,QAAQ;AAC7D;;;;;;;;;;;;;AAaA,SAAS,qBAAqB,OAAO,eAAe;CACnD,IAAI,aAAa,KAAK,MAAM,aAAa,OAAO;CAChD,IAAI,aAAa,KAAK,MAAM,gBAAgB;EAC3C,MAAM,cAAc,+BAA+B,OAAO,aAAa;EACvE,IAAI,gBAAgB,YAAY,gBAAgB,aAAa,OAAO;EACpE,IAAI,gBAAgB,SAAS,OAAO;EACpC,OAAO;CACR;CACA,OAAO;AACR;;;;;;;;AAQA,SAAS,kBAAkB,OAAO,eAAe;CAChD,MAAM,cAAc,+BAA+B,OAAO,aAAa;CACvE,OAAO,gBAAgB,eAAe,gBAAgB,YAAY,gBAAgB,WAAW,gBAAgB;AAC9G;;;;;;;;AAQA,SAAS,sBAAsB,OAAO;CACrC,MAAM,WAAW,CAAC;CAClB,MAAM,WAAW,CAAC;CAClB,KAAK,MAAM,SAAS,MAAM,QAAQ;EACjC,IAAI,CAAC,MAAM,UAAU,aAAa,KAAK,MAAM,kBAAkB,kBAAkB,OAAO,MAAM,aAAa,GAAG;EAC9G,MAAM,cAAc,uBAAuB,uBAAuB,MAAM,qBAAqB,KAAK,GAAG,MAAM,oBAAoB,GAAG,qBAAqB,OAAO,MAAM,aAAa,CAAC;EAClL,IAAI,gBAAgB,YAAY;EAChC,IAAI,gBAAgB,QAAQ;GAC3B,SAAS,KAAK,KAAK;GACnB;EACD;EACA,SAAS,KAAK,KAAK;CACpB;CACA,OAAO;EACN;EACA;CACD;AACD;AACA,SAAS,0BAA0B,OAAO;CACzC,MAAM,WAAW,CAAC;CAClB,MAAM,WAAW,CAAC;CAClB,MAAM,SAAS,uBAAuB,KAAK,GAAG,MAAM,SAAS,oBAAoB;CACjF,KAAK,MAAM,QAAQ,MAAM,gBAAgB;EACxC,IAAI,KAAK,WAAW,KAAK,GAAG;EAC5B,KAAK,MAAM,CAAC,UAAU,iBAAiB,OAAO,QAAQ,MAAM,SAAS,QAAQ,SAAS,CAAC,CAAC,GAAG;GAC1F,IAAI,CAAC,sBAAsB,YAAY,GAAG;GAC1C,MAAM,OAAO,MAAM,WAAW,IAAI,aAAa,OAAO;GACtD,IAAI,CAAC,MAAM,YAAY;GACvB,MAAM,aAAa,KAAK,WAAW;IAClC;IACA;IACA,QAAQ,KAAK;GACd,CAAC;GACD,KAAK,MAAM,SAAS,YAAY;IAC/B,MAAM,cAAc,oBAAoB,QAAQ,KAAK;IACrD,IAAI,gBAAgB,YAAY;IAChC,IAAI,gBAAgB,QAAQ;KAC3B,SAAS,KAAK,KAAK;KACnB;IACD;IACA,SAAS,KAAK,KAAK;GACpB;EACD;CACD;CACA,OAAO;EACN;EACA;CACD;AACD;;;;;;;;AAQA,SAAS,sBAAsB,OAAO;CACrC,MAAM,YAAY,KAAK,IAAI;CAC3B,MAAM,cAAc,MAAM,WAAW;EACpC,UAAU,MAAM;EAChB,QAAQ,MAAM;EACd,qBAAqB,MAAM;CAC5B,CAAC;CACD,MAAM,cAAc,sBAAsB;EACzC,QAAQ,YAAY;EACpB,sBAAsB,YAAY;EAClC,QAAQ,MAAM;EACd,sBAAsB,MAAM,SAAS;EACrC,eAAe,MAAM;CACtB,CAAC;CACD,MAAM,qBAAqB,0BAA0B;EACpD,UAAU,MAAM;EAChB,gBAAgB,YAAY;EAC5B,YAAY,yBAAyB,MAAM,mBAAmB;CAC/D,CAAC;CACD,MAAM,YAAY,YAAY,SAAS,SAAS,mBAAmB,SAAS;CAC5E,MAAM,KAAK,cAAc;CACzB,MAAM,cAAc,iBAAiB,MAAM,YAAY,OAAO,MAAM,SAAS,gBAAgB,WAAW,MAAM,SAAS,cAAc,KAAK;CAC1I,OAAO;EACN;EACA,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,2BAA2B;EAChD,SAAS,KAAK,uCAAuC,8CAA8C,UAAU,UAAU,cAAc,IAAI,KAAK,IAAI;EAClJ,UAAU;GACT,aAAa,MAAM,SAAS,QAAQ;GACpC,GAAG,UAAU,eAAe,WAAW;EACxC;EACA,QAAQ;GACP,UAAU,MAAM,SAAS;GACzB,QAAQ,MAAM,SAAS;EACxB;EACA,QAAQ;GACP,QAAQ,CAAC,GAAG,YAAY,UAAU,GAAG,mBAAmB,QAAQ;GAChE,UAAU,EAAE,QAAQ,CAAC,GAAG,YAAY,UAAU,GAAG,mBAAmB,QAAQ,EAAE;EAC/E;EACA,MAAM,EAAE,QAAQ,MAAM,OAAO;EAC7B,SAAS,EAAE,OAAO,KAAK,IAAI,IAAI,UAAU;CAC1C;AACD"}
@@ -1,7 +1,7 @@
1
1
  import { t as sqlContractCanonicalizationHooks } from "./canonicalization-hooks-dmXkOR4a.mjs";
2
2
  import { f as composeSqlEntityKinds } from "./entity-kinds-CQ_jwgYv-DoOBWwvX.mjs";
3
3
  import { c as isMaterializedSqlNamespace, o as SqlStorage } from "./types-M_FeBD9w.mjs";
4
- import { f as validateSqlContractFully, i as createSqlContractSchema, s as resolveSqlToOneRelationStorage } from "./validators-Uim8vh59.mjs";
4
+ import { f as validateSqlContractFully, i as createSqlContractSchema, s as resolveSqlToOneRelationStorage } from "./validators-BCRydDG7.mjs";
5
5
  import { t as sqlFamilyError } from "./errors-B5g0xWro-mWH2C07F.mjs";
6
6
  import { ifDefined } from "@prisma/orm-framework/utils/defined";
7
7
  import { ContractValidationError } from "@prisma/orm-framework/contract/contract-validation-error";
@@ -193,4 +193,4 @@ var SqlContractSerializer = class extends SqlContractSerializerBase {
193
193
  //#endregion
194
194
  export { SqlContractSerializerBase as n, SqlContractSerializer as t };
195
195
 
196
- //# sourceMappingURL=sql-contract-serializer-sMY3prTx-BDTNHOOy.mjs.map
196
+ //# sourceMappingURL=sql-contract-serializer-sMY3prTx-BT6HdXAE.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sql-contract-serializer-sMY3prTx-BDTNHOOy.mjs","names":[],"sources":["../../../../2-sql/9-family/dist/sql-contract-serializer-sMY3prTx.mjs"],"sourcesContent":["import { t as sqlFamilyError } from \"./errors-B5g0xWro.mjs\";\nimport { hydrateNamespaceEntities } from \"@internal/framework-components/ir\";\nimport { sqlContractCanonicalizationHooks } from \"@internal/sql-contract/canonicalization-hooks\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { ContractValidationError } from \"@internal/contract/contract-validation-error\";\nimport { SqlStorage, isMaterializedSqlNamespace } from \"@internal/sql-contract/types\";\nimport { createSqlContractSchema, resolveSqlToOneRelationStorage, validateSqlContractFully } from \"@internal/sql-contract/validators\";\nimport { isPlainRecord as isPlainRecord$1 } from \"@internal/contract/is-plain-record\";\nimport { withDerivedToOneRelationNullability } from \"@internal/contract-authoring\";\nimport { composeSqlEntityKinds } from \"@internal/sql-contract/entity-kinds\";\nimport { type } from \"arktype\";\n//#region src/core/ir/sql-contract-serializer-base.ts\nconst NamespaceRawSchema = type({\n\tid: \"string\",\n\t\"kind?\": \"string\",\n\tentries: type({ \"+\": \"ignore\" })\n});\n/**\n* A `contract.json` written before to-one relations recorded `nullable` (rc.9 and earlier)\n* loads with the flag derived from storage: nullable when any local FK column is nullable or\n* cannot be resolved.\n*/\nfunction withSqlToOneRelationNullability(contract) {\n\tconst domain = withDerivedToOneRelationNullability(contract.domain, ({ model, relation }) => {\n\t\tconst { ownsForeignKey, columns } = resolveSqlToOneRelationStorage(contract, blindCast(model.storage), relation);\n\t\treturn {\n\t\t\townsReference: ownsForeignKey,\n\t\t\tlocalFieldNullability: columns.map((column) => column.nullable)\n\t\t};\n\t});\n\treturn {\n\t\t...contract,\n\t\tdomain\n\t};\n}\n/**\n* SQL family `ContractSerializer` abstract base. Carries the SQL-shared\n* deserialization pipeline:\n*\n* 1. `parseSqlContractStructure` validates the on-disk JSON envelope\n* against the SQL contract arktype schema (`validateSqlContractFully`)\n* and returns the validated flat-data shape.\n* 2. `hydrateSqlStorage` walks the validated `storage` subtree and\n* constructs the family-shared SQL Contract IR class hierarchy\n* (`SqlStorage` -> `StorageTable` -> `StorageColumn` / `PrimaryKey`\n* / …). The rest of the contract envelope is JSON-clean primitive\n* data and passes through unchanged.\n* 3. `constructTargetContract` is the target-specific extension hook;\n* defaults to identity. Targets that need to attach target-only\n* fields (e.g. target-specific derived storage fields) override it.\n*\n* Default `serializeContract` is identity over the contract — concrete\n* SQL targets ship JSON-clean class instances, so the contract value\n* can be stringified directly. The non-enumerable family-level `kind`\n* discriminator on `SqlNode` instances stays out of the persisted\n* envelope automatically. Targets that need to canonicalize on the way\n* out (key ordering, dropping computed-only fields) override\n* `serializeContract` directly.\n*/\nvar SqlContractSerializerBase = class {\n\tentityHydrationRegistry;\n\tdataTypes;\n\tcontractSchema;\n\tentryKinds;\n\tconstructor(entityHydrationRegistry = /* @__PURE__ */ new Map(), packEntityKinds = [], dataTypes = void 0) {\n\t\tthis.entityHydrationRegistry = entityHydrationRegistry;\n\t\tthis.dataTypes = dataTypes;\n\t\tthis.entryKinds = composeSqlEntityKinds(packEntityKinds);\n\t\tthis.contractSchema = packEntityKinds.length > 0 ? createSqlContractSchema(this.entryKinds) : void 0;\n\t}\n\tdeserializeContract(json) {\n\t\tconst validated = withSqlToOneRelationNullability(this.parseSqlContractStructure(json));\n\t\tconst hydrated = this.hydrateSqlStorage(validated);\n\t\treturn blindCast(this.constructTargetContract(hydrated));\n\t}\n\tserializeContract(contract) {\n\t\treturn blindCast(contract);\n\t}\n\tshouldPreserveEmpty = sqlContractCanonicalizationHooks.shouldPreserveEmpty;\n\tsortStorage = sqlContractCanonicalizationHooks.sortStorage;\n\thashCanonicalizationHooks = sqlContractCanonicalizationHooks;\n\tparseSqlContractStructure(json) {\n\t\treturn validateSqlContractFully(json, {\n\t\t\t...ifDefined(\"contractSchema\", this.contractSchema),\n\t\t\t...ifDefined(\"dataTypes\", this.dataTypes)\n\t\t});\n\t}\n\thydrateSqlStorage(validated) {\n\t\tconst types = validated.storage.types;\n\t\tconst hydratedTypes = types !== void 0 ? Object.fromEntries(Object.entries(types).map(([name, entry]) => [name, this.hydrateStorageTypeEntry(entry)])) : void 0;\n\t\tconst rawNamespaces = validated.storage.namespaces;\n\t\tif (rawNamespaces === void 0) throw new ContractValidationError(\"Contract storage.namespaces is required after structural validation\", \"structural\");\n\t\tconst hydratedNamespaces = this.hydrateSqlNamespaceMap(blindCast(rawNamespaces));\n\t\treturn {\n\t\t\t...validated,\n\t\t\tstorage: new SqlStorage({\n\t\t\t\tstorageHash: validated.storage.storageHash,\n\t\t\t\t...ifDefined(\"types\", hydratedTypes),\n\t\t\t\tnamespaces: blindCast(hydratedNamespaces)\n\t\t\t})\n\t\t};\n\t}\n\thydrateSqlNamespaceMap(namespaces) {\n\t\treturn Object.fromEntries(Object.entries(namespaces).map(([nsId, namespaceEntryRaw]) => {\n\t\t\tconst namespaceHydrated = this.hydrateSqlNamespaceEntry(nsId, namespaceEntryRaw);\n\t\t\tif (!isMaterializedSqlNamespace(namespaceHydrated)) throw sqlFamilyError(\"CONTRACT.PACK_CONTRIBUTION_INVALID\", `Target serializer bug: hydrateSqlNamespaceEntry for namespace \"${nsId}\" returned a non-NamespaceBase value. Override hydrateSqlNamespaceEntry to produce a target namespace concretion.`, {\n\t\t\t\twhy: \"The target contract serializer hydrated a namespace into a value that is not a materialized namespace concretion.\",\n\t\t\t\tfix: \"Fix the target package: its hydrateSqlNamespaceEntry override must return a target namespace concretion.\",\n\t\t\t\tmeta: { namespaceId: nsId }\n\t\t\t});\n\t\t\treturn [nsId, namespaceHydrated];\n\t\t}));\n\t}\n\thydrateSqlNamespaceEntry(nsId, raw) {\n\t\tconst id = typeof raw[\"id\"] === \"string\" ? raw[\"id\"] : nsId;\n\t\tconst parsed = NamespaceRawSchema({\n\t\t\t...raw,\n\t\t\tid\n\t\t});\n\t\tif (parsed instanceof type.errors) throw new ContractValidationError(`Namespace hydration failed: ${parsed.map((p) => p.message).join(\"; \")}`, \"structural\");\n\t\tconst entriesRaw = parsed.entries;\n\t\tconst rawEntriesMap = isPlainRecord$1(entriesRaw) ? entriesRaw : {};\n\t\tconst entriesInput = {};\n\t\tfor (const [key, innerMap] of Object.entries(rawEntriesMap)) entriesInput[key] = isPlainRecord$1(innerMap) ? innerMap : Object.freeze({});\n\t\tconst entriesOutput = hydrateNamespaceEntities(entriesInput, this.entryKinds, \"fail\", id);\n\t\tif (!Object.hasOwn(entriesOutput, \"table\")) entriesOutput[\"table\"] = {};\n\t\treturn blindCast({\n\t\t\tid,\n\t\t\tentries: entriesOutput\n\t\t});\n\t}\n\thydrateStorageTypeEntry(entry) {\n\t\tif (typeof entry !== \"object\" || entry === null) return entry;\n\t\tconst kind = isPlainRecord$1(entry) && \"kind\" in entry ? entry.kind : void 0;\n\t\tif (typeof kind !== \"string\") return entry;\n\t\tconst factory = this.entityHydrationRegistry.get(kind);\n\t\tif (factory === void 0) return entry;\n\t\treturn blindCast(factory(entry));\n\t}\n\tconstructTargetContract(hydrated) {\n\t\treturn blindCast(hydrated);\n\t}\n\t/**\n\t* Serializes a namespace's `entries` dict by walking every enumerable\n\t* kind — no kind is named here, mirroring the generic hydrate walk in\n\t* `hydrateSqlNamespaceEntry` above. `table` is the SQL family's one\n\t* universal base kind (every namespace carries it), so it is always\n\t* emitted, even when empty; every other kind — target- or\n\t* pack-contributed — is emitted only when it holds at least one entry.\n\t* A kind carried non-enumerable on `entries` is excluded here for free,\n\t* since `Object.entries` honors enumerability.\n\t*/\n\tserializeNamespaceEntries(entries) {\n\t\tconst out = { table: this.serializeEntries(entries[\"table\"] ?? {}) };\n\t\tfor (const [kind, record] of Object.entries(entries)) {\n\t\t\tif (kind === \"table\" || record == null || Object.keys(record).length === 0) continue;\n\t\t\tout[kind] = this.serializeEntries(record);\n\t\t}\n\t\treturn out;\n\t}\n\tserializeEntries(entries) {\n\t\tconst out = {};\n\t\tfor (const [name, entry] of Object.entries(entries)) out[name] = this.serializeJsonObject(entry);\n\t\treturn out;\n\t}\n\tserializeJsonObject(value) {\n\t\treturn blindCast(this.serializeJsonValue(value));\n\t}\n\tserializeJsonValue(value) {\n\t\treturn blindCast(JSON.parse(JSON.stringify(value)));\n\t}\n};\n//#endregion\n//#region src/core/ir/sql-contract-serializer.ts\n/**\n* Default SQL family `ContractSerializer` concretion. Inherits the\n* full SQL-shared deserialization pipeline (structural validation +\n* IR-class hydration) without pack-registered `storage.types`\n* hydration factories — targets that emit polymorphic JSON outside the\n* codec-typed envelope wire a target-specific subclass with a populated\n* registry (see Postgres). Family-level call sites instantiate this\n* default directly when no target serializer is supplied.\n*\n* Because this serializer has no target concretion, deserialization of\n* contracts that include namespace entries from JSON will throw unless\n* the caller provides pre-hydrated `NamespaceBase` instances. Production\n* paths always supply a target-specific serializer.\n*/\nvar SqlContractSerializer = class extends SqlContractSerializerBase {\n\tconstructor() {\n\t\tsuper(/* @__PURE__ */ new Map());\n\t}\n};\n//#endregion\nexport { SqlContractSerializerBase as n, SqlContractSerializer as t };\n\n//# sourceMappingURL=sql-contract-serializer-sMY3prTx.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"sql-contract-serializer-sMY3prTx-BT6HdXAE.mjs","names":[],"sources":["../../../../2-sql/9-family/dist/sql-contract-serializer-sMY3prTx.mjs"],"sourcesContent":["import { t as sqlFamilyError } from \"./errors-B5g0xWro.mjs\";\nimport { hydrateNamespaceEntities } from \"@internal/framework-components/ir\";\nimport { sqlContractCanonicalizationHooks } from \"@internal/sql-contract/canonicalization-hooks\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { ContractValidationError } from \"@internal/contract/contract-validation-error\";\nimport { SqlStorage, isMaterializedSqlNamespace } from \"@internal/sql-contract/types\";\nimport { createSqlContractSchema, resolveSqlToOneRelationStorage, validateSqlContractFully } from \"@internal/sql-contract/validators\";\nimport { isPlainRecord as isPlainRecord$1 } from \"@internal/contract/is-plain-record\";\nimport { withDerivedToOneRelationNullability } from \"@internal/contract-authoring\";\nimport { composeSqlEntityKinds } from \"@internal/sql-contract/entity-kinds\";\nimport { type } from \"arktype\";\n//#region src/core/ir/sql-contract-serializer-base.ts\nconst NamespaceRawSchema = type({\n\tid: \"string\",\n\t\"kind?\": \"string\",\n\tentries: type({ \"+\": \"ignore\" })\n});\n/**\n* A `contract.json` written before to-one relations recorded `nullable` (rc.9 and earlier)\n* loads with the flag derived from storage: nullable when any local FK column is nullable or\n* cannot be resolved.\n*/\nfunction withSqlToOneRelationNullability(contract) {\n\tconst domain = withDerivedToOneRelationNullability(contract.domain, ({ model, relation }) => {\n\t\tconst { ownsForeignKey, columns } = resolveSqlToOneRelationStorage(contract, blindCast(model.storage), relation);\n\t\treturn {\n\t\t\townsReference: ownsForeignKey,\n\t\t\tlocalFieldNullability: columns.map((column) => column.nullable)\n\t\t};\n\t});\n\treturn {\n\t\t...contract,\n\t\tdomain\n\t};\n}\n/**\n* SQL family `ContractSerializer` abstract base. Carries the SQL-shared\n* deserialization pipeline:\n*\n* 1. `parseSqlContractStructure` validates the on-disk JSON envelope\n* against the SQL contract arktype schema (`validateSqlContractFully`)\n* and returns the validated flat-data shape.\n* 2. `hydrateSqlStorage` walks the validated `storage` subtree and\n* constructs the family-shared SQL Contract IR class hierarchy\n* (`SqlStorage` -> `StorageTable` -> `StorageColumn` / `PrimaryKey`\n* / …). The rest of the contract envelope is JSON-clean primitive\n* data and passes through unchanged.\n* 3. `constructTargetContract` is the target-specific extension hook;\n* defaults to identity. Targets that need to attach target-only\n* fields (e.g. target-specific derived storage fields) override it.\n*\n* Default `serializeContract` is identity over the contract — concrete\n* SQL targets ship JSON-clean class instances, so the contract value\n* can be stringified directly. The non-enumerable family-level `kind`\n* discriminator on `SqlNode` instances stays out of the persisted\n* envelope automatically. Targets that need to canonicalize on the way\n* out (key ordering, dropping computed-only fields) override\n* `serializeContract` directly.\n*/\nvar SqlContractSerializerBase = class {\n\tentityHydrationRegistry;\n\tdataTypes;\n\tcontractSchema;\n\tentryKinds;\n\tconstructor(entityHydrationRegistry = /* @__PURE__ */ new Map(), packEntityKinds = [], dataTypes = void 0) {\n\t\tthis.entityHydrationRegistry = entityHydrationRegistry;\n\t\tthis.dataTypes = dataTypes;\n\t\tthis.entryKinds = composeSqlEntityKinds(packEntityKinds);\n\t\tthis.contractSchema = packEntityKinds.length > 0 ? createSqlContractSchema(this.entryKinds) : void 0;\n\t}\n\tdeserializeContract(json) {\n\t\tconst validated = withSqlToOneRelationNullability(this.parseSqlContractStructure(json));\n\t\tconst hydrated = this.hydrateSqlStorage(validated);\n\t\treturn blindCast(this.constructTargetContract(hydrated));\n\t}\n\tserializeContract(contract) {\n\t\treturn blindCast(contract);\n\t}\n\tshouldPreserveEmpty = sqlContractCanonicalizationHooks.shouldPreserveEmpty;\n\tsortStorage = sqlContractCanonicalizationHooks.sortStorage;\n\thashCanonicalizationHooks = sqlContractCanonicalizationHooks;\n\tparseSqlContractStructure(json) {\n\t\treturn validateSqlContractFully(json, {\n\t\t\t...ifDefined(\"contractSchema\", this.contractSchema),\n\t\t\t...ifDefined(\"dataTypes\", this.dataTypes)\n\t\t});\n\t}\n\thydrateSqlStorage(validated) {\n\t\tconst types = validated.storage.types;\n\t\tconst hydratedTypes = types !== void 0 ? Object.fromEntries(Object.entries(types).map(([name, entry]) => [name, this.hydrateStorageTypeEntry(entry)])) : void 0;\n\t\tconst rawNamespaces = validated.storage.namespaces;\n\t\tif (rawNamespaces === void 0) throw new ContractValidationError(\"Contract storage.namespaces is required after structural validation\", \"structural\");\n\t\tconst hydratedNamespaces = this.hydrateSqlNamespaceMap(blindCast(rawNamespaces));\n\t\treturn {\n\t\t\t...validated,\n\t\t\tstorage: new SqlStorage({\n\t\t\t\tstorageHash: validated.storage.storageHash,\n\t\t\t\t...ifDefined(\"types\", hydratedTypes),\n\t\t\t\tnamespaces: blindCast(hydratedNamespaces)\n\t\t\t})\n\t\t};\n\t}\n\thydrateSqlNamespaceMap(namespaces) {\n\t\treturn Object.fromEntries(Object.entries(namespaces).map(([nsId, namespaceEntryRaw]) => {\n\t\t\tconst namespaceHydrated = this.hydrateSqlNamespaceEntry(nsId, namespaceEntryRaw);\n\t\t\tif (!isMaterializedSqlNamespace(namespaceHydrated)) throw sqlFamilyError(\"CONTRACT.PACK_CONTRIBUTION_INVALID\", `Target serializer bug: hydrateSqlNamespaceEntry for namespace \"${nsId}\" returned a non-NamespaceBase value. Override hydrateSqlNamespaceEntry to produce a target namespace concretion.`, {\n\t\t\t\twhy: \"The target contract serializer hydrated a namespace into a value that is not a materialized namespace concretion.\",\n\t\t\t\tfix: \"Fix the target package: its hydrateSqlNamespaceEntry override must return a target namespace concretion.\",\n\t\t\t\tmeta: { namespaceId: nsId }\n\t\t\t});\n\t\t\treturn [nsId, namespaceHydrated];\n\t\t}));\n\t}\n\thydrateSqlNamespaceEntry(nsId, raw) {\n\t\tconst id = typeof raw[\"id\"] === \"string\" ? raw[\"id\"] : nsId;\n\t\tconst parsed = NamespaceRawSchema({\n\t\t\t...raw,\n\t\t\tid\n\t\t});\n\t\tif (parsed instanceof type.errors) throw new ContractValidationError(`Namespace hydration failed: ${parsed.map((p) => p.message).join(\"; \")}`, \"structural\");\n\t\tconst entriesRaw = parsed.entries;\n\t\tconst rawEntriesMap = isPlainRecord$1(entriesRaw) ? entriesRaw : {};\n\t\tconst entriesInput = {};\n\t\tfor (const [key, innerMap] of Object.entries(rawEntriesMap)) entriesInput[key] = isPlainRecord$1(innerMap) ? innerMap : Object.freeze({});\n\t\tconst entriesOutput = hydrateNamespaceEntities(entriesInput, this.entryKinds, \"fail\", id);\n\t\tif (!Object.hasOwn(entriesOutput, \"table\")) entriesOutput[\"table\"] = {};\n\t\treturn blindCast({\n\t\t\tid,\n\t\t\tentries: entriesOutput\n\t\t});\n\t}\n\thydrateStorageTypeEntry(entry) {\n\t\tif (typeof entry !== \"object\" || entry === null) return entry;\n\t\tconst kind = isPlainRecord$1(entry) && \"kind\" in entry ? entry.kind : void 0;\n\t\tif (typeof kind !== \"string\") return entry;\n\t\tconst factory = this.entityHydrationRegistry.get(kind);\n\t\tif (factory === void 0) return entry;\n\t\treturn blindCast(factory(entry));\n\t}\n\tconstructTargetContract(hydrated) {\n\t\treturn blindCast(hydrated);\n\t}\n\t/**\n\t* Serializes a namespace's `entries` dict by walking every enumerable\n\t* kind — no kind is named here, mirroring the generic hydrate walk in\n\t* `hydrateSqlNamespaceEntry` above. `table` is the SQL family's one\n\t* universal base kind (every namespace carries it), so it is always\n\t* emitted, even when empty; every other kind — target- or\n\t* pack-contributed — is emitted only when it holds at least one entry.\n\t* A kind carried non-enumerable on `entries` is excluded here for free,\n\t* since `Object.entries` honors enumerability.\n\t*/\n\tserializeNamespaceEntries(entries) {\n\t\tconst out = { table: this.serializeEntries(entries[\"table\"] ?? {}) };\n\t\tfor (const [kind, record] of Object.entries(entries)) {\n\t\t\tif (kind === \"table\" || record == null || Object.keys(record).length === 0) continue;\n\t\t\tout[kind] = this.serializeEntries(record);\n\t\t}\n\t\treturn out;\n\t}\n\tserializeEntries(entries) {\n\t\tconst out = {};\n\t\tfor (const [name, entry] of Object.entries(entries)) out[name] = this.serializeJsonObject(entry);\n\t\treturn out;\n\t}\n\tserializeJsonObject(value) {\n\t\treturn blindCast(this.serializeJsonValue(value));\n\t}\n\tserializeJsonValue(value) {\n\t\treturn blindCast(JSON.parse(JSON.stringify(value)));\n\t}\n};\n//#endregion\n//#region src/core/ir/sql-contract-serializer.ts\n/**\n* Default SQL family `ContractSerializer` concretion. Inherits the\n* full SQL-shared deserialization pipeline (structural validation +\n* IR-class hydration) without pack-registered `storage.types`\n* hydration factories — targets that emit polymorphic JSON outside the\n* codec-typed envelope wire a target-specific subclass with a populated\n* registry (see Postgres). Family-level call sites instantiate this\n* default directly when no target serializer is supplied.\n*\n* Because this serializer has no target concretion, deserialization of\n* contracts that include namespace entries from JSON will throw unless\n* the caller provides pre-hydrated `NamespaceBase` instances. Production\n* paths always supply a target-specific serializer.\n*/\nvar SqlContractSerializer = class extends SqlContractSerializerBase {\n\tconstructor() {\n\t\tsuper(/* @__PURE__ */ new Map());\n\t}\n};\n//#endregion\nexport { SqlContractSerializerBase as n, SqlContractSerializer as t };\n\n//# sourceMappingURL=sql-contract-serializer-sMY3prTx.mjs.map"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { t as contractError } from "./contract-errors-BCN6RVI5-5IHBF_lg.mjs";
2
2
  import { ifDefined } from "@prisma/orm-framework/utils/defined";
3
3
  import { assertDataTypeParams, dataType, dataTypeParams, objectSchemaKeys, schemaKeysAllowing } from "@prisma/orm-framework/components/codec";
4
+ import { canonicalizeJson } from "@prisma/orm-framework/components/utils";
4
5
  import { blindCast } from "@prisma/orm-framework/utils/casts";
5
6
  import { InternalError } from "@prisma/orm-framework/utils/internal-error";
6
7
  import { type } from "arktype";
7
- //#region ../../../2-sql/1-core/contract/dist/sql-data-type-DwLa_dK9.mjs
8
+ //#region ../../../2-sql/1-core/contract/dist/sql-data-type-BSi0X331.mjs
8
9
  const PLACEHOLDER = /\{([A-Za-z][A-Za-z0-9]*)\}/g;
9
10
  const LITERAL_CHARACTERS = /^[a-z0-9_ (),.]*$/;
10
11
  const REGEXP_SPECIAL = /[.*+?^${}()|[\]\\]/g;
@@ -70,22 +71,27 @@ function checkStoredAs(id, spec) {
70
71
  if (spec.claimsKind !== void 0) refuseDeclaration(id, "a type stored as another claims no kind.");
71
72
  }
72
73
  const identity = (params) => params;
73
- function acceptsParams(type$1, params) {
74
- return type$1.params === void 0 || !(type$1.params(params) instanceof type.errors);
74
+ function isParamsOf(schema, params) {
75
+ return schema === void 0 || !(schema(params) instanceof type.errors);
75
76
  }
76
77
  function checkNormalFormsWritten(type) {
77
78
  const written = new Set(type.sql.texts.filter((text) => text.written === true).map((text) => placeholderSetOf(text.text)));
78
79
  if (written.size === 0) return;
79
80
  const probes = [{}, ...type.sql.texts.map((text) => Object.fromEntries(placeholdersOf(text.text).map((name) => [name, 1])))];
80
81
  for (const probe of probes) {
81
- if (!acceptsParams(type, probe)) continue;
82
+ if (!isParamsOf(type.params, probe)) continue;
82
83
  const normalKeys = presentKeys(type.sql.normalize(probe));
83
84
  if (!written.has([...normalKeys].sort().join(","))) refuseDeclaration(type.id, `the parameters ${formatKeys(Object.keys(probe))} have the normal form ${formatKeys(normalKeys)}, which no written text takes.`);
84
85
  }
85
86
  }
86
87
  /** Declare a SQL data type, refusing a declaration that breaks a rule of the module. */
87
88
  function sqlDataType(id, spec) {
88
- const { params: _untypedParams, ...declared } = dataType(id, spec);
89
+ const declaredNormalize = spec.normalize ?? identity;
90
+ const normalize = (params) => isParamsOf(spec.params, params) ? declaredNormalize(params) : params;
91
+ const { params: _untypedParams, ...declared } = dataType(id, {
92
+ ...spec,
93
+ normalize
94
+ });
89
95
  const texts = spec.texts ?? [];
90
96
  const paramKeys = paramKeysOf(declared.id, spec.params);
91
97
  for (const text of texts) checkText(declared.id, text, paramKeys);
@@ -99,7 +105,7 @@ function sqlDataType(id, spec) {
99
105
  texts,
100
106
  claimsKind: spec.claimsKind,
101
107
  storedAs: spec.storedAs,
102
- normalize: spec.normalize ?? identity,
108
+ normalize,
103
109
  render: spec.render,
104
110
  fromReported: spec.fromReported
105
111
  }
@@ -199,6 +205,28 @@ function sqlStorageTypeId(dataTypeId, lookup) {
199
205
  const type = lookup.get(dataTypeId);
200
206
  return type !== void 0 && isSqlDataType(type) ? sqlStorageType(type, lookup).id : dataTypeId;
201
207
  }
208
+ /** The type a column is stored as, with its parameters in normal form, or the column's own id and parameters as written when the lookup does not know its data type as a SQL data type. */
209
+ function storedColumnType(column, lookup) {
210
+ const type = lookup.get(column.dataType);
211
+ if (type === void 0 || !isSqlDataType(type)) return {
212
+ id: column.dataType,
213
+ params: column.typeParams ?? {}
214
+ };
215
+ const storage = sqlStorageType(type, lookup);
216
+ return {
217
+ id: storage.id,
218
+ params: storage.sql.normalize(dataTypeParams(storage, column.typeParams ?? {}))
219
+ };
220
+ }
221
+ /**
222
+ * Whether two contract columns have the same type: the types their data types are stored as are one type, those types' parameters are equal in normal form, and both or neither are lists. ADR 254.
223
+ */
224
+ function sameSqlColumnType(a, b, lookup) {
225
+ const isList = (column) => column.many !== void 0 && column.many !== false;
226
+ const left = storedColumnType(a, lookup);
227
+ const right = storedColumnType(b, lookup);
228
+ return left.id === right.id && canonicalizeJson(left.params) === canonicalizeJson(right.params) && isList(a) === isList(b);
229
+ }
202
230
  /** The type a column of the codec `codecId` is stored as: {@link sqlStorageType} of the data type it represents. */
203
231
  function sqlStorageTypeOfCodec(codecId, lookups) {
204
232
  return sqlStorageType(sqlDataTypeOfCodec(codecId, lookups), lookups.dataTypeLookup);
@@ -329,14 +357,14 @@ function resolveWrittenSqlTypes(text, dataTypes) {
329
357
  return [];
330
358
  });
331
359
  }
332
- function resolvedWith(type$2, params) {
333
- if (type$2.params !== void 0 && type$2.params(params) instanceof type.errors) return void 0;
360
+ function resolvedWith(type$1, params) {
361
+ if (type$1.params !== void 0 && type$1.params(params) instanceof type.errors) return void 0;
334
362
  return {
335
- dataType: type$2.id,
336
- typeParams: type$2.sql.normalize(params)
363
+ dataType: type$1,
364
+ typeParams: type$1.sql.normalize(params)
337
365
  };
338
366
  }
339
367
  //#endregion
340
- export { resolveReportedSqlType as a, sqlDataType as c, sqlStorageTypeId as d, sqlStorageTypeOfCodec as f, validateSqlTypeParams as h, renderSqlTypeName as i, sqlDataTypeOfCodec as l, unquotedSqlBaseNameOfCodec as m, isSqlDataType as n, resolveWrittenSqlTypes as o, unquotedSqlBaseName as p, renderSqlCatalogText as r, sqlBaseName as s, findSqlDataTypeCollision as t, sqlStorageType as u };
368
+ export { resolveReportedSqlType as a, sqlBaseName as c, sqlStorageType as d, sqlStorageTypeId as f, validateSqlTypeParams as g, unquotedSqlBaseNameOfCodec as h, renderSqlTypeName as i, sqlDataType as l, unquotedSqlBaseName as m, isSqlDataType as n, resolveWrittenSqlTypes as o, sqlStorageTypeOfCodec as p, renderSqlCatalogText as r, sameSqlColumnType as s, findSqlDataTypeCollision as t, sqlDataTypeOfCodec as u };
341
369
 
342
- //# sourceMappingURL=sql-data-type-DwLa_dK9-2eTvrYhA.mjs.map
370
+ //# sourceMappingURL=sql-data-type-BSi0X331-OXbBFXDh.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-data-type-BSi0X331-OXbBFXDh.mjs","names":[],"sources":["../../../../2-sql/1-core/contract/dist/sql-data-type-BSi0X331.mjs"],"sourcesContent":["import { t as contractError } from \"./contract-errors-BCN6RVI5.mjs\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { assertDataTypeParams, dataType, dataTypeParams, objectSchemaKeys, schemaKeysAllowing } from \"@internal/framework-components/codec\";\nimport { canonicalizeJson } from \"@internal/framework-components/utils\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { type } from \"arktype\";\n//#region src/sql-data-type.ts\nconst PLACEHOLDER = /\\{([A-Za-z][A-Za-z0-9]*)\\}/g;\nconst LITERAL_CHARACTERS = /^[a-z0-9_ (),.]*$/;\nconst REGEXP_SPECIAL = /[.*+?^${}()|[\\]\\\\]/g;\nfunction paramKeysOf(id, schema) {\n\tif (schema === void 0) return [];\n\tconst keys = objectSchemaKeys(schema);\n\tif (keys === void 0) refuseDeclaration(id, \"its parameter schema must be an arktype object schema.\");\n\treturn keys;\n}\nfunction placeholdersOf(text) {\n\treturn [...text.matchAll(PLACEHOLDER)].map((match) => match[1] ?? \"\");\n}\nfunction placeholderSetOf(text) {\n\treturn [...placeholdersOf(text)].sort().join(\",\");\n}\nfunction patternOf(text, signedKeys = []) {\n\tconst placeholders = text.replace(REGEXP_SPECIAL, \"\\\\$&\").replace(/\\\\\\{([A-Za-z][A-Za-z0-9]*)\\\\\\}/g, (_, name) => signedKeys.includes(name) ? \"(-?\\\\d+)\" : \"(\\\\d+)\");\n\treturn new RegExp(`^${placeholders}$`);\n}\nfunction refuseDeclaration(id, why) {\n\tthrow new InternalError(`Data type ${id}: ${why}`);\n}\nfunction checkText(id, text, paramKeys) {\n\tconst quoted = JSON.stringify(text.text);\n\tconst refuse = (why) => refuseDeclaration(id, `the text ${quoted} ${why}.`);\n\tif (text.text === \"\") refuse(\"is empty\");\n\tif (text.text !== text.text.trim()) refuse(\"starts or ends with a space\");\n\tif (text.text.includes(\" \")) refuse(\"has two spaces in a row\");\n\tconst literal = text.text.replace(PLACEHOLDER, \"\");\n\tif (literal.includes(\"{\") || literal.includes(\"}\")) refuse(\"has a placeholder that is not written {name}\");\n\tif (!LITERAL_CHARACTERS.test(literal)) refuse(\"must be lower case and contain only letters, digits, spaces, brackets, commas, dots, underscores and placeholders\");\n\tfor (const name of placeholdersOf(text.text)) if (!paramKeys.includes(name)) refuse(`names the parameter {${name}}, which the type does not declare`);\n\tif (text.display === void 0) return;\n\tconst display = JSON.stringify(text.display);\n\tif (text.display.toLowerCase() !== text.text.toLowerCase()) refuse(`has the display ${display}, which differs from it beyond letter case`);\n\tif (placeholdersOf(text.display).join(\",\") !== placeholdersOf(text.text).join(\",\")) refuse(`has the display ${display}, which writes a placeholder differently`);\n}\nfunction checkMarks(id, texts) {\n\tconst marked = /* @__PURE__ */ new Map();\n\tfor (const text of texts) {\n\t\tconst key = placeholderSetOf(text.text);\n\t\tconst entry = marked.get(key) ?? {};\n\t\tfor (const mark of [\"written\", \"catalog\"]) {\n\t\t\tif (text[mark] !== true) continue;\n\t\t\tconst other = entry[mark];\n\t\t\tif (other !== void 0) refuseDeclaration(id, `the texts ${JSON.stringify(other)} and ${JSON.stringify(text.text)} have the same placeholders and are both ${mark}.`);\n\t\t\tentry[mark] = text.text;\n\t\t}\n\t\tmarked.set(key, entry);\n\t}\n}\nfunction checkKindClaim(id, spec) {\n\tif (spec.claimsKind === void 0) {\n\t\tif (spec.render !== void 0) refuseDeclaration(id, \"render is allowed only together with claimsKind.\");\n\t\tif (spec.fromReported !== void 0) refuseDeclaration(id, \"fromReported is allowed only together with claimsKind.\");\n\t\treturn;\n\t}\n\tif (spec.texts !== void 0) refuseDeclaration(id, \"a type that claims a kind declares no texts.\");\n}\nfunction checkStoredAs(id, spec) {\n\tif (spec.storedAs === void 0) return;\n\tif (spec.texts !== void 0) refuseDeclaration(id, \"a type stored as another declares no texts; its name is the name of the type it is stored as.\");\n\tif (spec.claimsKind !== void 0) refuseDeclaration(id, \"a type stored as another claims no kind.\");\n}\nconst identity = (params) => params;\nfunction isParamsOf(schema, params) {\n\treturn schema === void 0 || !(schema(params) instanceof type.errors);\n}\nfunction checkNormalFormsWritten(type) {\n\tconst written = new Set(type.sql.texts.filter((text) => text.written === true).map((text) => placeholderSetOf(text.text)));\n\tif (written.size === 0) return;\n\tconst probes = [{}, ...type.sql.texts.map((text) => Object.fromEntries(placeholdersOf(text.text).map((name) => [name, 1])))];\n\tfor (const probe of probes) {\n\t\tif (!isParamsOf(type.params, probe)) continue;\n\t\tconst normalKeys = presentKeys(type.sql.normalize(probe));\n\t\tif (!written.has([...normalKeys].sort().join(\",\"))) refuseDeclaration(type.id, `the parameters ${formatKeys(Object.keys(probe))} have the normal form ${formatKeys(normalKeys)}, which no written text takes.`);\n\t}\n}\n/** Declare a SQL data type, refusing a declaration that breaks a rule of the module. */\nfunction sqlDataType(id, spec) {\n\tconst declaredNormalize = spec.normalize ?? identity;\n\tconst normalize = (params) => isParamsOf(spec.params, params) ? declaredNormalize(params) : params;\n\tconst { params: _untypedParams, ...declared } = dataType(id, {\n\t\t...spec,\n\t\tnormalize\n\t});\n\tconst texts = spec.texts ?? [];\n\tconst paramKeys = paramKeysOf(declared.id, spec.params);\n\tfor (const text of texts) checkText(declared.id, text, paramKeys);\n\tcheckMarks(declared.id, texts);\n\tcheckKindClaim(declared.id, spec);\n\tcheckStoredAs(declared.id, spec);\n\tconst type = {\n\t\t...declared,\n\t\t...ifDefined(\"params\", spec.params),\n\t\tsql: {\n\t\t\ttexts,\n\t\t\tclaimsKind: spec.claimsKind,\n\t\t\tstoredAs: spec.storedAs,\n\t\t\tnormalize,\n\t\t\trender: spec.render,\n\t\t\tfromReported: spec.fromReported\n\t\t}\n\t};\n\tcheckNormalFormsWritten(type);\n\treturn type;\n}\n/** Whether `type` is a data type a SQL column can have. `sql/expression` is the one data type no column has. */\nfunction isSqlDataType(type) {\n\treturn \"sql\" in type;\n}\nfunction presentKeys(params) {\n\treturn Object.keys(params).filter((key) => params[key] !== void 0);\n}\nfunction formatKeys(keys) {\n\treturn `[${[...keys].sort().join(\", \")}]`;\n}\n/** The parameters, when `type` accepts them; otherwise `CONTRACT.TYPE_PARAMS_INVALID` naming each parameter it refuses. */\nfunction validateSqlTypeParams(type, params) {\n\tassertDataTypeParams(type, params);\n\treturn blindCast(params);\n}\nfunction pickText(type, mark, keys) {\n\tconst candidates = type.sql.texts.filter((text) => text[mark] === true);\n\tconst wanted = [...keys].sort().join(\",\");\n\tconst found = candidates.find((text) => placeholderSetOf(text.text) === wanted);\n\tif (found !== void 0) return found;\n\tconst verb = mark === \"written\" ? \"written\" : \"reported\";\n\tconst takes = candidates.length === 0 ? `it is never ${verb}` : `it is ${verb} with ${candidates.map((text) => formatKeys(placeholdersOf(text.text))).join(\", \")}`;\n\tthrow contractError(\"CONTRACT.TYPE_PARAMS_INVALID\", `${type.id} cannot be ${verb} with parameters ${formatKeys(keys)}; ${takes}`, { meta: {\n\t\tdataType: type.id,\n\t\tparameters: [...keys]\n\t} });\n}\nfunction substitute(type, text, params) {\n\treturn (text.display ?? text.text).replace(PLACEHOLDER, (_, name) => {\n\t\tconst value = params[name];\n\t\tif (!Number.isSafeInteger(value)) throw contractError(\"CONTRACT.TYPE_PARAMS_INVALID\", `${type.id}: the parameter ${name} is written into the type name and must be an integer`, { meta: {\n\t\t\tdataType: type.id,\n\t\t\tparameters: [name]\n\t\t} });\n\t\treturn String(value);\n\t});\n}\n/** The name of `type` with no parameters, for places where parameters must not appear. */\nfunction sqlBaseName(type, params) {\n\tif (type.sql.render !== void 0) return type.sql.render(validateSqlTypeParams(type, params));\n\tconst fewest = type.sql.texts.filter((text) => text.written === true).reduce((best, text) => best === void 0 || placeholdersOf(text.text).length < placeholdersOf(best.text).length ? text : best, void 0);\n\tif (fewest === void 0) throw new InternalError(`Data type ${type.id} has no written text and no render, so it has no base name.`);\n\tconst name = fewest.display ?? fewest.text;\n\tif (placeholdersOf(fewest.text).length === 0) return name;\n\tconst bracket = name.indexOf(\"(\");\n\treturn bracket === -1 ? name : name.slice(0, bracket);\n}\n/**\n* The base name of `type` with `params`, unquoted. It differs from {@link sqlBaseName} only for a\n* type that claims a kind: there it is the `typeName` parameter as written (`app.status`), where\n* `sqlBaseName` gives the quoted name `render` writes into SQL (`\"app\".\"status\"`).\n*/\nfunction unquotedSqlBaseName(type, params) {\n\tif (type.sql.claimsKind === void 0) return sqlBaseName(type, params);\n\tconst { typeName } = validateSqlTypeParams(type, params);\n\tif (typeof typeName !== \"string\") throw new InternalError(`Data type ${type.id} claims the kind \"${type.sql.claimsKind}\" but declares no string typeName parameter.`);\n\treturn typeName;\n}\nconst ADD_THE_CODEC_PACK = \"Add the pack that provides the codec, and so declares its data type, to the configuration: to `extensions` in prisma.config or in defineContract.\";\n/** The SQL data type the codec `codecId` represents. */\nfunction sqlDataTypeOfCodec(codecId, lookups) {\n\tconst descriptor = lookups.codecLookup.descriptorFor(codecId);\n\tif (descriptor === void 0) throw contractError(\"CONTRACT.CODEC_DESCRIPTOR_MISSING\", `No codec \"${codecId}\" is registered, so its column type cannot be named.`, {\n\t\tfix: ADD_THE_CODEC_PACK,\n\t\tmeta: { codecId }\n\t});\n\tconst type = lookups.dataTypeLookup.get(descriptor.dataType);\n\tif (type === void 0) throw contractError(\"CONTRACT.DATA_TYPE_UNREGISTERED\", `Codec \"${codecId}\" represents data type \"${descriptor.dataType}\", which no component registers.`, {\n\t\tfix: ADD_THE_CODEC_PACK,\n\t\tmeta: {\n\t\t\tcodecId,\n\t\t\tdataType: descriptor.dataType\n\t\t}\n\t});\n\tif (!isSqlDataType(type)) throw new InternalError(`Data type ${type.id} is not a SQL data type, so it has no type name.`);\n\treturn type;\n}\n/** The type a column of `type` is stored as, whose name DDL writes and the database reports: `type` itself unless it names another. */\nfunction sqlStorageType(type, lookup) {\n\tif (type.sql.storedAs === void 0) return type;\n\tconst storage = lookup.get(type.sql.storedAs);\n\tif (storage === void 0 || !isSqlDataType(storage)) throw contractError(\"CONTRACT.DATA_TYPE_UNREGISTERED\", `Data type \"${type.id}\" is stored as \"${type.sql.storedAs}\", which no component registers as a SQL data type.`, { meta: {\n\t\tdataType: type.sql.storedAs,\n\t\tstoredBy: type.id\n\t} });\n\treturn storage;\n}\n/** The id of the type a column of the data type `dataTypeId` is stored as: {@link sqlStorageType} of it, which refuses a storage type the lookup does not register, or `dataTypeId` itself when the lookup does not know it as a SQL data type. */\nfunction sqlStorageTypeId(dataTypeId, lookup) {\n\tconst type = lookup.get(dataTypeId);\n\treturn type !== void 0 && isSqlDataType(type) ? sqlStorageType(type, lookup).id : dataTypeId;\n}\n/** The type a column is stored as, with its parameters in normal form, or the column's own id and parameters as written when the lookup does not know its data type as a SQL data type. */\nfunction storedColumnType(column, lookup) {\n\tconst type = lookup.get(column.dataType);\n\tif (type === void 0 || !isSqlDataType(type)) return {\n\t\tid: column.dataType,\n\t\tparams: column.typeParams ?? {}\n\t};\n\tconst storage = sqlStorageType(type, lookup);\n\treturn {\n\t\tid: storage.id,\n\t\tparams: storage.sql.normalize(dataTypeParams(storage, column.typeParams ?? {}))\n\t};\n}\n/**\n* Whether two contract columns have the same type: the types their data types are stored as are one type, those types' parameters are equal in normal form, and both or neither are lists. ADR 254.\n*/\nfunction sameSqlColumnType(a, b, lookup) {\n\tconst isList = (column) => column.many !== void 0 && column.many !== false;\n\tconst left = storedColumnType(a, lookup);\n\tconst right = storedColumnType(b, lookup);\n\treturn left.id === right.id && canonicalizeJson(left.params) === canonicalizeJson(right.params) && isList(a) === isList(b);\n}\n/** The type a column of the codec `codecId` is stored as: {@link sqlStorageType} of the data type it represents. */\nfunction sqlStorageTypeOfCodec(codecId, lookups) {\n\treturn sqlStorageType(sqlDataTypeOfCodec(codecId, lookups), lookups.dataTypeLookup);\n}\n/** {@link unquotedSqlBaseName} of the type a column of the codec `codecId` is stored as. */\nfunction unquotedSqlBaseNameOfCodec(codecId, typeParams, lookups) {\n\tconst type = sqlStorageTypeOfCodec(codecId, lookups);\n\treturn unquotedSqlBaseName(type, dataTypeParams(type, typeParams));\n}\n/** The text a migration writes for `type` with the raw `params`. */\nfunction renderSqlTypeName(type, params) {\n\tconst validated = validateSqlTypeParams(type, params);\n\tif (type.sql.render !== void 0) return type.sql.render(validated);\n\tconst normalized = type.sql.normalize(validated);\n\treturn substitute(type, pickText(type, \"written\", presentKeys(params).filter((key) => Object.hasOwn(normalized, key))), params);\n}\n/** The text the database catalog prints for `type` with `params`, in their normal form. */\nfunction renderSqlCatalogText(type, params) {\n\tconst validated = validateSqlTypeParams(type, params);\n\tif (type.sql.claimsKind !== void 0) throw new InternalError(`Data type ${type.id} claims the kind \"${type.sql.claimsKind}\" and has no catalog text.`);\n\tconst normalized = type.sql.normalize(validated);\n\treturn substitute(type, pickText(type, \"catalog\", presentKeys(normalized)), normalized);\n}\nfunction prepareReportedText(text) {\n\tlet prepared = \"\";\n\tlet quoted = false;\n\tlet spacePending = false;\n\tfor (const character of text.trim()) {\n\t\tif (!quoted && /\\s/.test(character)) {\n\t\t\tspacePending = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (spacePending && !/[(,]$/.test(prepared) && character !== \")\") prepared += \" \";\n\t\tspacePending = false;\n\t\tif (character === \"\\\"\") quoted = !quoted;\n\t\tprepared += quoted ? character : character.toLowerCase();\n\t}\n\treturn prepared;\n}\nfunction claims(text) {\n\treturn text.catalog === true || text.written !== true;\n}\nfunction claimingTexts(type) {\n\treturn type.sql.texts.filter(claims).map((text) => text.text);\n}\nfunction textsCollide(a, b) {\n\tconst withOnes = (text) => text.replace(PLACEHOLDER, \"1\");\n\treturn patternOf(a).test(withOnes(b)) || patternOf(b).test(withOnes(a));\n}\nfunction collisionBetween(first, second) {\n\tconst kind = first.sql.claimsKind;\n\tif (kind !== void 0 && kind === second.sql.claimsKind) return {\n\t\tby: \"kind\",\n\t\tkind\n\t};\n\tfor (const a of claimingTexts(first)) {\n\t\tconst b = claimingTexts(second).find((text) => textsCollide(a, text));\n\t\tif (b !== void 0) return {\n\t\t\tby: \"text\",\n\t\t\tfirst: a,\n\t\t\tsecond: b\n\t\t};\n\t}\n}\n/**\n* The first two SQL data types in `types` that would both recognise one reported type: a claiming\n* text of each collides, or both claim the same kind. Two texts collide when either one's pattern\n* matches the other with each placeholder written as 1.\n*/\nfunction findSqlDataTypeCollision(types) {\n\tconst sqlTypes = types.filter(isSqlDataType);\n\tfor (const [index, first] of sqlTypes.entries()) for (const second of sqlTypes.slice(index + 1)) {\n\t\tconst claims = collisionBetween(first, second);\n\t\tif (claims !== void 0) return {\n\t\t\tfirst,\n\t\t\tsecond,\n\t\t\tclaims\n\t\t};\n\t}\n}\n/**\n* The data type that claims a reported type, with its parameters in normal form, or undefined when\n* no type in `dataTypes` claims it or its parameters fail the type's schema.\n*/\nfunction resolveReportedSqlType(reported, dataTypes) {\n\tconst sqlTypes = dataTypes.filter(isSqlDataType);\n\tif (reported.kind !== void 0) {\n\t\tconst claimant = sqlTypes.find((type) => type.sql.claimsKind === reported.kind);\n\t\tif (claimant === void 0) return void 0;\n\t\treturn resolvedWith(claimant, claimant.sql.fromReported?.(reported) ?? {});\n\t}\n\tconst text = prepareReportedText(reported.text);\n\tfor (const type of sqlTypes) for (const candidate of type.sql.texts) {\n\t\tif (!claims(candidate)) continue;\n\t\tconst params = paramsMatching(type, candidate, text);\n\t\tif (params !== void 0) return resolvedWith(type, params);\n\t}\n}\nconst signedParamKeysByType = /* @__PURE__ */ new WeakMap();\n/** The parameters of `type` that may be negative, whose placeholders read a leading minus. */\nfunction signedParamKeys(type) {\n\tconst known = signedParamKeysByType.get(type);\n\tif (known !== void 0) return known;\n\tconst keys = schemaKeysAllowing(type.params, -1) ?? [];\n\tsignedParamKeysByType.set(type, keys);\n\treturn keys;\n}\nfunction paramsMatching(type, candidate, text) {\n\tconst match = patternOf(candidate.text, signedParamKeys(type)).exec(text);\n\tif (match === null) return void 0;\n\treturn Object.fromEntries(placeholdersOf(candidate.text).map((name, index) => [name, Number.parseInt(match[index + 1] ?? \"\", 10)]));\n}\n/**\n* Every data type in `dataTypes` that reads `text` as a migration may write it, with its parameters\n* in normal form: any of a type's texts counts, whether written, printed by the catalog or only\n* claimed. Empty when no type reads it or its parameters fail the type's schema. A type that claims\n* a kind has no texts, so it never reads one.\n*/\nfunction resolveWrittenSqlTypes(text, dataTypes) {\n\tconst prepared = prepareReportedText(text);\n\treturn dataTypes.filter(isSqlDataType).flatMap((type) => {\n\t\tfor (const candidate of type.sql.texts) {\n\t\t\tconst params = paramsMatching(type, candidate, prepared);\n\t\t\tif (params === void 0) continue;\n\t\t\tconst resolved = resolvedWith(type, params);\n\t\t\tif (resolved !== void 0) return [resolved];\n\t\t}\n\t\treturn [];\n\t});\n}\nfunction resolvedWith(type$1, params) {\n\tif (type$1.params !== void 0 && type$1.params(params) instanceof type.errors) return void 0;\n\treturn {\n\t\tdataType: type$1,\n\t\ttypeParams: type$1.sql.normalize(params)\n\t};\n}\n//#endregion\nexport { resolveReportedSqlType as a, sqlBaseName as c, sqlStorageType as d, sqlStorageTypeId as f, validateSqlTypeParams as g, unquotedSqlBaseNameOfCodec as h, renderSqlTypeName as i, sqlDataType as l, unquotedSqlBaseName as m, isSqlDataType as n, resolveWrittenSqlTypes as o, sqlStorageTypeOfCodec as p, renderSqlCatalogText as r, sameSqlColumnType as s, findSqlDataTypeCollision as t, sqlDataTypeOfCodec as u };\n\n//# sourceMappingURL=sql-data-type-BSi0X331.mjs.map"],"mappings":";;;;;;;;AAQA,MAAM,cAAc;AACpB,MAAM,qBAAqB;AAC3B,MAAM,iBAAiB;AACvB,SAAS,YAAY,IAAI,QAAQ;CAChC,IAAI,WAAW,KAAK,GAAG,OAAO,CAAC;CAC/B,MAAM,OAAO,iBAAiB,MAAM;CACpC,IAAI,SAAS,KAAK,GAAG,kBAAkB,IAAI,wDAAwD;CACnG,OAAO;AACR;AACA,SAAS,eAAe,MAAM;CAC7B,OAAO,CAAC,GAAG,KAAK,SAAS,WAAW,CAAC,CAAC,CAAC,KAAK,UAAU,MAAM,MAAM,EAAE;AACrE;AACA,SAAS,iBAAiB,MAAM;CAC/B,OAAO,CAAC,GAAG,eAAe,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG;AACjD;AACA,SAAS,UAAU,MAAM,aAAa,CAAC,GAAG;CACzC,MAAM,eAAe,KAAK,QAAQ,gBAAgB,MAAM,CAAC,CAAC,QAAQ,oCAAoC,GAAG,SAAS,WAAW,SAAS,IAAI,IAAI,aAAa,QAAQ;CACnK,OAAO,IAAI,OAAO,IAAI,aAAa,EAAE;AACtC;AACA,SAAS,kBAAkB,IAAI,KAAK;CACnC,MAAM,IAAI,cAAc,aAAa,GAAG,IAAI,KAAK;AAClD;AACA,SAAS,UAAU,IAAI,MAAM,WAAW;CACvC,MAAM,SAAS,KAAK,UAAU,KAAK,IAAI;CACvC,MAAM,UAAU,QAAQ,kBAAkB,IAAI,YAAY,OAAO,GAAG,IAAI,EAAE;CAC1E,IAAI,KAAK,SAAS,IAAI,OAAO,UAAU;CACvC,IAAI,KAAK,SAAS,KAAK,KAAK,KAAK,GAAG,OAAO,6BAA6B;CACxE,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,OAAO,yBAAyB;CAC9D,MAAM,UAAU,KAAK,KAAK,QAAQ,aAAa,EAAE;CACjD,IAAI,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG,OAAO,8CAA8C;CACzG,IAAI,CAAC,mBAAmB,KAAK,OAAO,GAAG,OAAO,mHAAmH;CACjK,KAAK,MAAM,QAAQ,eAAe,KAAK,IAAI,GAAG,IAAI,CAAC,UAAU,SAAS,IAAI,GAAG,OAAO,wBAAwB,KAAK,mCAAmC;CACpJ,IAAI,KAAK,YAAY,KAAK,GAAG;CAC7B,MAAM,UAAU,KAAK,UAAU,KAAK,OAAO;CAC3C,IAAI,KAAK,QAAQ,YAAY,MAAM,KAAK,KAAK,YAAY,GAAG,OAAO,mBAAmB,QAAQ,2CAA2C;CACzI,IAAI,eAAe,KAAK,OAAO,CAAC,CAAC,KAAK,GAAG,MAAM,eAAe,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,GAAG,OAAO,mBAAmB,QAAQ,yCAAyC;AAChK;AACA,SAAS,WAAW,IAAI,OAAO;CAC9B,MAAM,yBAAyB,IAAI,IAAI;CACvC,KAAK,MAAM,QAAQ,OAAO;EACzB,MAAM,MAAM,iBAAiB,KAAK,IAAI;EACtC,MAAM,QAAQ,OAAO,IAAI,GAAG,KAAK,CAAC;EAClC,KAAK,MAAM,QAAQ,CAAC,WAAW,SAAS,GAAG;GAC1C,IAAI,KAAK,UAAU,MAAM;GACzB,MAAM,QAAQ,MAAM;GACpB,IAAI,UAAU,KAAK,GAAG,kBAAkB,IAAI,aAAa,KAAK,UAAU,KAAK,EAAE,OAAO,KAAK,UAAU,KAAK,IAAI,EAAE,2CAA2C,KAAK,EAAE;GAClK,MAAM,QAAQ,KAAK;EACpB;EACA,OAAO,IAAI,KAAK,KAAK;CACtB;AACD;AACA,SAAS,eAAe,IAAI,MAAM;CACjC,IAAI,KAAK,eAAe,KAAK,GAAG;EAC/B,IAAI,KAAK,WAAW,KAAK,GAAG,kBAAkB,IAAI,kDAAkD;EACpG,IAAI,KAAK,iBAAiB,KAAK,GAAG,kBAAkB,IAAI,wDAAwD;EAChH;CACD;CACA,IAAI,KAAK,UAAU,KAAK,GAAG,kBAAkB,IAAI,8CAA8C;AAChG;AACA,SAAS,cAAc,IAAI,MAAM;CAChC,IAAI,KAAK,aAAa,KAAK,GAAG;CAC9B,IAAI,KAAK,UAAU,KAAK,GAAG,kBAAkB,IAAI,+FAA+F;CAChJ,IAAI,KAAK,eAAe,KAAK,GAAG,kBAAkB,IAAI,0CAA0C;AACjG;AACA,MAAM,YAAY,WAAW;AAC7B,SAAS,WAAW,QAAQ,QAAQ;CACnC,OAAO,WAAW,KAAK,KAAK,EAAE,OAAO,MAAM,aAAa,KAAK;AAC9D;AACA,SAAS,wBAAwB,MAAM;CACtC,MAAM,UAAU,IAAI,IAAI,KAAK,IAAI,MAAM,QAAQ,SAAS,KAAK,YAAY,IAAI,CAAC,CAAC,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;CACzH,IAAI,QAAQ,SAAS,GAAG;CACxB,MAAM,SAAS,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,MAAM,KAAK,SAAS,OAAO,YAAY,eAAe,KAAK,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3H,KAAK,MAAM,SAAS,QAAQ;EAC3B,IAAI,CAAC,WAAW,KAAK,QAAQ,KAAK,GAAG;EACrC,MAAM,aAAa,YAAY,KAAK,IAAI,UAAU,KAAK,CAAC;EACxD,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,kBAAkB,KAAK,IAAI,kBAAkB,WAAW,OAAO,KAAK,KAAK,CAAC,EAAE,wBAAwB,WAAW,UAAU,EAAE,+BAA+B;CAC/M;AACD;;AAEA,SAAS,YAAY,IAAI,MAAM;CAC9B,MAAM,oBAAoB,KAAK,aAAa;CAC5C,MAAM,aAAa,WAAW,WAAW,KAAK,QAAQ,MAAM,IAAI,kBAAkB,MAAM,IAAI;CAC5F,MAAM,EAAE,QAAQ,gBAAgB,GAAG,aAAa,SAAS,IAAI;EAC5D,GAAG;EACH;CACD,CAAC;CACD,MAAM,QAAQ,KAAK,SAAS,CAAC;CAC7B,MAAM,YAAY,YAAY,SAAS,IAAI,KAAK,MAAM;CACtD,KAAK,MAAM,QAAQ,OAAO,UAAU,SAAS,IAAI,MAAM,SAAS;CAChE,WAAW,SAAS,IAAI,KAAK;CAC7B,eAAe,SAAS,IAAI,IAAI;CAChC,cAAc,SAAS,IAAI,IAAI;CAC/B,MAAM,OAAO;EACZ,GAAG;EACH,GAAG,UAAU,UAAU,KAAK,MAAM;EAClC,KAAK;GACJ;GACA,YAAY,KAAK;GACjB,UAAU,KAAK;GACf;GACA,QAAQ,KAAK;GACb,cAAc,KAAK;EACpB;CACD;CACA,wBAAwB,IAAI;CAC5B,OAAO;AACR;;AAEA,SAAS,cAAc,MAAM;CAC5B,OAAO,SAAS;AACjB;AACA,SAAS,YAAY,QAAQ;CAC5B,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,QAAQ,QAAQ,OAAO,SAAS,KAAK,CAAC;AAClE;AACA,SAAS,WAAW,MAAM;CACzB,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE;AACxC;;AAEA,SAAS,sBAAsB,MAAM,QAAQ;CAC5C,qBAAqB,MAAM,MAAM;CACjC,OAAO,UAAU,MAAM;AACxB;AACA,SAAS,SAAS,MAAM,MAAM,MAAM;CACnC,MAAM,aAAa,KAAK,IAAI,MAAM,QAAQ,SAAS,KAAK,UAAU,IAAI;CACtE,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG;CACxC,MAAM,QAAQ,WAAW,MAAM,SAAS,iBAAiB,KAAK,IAAI,MAAM,MAAM;CAC9E,IAAI,UAAU,KAAK,GAAG,OAAO;CAC7B,MAAM,OAAO,SAAS,YAAY,YAAY;CAC9C,MAAM,QAAQ,WAAW,WAAW,IAAI,eAAe,SAAS,SAAS,KAAK,QAAQ,WAAW,KAAK,SAAS,WAAW,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;CAC/J,MAAM,cAAc,gCAAgC,GAAG,KAAK,GAAG,aAAa,KAAK,mBAAmB,WAAW,IAAI,EAAE,IAAI,SAAS,EAAE,MAAM;EACzI,UAAU,KAAK;EACf,YAAY,CAAC,GAAG,IAAI;CACrB,EAAE,CAAC;AACJ;AACA,SAAS,WAAW,MAAM,MAAM,QAAQ;CACvC,QAAQ,KAAK,WAAW,KAAK,KAAA,CAAM,QAAQ,cAAc,GAAG,SAAS;EACpE,MAAM,QAAQ,OAAO;EACrB,IAAI,CAAC,OAAO,cAAc,KAAK,GAAG,MAAM,cAAc,gCAAgC,GAAG,KAAK,GAAG,kBAAkB,KAAK,wDAAwD,EAAE,MAAM;GACvL,UAAU,KAAK;GACf,YAAY,CAAC,IAAI;EAClB,EAAE,CAAC;EACH,OAAO,OAAO,KAAK;CACpB,CAAC;AACF;;AAEA,SAAS,YAAY,MAAM,QAAQ;CAClC,IAAI,KAAK,IAAI,WAAW,KAAK,GAAG,OAAO,KAAK,IAAI,OAAO,sBAAsB,MAAM,MAAM,CAAC;CAC1F,MAAM,SAAS,KAAK,IAAI,MAAM,QAAQ,SAAS,KAAK,YAAY,IAAI,CAAC,CAAC,QAAQ,MAAM,SAAS,SAAS,KAAK,KAAK,eAAe,KAAK,IAAI,CAAC,CAAC,SAAS,eAAe,KAAK,IAAI,CAAC,CAAC,SAAS,OAAO,MAAM,KAAK,CAAC;CACzM,IAAI,WAAW,KAAK,GAAG,MAAM,IAAI,cAAc,aAAa,KAAK,GAAG,4DAA4D;CAChI,MAAM,OAAO,OAAO,WAAW,OAAO;CACtC,IAAI,eAAe,OAAO,IAAI,CAAC,CAAC,WAAW,GAAG,OAAO;CACrD,MAAM,UAAU,KAAK,QAAQ,GAAG;CAChC,OAAO,YAAY,KAAK,OAAO,KAAK,MAAM,GAAG,OAAO;AACrD;;;;;;AAMA,SAAS,oBAAoB,MAAM,QAAQ;CAC1C,IAAI,KAAK,IAAI,eAAe,KAAK,GAAG,OAAO,YAAY,MAAM,MAAM;CACnE,MAAM,EAAE,aAAa,sBAAsB,MAAM,MAAM;CACvD,IAAI,OAAO,aAAa,UAAU,MAAM,IAAI,cAAc,aAAa,KAAK,GAAG,oBAAoB,KAAK,IAAI,WAAW,6CAA6C;CACpK,OAAO;AACR;AACA,MAAM,qBAAqB;;AAE3B,SAAS,mBAAmB,SAAS,SAAS;CAC7C,MAAM,aAAa,QAAQ,YAAY,cAAc,OAAO;CAC5D,IAAI,eAAe,KAAK,GAAG,MAAM,cAAc,qCAAqC,aAAa,QAAQ,uDAAuD;EAC/J,KAAK;EACL,MAAM,EAAE,QAAQ;CACjB,CAAC;CACD,MAAM,OAAO,QAAQ,eAAe,IAAI,WAAW,QAAQ;CAC3D,IAAI,SAAS,KAAK,GAAG,MAAM,cAAc,mCAAmC,UAAU,QAAQ,0BAA0B,WAAW,SAAS,mCAAmC;EAC9K,KAAK;EACL,MAAM;GACL;GACA,UAAU,WAAW;EACtB;CACD,CAAC;CACD,IAAI,CAAC,cAAc,IAAI,GAAG,MAAM,IAAI,cAAc,aAAa,KAAK,GAAG,iDAAiD;CACxH,OAAO;AACR;;AAEA,SAAS,eAAe,MAAM,QAAQ;CACrC,IAAI,KAAK,IAAI,aAAa,KAAK,GAAG,OAAO;CACzC,MAAM,UAAU,OAAO,IAAI,KAAK,IAAI,QAAQ;CAC5C,IAAI,YAAY,KAAK,KAAK,CAAC,cAAc,OAAO,GAAG,MAAM,cAAc,mCAAmC,cAAc,KAAK,GAAG,kBAAkB,KAAK,IAAI,SAAS,sDAAsD,EAAE,MAAM;EACjO,UAAU,KAAK,IAAI;EACnB,UAAU,KAAK;CAChB,EAAE,CAAC;CACH,OAAO;AACR;;AAEA,SAAS,iBAAiB,YAAY,QAAQ;CAC7C,MAAM,OAAO,OAAO,IAAI,UAAU;CAClC,OAAO,SAAS,KAAK,KAAK,cAAc,IAAI,IAAI,eAAe,MAAM,MAAM,CAAC,CAAC,KAAK;AACnF;;AAEA,SAAS,iBAAiB,QAAQ,QAAQ;CACzC,MAAM,OAAO,OAAO,IAAI,OAAO,QAAQ;CACvC,IAAI,SAAS,KAAK,KAAK,CAAC,cAAc,IAAI,GAAG,OAAO;EACnD,IAAI,OAAO;EACX,QAAQ,OAAO,cAAc,CAAC;CAC/B;CACA,MAAM,UAAU,eAAe,MAAM,MAAM;CAC3C,OAAO;EACN,IAAI,QAAQ;EACZ,QAAQ,QAAQ,IAAI,UAAU,eAAe,SAAS,OAAO,cAAc,CAAC,CAAC,CAAC;CAC/E;AACD;;;;AAIA,SAAS,kBAAkB,GAAG,GAAG,QAAQ;CACxC,MAAM,UAAU,WAAW,OAAO,SAAS,KAAK,KAAK,OAAO,SAAS;CACrE,MAAM,OAAO,iBAAiB,GAAG,MAAM;CACvC,MAAM,QAAQ,iBAAiB,GAAG,MAAM;CACxC,OAAO,KAAK,OAAO,MAAM,MAAM,iBAAiB,KAAK,MAAM,MAAM,iBAAiB,MAAM,MAAM,KAAK,OAAO,CAAC,MAAM,OAAO,CAAC;AAC1H;;AAEA,SAAS,sBAAsB,SAAS,SAAS;CAChD,OAAO,eAAe,mBAAmB,SAAS,OAAO,GAAG,QAAQ,cAAc;AACnF;;AAEA,SAAS,2BAA2B,SAAS,YAAY,SAAS;CACjE,MAAM,OAAO,sBAAsB,SAAS,OAAO;CACnD,OAAO,oBAAoB,MAAM,eAAe,MAAM,UAAU,CAAC;AAClE;;AAEA,SAAS,kBAAkB,MAAM,QAAQ;CACxC,MAAM,YAAY,sBAAsB,MAAM,MAAM;CACpD,IAAI,KAAK,IAAI,WAAW,KAAK,GAAG,OAAO,KAAK,IAAI,OAAO,SAAS;CAChE,MAAM,aAAa,KAAK,IAAI,UAAU,SAAS;CAC/C,OAAO,WAAW,MAAM,SAAS,MAAM,WAAW,YAAY,MAAM,CAAC,CAAC,QAAQ,QAAQ,OAAO,OAAO,YAAY,GAAG,CAAC,CAAC,GAAG,MAAM;AAC/H;;AAEA,SAAS,qBAAqB,MAAM,QAAQ;CAC3C,MAAM,YAAY,sBAAsB,MAAM,MAAM;CACpD,IAAI,KAAK,IAAI,eAAe,KAAK,GAAG,MAAM,IAAI,cAAc,aAAa,KAAK,GAAG,oBAAoB,KAAK,IAAI,WAAW,2BAA2B;CACpJ,MAAM,aAAa,KAAK,IAAI,UAAU,SAAS;CAC/C,OAAO,WAAW,MAAM,SAAS,MAAM,WAAW,YAAY,UAAU,CAAC,GAAG,UAAU;AACvF;AACA,SAAS,oBAAoB,MAAM;CAClC,IAAI,WAAW;CACf,IAAI,SAAS;CACb,IAAI,eAAe;CACnB,KAAK,MAAM,aAAa,KAAK,KAAK,GAAG;EACpC,IAAI,CAAC,UAAU,KAAK,KAAK,SAAS,GAAG;GACpC,eAAe;GACf;EACD;EACA,IAAI,gBAAgB,CAAC,QAAQ,KAAK,QAAQ,KAAK,cAAc,KAAK,YAAY;EAC9E,eAAe;EACf,IAAI,cAAc,MAAM,SAAS,CAAC;EAClC,YAAY,SAAS,YAAY,UAAU,YAAY;CACxD;CACA,OAAO;AACR;AACA,SAAS,OAAO,MAAM;CACrB,OAAO,KAAK,YAAY,QAAQ,KAAK,YAAY;AAClD;AACA,SAAS,cAAc,MAAM;CAC5B,OAAO,KAAK,IAAI,MAAM,OAAO,MAAM,CAAC,CAAC,KAAK,SAAS,KAAK,IAAI;AAC7D;AACA,SAAS,aAAa,GAAG,GAAG;CAC3B,MAAM,YAAY,SAAS,KAAK,QAAQ,aAAa,GAAG;CACxD,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;AACvE;AACA,SAAS,iBAAiB,OAAO,QAAQ;CACxC,MAAM,OAAO,MAAM,IAAI;CACvB,IAAI,SAAS,KAAK,KAAK,SAAS,OAAO,IAAI,YAAY,OAAO;EAC7D,IAAI;EACJ;CACD;CACA,KAAK,MAAM,KAAK,cAAc,KAAK,GAAG;EACrC,MAAM,IAAI,cAAc,MAAM,CAAC,CAAC,MAAM,SAAS,aAAa,GAAG,IAAI,CAAC;EACpE,IAAI,MAAM,KAAK,GAAG,OAAO;GACxB,IAAI;GACJ,OAAO;GACP,QAAQ;EACT;CACD;AACD;;;;;;AAMA,SAAS,yBAAyB,OAAO;CACxC,MAAM,WAAW,MAAM,OAAO,aAAa;CAC3C,KAAK,MAAM,CAAC,OAAO,UAAU,SAAS,QAAQ,GAAG,KAAK,MAAM,UAAU,SAAS,MAAM,QAAQ,CAAC,GAAG;EAChG,MAAM,SAAS,iBAAiB,OAAO,MAAM;EAC7C,IAAI,WAAW,KAAK,GAAG,OAAO;GAC7B;GACA;GACA;EACD;CACD;AACD;;;;;AAKA,SAAS,uBAAuB,UAAU,WAAW;CACpD,MAAM,WAAW,UAAU,OAAO,aAAa;CAC/C,IAAI,SAAS,SAAS,KAAK,GAAG;EAC7B,MAAM,WAAW,SAAS,MAAM,SAAS,KAAK,IAAI,eAAe,SAAS,IAAI;EAC9E,IAAI,aAAa,KAAK,GAAG,OAAO,KAAK;EACrC,OAAO,aAAa,UAAU,SAAS,IAAI,eAAe,QAAQ,KAAK,CAAC,CAAC;CAC1E;CACA,MAAM,OAAO,oBAAoB,SAAS,IAAI;CAC9C,KAAK,MAAM,QAAQ,UAAU,KAAK,MAAM,aAAa,KAAK,IAAI,OAAO;EACpE,IAAI,CAAC,OAAO,SAAS,GAAG;EACxB,MAAM,SAAS,eAAe,MAAM,WAAW,IAAI;EACnD,IAAI,WAAW,KAAK,GAAG,OAAO,aAAa,MAAM,MAAM;CACxD;AACD;AACA,MAAM,wCAAwC,IAAI,QAAQ;;AAE1D,SAAS,gBAAgB,MAAM;CAC9B,MAAM,QAAQ,sBAAsB,IAAI,IAAI;CAC5C,IAAI,UAAU,KAAK,GAAG,OAAO;CAC7B,MAAM,OAAO,mBAAmB,KAAK,QAAQ,EAAE,KAAK,CAAC;CACrD,sBAAsB,IAAI,MAAM,IAAI;CACpC,OAAO;AACR;AACA,SAAS,eAAe,MAAM,WAAW,MAAM;CAC9C,MAAM,QAAQ,UAAU,UAAU,MAAM,gBAAgB,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;CACxE,IAAI,UAAU,MAAM,OAAO,KAAK;CAChC,OAAO,OAAO,YAAY,eAAe,UAAU,IAAI,CAAC,CAAC,KAAK,MAAM,UAAU,CAAC,MAAM,OAAO,SAAS,MAAM,QAAQ,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;AACnI;;;;;;;AAOA,SAAS,uBAAuB,MAAM,WAAW;CAChD,MAAM,WAAW,oBAAoB,IAAI;CACzC,OAAO,UAAU,OAAO,aAAa,CAAC,CAAC,SAAS,SAAS;EACxD,KAAK,MAAM,aAAa,KAAK,IAAI,OAAO;GACvC,MAAM,SAAS,eAAe,MAAM,WAAW,QAAQ;GACvD,IAAI,WAAW,KAAK,GAAG;GACvB,MAAM,WAAW,aAAa,MAAM,MAAM;GAC1C,IAAI,aAAa,KAAK,GAAG,OAAO,CAAC,QAAQ;EAC1C;EACA,OAAO,CAAC;CACT,CAAC;AACF;AACA,SAAS,aAAa,QAAQ,QAAQ;CACrC,IAAI,OAAO,WAAW,KAAK,KAAK,OAAO,OAAO,MAAM,aAAa,KAAK,QAAQ,OAAO,KAAK;CAC1F,OAAO;EACN,UAAU;EACV,YAAY,OAAO,IAAI,UAAU,MAAM;CACxC;AACD"}