@prisma/orm-target-postgres 8.0.0-rc.17-dev.6 → 8.0.0-rc.17-dev.7

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 (44) hide show
  1. package/dist/adapter__control.mjs +2 -2
  2. package/dist/adapter__runtime.mjs +1 -1
  3. package/dist/{authoring-CL05jlfX-CKUKjRVV.mjs → authoring-BsVnEibY-DEWnQRiF.mjs} +62 -55
  4. package/dist/authoring-BsVnEibY-DEWnQRiF.mjs.map +1 -0
  5. package/dist/{authoring-CLNoGwgA-DPDmJeBt.d.mts → authoring-DWd5pnnV-g81c_ETF.d.mts} +10 -10
  6. package/dist/authoring-DWd5pnnV-g81c_ETF.d.mts.map +1 -0
  7. package/dist/{control-CDAHFmyX.mjs → control-KIoUTWJ_.mjs} +48 -9
  8. package/dist/control-KIoUTWJ_.mjs.map +1 -0
  9. package/dist/{descriptor-meta-ClvaJRgh-Dlo6A0nL.mjs → descriptor-meta-DkzkByC8-WIm-Vvrd.mjs} +3 -3
  10. package/dist/{descriptor-meta-ClvaJRgh-Dlo6A0nL.mjs.map → descriptor-meta-DkzkByC8-WIm-Vvrd.mjs.map} +1 -1
  11. package/dist/{infer-psl-contract-lnoCopbJ-DRVPVZyI.mjs → infer-psl-contract-D0iF_YRT-DwW3Imk5.mjs} +62 -16
  12. package/dist/infer-psl-contract-D0iF_YRT-DwW3Imk5.mjs.map +1 -0
  13. package/dist/migration-PTHAY9Cv.mjs.map +1 -1
  14. package/dist/{pack-C3Y2SBNH.d.mts → pack-BOVET-UW.d.mts} +3 -3
  15. package/dist/{pack-C3Y2SBNH.d.mts.map → pack-BOVET-UW.d.mts.map} +1 -1
  16. package/dist/{planner-BLGCBKzQ-BFmyE8A2.mjs → planner-an3B45Ri-2-1c8dYN.mjs} +4 -4
  17. package/dist/{planner-BLGCBKzQ-BFmyE8A2.mjs.map → planner-an3B45Ri-2-1c8dYN.mjs.map} +1 -1
  18. package/dist/{planner-produced-postgres-migration-8cUeUjsL-DwO8p6_t.mjs → planner-produced-postgres-migration-LNElx7_r-B4yTRRyt.mjs} +3 -3
  19. package/dist/{planner-produced-postgres-migration-8cUeUjsL-DwO8p6_t.mjs.map → planner-produced-postgres-migration-LNElx7_r-B4yTRRyt.mjs.map} +1 -1
  20. package/dist/{postgres-contract-view-BpZ_4qOD-BuCMIaSB.mjs → postgres-contract-view-BpmiHSDZ-C6ntn6T7.mjs} +3 -3
  21. package/dist/{postgres-contract-view-BpZ_4qOD-BuCMIaSB.mjs.map → postgres-contract-view-BpmiHSDZ-C6ntn6T7.mjs.map} +1 -1
  22. package/dist/{postgres-migration-Deb4XrMA-DO7iGvl2.mjs → postgres-migration-BtlvhcXs-UjWm8cAb.mjs} +3 -3
  23. package/dist/{postgres-migration-Deb4XrMA-DO7iGvl2.mjs.map → postgres-migration-BtlvhcXs-UjWm8cAb.mjs.map} +1 -1
  24. package/dist/{prisma7-binding-C1fIMMTb.d.mts → prisma7-binding-BQ5VOUjh.d.mts} +3 -3
  25. package/dist/{prisma7-binding-C1fIMMTb.d.mts.map → prisma7-binding-BQ5VOUjh.d.mts.map} +1 -1
  26. package/dist/{prisma7-binding-DE7hezAQ.mjs → prisma7-binding-Dq-vT_9_.mjs} +4 -4
  27. package/dist/{prisma7-binding-DE7hezAQ.mjs.map → prisma7-binding-Dq-vT_9_.mjs.map} +1 -1
  28. package/dist/target.d.mts +2 -2
  29. package/dist/target.mjs +7 -7
  30. package/dist/target__control.mjs +3 -3
  31. package/dist/target__migration.mjs +1 -1
  32. package/dist/target__pack.d.mts +1 -1
  33. package/dist/target__pack.mjs +1 -1
  34. package/dist/target__planner-produced-postgres-migration.mjs +1 -1
  35. package/dist/target__planner.mjs +1 -1
  36. package/dist/target__prisma7-binding.d.mts +1 -1
  37. package/dist/target__prisma7-binding.mjs +1 -1
  38. package/dist/target__runtime.mjs +2 -2
  39. package/dist/target__runtime.mjs.map +1 -1
  40. package/package.json +9 -9
  41. package/dist/authoring-CL05jlfX-CKUKjRVV.mjs.map +0 -1
  42. package/dist/authoring-CLNoGwgA-DPDmJeBt.d.mts.map +0 -1
  43. package/dist/control-CDAHFmyX.mjs.map +0 -1
  44. package/dist/infer-psl-contract-lnoCopbJ-DRVPVZyI.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { n as qualifyName, r as quoteIdentifier, t as escapeLiteral } from "./sql-utils-CVsvXiX4-C7xD0Bgv.mjs";
2
2
  import { i as createPostgresCodecRegistryWithBuiltins, r as createPostgresBuiltinCodecLookup, t as assemblePostgresCodecRegistry } from "./codec-registry-CKBDkxX7-Kw84Or3s.mjs";
3
- import { a as instantNowControlDescriptor, s as plainDateTimeNowControlDescriptor } from "./authoring-CL05jlfX-CKUKjRVV.mjs";
3
+ import { a as instantNowControlDescriptor, s as plainDateTimeNowControlDescriptor } from "./authoring-BsVnEibY-DEWnQRiF.mjs";
4
4
  import { t as parsePostgresDefault } from "./default-normalizer-Bf_Fhv4v-CugGfLAe.mjs";
5
- import { n as postgresPslTypeConstructors } from "./control-CDAHFmyX.mjs";
5
+ import { n as postgresPslTypeConstructors } from "./control-KIoUTWJ_.mjs";
6
6
  import { n as normalizeSchemaNativeType } from "./native-type-normalizer-CwyVR7xB.mjs";
7
7
  import { t as PostgresControlAdapter } from "./control-adapter-Co30P4lH-vRdhkEQq.mjs";
8
8
  import { t as postgresAdapterDescriptorMeta } from "./descriptor-meta-ARufwwWW-w4_iWp7m.mjs";
@@ -1,5 +1,5 @@
1
1
  import { o as postgresCodecRegistry, t as assemblePostgresCodecRegistry } from "./codec-registry-CKBDkxX7-Kw84Or3s.mjs";
2
- import { i as instantNow, n as PLAIN_DATE_TIME_NOW_GENERATOR_ID, o as plainDateTimeNow, t as INSTANT_NOW_GENERATOR_ID } from "./authoring-CL05jlfX-CKUKjRVV.mjs";
2
+ import { i as instantNow, n as PLAIN_DATE_TIME_NOW_GENERATOR_ID, o as plainDateTimeNow, t as INSTANT_NOW_GENERATOR_ID } from "./authoring-BsVnEibY-DEWnQRiF.mjs";
3
3
  import { n as createPostgresAdapterWithCodecRegistry, r as postgresRawCodecInferer } from "./adapter-RtS8vD8U-CCQBsu-H.mjs";
4
4
  import { t as postgresAdapterDescriptorMeta } from "./descriptor-meta-ARufwwWW-w4_iWp7m.mjs";
5
5
  import { assembleDataTypes } from "@prisma/orm-framework/components/codec";
@@ -13,9 +13,10 @@ import { assertWireNamePrefixLength, normalizeSqlBody } from "@prisma/orm-family
13
13
  import { ifDefined } from "@prisma/orm-framework/utils/defined";
14
14
  import { temporalCodecPresetWithPrecision, temporalStringAuthoringPresets } from "@prisma/orm-family-sql/family/control";
15
15
  import { TIMESTAMP_NOW_GENERATOR_ID, temporalAuthoringPresets } from "@prisma/orm-framework/components/authoring";
16
- import { blockAttribute, bool, entityRef, fieldRef, identifier, leafDiagnostic, list, mapBlock, modelAttribute, oneOf, optional, str, structBlock } from "@prisma/orm-framework/psl-parser";
16
+ import { blockAttribute, bool, dataTypeValue, entityRef, fieldRef, identifier, leafDiagnostic, list, mapBlock, modelAttribute, oneOf, optional, str, structBlock } from "@prisma/orm-framework/psl-parser";
17
17
  import { exactNameBodyWarning } from "@prisma/orm-family-sql/contract/index-naming";
18
- //#region ../../../3-targets/3-targets/postgres/dist/authoring-CL05jlfX.mjs
18
+ import { SQL_EXPRESSION_DATA_TYPE_ID, sqlTextFromCanonical } from "@prisma/orm-family-sql/contract/sql-expression";
19
+ //#region ../../../3-targets/3-targets/postgres/dist/authoring-BsVnEibY.mjs
19
20
  const INSTANT_NOW_GENERATOR_ID = "instantNow";
20
21
  function instantNowControlDescriptor() {
21
22
  return {
@@ -122,40 +123,44 @@ const policyRolesParam = {
122
123
  }), identifier()))),
123
124
  documentation: "The database roles to which this policy applies."
124
125
  };
125
- const policyUsingParam = {
126
- type: optional(str()),
127
- documentation: "A SQL predicate controlling which rows this policy permits."
128
- };
129
- const policyWithCheckParam = {
130
- type: optional(str()),
131
- documentation: "A SQL predicate checking rows being written by this policy."
132
- };
126
+ function policyUsingParam(ctx) {
127
+ return {
128
+ type: optional(dataTypeValue(SQL_EXPRESSION_DATA_TYPE_ID, ctx.dataTypes)),
129
+ documentation: "A SQL predicate controlling which rows this policy permits."
130
+ };
131
+ }
132
+ function policyWithCheckParam(ctx) {
133
+ return {
134
+ type: optional(dataTypeValue(SQL_EXPRESSION_DATA_TYPE_ID, ctx.dataTypes)),
135
+ documentation: "A SQL predicate checking rows being written by this policy."
136
+ };
137
+ }
133
138
  const policyPermissiveParam = {
134
139
  type: optional(bool()),
135
140
  documentation: "Whether the policy is permissive (combined with OR) rather than restrictive (combined with AND)."
136
141
  };
137
- function policyUsingOnlySpec() {
142
+ function policyUsingOnlySpec(ctx) {
138
143
  return structBlock({ parameters: {
139
144
  target: policyTargetParam,
140
145
  roles: policyRolesParam,
141
- using: policyUsingParam,
146
+ using: policyUsingParam(ctx),
142
147
  permissive: policyPermissiveParam
143
148
  } });
144
149
  }
145
- function policyWithCheckOnlySpec() {
150
+ function policyWithCheckOnlySpec(ctx) {
146
151
  return structBlock({ parameters: {
147
152
  target: policyTargetParam,
148
153
  roles: policyRolesParam,
149
- withCheck: policyWithCheckParam,
154
+ withCheck: policyWithCheckParam(ctx),
150
155
  permissive: policyPermissiveParam
151
156
  } });
152
157
  }
153
- function policyBothPredicatesSpec() {
158
+ function policyBothPredicatesSpec(ctx) {
154
159
  return structBlock({ parameters: {
155
160
  target: policyTargetParam,
156
161
  roles: policyRolesParam,
157
- using: policyUsingParam,
158
- withCheck: policyWithCheckParam,
162
+ using: policyUsingParam(ctx),
163
+ withCheck: policyWithCheckParam(ctx),
159
164
  permissive: policyPermissiveParam
160
165
  } });
161
166
  }
@@ -224,8 +229,8 @@ function lowerRlsPolicyFromBlock(block, ctx) {
224
229
  const target = block.resolvedModelRefs?.["target"];
225
230
  assertDefined(target, `lowerRlsPolicyFromBlock: policy "${block.name}" reached the factory without a projected \`target\` coordinate; the interpreter projects checked model references before invoking entity factories.`);
226
231
  const roles = block.values.roles === void 0 ? [] : block.values.roles.map((role) => typeof role === "string" ? role : role.declaration.name).sort();
227
- const using = block.values.using;
228
- const withCheck = block.values.withCheck;
232
+ const using = block.values.using === void 0 ? void 0 : sqlTextFromCanonical(block.values.using.value);
233
+ const withCheck = block.values.withCheck === void 0 ? void 0 : sqlTextFromCanonical(block.values.withCheck.value);
229
234
  const permissive = block.values.permissive ?? true;
230
235
  const mapAttr = block.attributes["map"];
231
236
  if (mapAttr !== void 0) {
@@ -482,41 +487,43 @@ const postgresRlsSpec = modelAttribute("rls", { documentation: "Enables PostgreS
482
487
  const postgresRlsSpecFactory = () => postgresRlsSpec;
483
488
  const [firstLanguage, ...remainingLanguages] = POSTGRES_TEXT_SEARCH_LANGUAGES;
484
489
  const fullTextField = fieldRef();
485
- const postgresFullTextIndexSpec = modelAttribute("fullTextIndex", {
486
- documentation: "Indexes text fields for full-text search. Each item of the list is a weight group, strongest first; a nested list puts several fields in one group. Pass the index from the table's `indexes` to `fullTextMatches` and `fullTextRank` to search the same document.",
487
- positional: [{
488
- key: "fields",
489
- type: oneOf(fullTextField, list(oneOf(fullTextField, list(fullTextField)), {
490
- allowEmpty: false,
491
- label: "(field name | field name[])[]"
492
- })),
493
- documentation: "The fields to index: one field, or a list of fields and lists of fields. Each top-level item is a weight group, from A down to D."
494
- }],
495
- named: {
496
- language: {
497
- type: optional(oneOf(str(firstLanguage), ...remainingLanguages.map((language) => str(language)))),
498
- documentation: "The text-search configuration. Defaults to `english`, and must match the language the query operations are given."
499
- },
500
- name: {
501
- type: optional(str()),
502
- documentation: "The index name. Mutually exclusive with `map`."
503
- },
504
- map: {
505
- type: optional(str()),
506
- documentation: "The database index name. Mutually exclusive with `name`."
490
+ function postgresFullTextIndexSpec(ctx) {
491
+ return modelAttribute("fullTextIndex", {
492
+ documentation: "Indexes text fields for full-text search. Each item of the list is a weight group, strongest first; a nested list puts several fields in one group. Pass the index from the table's `indexes` to `fullTextMatches` and `fullTextRank` to search the same document.",
493
+ positional: [{
494
+ key: "fields",
495
+ type: oneOf(fullTextField, list(oneOf(fullTextField, list(fullTextField)), {
496
+ allowEmpty: false,
497
+ label: "(field name | field name[])[]"
498
+ })),
499
+ documentation: "The fields to index: one field, or a list of fields and lists of fields. Each top-level item is a weight group, from A down to D."
500
+ }],
501
+ named: {
502
+ language: {
503
+ type: optional(oneOf(str(firstLanguage), ...remainingLanguages.map((language) => str(language)))),
504
+ documentation: "The text-search configuration. Defaults to `english`, and must match the language the query operations are given."
505
+ },
506
+ name: {
507
+ type: optional(str()),
508
+ documentation: "The index name. Mutually exclusive with `map`."
509
+ },
510
+ map: {
511
+ type: optional(str()),
512
+ documentation: "The database index name. Mutually exclusive with `name`."
513
+ },
514
+ where: {
515
+ type: optional(dataTypeValue(SQL_EXPRESSION_DATA_TYPE_ID, ctx.dataTypes)),
516
+ documentation: "The SQL predicate restricting rows included in a partial index."
517
+ }
507
518
  },
508
- where: {
509
- type: optional(str()),
510
- documentation: "The SQL predicate restricting rows included in a partial index."
519
+ refine: (value, ctx, attributeNode) => {
520
+ const diagnostics = fullTextIndexProblems({ weightGroups: weightGroupsOf(value.fields, isFieldName) }).filter(isPslFullTextIndexProblem).map((problem) => leafDiagnostic(ctx, attributeNode, describeFullTextIndexProblem("`@@fullTextIndex`", problem), FULL_TEXT_INDEX_PROBLEM_CODES[problem.kind]));
521
+ if (value.name === void 0 && value.map === void 0) diagnostics.push(leafDiagnostic(ctx, attributeNode, "`@@fullTextIndex` requires a `name` or `map` argument", PSL_FULL_TEXT_INDEX_REQUIRES_NAME));
522
+ if (value.name !== void 0 && value.map !== void 0) diagnostics.push(leafDiagnostic(ctx, attributeNode, "`@@fullTextIndex` takes at most one of `name` and `map`", PSL_FULL_TEXT_INDEX_NAME_XOR_MAP));
523
+ return diagnostics;
511
524
  }
512
- },
513
- refine: (value, ctx, attributeNode) => {
514
- const diagnostics = fullTextIndexProblems({ weightGroups: weightGroupsOf(value.fields, isFieldName) }).filter(isPslFullTextIndexProblem).map((problem) => leafDiagnostic(ctx, attributeNode, describeFullTextIndexProblem("`@@fullTextIndex`", problem), FULL_TEXT_INDEX_PROBLEM_CODES[problem.kind]));
515
- if (value.name === void 0 && value.map === void 0) diagnostics.push(leafDiagnostic(ctx, attributeNode, "`@@fullTextIndex` requires a `name` or `map` argument", PSL_FULL_TEXT_INDEX_REQUIRES_NAME));
516
- if (value.name !== void 0 && value.map !== void 0) diagnostics.push(leafDiagnostic(ctx, attributeNode, "`@@fullTextIndex` takes at most one of `name` and `map`", PSL_FULL_TEXT_INDEX_NAME_XOR_MAP));
517
- return diagnostics;
518
- }
519
- });
525
+ });
526
+ }
520
527
  function isFieldName(value) {
521
528
  return typeof value === "string";
522
529
  }
@@ -529,7 +536,7 @@ const FULL_TEXT_INDEX_PROBLEM_CODES = {
529
536
  "duplicate-field": PSL_FULL_TEXT_INDEX_DUPLICATE_FIELD,
530
537
  "not-text": PSL_FULL_TEXT_INDEX_TEXT_FIELD
531
538
  };
532
- const postgresFullTextIndexSpecFactory = () => postgresFullTextIndexSpec;
539
+ const postgresFullTextIndexSpecFactory = (ctx) => postgresFullTextIndexSpec(ctx);
533
540
  /**
534
541
  * `@@` model attributes contributed by the Postgres target pack.
535
542
  *
@@ -584,7 +591,7 @@ const postgresAuthoringModelAttributes = {
584
591
  weightGroups,
585
592
  language: parsed.language ?? "english"
586
593
  },
587
- where: parsed.where,
594
+ where: parsed.where === void 0 ? void 0 : sqlTextFromCanonical(parsed.where.value),
588
595
  unique: void 0,
589
596
  name: parsed.name,
590
597
  map: parsed.map
@@ -819,4 +826,4 @@ function postgresLowerEntityHandles(input) {
819
826
  //#endregion
820
827
  export { instantNowControlDescriptor as a, postgresAuthoringEntityTypes as c, postgresAuthoringPslBlockDescriptors as d, postgresAuthoringTypes as f, instantNow as i, postgresAuthoringFieldPresets as l, postgresNowGeneratorIdFor as m, PLAIN_DATE_TIME_NOW_GENERATOR_ID as n, plainDateTimeNow as o, postgresLowerEntityHandles as p, POLICY_BLOCK_KEYWORDS as r, plainDateTimeNowControlDescriptor as s, INSTANT_NOW_GENERATOR_ID as t, postgresAuthoringModelAttributes as u };
821
828
 
822
- //# sourceMappingURL=authoring-CL05jlfX-CKUKjRVV.mjs.map
829
+ //# sourceMappingURL=authoring-BsVnEibY-DEWnQRiF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring-BsVnEibY-DEWnQRiF.mjs","names":[],"sources":["../../../../3-targets/3-targets/postgres/dist/authoring-BsVnEibY.mjs"],"sourcesContent":["import { C as PG_TIMESTAMPTZ_DATE_CODEC_ID, D as PG_TIMESTAMP_TEMPORAL_CODEC_ID, E as PG_TIMESTAMP_STRING_CODEC_ID, T as PG_TIMESTAMPTZ_TEMPORAL_CODEC_ID, s as PG_ENUM_CODEC_ID, w as PG_TIMESTAMPTZ_STRING_CODEC_ID } from \"./codec-ids-Cb0yO-IS.mjs\";\nimport { s as postgresError } from \"./errors-DYyzTYzE.mjs\";\nimport { j as requireTemporal } from \"./codecs-BK3J4C0n.mjs\";\nimport { t as PostgresNativeEnum } from \"./postgres-native-enum-CdP3b_-R.mjs\";\nimport { f as weightGroupsOf, l as POSTGRES_TEXT_SEARCH_LANGUAGES, o as fullTextIndexProblems, r as describeFullTextIndexProblem, t as FULL_TEXT_INDEX_TYPE } from \"./full-text-index-definition-D-QC3DO2.mjs\";\nimport { t as postgresCodecTraitsOf } from \"./postgres-codec-traits-BUygtI9N.mjs\";\nimport { _ as PostgresRlsPolicy, d as PostgresNativeEnumSchema, f as PostgresRlsEnablementSchema, h as PostgresRole, m as PostgresRoleSchema, p as PostgresRlsPolicySchema, v as PostgresRlsEnablement } from \"./postgres-schema-DIaAgaL6.mjs\";\nimport { n as computeContentHash } from \"./canonicalize-CrN3u_xM.mjs\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { UNBOUND_NAMESPACE_ID } from \"@internal/framework-components/ir\";\nimport { temporalCodecPresetWithPrecision, temporalStringAuthoringPresets } from \"@internal/family-sql/control\";\nimport { TIMESTAMP_NOW_GENERATOR_ID, temporalAuthoringPresets } from \"@internal/framework-components/authoring\";\nimport { blockAttribute, bool, dataTypeValue, entityRef, fieldRef, identifier, leafDiagnostic, list, mapBlock, modelAttribute, oneOf, optional, str, structBlock } from \"@internal/psl-parser\";\nimport { exactNameBodyWarning } from \"@internal/sql-contract/index-naming\";\nimport { SQL_EXPRESSION_DATA_TYPE_ID, sqlTextFromCanonical } from \"@internal/sql-contract/sql-expression\";\nimport { assertWireNamePrefixLength, normalizeSqlBody } from \"@internal/sql-schema-ir/naming\";\nimport { assertDefined, invariant } from \"@internal/utils/assertions\";\nimport { ifDefined } from \"@internal/utils/defined\";\n//#region src/core/instant-now-generator.ts\nconst INSTANT_NOW_GENERATOR_ID = \"instantNow\";\nfunction instantNowControlDescriptor() {\n\treturn {\n\t\tid: INSTANT_NOW_GENERATOR_ID,\n\t\tbuildPhases: () => ({\n\t\t\tonCreate: {\n\t\t\t\tkind: \"generator\",\n\t\t\t\tid: INSTANT_NOW_GENERATOR_ID\n\t\t\t},\n\t\t\tonUpdate: {\n\t\t\t\tkind: \"generator\",\n\t\t\t\tid: INSTANT_NOW_GENERATOR_ID\n\t\t\t}\n\t\t})\n\t};\n}\nfunction instantNow() {\n\treturn requireTemporal({ generatorId: INSTANT_NOW_GENERATOR_ID }).Now.instant();\n}\n//#endregion\n//#region src/core/plain-date-time-now-generator.ts\n/**\n* The \"now\" generator for `timestamp` (without time zone) columns: the current\n* moment as a UTC wall-clock `Temporal.PlainDateTime`, the representation\n* `pg/timestamp-temporal@1` encodes. `timestamptz` columns use `instantNow`.\n*/\nconst PLAIN_DATE_TIME_NOW_GENERATOR_ID = \"plainDateTimeNow\";\nfunction plainDateTimeNowControlDescriptor() {\n\treturn {\n\t\tid: PLAIN_DATE_TIME_NOW_GENERATOR_ID,\n\t\tbuildPhases: () => ({\n\t\t\tonCreate: {\n\t\t\t\tkind: \"generator\",\n\t\t\t\tid: PLAIN_DATE_TIME_NOW_GENERATOR_ID\n\t\t\t},\n\t\t\tonUpdate: {\n\t\t\t\tkind: \"generator\",\n\t\t\t\tid: PLAIN_DATE_TIME_NOW_GENERATOR_ID\n\t\t\t}\n\t\t})\n\t};\n}\nfunction plainDateTimeNow() {\n\treturn requireTemporal({ generatorId: PLAIN_DATE_TIME_NOW_GENERATOR_ID }).Now.plainDateTimeISO(\"UTC\");\n}\n//#endregion\n//#region src/core/now-generators.ts\n/** The \"now\" generator for each codec that has one. The `temporal` field presets read it. */\nconst postgresNowGeneratorIds = {\n\t[PG_TIMESTAMP_TEMPORAL_CODEC_ID]: PLAIN_DATE_TIME_NOW_GENERATOR_ID,\n\t[PG_TIMESTAMPTZ_TEMPORAL_CODEC_ID]: INSTANT_NOW_GENERATOR_ID,\n\t[PG_TIMESTAMPTZ_DATE_CODEC_ID]: TIMESTAMP_NOW_GENERATOR_ID,\n\t[PG_TIMESTAMP_STRING_CODEC_ID]: TIMESTAMP_NOW_GENERATOR_ID,\n\t[PG_TIMESTAMPTZ_STRING_CODEC_ID]: TIMESTAMP_NOW_GENERATOR_ID\n};\nconst nowGeneratorIdByCodecId = new Map(Object.entries(postgresNowGeneratorIds));\nfunction postgresNowGeneratorIdFor(codecId) {\n\treturn nowGeneratorIdByCodecId.get(codecId);\n}\n//#endregion\n//#region src/core/authoring.ts\nconst PSL_POLICY_INVALID_MAP = \"PSL_POLICY_INVALID_MAP\";\nconst PSL_FULL_TEXT_INDEX_TOO_MANY_GROUPS = \"PSL_FULL_TEXT_INDEX_TOO_MANY_GROUPS\";\nconst PSL_FULL_TEXT_INDEX_EMPTY_GROUP = \"PSL_FULL_TEXT_INDEX_EMPTY_GROUP\";\nconst PSL_FULL_TEXT_INDEX_DUPLICATE_FIELD = \"PSL_FULL_TEXT_INDEX_DUPLICATE_FIELD\";\nconst PSL_FULL_TEXT_INDEX_REQUIRES_NAME = \"PSL_FULL_TEXT_INDEX_REQUIRES_NAME\";\nconst PSL_FULL_TEXT_INDEX_NAME_XOR_MAP = \"PSL_FULL_TEXT_INDEX_NAME_XOR_MAP\";\nconst PSL_FULL_TEXT_INDEX_TEXT_FIELD = \"PSL_FULL_TEXT_INDEX_TEXT_FIELD\";\nconst PSL_NATIVE_ENUM_DUPLICATE_MEMBER_VALUE = \"PSL_NATIVE_ENUM_DUPLICATE_MEMBER_VALUE\";\nconst PSL_NATIVE_ENUM_MISSING_MEMBERS = \"PSL_NATIVE_ENUM_MISSING_MEMBERS\";\nconst PSL_ROLE_BLOCK_OUTSIDE_UNBOUND_NAMESPACE = \"PSL_ROLE_BLOCK_OUTSIDE_UNBOUND_NAMESPACE\";\n/**\n* `pg.enum(<ref>)` registers as an ordinary type constructor whose sole\n* positional argument names a `native_enum` entity instead of carrying a\n* literal value. The interpreter resolves the ref to the `native_enum`\n* entity generically (driven by `entityRefArg`); the `pg/enum@1` codec\n* descriptor's `columnFromEntity` hook (see `codecs.ts`) converts that\n* entity into the column's `typeParams`. The column's type name comes from the\n* `pg/enum` data type, which renders `typeParams.typeName`.\n*/\nconst postgresAuthoringTypes = {\n\tBigIntNumber: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"A PostgreSQL 64-bit integer represented as a JavaScript number within its safe integer range.\",\n\t\toutput: { codecId: \"pg/int8number@1\" }\n\t},\n\tUnboundedInt: {\n\t\tkind: \"typeConstructor\",\n\t\tdocumentation: \"An arbitrary-precision integer stored as PostgreSQL numeric and represented as bigint.\",\n\t\toutput: { codecId: \"pg/unboundedint@1\" }\n\t},\n\tpg: { enum: {\n\t\tkind: \"typeConstructor\",\n\t\tinferred: true,\n\t\tentityRefArg: {\n\t\t\tindex: 0,\n\t\t\tentityKind: \"native_enum\"\n\t\t},\n\t\toutput: { codecId: PG_ENUM_CODEC_ID }\n\t} }\n};\nconst policyTargetParam = {\n\ttype: entityRef({ kind: \"model\" }),\n\tdocumentation: \"The model protected by this policy; it must declare @@rls.\"\n};\nconst policyRolesParam = {\n\ttype: optional(list(oneOf(entityRef({\n\t\tkind: \"block\",\n\t\tkeyword: \"role\"\n\t}), identifier()))),\n\tdocumentation: \"The database roles to which this policy applies.\"\n};\nfunction policyUsingParam(ctx) {\n\treturn {\n\t\ttype: optional(dataTypeValue(SQL_EXPRESSION_DATA_TYPE_ID, ctx.dataTypes)),\n\t\tdocumentation: \"A SQL predicate controlling which rows this policy permits.\"\n\t};\n}\nfunction policyWithCheckParam(ctx) {\n\treturn {\n\t\ttype: optional(dataTypeValue(SQL_EXPRESSION_DATA_TYPE_ID, ctx.dataTypes)),\n\t\tdocumentation: \"A SQL predicate checking rows being written by this policy.\"\n\t};\n}\nconst policyPermissiveParam = {\n\ttype: optional(bool()),\n\tdocumentation: \"Whether the policy is permissive (combined with OR) rather than restrictive (combined with AND).\"\n};\nfunction policyUsingOnlySpec(ctx) {\n\treturn structBlock({ parameters: {\n\t\ttarget: policyTargetParam,\n\t\troles: policyRolesParam,\n\t\tusing: policyUsingParam(ctx),\n\t\tpermissive: policyPermissiveParam\n\t} });\n}\nfunction policyWithCheckOnlySpec(ctx) {\n\treturn structBlock({ parameters: {\n\t\ttarget: policyTargetParam,\n\t\troles: policyRolesParam,\n\t\twithCheck: policyWithCheckParam(ctx),\n\t\tpermissive: policyPermissiveParam\n\t} });\n}\nfunction policyBothPredicatesSpec(ctx) {\n\treturn structBlock({ parameters: {\n\t\ttarget: policyTargetParam,\n\t\troles: policyRolesParam,\n\t\tusing: policyUsingParam(ctx),\n\t\twithCheck: policyWithCheckParam(ctx),\n\t\tpermissive: policyPermissiveParam\n\t} });\n}\nfunction roleSpec() {\n\treturn structBlock({ parameters: {} });\n}\nfunction nativeEnumSpec() {\n\treturn mapBlock({ value: {\n\t\ttype: str(),\n\t\tdocumentation: \"The member value stored in the database enum type.\"\n\t} });\n}\n/**\n* The block keyword that authors each row-level security operation. The keyword is the operation, so\n* a policy block has no `operation` parameter. The reader looks a block's operation up here, and\n* `contract infer` and `contract print` look up the keyword to write.\n*/\nconst POLICY_BLOCK_KEYWORDS = {\n\tselect: \"policy_select\",\n\tinsert: \"policy_insert\",\n\tupdate: \"policy_update\",\n\tdelete: \"policy_delete\",\n\tall: \"policy_all\"\n};\nfunction isRlsPolicyOperation(value) {\n\treturn Object.hasOwn(POLICY_BLOCK_KEYWORDS, value);\n}\n/** The operation a `policy_<operation>` block keyword authors, or `undefined` for another keyword. */\nfunction policyOperationOfKeyword(keyword) {\n\treturn Object.keys(POLICY_BLOCK_KEYWORDS).filter(isRlsPolicyOperation).find((operation) => POLICY_BLOCK_KEYWORDS[operation] === keyword);\n}\n/**\n* Assembles a {@link PostgresRlsPolicy} from lowered inputs: normalizes the\n* predicates, computes the content-hash wire name, and constructs the frozen\n* entity. The single hash-assembly body shared by the PSL block lowering\n* ({@link lowerRlsPolicyFromBlock}) and the TS entity-handle lowering\n* ({@link postgresLowerEntityHandles}) so the two surfaces cannot drift.\n*/\nfunction buildRlsPolicyEntity(input) {\n\tconst permissive = input.permissive ?? true;\n\tconst wireHash = computeContentHash({\n\t\t...ifDefined(\"using\", input.using !== void 0 ? normalizeSqlBody(input.using) : void 0),\n\t\t...ifDefined(\"withCheck\", input.withCheck !== void 0 ? normalizeSqlBody(input.withCheck) : void 0),\n\t\troles: input.roles,\n\t\toperation: input.operation,\n\t\tpermissive\n\t});\n\treturn new PostgresRlsPolicy({\n\t\tnaming: {\n\t\t\tkind: \"wire\",\n\t\t\tprefix: input.prefix,\n\t\t\thash: wireHash\n\t\t},\n\t\ttableName: input.tableName,\n\t\tnamespaceId: input.namespaceId,\n\t\toperation: input.operation,\n\t\troles: input.roles,\n\t\tusing: input.using,\n\t\twithCheck: input.withCheck,\n\t\tpermissive\n\t});\n}\nfunction lowerRlsPolicyFromBlock(block, ctx) {\n\tconst prefix = block.name;\n\tconst operation = policyOperationOfKeyword(block.keyword) ?? \"select\";\n\tconst target = block.resolvedModelRefs?.[\"target\"];\n\tassertDefined(target, `lowerRlsPolicyFromBlock: policy \"${block.name}\" reached the factory without a projected \\`target\\` coordinate; the interpreter projects checked model references before invoking entity factories.`);\n\tconst roles = block.values.roles === void 0 ? [] : block.values.roles.map((role) => typeof role === \"string\" ? role : role.declaration.name).sort();\n\tconst using = block.values.using === void 0 ? void 0 : sqlTextFromCanonical(block.values.using.value);\n\tconst withCheck = block.values.withCheck === void 0 ? void 0 : sqlTextFromCanonical(block.values.withCheck.value);\n\tconst permissive = block.values.permissive ?? true;\n\tconst mapAttr = block.attributes[\"map\"];\n\tif (mapAttr !== void 0) {\n\t\tconst exactName = mapAttr.args[\"name\"];\n\t\tinvariant(typeof exactName === \"string\", \"@@map on a policy block parses one string argument\");\n\t\tctx.warnings?.push(exactNameBodyWarning(\"policy\", exactName));\n\t\treturn new PostgresRlsPolicy({\n\t\t\tnaming: {\n\t\t\t\tkind: \"exact\",\n\t\t\t\tname: exactName\n\t\t\t},\n\t\t\ttableName: target.tableName,\n\t\t\tnamespaceId: target.namespaceId,\n\t\t\toperation,\n\t\t\troles,\n\t\t\tusing,\n\t\t\twithCheck,\n\t\t\tpermissive\n\t\t});\n\t}\n\treturn buildRlsPolicyEntity({\n\t\tprefix,\n\t\ttableName: target.tableName,\n\t\tnamespaceId: target.namespaceId,\n\t\toperation,\n\t\troles,\n\t\t...ifDefined(\"using\", using),\n\t\t...ifDefined(\"withCheck\", withCheck),\n\t\tpermissive\n\t});\n}\nconst policyEntityTypeOutput = {\n\tfactory: lowerRlsPolicyFromBlock,\n\tpslPlacement: (entity) => ({ namespaceId: entity.namespaceId })\n};\nfunction lowerNativeEnumFromBlock(block, ctx) {\n\tconst sourceId = ctx.sourceId ?? \"unknown\";\n\tconst diagnostics = ctx.diagnostics;\n\tconst mapAttr = block.attributes[\"map\"];\n\tlet typeName = block.name;\n\tif (mapAttr !== void 0) {\n\t\tconst mapped = mapAttr.args[\"name\"];\n\t\tinvariant(typeof mapped === \"string\", \"@@map on a native_enum block parses one string argument\");\n\t\ttypeName = mapped;\n\t}\n\tlet memberError = false;\n\tconst seenValues = /* @__PURE__ */ new Set();\n\tconst members = [];\n\tfor (const [memberName, value] of Object.entries(block.values)) {\n\t\tif (seenValues.has(value)) {\n\t\t\tdiagnostics?.push({\n\t\t\t\tcode: PSL_NATIVE_ENUM_DUPLICATE_MEMBER_VALUE,\n\t\t\t\tmessage: `native_enum \"${block.name}\": duplicate member value \"${value}\"`,\n\t\t\t\tsourceId,\n\t\t\t\tspan: block.parameterSpans[memberName] ?? block.span\n\t\t\t});\n\t\t\tmemberError = true;\n\t\t\tcontinue;\n\t\t}\n\t\tseenValues.add(value);\n\t\tmembers.push(value);\n\t}\n\tif (memberError) return void 0;\n\tif (members.length === 0) {\n\t\tdiagnostics?.push({\n\t\t\tcode: PSL_NATIVE_ENUM_MISSING_MEMBERS,\n\t\t\tmessage: `native_enum \"${block.name}\" must have at least one member`,\n\t\t\tsourceId,\n\t\t\tspan: block.span\n\t\t});\n\t\treturn;\n\t}\n\treturn new PostgresNativeEnum({\n\t\ttypeName,\n\t\tmembers\n\t});\n}\n/**\n* `native_enum`'s entity-type factory output, checked separately from the assembled\n* `postgresAuthoringEntityTypes` map below: `deriveValueSet` is SQL-family surface\n* ({@link SqlValueSetDerivingEntityTypeOutput}), not part of the framework\n* `AuthoringEntityTypeFactoryOutput` shape, so folding it directly into the map's single\n* `satisfies AuthoringEntityTypeNamespace` check would trip an excess-property error. Checking it\n* here against the intersection of both shapes keeps it structurally valid against each without\n* widening the map's own check.\n*/\nconst nativeEnumEntityTypeOutput = {\n\tfactory: lowerNativeEnumFromBlock,\n\tderiveValueSet: (entity) => ({\n\t\tkind: \"valueSet\",\n\t\tvalues: [...entity.members]\n\t})\n};\n/**\n* Lowers a `role <name> {}` block into a {@link PostgresRole}. Roles are\n* cluster-scoped in Postgres, so the block must be declared inside\n* `namespace unbound { … }` — any other lexical namespace (a named schema,\n* or the default bucket top-level declarations resolve to) is a load-time\n* diagnostic. The lowered entity carries the unbound coordinate.\n*/\nfunction lowerRoleFromBlock(block, ctx) {\n\tif (block.namespaceId !== UNBOUND_NAMESPACE_ID) {\n\t\tctx.diagnostics?.push({\n\t\t\tcode: PSL_ROLE_BLOCK_OUTSIDE_UNBOUND_NAMESPACE,\n\t\t\tmessage: `\\`role\\` block \"${block.name}\" must be declared inside \\`namespace unbound { }\\`, not in namespace \"${block.namespaceId}\"`,\n\t\t\tsourceId: ctx.sourceId ?? \"unknown\",\n\t\t\tspan: block.span\n\t\t});\n\t\treturn;\n\t}\n\treturn new PostgresRole({\n\t\tname: block.name,\n\t\tnamespaceId: UNBOUND_NAMESPACE_ID\n\t});\n}\nconst postgresAuthoringEntityTypes = {\n\trole: {\n\t\tkind: \"entity\",\n\t\tdiscriminator: \"role\",\n\t\tvalidatorSchema: PostgresRoleSchema,\n\t\toutput: { factory: lowerRoleFromBlock }\n\t},\n\trls: {\n\t\tkind: \"entity\",\n\t\tdiscriminator: \"rls\",\n\t\tvalidatorSchema: PostgresRlsEnablementSchema,\n\t\toutput: { factory: (input) => new PostgresRlsEnablement(input) }\n\t},\n\tpolicy: {\n\t\tkind: \"entity\",\n\t\tdiscriminator: \"policy\",\n\t\tvalidatorSchema: PostgresRlsPolicySchema,\n\t\toutput: policyEntityTypeOutput\n\t},\n\tnative_enum: {\n\t\tkind: \"entity\",\n\t\tdiscriminator: \"native_enum\",\n\t\tvalidatorSchema: PostgresNativeEnumSchema,\n\t\toutput: nativeEnumEntityTypeOutput\n\t}\n};\n/**\n* Field presets contributed by the Postgres target pack.\n*\n* These mirror the PSL scalar-to-codec mapping used by the Postgres adapter\n* (see `createPostgresPslScalarTypeDescriptors`), so that authoring a field\n* via the TS callback surface (e.g. `field.int()`) and via the PSL scalar\n* surface (e.g. `Int`) lowers to byte-identical contracts.\n*\n* The `uuidNative` / `id.uuidv4Native` / `id.uuidv7Native` presets use the\n* native Postgres `uuid` type (codecId `pg/uuid@1`). For cross-target\n* portability use `uuidString` / `id.uuidv4String` / `id.uuidv7String` from\n* the family pack instead.\n*/\nconst policyRequiresRls = {\n\tparameter: \"target\",\n\tattribute: \"rls\"\n};\nconst policyMapAttribute = blockAttribute(\"map\", {\n\tdocumentation: \"Maps this row-level security policy to its PostgreSQL policy name.\",\n\tpositional: [{\n\t\tkey: \"name\",\n\t\ttype: str(),\n\t\tdocumentation: \"The nonempty PostgreSQL policy name.\"\n\t}],\n\trefine: (parsed, ctx, attributeNode) => parsed.name === \"\" ? [leafDiagnostic(ctx, attributeNode, \"@@map policy name must be a non-empty string\", PSL_POLICY_INVALID_MAP)] : []\n});\nconst policyBlockAttributes = { map: () => policyMapAttribute };\nconst nativeEnumMapAttribute = blockAttribute(\"map\", {\n\tdocumentation: \"Maps this native enum to its PostgreSQL type name.\",\n\tpositional: [{\n\t\tkey: \"name\",\n\t\ttype: str(),\n\t\tdocumentation: \"The PostgreSQL enum type name.\"\n\t}]\n});\nconst postgresAuthoringPslBlockDescriptors = {\n\t[POLICY_BLOCK_KEYWORDS.select]: {\n\t\tkind: \"pslBlock\",\n\t\tkeyword: POLICY_BLOCK_KEYWORDS.select,\n\t\tdocumentation: \"Defines a row-level security policy controlling which rows can be selected.\",\n\t\tdiscriminator: \"policy\",\n\t\tname: { required: true },\n\t\tspec: policyUsingOnlySpec,\n\t\trequiresModelAttribute: policyRequiresRls,\n\t\tattributes: policyBlockAttributes\n\t},\n\t[POLICY_BLOCK_KEYWORDS.delete]: {\n\t\tkind: \"pslBlock\",\n\t\tkeyword: POLICY_BLOCK_KEYWORDS.delete,\n\t\tdocumentation: \"Defines a row-level security policy controlling which rows can be deleted.\",\n\t\tdiscriminator: \"policy\",\n\t\tname: { required: true },\n\t\tspec: policyUsingOnlySpec,\n\t\trequiresModelAttribute: policyRequiresRls,\n\t\tattributes: policyBlockAttributes\n\t},\n\t[POLICY_BLOCK_KEYWORDS.insert]: {\n\t\tkind: \"pslBlock\",\n\t\tkeyword: POLICY_BLOCK_KEYWORDS.insert,\n\t\tdocumentation: \"Defines a row-level security policy checking rows being inserted.\",\n\t\tdiscriminator: \"policy\",\n\t\tname: { required: true },\n\t\tspec: policyWithCheckOnlySpec,\n\t\trequiresModelAttribute: policyRequiresRls,\n\t\tattributes: policyBlockAttributes\n\t},\n\t[POLICY_BLOCK_KEYWORDS.update]: {\n\t\tkind: \"pslBlock\",\n\t\tkeyword: POLICY_BLOCK_KEYWORDS.update,\n\t\tdocumentation: \"Defines a row-level security policy controlling row visibility and checks for updates.\",\n\t\tdiscriminator: \"policy\",\n\t\tname: { required: true },\n\t\tspec: policyBothPredicatesSpec,\n\t\trequiresModelAttribute: policyRequiresRls,\n\t\tattributes: policyBlockAttributes\n\t},\n\t[POLICY_BLOCK_KEYWORDS.all]: {\n\t\tkind: \"pslBlock\",\n\t\tkeyword: POLICY_BLOCK_KEYWORDS.all,\n\t\tdocumentation: \"Defines a row-level security policy applying to all operations.\",\n\t\tdiscriminator: \"policy\",\n\t\tname: { required: true },\n\t\tspec: policyBothPredicatesSpec,\n\t\trequiresModelAttribute: policyRequiresRls,\n\t\tattributes: policyBlockAttributes\n\t},\n\tnative_enum: {\n\t\tkind: \"pslBlock\",\n\t\tkeyword: \"native_enum\",\n\t\tdocumentation: \"Defines a PostgreSQL enum type with named string-valued members.\",\n\t\tdiscriminator: \"native_enum\",\n\t\tname: { required: true },\n\t\tspec: nativeEnumSpec,\n\t\tnameIsStorageName: true,\n\t\tattributes: { map: () => nativeEnumMapAttribute }\n\t},\n\t/**\n\t* PSL block descriptor for `role` (e.g. `role anon {}`). Name-only, no\n\t* parameters and no body content. Declared inside `namespace unbound { }`\n\t* — see {@link lowerRoleFromBlock} for the placement check and the\n\t* coordinate the lowered entity carries.\n\t*/\n\trole: {\n\t\tkind: \"pslBlock\",\n\t\tkeyword: \"role\",\n\t\tdocumentation: \"Declares an existing database role in namespace unbound for use in security policies.\",\n\t\tdiscriminator: \"role\",\n\t\tname: { required: true },\n\t\tspec: roleSpec\n\t}\n};\nconst postgresRlsSpec = modelAttribute(\"rls\", { documentation: \"Enables PostgreSQL row-level security on this model’s table.\" });\nconst postgresRlsSpecFactory = () => postgresRlsSpec;\nconst [firstLanguage, ...remainingLanguages] = POSTGRES_TEXT_SEARCH_LANGUAGES;\nconst fullTextField = fieldRef();\nfunction postgresFullTextIndexSpec(ctx) {\n\treturn modelAttribute(\"fullTextIndex\", {\n\t\tdocumentation: \"Indexes text fields for full-text search. Each item of the list is a weight group, strongest first; a nested list puts several fields in one group. Pass the index from the table's `indexes` to `fullTextMatches` and `fullTextRank` to search the same document.\",\n\t\tpositional: [{\n\t\t\tkey: \"fields\",\n\t\t\ttype: oneOf(fullTextField, list(oneOf(fullTextField, list(fullTextField)), {\n\t\t\t\tallowEmpty: false,\n\t\t\t\tlabel: \"(field name | field name[])[]\"\n\t\t\t})),\n\t\t\tdocumentation: \"The fields to index: one field, or a list of fields and lists of fields. Each top-level item is a weight group, from A down to D.\"\n\t\t}],\n\t\tnamed: {\n\t\t\tlanguage: {\n\t\t\t\ttype: optional(oneOf(str(firstLanguage), ...remainingLanguages.map((language) => str(language)))),\n\t\t\t\tdocumentation: \"The text-search configuration. Defaults to `english`, and must match the language the query operations are given.\"\n\t\t\t},\n\t\t\tname: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The index name. Mutually exclusive with `map`.\"\n\t\t\t},\n\t\t\tmap: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The database index name. Mutually exclusive with `name`.\"\n\t\t\t},\n\t\t\twhere: {\n\t\t\t\ttype: optional(dataTypeValue(SQL_EXPRESSION_DATA_TYPE_ID, ctx.dataTypes)),\n\t\t\t\tdocumentation: \"The SQL predicate restricting rows included in a partial index.\"\n\t\t\t}\n\t\t},\n\t\trefine: (value, ctx, attributeNode) => {\n\t\t\tconst diagnostics = fullTextIndexProblems({ weightGroups: weightGroupsOf(value.fields, isFieldName) }).filter(isPslFullTextIndexProblem).map((problem) => leafDiagnostic(ctx, attributeNode, describeFullTextIndexProblem(\"`@@fullTextIndex`\", problem), FULL_TEXT_INDEX_PROBLEM_CODES[problem.kind]));\n\t\t\tif (value.name === void 0 && value.map === void 0) diagnostics.push(leafDiagnostic(ctx, attributeNode, \"`@@fullTextIndex` requires a `name` or `map` argument\", PSL_FULL_TEXT_INDEX_REQUIRES_NAME));\n\t\t\tif (value.name !== void 0 && value.map !== void 0) diagnostics.push(leafDiagnostic(ctx, attributeNode, \"`@@fullTextIndex` takes at most one of `name` and `map`\", PSL_FULL_TEXT_INDEX_NAME_XOR_MAP));\n\t\t\treturn diagnostics;\n\t\t}\n\t});\n}\nfunction isFieldName(value) {\n\treturn typeof value === \"string\";\n}\nfunction isPslFullTextIndexProblem(problem) {\n\treturn problem.kind !== \"unique\" && problem.kind !== \"no-fields\";\n}\nconst FULL_TEXT_INDEX_PROBLEM_CODES = {\n\t\"too-many-groups\": PSL_FULL_TEXT_INDEX_TOO_MANY_GROUPS,\n\t\"empty-group\": PSL_FULL_TEXT_INDEX_EMPTY_GROUP,\n\t\"duplicate-field\": PSL_FULL_TEXT_INDEX_DUPLICATE_FIELD,\n\t\"not-text\": PSL_FULL_TEXT_INDEX_TEXT_FIELD\n};\nconst postgresFullTextIndexSpecFactory = (ctx) => postgresFullTextIndexSpec(ctx);\n/**\n* `@@` model attributes contributed by the Postgres target pack.\n*\n* `@@rls` is argument-less: presence marks the model's table\n* RLS-controlled. It lowers to a {@link PostgresRlsEnablement} marker in\n* the namespace's `entries.rls`, keyed by the model's table name — the\n* marker (never the policy set) is what drives\n* `ENABLE`/`DISABLE ROW LEVEL SECURITY` planning.\n*/\nconst postgresAuthoringModelAttributes = {\n\trls: {\n\t\tkind: \"modelAttribute\",\n\t\tattribute: \"rls\",\n\t\tspec: postgresRlsSpecFactory,\n\t\tlower: (_parsed, ctx) => ({\n\t\t\tkey: ctx.storageName,\n\t\t\tentity: new PostgresRlsEnablement({\n\t\t\t\ttableName: ctx.storageName,\n\t\t\t\tnamespaceId: ctx.namespaceId\n\t\t\t})\n\t\t})\n\t},\n\tfullTextIndex: {\n\t\tkind: \"modelAttribute\",\n\t\tattribute: \"fullTextIndex\",\n\t\tspec: postgresFullTextIndexSpecFactory,\n\t\trepeatable: true,\n\t\tlower: (parsed, ctx) => {\n\t\t\tconst fieldGroups = weightGroupsOf(parsed.fields, isFieldName);\n\t\t\tconst problems = fullTextIndexProblems({\n\t\t\t\tweightGroups: fieldGroups,\n\t\t\t\tcodecs: {\n\t\t\t\t\tcodecIdOf: (fieldName) => ctx.fieldStorageName(fieldName) === void 0 ? void 0 : ctx.fieldCodecId(fieldName),\n\t\t\t\t\ttraitsOf: postgresCodecTraitsOf\n\t\t\t\t}\n\t\t\t}).filter(isPslFullTextIndexProblem);\n\t\t\tfor (const problem of problems) ctx.diagnostics?.push({\n\t\t\t\tcode: FULL_TEXT_INDEX_PROBLEM_CODES[problem.kind],\n\t\t\t\tmessage: describeFullTextIndexProblem(\"`@@fullTextIndex`\", problem, (fieldName) => `${ctx.modelName}.${fieldName}`),\n\t\t\t\tsourceId: ctx.sourceId ?? \"unknown\"\n\t\t\t});\n\t\t\tif (problems.length > 0) return void 0;\n\t\t\tconst weightGroups = fieldGroups.map((group) => group.map((fieldName) => {\n\t\t\t\tconst columnName = ctx.fieldStorageName(fieldName);\n\t\t\t\tassertDefined(columnName, `@@fullTextIndex field \"${fieldName}\" has no storage column`);\n\t\t\t\treturn columnName;\n\t\t\t}));\n\t\t\treturn { index: {\n\t\t\t\tcolumns: weightGroups.flat(),\n\t\t\t\ttype: FULL_TEXT_INDEX_TYPE,\n\t\t\t\toptions: {\n\t\t\t\t\tweightGroups,\n\t\t\t\t\tlanguage: parsed.language ?? \"english\"\n\t\t\t\t},\n\t\t\t\twhere: parsed.where === void 0 ? void 0 : sqlTextFromCanonical(parsed.where.value),\n\t\t\t\tunique: void 0,\n\t\t\t\tname: parsed.name,\n\t\t\t\tmap: parsed.map\n\t\t\t} };\n\t\t}\n\t}\n};\nconst postgresAuthoringFieldPresets = {\n\ttext: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/text@1\" }\n\t},\n\tint: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/int4@1\" }\n\t},\n\tbigint: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/int8@1\" }\n\t},\n\tfloat: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/float8@1\" }\n\t},\n\tdecimal: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/numeric@1\" }\n\t},\n\tboolean: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/bool@1\" }\n\t},\n\tjson: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/jsonb@1\" }\n\t},\n\tbytes: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/bytea@1\" }\n\t},\n\tdateTime: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/timestamptz-temporal@1\" }\n\t},\n\ttemporal: {\n\t\tcreatedAtJsDate: (/* @__PURE__ */ temporalAuthoringPresets({\n\t\t\tcodecId: PG_TIMESTAMPTZ_DATE_CODEC_ID,\n\t\t\tgeneratorId: postgresNowGeneratorIds[PG_TIMESTAMPTZ_DATE_CODEC_ID]\n\t\t})).createdAt,\n\t\tupdatedAtJsDate: (/* @__PURE__ */ temporalAuthoringPresets({\n\t\t\tcodecId: PG_TIMESTAMPTZ_DATE_CODEC_ID,\n\t\t\tgeneratorId: postgresNowGeneratorIds[PG_TIMESTAMPTZ_DATE_CODEC_ID]\n\t\t})).updatedAt,\n\t\ttimestamptzJsDate: /* @__PURE__ */ temporalCodecPresetWithPrecision({\n\t\t\tcodecId: PG_TIMESTAMPTZ_DATE_CODEC_ID,\n\t\t\tgeneratorId: postgresNowGeneratorIds[PG_TIMESTAMPTZ_DATE_CODEC_ID]\n\t\t}),\n\t\t.../* @__PURE__ */ temporalAuthoringPresets({\n\t\t\tcodecId: PG_TIMESTAMPTZ_TEMPORAL_CODEC_ID,\n\t\t\tgeneratorId: postgresNowGeneratorIds[PG_TIMESTAMPTZ_TEMPORAL_CODEC_ID]\n\t\t}),\n\t\t.../* @__PURE__ */ temporalStringAuthoringPresets({\n\t\t\tcodecId: PG_TIMESTAMPTZ_STRING_CODEC_ID,\n\t\t\tgeneratorId: postgresNowGeneratorIds[PG_TIMESTAMPTZ_STRING_CODEC_ID]\n\t\t}),\n\t\ttimestamp: /* @__PURE__ */ temporalCodecPresetWithPrecision({\n\t\t\tcodecId: PG_TIMESTAMP_TEMPORAL_CODEC_ID,\n\t\t\tgeneratorId: postgresNowGeneratorIds[PG_TIMESTAMP_TEMPORAL_CODEC_ID]\n\t\t}),\n\t\ttimestamptz: /* @__PURE__ */ temporalCodecPresetWithPrecision({\n\t\t\tcodecId: PG_TIMESTAMPTZ_TEMPORAL_CODEC_ID,\n\t\t\tgeneratorId: postgresNowGeneratorIds[PG_TIMESTAMPTZ_TEMPORAL_CODEC_ID]\n\t\t}),\n\t\ttimestampString: /* @__PURE__ */ temporalCodecPresetWithPrecision({\n\t\t\tcodecId: PG_TIMESTAMP_STRING_CODEC_ID,\n\t\t\tgeneratorId: postgresNowGeneratorIds[PG_TIMESTAMP_STRING_CODEC_ID]\n\t\t}),\n\t\ttimestamptzString: /* @__PURE__ */ temporalCodecPresetWithPrecision({\n\t\t\tcodecId: PG_TIMESTAMPTZ_STRING_CODEC_ID,\n\t\t\tgeneratorId: postgresNowGeneratorIds[PG_TIMESTAMPTZ_STRING_CODEC_ID]\n\t\t})\n\t},\n\tuuidNative: {\n\t\tkind: \"fieldPreset\",\n\t\toutput: { codecId: \"pg/uuid@1\" }\n\t},\n\tid: {\n\t\tuuidv4Native: {\n\t\t\tkind: \"fieldPreset\",\n\t\t\toutput: {\n\t\t\t\tcodecId: \"pg/uuid@1\",\n\t\t\t\texecutionDefaults: { onCreate: {\n\t\t\t\t\tkind: \"generator\",\n\t\t\t\t\tid: \"uuidv4\"\n\t\t\t\t} },\n\t\t\t\tid: true\n\t\t\t}\n\t\t},\n\t\tuuidv7Native: {\n\t\t\tkind: \"fieldPreset\",\n\t\t\toutput: {\n\t\t\t\tcodecId: \"pg/uuid@1\",\n\t\t\t\texecutionDefaults: { onCreate: {\n\t\t\t\t\tkind: \"generator\",\n\t\t\t\t\tid: \"uuidv7\"\n\t\t\t\t} },\n\t\t\t\tid: true\n\t\t\t}\n\t\t}\n\t}\n};\n/**\n* Resolves an entity handle's `target` ref to a table coordinate of this\n* contract, or throws the load-time diagnostic naming the handle: a\n* cross-space target is rejected (you cannot CREATE POLICY on a table\n* another space owns) and an unresolved target names the model.\n*/\nfunction requireLocalTarget(refs, subject) {\n\tconst target = refs[\"target\"];\n\tif (target !== void 0 && target.kind === \"resolved\") return {\n\t\tnamespaceId: target.namespaceId,\n\t\ttableName: target.tableName\n\t};\n\tif (target !== void 0 && target.kind === \"cross-space\") throw postgresError(\"CONTRACT.POLICY_INVALID\", `defineContract: ${subject} targets model \"${target.modelName ?? target.tableName}\", which lives in another contract space. Policies and rlsEnabled entries must target a model declared in this contract.`, { meta: {\n\t\tmodel: target.modelName ?? target.tableName,\n\t\treason: \"cross-space-target\"\n\t} });\n\tthrow postgresError(\"CONTRACT.MODEL_UNKNOWN\", `defineContract: ${subject} targets model \"${target?.modelName ?? \"<anonymous>\"}\", which is not in the contract's models. Add the model to \\`models\\`.`, { meta: { model: target?.modelName ?? \"<anonymous>\" } });\n}\n/**\n* The SQL-family entity-handle batch lowering hook for the Postgres pack\n* (`SqlEntityHandleLoweringContribution`). Receives every `entities` handle\n* whose kind this pack registered — batch, so the cross-entity diagnostics\n* (duplicate prefix, policy without rlsEnabled, duplicate role) can see\n* sibling handles — and lowers them with the same keying and hash assembly\n* as the PSL path: `policy` keyed by prefix (wire name via\n* {@link buildRlsPolicyEntity}), `rls` keyed by table name, `role` keyed by\n* name and filed under the default namespace (roles are declared\n* contract-wide; PSL has no role block to set a precedent).\n*/\nfunction postgresLowerEntityHandles(input) {\n\tconst enablements = /* @__PURE__ */ new Map();\n\tconst roles = /* @__PURE__ */ new Map();\n\tconst policies = [];\n\tconst coordinateKey = (coordinate) => `${coordinate.namespaceId} ${coordinate.tableName}`;\n\tfor (const { handle, refs } of input.handles) switch (handle.entityKind) {\n\t\tcase \"rls\": {\n\t\t\tconst coordinate = requireLocalTarget(refs, \"an rlsEnabled entry\");\n\t\t\tconst key = coordinateKey(coordinate);\n\t\t\tif (!enablements.has(key)) enablements.set(key, {\n\t\t\t\tcoordinate,\n\t\t\t\tentity: new PostgresRlsEnablement({\n\t\t\t\t\ttableName: coordinate.tableName,\n\t\t\t\t\tnamespaceId: coordinate.namespaceId\n\t\t\t\t})\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tcase \"role\": {\n\t\t\tconst roleHandle = blindCast(handle);\n\t\t\tif (roles.has(roleHandle.name)) throw postgresError(\"CONTRACT.ROLE_INVALID\", `defineContract: role \"${roleHandle.name}\" is declared more than once in the entities list.`, { meta: {\n\t\t\t\trole: roleHandle.name,\n\t\t\t\treason: \"duplicate\"\n\t\t\t} });\n\t\t\troles.set(roleHandle.name, new PostgresRole({\n\t\t\t\tname: roleHandle.name,\n\t\t\t\tnamespaceId: UNBOUND_NAMESPACE_ID\n\t\t\t}));\n\t\t\tbreak;\n\t\t}\n\t\tcase \"policy\": {\n\t\t\tconst policyHandle = blindCast(handle);\n\t\t\tpolicies.push({\n\t\t\t\thandle: policyHandle,\n\t\t\t\trefs\n\t\t\t});\n\t\t\tbreak;\n\t\t}\n\t\tdefault: throw postgresError(\"CONTRACT.ENTITY_KIND_INVALID\", `defineContract: the postgres pack does not lower \"${handle.entityKind}\" handles from the entities list.`, { meta: { entityKind: handle.entityKind } });\n\t}\n\tconst rows = [];\n\tconst seenPrefixes = /* @__PURE__ */ new Set();\n\tfor (const { handle: policy, refs } of policies) {\n\t\tconst prefix = policy.name;\n\t\tassertWireNamePrefixLength(prefix, \"defineContract: policy prefix\");\n\t\tconst coordinate = requireLocalTarget(refs, `policy \"${prefix}\"`);\n\t\tif (!enablements.has(coordinateKey(coordinate))) {\n\t\t\tconst target = refs[\"target\"];\n\t\t\tthrow postgresError(\"CONTRACT.POLICY_INVALID\", `defineContract: policy \"${prefix}\" targets model \"${target?.modelName ?? coordinate.tableName}\", whose table is not RLS-enabled. Add rlsEnabled(<model>) to the entities list.`, { meta: {\n\t\t\t\tprefix,\n\t\t\t\tmodel: target?.modelName ?? coordinate.tableName,\n\t\t\t\treason: \"target-not-rls-enabled\"\n\t\t\t} });\n\t\t}\n\t\tconst prefixKey = `${coordinate.namespaceId} ${prefix}`;\n\t\tif (seenPrefixes.has(prefixKey)) throw postgresError(\"CONTRACT.POLICY_INVALID\", `defineContract: policy prefix \"${prefix}\" is declared more than once in namespace \"${coordinate.namespaceId}\". Policy prefixes must be unique per namespace.`, { meta: {\n\t\t\tprefix,\n\t\t\tnamespaceId: coordinate.namespaceId,\n\t\t\treason: \"duplicate-prefix\"\n\t\t} });\n\t\tseenPrefixes.add(prefixKey);\n\t\tconst roleNames = [...new Set(policy.roles.map((roleHandle) => roleHandle.name))].sort();\n\t\trows.push({\n\t\t\tnamespaceId: coordinate.namespaceId,\n\t\t\tentityKind: \"policy\",\n\t\t\tkey: prefix,\n\t\t\tentity: buildRlsPolicyEntity({\n\t\t\t\tprefix,\n\t\t\t\ttableName: coordinate.tableName,\n\t\t\t\tnamespaceId: coordinate.namespaceId,\n\t\t\t\toperation: policy.operation,\n\t\t\t\troles: roleNames,\n\t\t\t\t...ifDefined(\"using\", policy.using),\n\t\t\t\t...ifDefined(\"withCheck\", policy.withCheck)\n\t\t\t})\n\t\t});\n\t}\n\tfor (const { coordinate, entity } of enablements.values()) rows.push({\n\t\tnamespaceId: coordinate.namespaceId,\n\t\tentityKind: \"rls\",\n\t\tkey: coordinate.tableName,\n\t\tentity\n\t});\n\tfor (const [name, entity] of roles) rows.push({\n\t\tnamespaceId: UNBOUND_NAMESPACE_ID,\n\t\tentityKind: \"role\",\n\t\tkey: name,\n\t\tentity\n\t});\n\treturn rows;\n}\n//#endregion\nexport { postgresAuthoringPslBlockDescriptors as a, postgresNowGeneratorIdFor as c, plainDateTimeNowControlDescriptor as d, INSTANT_NOW_GENERATOR_ID as f, postgresAuthoringModelAttributes as i, PLAIN_DATE_TIME_NOW_GENERATOR_ID as l, instantNowControlDescriptor as m, postgresAuthoringEntityTypes as n, postgresAuthoringTypes as o, instantNow as p, postgresAuthoringFieldPresets as r, postgresLowerEntityHandles as s, POLICY_BLOCK_KEYWORDS as t, plainDateTimeNow as u };\n\n//# sourceMappingURL=authoring-BsVnEibY.mjs.map"],"mappings":"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"}
@@ -1,27 +1,27 @@
1
1
  import "./postgres-rls-policy-CnDxf3z9-C3LIHAIG.mjs";
2
2
  import "./postgres-schema-Xsjt3RKO-Buv2X8ai.mjs";
3
3
  import { ParsedPslExtensionBlock } from "@prisma/orm-framework/components/authoring";
4
- import { InferBlock } from "@prisma/orm-framework/psl-parser";
4
+ import { BlockSpecContext, InferBlock, ParsedTypedValue } from "@prisma/orm-framework/psl-parser";
5
5
  import { EntityHandleLoweringInput, LoweredPackEntity, ResolvedPslModelRefs } from "@prisma/orm-family-sql/contract/entity-handle-lowering-hook";
6
- //#region ../../../3-targets/3-targets/postgres/dist/authoring-CLNoGwgA.d.mts
6
+ //#region ../../../3-targets/3-targets/postgres/dist/authoring-DWd5pnnV.d.mts
7
7
  //#region src/core/authoring.d.ts
8
- declare function policyUsingOnlySpec(): import("@prisma/orm-framework/psl-parser").StructBlockSpec<{
8
+ declare function policyUsingOnlySpec(ctx: BlockSpecContext): import("@prisma/orm-framework/psl-parser").StructBlockSpec<{
9
9
  readonly target: import("@prisma/orm-framework/psl-parser").ResolvedEntityReference<import("@prisma/orm-framework/psl-parser").ModelSymbol>;
10
10
  readonly roles?: (string | import("@prisma/orm-framework/psl-parser").ResolvedEntityReference<import("@prisma/orm-framework/psl-parser").BlockSymbol>)[];
11
- readonly using?: string;
11
+ readonly using?: ParsedTypedValue;
12
12
  readonly permissive?: boolean;
13
13
  }>;
14
- declare function policyWithCheckOnlySpec(): import("@prisma/orm-framework/psl-parser").StructBlockSpec<{
14
+ declare function policyWithCheckOnlySpec(ctx: BlockSpecContext): import("@prisma/orm-framework/psl-parser").StructBlockSpec<{
15
15
  readonly target: import("@prisma/orm-framework/psl-parser").ResolvedEntityReference<import("@prisma/orm-framework/psl-parser").ModelSymbol>;
16
16
  readonly roles?: (string | import("@prisma/orm-framework/psl-parser").ResolvedEntityReference<import("@prisma/orm-framework/psl-parser").BlockSymbol>)[];
17
- readonly withCheck?: string;
17
+ readonly withCheck?: ParsedTypedValue;
18
18
  readonly permissive?: boolean;
19
19
  }>;
20
- declare function policyBothPredicatesSpec(): import("@prisma/orm-framework/psl-parser").StructBlockSpec<{
20
+ declare function policyBothPredicatesSpec(ctx: BlockSpecContext): import("@prisma/orm-framework/psl-parser").StructBlockSpec<{
21
21
  readonly target: import("@prisma/orm-framework/psl-parser").ResolvedEntityReference<import("@prisma/orm-framework/psl-parser").ModelSymbol>;
22
22
  readonly roles?: (string | import("@prisma/orm-framework/psl-parser").ResolvedEntityReference<import("@prisma/orm-framework/psl-parser").BlockSymbol>)[];
23
- readonly using?: string;
24
- readonly withCheck?: string;
23
+ readonly using?: ParsedTypedValue;
24
+ readonly withCheck?: ParsedTypedValue;
25
25
  readonly permissive?: boolean;
26
26
  }>;
27
27
  type PolicyBlockValues = InferBlock<ReturnType<typeof policyBothPredicatesSpec>>;
@@ -49,4 +49,4 @@ interface RoleExtensionBlock extends ParsedPslExtensionBlock {
49
49
  declare function postgresLowerEntityHandles(input: EntityHandleLoweringInput): readonly LoweredPackEntity[];
50
50
  //#endregion
51
51
  export { policyUsingOnlySpec as a, roleSpec as c, policyBothPredicatesSpec as i, RoleExtensionBlock as n, policyWithCheckOnlySpec as o, nativeEnumSpec as r, postgresLowerEntityHandles as s, RlsPolicyExtensionBlock as t };
52
- //# sourceMappingURL=authoring-CLNoGwgA-DPDmJeBt.d.mts.map
52
+ //# sourceMappingURL=authoring-DWd5pnnV-g81c_ETF.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring-DWd5pnnV-g81c_ETF.d.mts","names":[],"sources":["../../../../3-targets/3-targets/postgres/dist/authoring-DWd5pnnV.d.mts"],"mappings":";;;;;;;iBAMiB,oBAAoB,KAAK,kDAAkD;WACjF,uCAAuC,uDAAuD;WAC9F,iDAAiD,uDAAuD;WACxG,QAAQ;WACR;;iBAEM,wBAAwB,KAAK,kDAAkD;WACrF,uCAAuC,uDAAuD;WAC9F,iDAAiD,uDAAuD;WACxG,YAAY;WACZ;;iBAEM,yBAAyB,KAAK,kDAAkD;WACtF,uCAAuC,uDAAuD;WAC9F,iDAAiD,uDAAuD;WACxG,QAAQ;WACR,YAAY;WACZ;;KAEN,oBAAoB,WAAW,kBAAkB;UAC5C,gCAAgC,wBAAwB;WACvD;WACA,oBAAoB;;iBAEd,2CAA2C;iBAC3C,iDAAiD,aAAa;;UAErE,2BAA2B;WAC1B;;;;;;;;;;;;;iBAaM,2BAA2B,OAAO,qCAAqC"}
@@ -6,17 +6,17 @@ import { M as setFallbackTemporal } from "./codecs-BK3J4C0n-B8EnUXZf.mjs";
6
6
  import { s as fullTextIndexDefinitionOf } from "./full-text-index-definition-D-QC3DO2-DXbQitDn.mjs";
7
7
  import { i as PostgresRlsPolicy, n as PostgresRlsEnablement, o as PostgresRole } from "./postgres-schema-DIaAgaL6-Dmqzjbu5.mjs";
8
8
  import { n as computeContentHash } from "./canonicalize-CrN3u_xM-D4MrOqcB.mjs";
9
- import { m as postgresNowGeneratorIdFor, r as POLICY_BLOCK_KEYWORDS } from "./authoring-CL05jlfX-CKUKjRVV.mjs";
9
+ import { m as postgresNowGeneratorIdFor, r as POLICY_BLOCK_KEYWORDS } from "./authoring-BsVnEibY-DEWnQRiF.mjs";
10
10
  import { t as postgresRenderCheckExpressions } from "./check-expressions-BaFrBceq-ChgvazEN.mjs";
11
- import { t as postgresTargetDescriptorMeta } from "./descriptor-meta-ClvaJRgh-Dlo6A0nL.mjs";
11
+ import { t as postgresTargetDescriptorMeta } from "./descriptor-meta-DkzkByC8-WIm-Vvrd.mjs";
12
12
  import { a as postgresDiffSubjectGranularity, i as postgresDiffSubjectEntityKind } from "./postgres-table-schema-node-BBkitBQh-DT1T5VWU.mjs";
13
13
  import { t as PostgresDatabaseSchemaNode } from "./postgres-role-schema-node-B8Z5i5D--PObwlU2Z.mjs";
14
14
  import { r as diffPostgresSchema } from "./diff-database-schema-CByLrBg6-BLLJDUpg.mjs";
15
- import { t as PostgresContractSerializer } from "./postgres-contract-view-BpZ_4qOD-BuCMIaSB.mjs";
16
- import { o as postgresContractToSchema } from "./postgres-migration-Deb4XrMA-DO7iGvl2.mjs";
17
- import { t as createPostgresMigrationPlanner } from "./planner-BLGCBKzQ-BFmyE8A2.mjs";
15
+ import { t as PostgresContractSerializer } from "./postgres-contract-view-BpmiHSDZ-C6ntn6T7.mjs";
16
+ import { o as postgresContractToSchema } from "./postgres-migration-BtlvhcXs-UjWm8cAb.mjs";
17
+ import { t as createPostgresMigrationPlanner } from "./planner-an3B45Ri-2-1c8dYN.mjs";
18
18
  import { n as MARKER_LOCK_SQL, t as MARKER_LOCK_KEY } from "./marker-lock-DFc1Tfv5-QMJSzMIa.mjs";
19
- import { _ as positionalArg, a as buildFullTextIndexAttribute, c as buildModelConstraintAttribute, f as createPostgresTypeMap, g as parseDefaultAttributeString, i as buildCheckAttribute, l as buildNativeEnumBlock, m as namedArg, n as SYNTHETIC_SPAN, o as buildIndexAttribute, p as inferPostgresPslContract, r as buildAttribute, s as buildMapAttribute } from "./infer-psl-contract-lnoCopbJ-DRVPVZyI.mjs";
19
+ import { _ as positionalArg, a as buildFullTextIndexAttribute, c as buildModelConstraintAttribute, f as createPostgresTypeMap, g as parseDefaultAttributeString, i as buildCheckAttribute, l as buildNativeEnumBlock, m as namedArg, n as SYNTHETIC_SPAN, o as buildIndexAttribute, p as inferPostgresPslContract, r as buildAttribute, s as buildMapAttribute } from "./infer-psl-contract-D0iF_YRT-DwW3Imk5.mjs";
20
20
  import { requiredParamKeys, validateCodecTypeParams } from "@prisma/orm-framework/components/codec";
21
21
  import { blindCast } from "@prisma/orm-framework/utils/casts";
22
22
  import { dataTypeParams, isSqlDataType, unquotedSqlBaseName } from "@prisma/orm-family-sql/contract/data-type";
@@ -30,6 +30,7 @@ import { ifDefined } from "@prisma/orm-framework/utils/defined";
30
30
  import { runnerFailure, runnerSuccess } from "@prisma/orm-family-sql/family/control";
31
31
  import { findAuthoringTypeConstructorCall } from "@prisma/orm-framework/components/authoring";
32
32
  import { NAME_THE_PSL_SOURCE_LOSES, isPslIdentifier } from "@prisma/orm-framework/psl-parser";
33
+ import { printSqlExpressionLiteral, sqlTextsReadBack } from "@prisma/orm-family-sql/contract/sql-expression";
33
34
  import { InternalError } from "@prisma/orm-framework/utils/internal-error";
34
35
  import { notOk, ok, okVoid } from "@prisma/orm-framework/utils/result";
35
36
  import { SqlSchemaVerifierBase } from "@prisma/orm-family-sql/family/ir";
@@ -860,6 +861,23 @@ function refuseUnwritableIndexOptions(entry, index) {
860
861
  });
861
862
  }
862
863
  }
864
+ /**
865
+ * Refuses an index, check or policy whose SQL a `sql` literal cannot write back unchanged, because
866
+ * reading the literal canonicalizes it into different text.
867
+ */
868
+ function refuseSqlTextThatDoesNotReadBack(input) {
869
+ if (sqlTextsReadBack(input.texts)) return;
870
+ const { kind, namespaceId, table, name } = input;
871
+ throw unsupported(`${kind} "${name}" on "${namespaceId}"."${table}" holds SQL that a sql literal cannot write back unchanged, so it cannot be written in Prisma 8 PSL.`, "A sql literal is canonicalized when it is read: indentation shared by every line, blank lines at the start or end, a carriage return and a whitespace-only line are removed, so this text would read back as different SQL.", "Write the SQL in that canonical form in the contract's source, or keep authoring this contract in its current source.", kind === "policy" ? {
872
+ namespaceId,
873
+ table,
874
+ policy: name
875
+ } : {
876
+ namespaceId,
877
+ table,
878
+ name
879
+ });
880
+ }
863
881
  function refuseToOneRelationWithoutForeignKey(modelName, fieldName) {
864
882
  throw unsupported(`relation "${modelName}.${fieldName}" has no foreign key in storage, which Prisma 8 PSL cannot express.`, "A to-one relation is authored as `@relation(fields:…, references:…)`, which always lowers to a foreign key.", "Declare a foreign key for the relation, or keep authoring this contract in its current source.", {
865
883
  model: modelName,
@@ -1505,6 +1523,13 @@ function buildModelAttributes(input) {
1505
1523
  }
1506
1524
  for (const check of entry.table.checks ?? []) {
1507
1525
  if (derivedChecksByName.has(check.name) || !owns(void 0)) continue;
1526
+ refuseSqlTextThatDoesNotReadBack({
1527
+ kind: "check",
1528
+ namespaceId: entry.namespaceId,
1529
+ table: entry.tableName,
1530
+ name: check.name,
1531
+ texts: [check.expression]
1532
+ });
1508
1533
  attributes.push(buildCheckAttribute(check, attributeNaming({
1509
1534
  kind: "check",
1510
1535
  entry,
@@ -1522,6 +1547,13 @@ function buildModelAttributes(input) {
1522
1547
  prefix: index.prefix,
1523
1548
  contentHash: () => computeIndexContentHash(index)
1524
1549
  });
1550
+ refuseSqlTextThatDoesNotReadBack({
1551
+ kind: "index",
1552
+ namespaceId: entry.namespaceId,
1553
+ table: entry.tableName,
1554
+ name: index.name,
1555
+ texts: [index.expression, index.where]
1556
+ });
1525
1557
  const fullText = fullTextIndexDefinitionOf(index);
1526
1558
  if (fullText !== void 0) {
1527
1559
  attributes.push(buildFullTextIndexAttribute(index, fullText, fieldNameOf, naming));
@@ -1883,6 +1915,13 @@ function buildPolicyBlocks(input) {
1883
1915
  if (!input.rlsTables.has(policy.tableName)) refusePolicyWithoutRls(policy);
1884
1916
  if (!policyNameReadsBack(head, policy)) refusePolicyNameNotDerived(policy);
1885
1917
  for (const role of policy.roles) refuseUnwritableName("role", role);
1918
+ refuseSqlTextThatDoesNotReadBack({
1919
+ kind: "policy",
1920
+ namespaceId: policy.namespaceId,
1921
+ table: policy.tableName,
1922
+ name: policy.name,
1923
+ texts: [policy.using, policy.withCheck]
1924
+ });
1886
1925
  return {
1887
1926
  kind: "policy",
1888
1927
  keyword: POLICY_BLOCK_KEYWORDS[policy.operation],
@@ -1897,11 +1936,11 @@ function buildPolicyBlocks(input) {
1897
1936
  span: SYNTHETIC_SPAN
1898
1937
  },
1899
1938
  ...policy.using !== void 0 ? { using: {
1900
- expression: JSON.stringify(policy.using),
1939
+ expression: printSqlExpressionLiteral(policy.using),
1901
1940
  span: SYNTHETIC_SPAN
1902
1941
  } } : {},
1903
1942
  ...policy.withCheck !== void 0 ? { withCheck: {
1904
- expression: JSON.stringify(policy.withCheck),
1943
+ expression: printSqlExpressionLiteral(policy.withCheck),
1905
1944
  span: SYNTHETIC_SPAN
1906
1945
  } } : {},
1907
1946
  ...policy.permissive ? {} : { permissive: {
@@ -2731,4 +2770,4 @@ const postgresTargetDescriptor = createPostgresTargetDescriptor();
2731
2770
  //#endregion
2732
2771
  export { postgresTargetDescriptor as i, postgresPslTypeConstructors as n, postgresScalarAuthoringTypes as r, postgresNativeAuthoringTypes as t };
2733
2772
 
2734
- //# sourceMappingURL=control-CDAHFmyX.mjs.map
2773
+ //# sourceMappingURL=control-KIoUTWJ_.mjs.map