@prisma-next/adapter-postgres 0.5.0-dev.6 → 0.5.0-dev.61

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 (46) hide show
  1. package/README.md +14 -16
  2. package/dist/adapter-D0MBaNqv.mjs +47 -0
  3. package/dist/adapter-D0MBaNqv.mjs.map +1 -0
  4. package/dist/adapter.d.mts +3 -4
  5. package/dist/adapter.d.mts.map +1 -1
  6. package/dist/adapter.mjs +1 -1
  7. package/dist/column-types.d.mts +20 -24
  8. package/dist/column-types.d.mts.map +1 -1
  9. package/dist/column-types.mjs +19 -58
  10. package/dist/column-types.mjs.map +1 -1
  11. package/dist/control.d.mts +76 -3
  12. package/dist/control.d.mts.map +1 -1
  13. package/dist/control.mjs +48 -9
  14. package/dist/control.mjs.map +1 -1
  15. package/dist/{descriptor-meta-RTDzyrae.mjs → descriptor-meta-D8znZhXl.mjs} +35 -24
  16. package/dist/descriptor-meta-D8znZhXl.mjs.map +1 -0
  17. package/dist/operation-types.d.mts +11 -10
  18. package/dist/operation-types.d.mts.map +1 -1
  19. package/dist/runtime.d.mts +3 -11
  20. package/dist/runtime.d.mts.map +1 -1
  21. package/dist/runtime.mjs +17 -77
  22. package/dist/runtime.mjs.map +1 -1
  23. package/dist/{sql-renderer-pEaSP82_.mjs → sql-renderer-Qt6yk5Qj.mjs} +89 -46
  24. package/dist/sql-renderer-Qt6yk5Qj.mjs.map +1 -0
  25. package/dist/{types-CfRPdAk8.d.mts → types-tLtmYqCO.d.mts} +12 -1
  26. package/dist/types-tLtmYqCO.d.mts.map +1 -0
  27. package/dist/types.d.mts +1 -1
  28. package/package.json +21 -21
  29. package/src/core/adapter.ts +15 -41
  30. package/src/core/codec-lookup.ts +19 -0
  31. package/src/core/control-adapter.ts +68 -1
  32. package/src/core/control-mutation-defaults.ts +24 -18
  33. package/src/core/descriptor-meta.ts +39 -19
  34. package/src/core/sql-renderer.ts +111 -66
  35. package/src/core/types.ts +11 -0
  36. package/src/exports/column-types.ts +21 -61
  37. package/src/exports/control.ts +3 -2
  38. package/src/exports/runtime.ts +27 -66
  39. package/src/types/operation-types.ts +19 -9
  40. package/dist/adapter-hNElNHo4.mjs +0 -60
  41. package/dist/adapter-hNElNHo4.mjs.map +0 -1
  42. package/dist/descriptor-meta-RTDzyrae.mjs.map +0 -1
  43. package/dist/sql-renderer-pEaSP82_.mjs.map +0 -1
  44. package/dist/types-CfRPdAk8.d.mts.map +0 -1
  45. package/src/core/json-schema-validator.ts +0 -54
  46. package/src/core/standard-schema.ts +0 -71
package/README.md CHANGED
@@ -131,10 +131,9 @@ flowchart TD
131
131
  - Exports column descriptors for built-in types and enum helpers (`enumType`, `enumColumn(typeRef, nativeType)`)
132
132
  - Parameterized helpers: `charColumn(length)`, `varcharColumn(length)`, `numericColumn(precision, scale?)`, `bitColumn(length)`, `varbitColumn(length)`, `timeColumn(precision?)`, `timetzColumn(precision?)`, `intervalColumn(precision?)`
133
133
 
134
- - Exports JSON helpers:
135
- - `jsonColumn`, `jsonbColumn`
136
- - `json(schema?)`, `jsonb(schema?)` where `schema` is a Standard Schema value (e.g., Arktype)
137
- - When a schema is provided, `typeParams` metadata is derived from the schema's `~standard` interface
134
+ - Exports raw JSON helpers:
135
+ - `jsonColumn`, `jsonbColumn` — untyped raw JSON / JSONB column descriptors
136
+ - For schema-typed JSON columns, use the per-library extension package (`@prisma-next/extension-arktype-json` for arktype). The schema-accepting `json(schema)` / `jsonb(schema)` overloads previously shipped here retired in Phase C of the codec-registry-unification project.
138
137
 
139
138
  ## Dependencies
140
139
 
@@ -156,7 +155,7 @@ flowchart TD
156
155
  - [ADR 068 - Error mapping to RuntimeError](../../../../docs/architecture%20docs/adrs/ADR%20068%20-%20Error%20mapping%20to%20RuntimeError.md)
157
156
  - [ADR 112 - Target Extension Packs](../../../../docs/architecture%20docs/adrs/ADR%20112%20-%20Target%20Extension%20Packs.md)
158
157
  - [ADR 114 - Extension codecs & branded types](../../../../docs/architecture%20docs/adrs/ADR%20114%20-%20Extension%20codecs%20&%20branded%20types.md)
159
- - [ADR 163 - Postgres JSON and JSONB typed columns](../../../../docs/architecture%20docs/adrs/ADR%20163%20-%20Postgres%20JSON%20and%20JSONB%20typed%20columns.md)
158
+ - [ADR 168 - Postgres JSON and JSONB typed columns](../../../../docs/architecture%20docs/adrs/ADR%20168%20-%20Postgres%20JSON%20and%20JSONB%20typed%20columns.md). Schema-typed JSON columns now ship from per-library extension packages (`@prisma-next/extension-arktype-json` for arktype); see [ADR 208 - Higher-order codecs for parameterized types](../../../../docs/architecture%20docs/adrs/ADR%20208%20-%20Higher-order%20codecs%20for%20parameterized%20types.md).
160
159
 
161
160
  ## Usage
162
161
 
@@ -277,7 +276,8 @@ Both `json` and `jsonb` accept any valid JSON value:
277
276
  ### Authoring helpers
278
277
 
279
278
  ```typescript
280
- import { json, jsonb } from '@prisma-next/adapter-postgres/column-types';
279
+ import { jsonbColumn } from '@prisma-next/adapter-postgres/column-types';
280
+ import { arktypeJson } from '@prisma-next/extension-arktype-json/column-types';
281
281
  import { type as arktype } from 'arktype';
282
282
 
283
283
  const auditPayloadSchema = arktype({
@@ -287,26 +287,24 @@ const auditPayloadSchema = arktype({
287
287
 
288
288
  table('event', (t) =>
289
289
  t
290
- .column('payload', { type: jsonb(auditPayloadSchema), nullable: false })
291
- .column('raw', { type: json(), nullable: true }),
290
+ // Schema-typed JSONB via the per-library extension package.
291
+ .column('payload', { type: arktypeJson(auditPayloadSchema), nullable: false })
292
+ // Untyped raw JSONB via the adapter's static descriptor.
293
+ .column('raw', { type: jsonbColumn, nullable: true }),
292
294
  );
293
295
  ```
294
296
 
295
297
  ### Typed fallback behavior
296
298
 
297
- - If a schema value is provided, emitted `contract.d.ts` derives a concrete type from that schema.
298
- - If no schema is provided, emitted type falls back to `JsonValue`.
299
+ - For schema-typed columns, use a per-library extension package (e.g. `@prisma-next/extension-arktype-json`). The emit-path renderer reads the schema's `expression` from typeParams and produces a concrete TS type in `contract.d.ts`.
300
+ - For untyped columns (`jsonColumn`, `jsonbColumn`), the emitted type falls back to `JsonValue`.
299
301
  - Runtime values still encode/decode as JSON-compatible values.
300
302
 
301
- ### Standard Schema integration
302
-
303
- `json(schema)` and `jsonb(schema)` accept Standard Schema values. Arktype schemas work out of the box via their Standard Schema adapter (`schema['~standard']`).
304
-
305
303
  ## Exports
306
304
 
307
305
  - `./adapter`: Adapter implementation (`createPostgresAdapter`)
308
- - `./codec-types`: PostgreSQL codec types (`CodecTypes`, `JsonValue`, `dataTypes`)
309
- - `./column-types`: Column type descriptors and authoring helpers (`json`, `jsonb`, `jsonColumn`, `jsonbColumn`, `enumType`, `enumColumn`, `textColumn`, `int4Column`, etc.)
306
+ - `./codec-types`: PostgreSQL codec types (`CodecTypes`, `JsonValue`)
307
+ - `./column-types`: Column type descriptors and authoring helpers (`jsonColumn`, `jsonbColumn`, `enumType`, `enumColumn`, `textColumn`, `int4Column`, etc.)
310
308
  - `./types`: PostgreSQL-specific types
311
309
  - `./control`: Control-plane entry point (adapter descriptor)
312
310
  - `./runtime`: Runtime-plane entry point (runtime adapter descriptor)
@@ -0,0 +1,47 @@
1
+ import { n as createPostgresBuiltinCodecLookup, t as renderLoweredSql } from "./sql-renderer-Qt6yk5Qj.mjs";
2
+ import { parseContractMarkerRow } from "@prisma-next/sql-runtime";
3
+
4
+ //#region src/core/adapter.ts
5
+ const defaultCapabilities = Object.freeze({
6
+ postgres: {
7
+ orderBy: true,
8
+ limit: true,
9
+ lateral: true,
10
+ jsonAgg: true,
11
+ returning: true
12
+ },
13
+ sql: {
14
+ enums: true,
15
+ returning: true,
16
+ defaultInInsert: true
17
+ }
18
+ });
19
+ var PostgresAdapterImpl = class {
20
+ familyId = "sql";
21
+ targetId = "postgres";
22
+ profile;
23
+ codecLookup;
24
+ constructor(options) {
25
+ this.codecLookup = options?.codecLookup ?? createPostgresBuiltinCodecLookup();
26
+ this.profile = Object.freeze({
27
+ id: options?.profileId ?? "postgres/default@1",
28
+ target: "postgres",
29
+ capabilities: defaultCapabilities,
30
+ readMarkerStatement: () => ({
31
+ sql: "select core_hash, profile_hash, contract_json, canonical_version, updated_at, app_tag, meta, invariants from prisma_contract.marker where id = $1",
32
+ params: [1]
33
+ }),
34
+ parseMarkerRow: (row) => parseContractMarkerRow(row)
35
+ });
36
+ }
37
+ lower(ast, context) {
38
+ return renderLoweredSql(ast, context.contract, this.codecLookup);
39
+ }
40
+ };
41
+ function createPostgresAdapter(options) {
42
+ return Object.freeze(new PostgresAdapterImpl(options));
43
+ }
44
+
45
+ //#endregion
46
+ export { createPostgresAdapter as t };
47
+ //# sourceMappingURL=adapter-D0MBaNqv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-D0MBaNqv.mjs","names":[],"sources":["../src/core/adapter.ts"],"sourcesContent":["import type { CodecLookup } from '@prisma-next/framework-components/codec';\nimport type {\n Adapter,\n AdapterProfile,\n AnyQueryAst,\n LowererContext,\n} from '@prisma-next/sql-relational-core/ast';\nimport { parseContractMarkerRow } from '@prisma-next/sql-runtime';\nimport { createPostgresBuiltinCodecLookup } from './codec-lookup';\nimport { renderLoweredSql } from './sql-renderer';\nimport type { PostgresAdapterOptions, PostgresContract, PostgresLoweredStatement } from './types';\n\nconst defaultCapabilities = Object.freeze({\n postgres: {\n orderBy: true,\n limit: true,\n lateral: true,\n jsonAgg: true,\n returning: true,\n },\n sql: {\n enums: true,\n returning: true,\n defaultInInsert: true,\n },\n});\n\nclass PostgresAdapterImpl\n implements Adapter<AnyQueryAst, PostgresContract, PostgresLoweredStatement>\n{\n // These fields make the adapter instance structurally compatible with RuntimeAdapterInstance<'sql', 'postgres'> without introducing a runtime-plane dependency.\n readonly familyId = 'sql' as const;\n readonly targetId = 'postgres' as const;\n\n readonly profile: AdapterProfile<'postgres'>;\n private readonly codecLookup: CodecLookup;\n\n constructor(options?: PostgresAdapterOptions) {\n this.codecLookup = options?.codecLookup ?? createPostgresBuiltinCodecLookup();\n this.profile = Object.freeze({\n id: options?.profileId ?? 'postgres/default@1',\n target: 'postgres',\n capabilities: defaultCapabilities,\n readMarkerStatement: () => ({\n sql: 'select core_hash, profile_hash, contract_json, canonical_version, updated_at, app_tag, meta, invariants from prisma_contract.marker where id = $1',\n params: [1],\n }),\n // Postgres' driver hydrates `text[]` columns as native JS arrays, so the row is already in the shape the shared parser expects.\n parseMarkerRow: (row: unknown) => parseContractMarkerRow(row),\n });\n }\n\n lower(ast: AnyQueryAst, context: LowererContext<PostgresContract>): PostgresLoweredStatement {\n return renderLoweredSql(ast, context.contract, this.codecLookup);\n }\n}\n\nexport function createPostgresAdapter(options?: PostgresAdapterOptions) {\n return Object.freeze(new PostgresAdapterImpl(options));\n}\n"],"mappings":";;;;AAYA,MAAM,sBAAsB,OAAO,OAAO;CACxC,UAAU;EACR,SAAS;EACT,OAAO;EACP,SAAS;EACT,SAAS;EACT,WAAW;EACZ;CACD,KAAK;EACH,OAAO;EACP,WAAW;EACX,iBAAiB;EAClB;CACF,CAAC;AAEF,IAAM,sBAAN,MAEA;CAEE,AAAS,WAAW;CACpB,AAAS,WAAW;CAEpB,AAAS;CACT,AAAiB;CAEjB,YAAY,SAAkC;AAC5C,OAAK,cAAc,SAAS,eAAe,kCAAkC;AAC7E,OAAK,UAAU,OAAO,OAAO;GAC3B,IAAI,SAAS,aAAa;GAC1B,QAAQ;GACR,cAAc;GACd,4BAA4B;IAC1B,KAAK;IACL,QAAQ,CAAC,EAAE;IACZ;GAED,iBAAiB,QAAiB,uBAAuB,IAAI;GAC9D,CAAC;;CAGJ,MAAM,KAAkB,SAAqE;AAC3F,SAAO,iBAAiB,KAAK,QAAQ,UAAU,KAAK,YAAY;;;AAIpE,SAAgB,sBAAsB,SAAkC;AACtE,QAAO,OAAO,OAAO,IAAI,oBAAoB,QAAQ,CAAC"}
@@ -1,14 +1,13 @@
1
- import { c as PostgresContract, l as PostgresLoweredStatement, s as PostgresAdapterOptions } from "./types-CfRPdAk8.mjs";
2
- import { Adapter, AdapterProfile, AnyQueryAst, CodecParamsDescriptor, LowererContext } from "@prisma-next/sql-relational-core/ast";
1
+ import { c as PostgresContract, l as PostgresLoweredStatement, s as PostgresAdapterOptions } from "./types-tLtmYqCO.mjs";
2
+ import { Adapter, AdapterProfile, AnyQueryAst, LowererContext } from "@prisma-next/sql-relational-core/ast";
3
3
 
4
4
  //#region src/core/adapter.d.ts
5
5
  declare class PostgresAdapterImpl implements Adapter<AnyQueryAst, PostgresContract, PostgresLoweredStatement> {
6
6
  readonly familyId: "sql";
7
7
  readonly targetId: "postgres";
8
8
  readonly profile: AdapterProfile<'postgres'>;
9
- private readonly codecRegistry;
9
+ private readonly codecLookup;
10
10
  constructor(options?: PostgresAdapterOptions);
11
- parameterizedCodecs(): ReadonlyArray<CodecParamsDescriptor>;
12
11
  lower(ast: AnyQueryAst, context: LowererContext<PostgresContract>): PostgresLoweredStatement;
13
12
  }
14
13
  declare function createPostgresAdapter(options?: PostgresAdapterOptions): Readonly<PostgresAdapterImpl>;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.mts","names":[],"sources":["../src/core/adapter.ts"],"sourcesContent":[],"mappings":";;;;cA4CM,mBAAA,YACO,QAAQ,aAAa,kBAAkB;;EAD9C,SAAA,QAAA,EAAA,UACJ;EAAmB,SAAA,OAAA,EAOD,cAPC,CAAA,UAAA,CAAA;EAAa,iBAAA,aAAA;EAAkB,WAAA,CAAA,OAAA,CAAA,EAgB5B,sBAhB4B;EAOhC,mBAAA,CAAA,CAAA,EAsBK,aAtBL,CAsBmB,qBAtBnB,CAAA;EASI,KAAA,CAAA,GAAA,EAiBX,WAjBW,EAAA,OAAA,EAiBW,cAjBX,CAiB0B,gBAjB1B,CAAA,CAAA,EAiB8C,wBAjB9C;;AAaC,iBAST,qBAAA,CATS,OAAA,CAAA,EASuB,sBATvB,CAAA,EAS6C,QAT7C,CAS6C,mBAT7C,CAAA"}
1
+ {"version":3,"file":"adapter.d.mts","names":[],"sources":["../src/core/adapter.ts"],"sourcesContent":[],"mappings":";;;;cA2BM,mBAAA,YACO,QAAQ,aAAa,kBAAkB;;EAD9C,SAAA,QAAA,EAAA,UACJ;EAAmB,SAAA,OAAA,EAMD,cANC,CAAA,UAAA,CAAA;EAAa,iBAAA,WAAA;EAAkB,WAAA,CAAA,OAAA,CAAA,EAS5B,sBAT4B;EAMhC,KAAA,CAAA,GAAA,EAkBP,WAlBO,EAAA,OAAA,EAkBe,cAlBf,CAkB8B,gBAlB9B,CAAA,CAAA,EAkBkD,wBAlBlD;;AAkBP,iBAKG,qBAAA,CALH,OAAA,CAAA,EAKmC,sBALnC,CAAA,EAKyD,QALzD,CAKyD,mBALzD,CAAA"}
package/dist/adapter.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { t as createPostgresAdapter } from "./adapter-hNElNHo4.mjs";
1
+ import { t as createPostgresAdapter } from "./adapter-D0MBaNqv.mjs";
2
2
 
3
3
  export { createPostgresAdapter };
@@ -1,27 +1,8 @@
1
+ import { ColumnTypeDescriptor } from "@prisma-next/framework-components/codec";
1
2
  import { StorageTypeInstance } from "@prisma-next/sql-contract/types";
2
- import { ColumnTypeDescriptor } from "@prisma-next/contract-authoring";
3
3
 
4
- //#region src/core/standard-schema.d.ts
5
- type StandardSchemaJsonSchemaField = {
6
- readonly output?: unknown;
7
- };
8
- /**
9
- * Runtime view of the Standard Schema protocol.
10
- * Reads `~standard.jsonSchema.output` for the serializable JSON Schema representation,
11
- * and `.expression` for an optional TypeScript type expression string (Arktype-specific).
12
- *
13
- * This differs from the compile-time `StandardSchemaLike` in `codec-types.ts`, which reads
14
- * `~standard.types.output` for TypeScript type narrowing in contract.d.ts.
15
- */
16
- type StandardSchemaLike = {
17
- readonly '~standard'?: {
18
- readonly version?: number;
19
- readonly jsonSchema?: StandardSchemaJsonSchemaField;
20
- };
21
- readonly expression?: unknown;
22
- };
23
- //#endregion
24
4
  //#region src/exports/column-types.d.ts
5
+
25
6
  declare const textColumn: {
26
7
  readonly codecId: "pg/text@1";
27
8
  readonly nativeType: "text";
@@ -94,21 +75,36 @@ declare function varbitColumn(length: number): ColumnTypeDescriptor & {
94
75
  readonly length: number;
95
76
  };
96
77
  };
78
+ /**
79
+ * Postgres `bytea` column descriptor — variable-length binary string.
80
+ *
81
+ * Round-trips as `Uint8Array` on the JS side. The pg wire-protocol text encoding (`\x` followed by hex-encoded bytes, canonical for Postgres ≥ 9.0) and binary encoding are both handled by the underlying driver; the codec only normalizes the JS-side representation to a plain `Uint8Array` view.
82
+ */
83
+ declare const byteaColumn: {
84
+ readonly codecId: "pg/bytea@1";
85
+ readonly nativeType: "bytea";
86
+ };
97
87
  declare function intervalColumn(precision?: number): ColumnTypeDescriptor & {
98
88
  readonly typeParams?: {
99
89
  readonly precision: number;
100
90
  };
101
91
  };
92
+ /**
93
+ * Postgres `json` column descriptor — untyped raw JSON.
94
+ *
95
+ * For schema-typed JSON columns, use the per-library extension package (`@prisma-next/extension-arktype-json` ships `arktypeJson(schema)` for arktype). The schema-accepting `json(schema)` / `jsonb(schema)` overloads previously shipped from this module retired in Phase C of the codec-registry-unification project — see spec § AC-7.
96
+ */
102
97
  declare const jsonColumn: {
103
98
  readonly codecId: "pg/json@1";
104
99
  readonly nativeType: "json";
105
100
  };
101
+ /**
102
+ * Postgres `jsonb` column descriptor — untyped raw JSONB. Same retirement note as {@link jsonColumn}.
103
+ */
106
104
  declare const jsonbColumn: {
107
105
  readonly codecId: "pg/jsonb@1";
108
106
  readonly nativeType: "jsonb";
109
107
  };
110
- declare function json(schema?: StandardSchemaLike): ColumnTypeDescriptor;
111
- declare function jsonb(schema?: StandardSchemaLike): ColumnTypeDescriptor;
112
108
  declare function enumType<const Values extends readonly string[]>(name: string, values: Values): StorageTypeInstance & {
113
109
  readonly typeParams: {
114
110
  readonly values: Values;
@@ -118,5 +114,5 @@ declare function enumColumn<TypeName extends string>(typeName: TypeName, nativeT
118
114
  readonly typeRef: TypeName;
119
115
  };
120
116
  //#endregion
121
- export { bitColumn, boolColumn, charColumn, enumColumn, enumType, float4Column, float8Column, int2Column, int4Column, int8Column, intervalColumn, json, jsonColumn, jsonb, jsonbColumn, numericColumn, textColumn, timeColumn, timestampColumn, timestamptzColumn, timetzColumn, varbitColumn, varcharColumn };
117
+ export { bitColumn, boolColumn, byteaColumn, charColumn, enumColumn, enumType, float4Column, float8Column, int2Column, int4Column, int8Column, intervalColumn, jsonColumn, jsonbColumn, numericColumn, textColumn, timeColumn, timestampColumn, timestamptzColumn, timetzColumn, varbitColumn, varcharColumn };
122
118
  //# sourceMappingURL=column-types.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"column-types.d.mts","names":[],"sources":["../src/core/standard-schema.ts","../src/exports/column-types.ts"],"sourcesContent":[],"mappings":";;;;KAEK,6BAAA;;;AAFsB;AAc3B;;;;ACwBA;AAKA;AAUA;AAUa,KDjDD,kBAAA,GCoD6B;EAE5B,SAAA,WAG4B,CAAA,EAAA;IAE5B,SAG4B,OAAA,CAAA,EAAA,MAAA;IAE5B,SAAA,UAG4B,CAAA,EDhEf,6BCgEe;EAE5B,CAAA;EAKG,SAAA,UAAa,CAAA,EAAA,OAG1B;AAUH,CAAA;;;AA/Da,cAAA,UAG4B,EAAA;EAEzB,SAAA,OAAU,EAAA,WAAkB;EAU5B,SAAA,UAAa,EAAA,MAAkB;AAU/C,CAAA;AAKa,iBAzBG,UAAA,CA4ByB,MAAA,EAAA,MAAA,CAAA,EA5BG,oBA4BH,GAAA;EAE5B,SAAA,UAG4B,EAAA;IAE5B,SAAA,MAG4B,EAAA,MAAA;EAE5B,CAAA;AAKb,CAAA;AAaa,iBAhDG,aAAA,CAmDyB,MAAA,EAAA,MAAA,CAAA,EAnDM,oBAmDN,GAAA;EAE5B,SAAA,UAAA,EAG4B;IAEzB,SAAU,MAAA,EAAA,MAAsB;EAUhC,CAAA;AAUhB,CAAA;AAKgB,cAzEH,UAyE8B,EAAA;EAU3B,SAAA,OAAY,EAAA,WAAkB;EAU9B,SAAA,UAAc,EAAA,MAAA;AAU9B,CAAA;AAKa,cAvGA,UA0G4B,EAAA;EA8CzB,SAAI,OAAA,EAAA,WAAU;EAId,SAAK,UAAA,EAAU,MAAA;AAI/B,CAAA;AAEU,cA7JG,UA6JH,EAAA;EACP,SAAA,OAAA,EAAA,WAAA;EAAgE,SAAA,UAAA,EAAA,MAAA;CAAM;AAQzD,cAjKH,YAiKa,EAAA;EACd,SAAA,OAAA,EAAA,aAAA;EAET,SAAA,UAAA,EAAA,QAAA;CAA2C;AAAQ,cA/JzC,YA+JyC,EAAA;;;;iBA1JtC,aAAA,qCAGb;;;;;;cAUU;;;;cAKA;;;;iBAKG,UAAA,sBAAgC;;;;;iBAUhC,YAAA,sBAAkC;;;;;cAUrC;;;;iBAKG,SAAA,kBAA2B;;;;;iBAU3B,YAAA,kBAA8B;;;;;iBAU9B,cAAA,sBAAoC;;;;;cAUvC;;;;cAKA;;;;iBAiDG,IAAA,UAAc,qBAAqB;iBAInC,KAAA,UAAe,qBAAqB;iBAIpC,uEAEN,SACP;;qBAAgE;;;iBAQnD,8CACJ,+BAET;oBAA2C"}
1
+ {"version":3,"file":"column-types.d.mts","names":[],"sources":["../src/exports/column-types.ts"],"sourcesContent":[],"mappings":";;;;;AAyDa,cAzBA,UA4B4B,EAAA;EAE5B,SAAA,OAG4B,EAAA,WAAA;EAE5B,SAAA,UAG4B,EAAA,MAAA;AAEzC,CAAA;AAKa,iBAxCG,UAAA,CA2CyB,MAAA,EAAA,MAAA,CAAA,EA3CG,oBA2CH,GAAA;EAEzB,SAAA,UAAa,EAAA;IAahB,SAAA,MAG4B,EAAA,MAAA;EAE5B,CAAA;AAKb,CAAA;AAUgB,iBApEA,aAAA,CAoEkC,MAAA,EAAA,MAAoB,CAAA,EApEvB,oBAoEuB,GAAA;EAUzD,SAAA,UAG4B,EAAA;IAEzB,SAAS,MAAA,EAAA,MAAkB;EAU3B,CAAA;AAehB,CAAA;AAKgB,cAvGH,UAuGiB,EAAsB;EAevC,SAAA,OAG4B,EAAA,WAAA;EAK5B,SAAA,UAG4B,EAAA,MAAA;AAEzC,CAAA;AAEU,cAhIG,UAgIH,EAAA;EACP,SAAA,OAAA,EAAA,WAAA;EAAgE,SAAA,UAAA,EAAA,MAAA;CAAM;AAQzD,cApIH,UAoIa,EAAA;EACd,SAAA,OAAA,EAAA,WAAA;EAET,SAAA,UAAA,EAAA,MAAA;CAA2C;AAAQ,cAlIzC,YAkIyC,EAAA;;;;cA7HzC;;;;iBAKG,aAAA,qCAGb;;;;;;cAUU;;;;cAKA;;;;iBAKG,UAAA,sBAAgC;;;;;iBAUhC,YAAA,sBAAkC;;;;;cAUrC;;;;iBAKG,SAAA,kBAA2B;;;;;iBAU3B,YAAA,kBAA8B;;;;;;;;;;cAejC;;;;iBAKG,cAAA,sBAAoC;;;;;;;;;;cAevC;;;;;;;cAQA;;;;iBAKG,uEAEN,SACP;;qBAAgE;;;iBAQnD,8CACJ,+BAET;oBAA2C"}
@@ -1,32 +1,5 @@
1
- import { PG_BIT_CODEC_ID, PG_BOOL_CODEC_ID, PG_ENUM_CODEC_ID, PG_FLOAT4_CODEC_ID, PG_FLOAT8_CODEC_ID, PG_INT2_CODEC_ID, PG_INT4_CODEC_ID, PG_INT8_CODEC_ID, PG_INTERVAL_CODEC_ID, PG_JSONB_CODEC_ID, PG_JSON_CODEC_ID, PG_NUMERIC_CODEC_ID, PG_TEXT_CODEC_ID, PG_TIMESTAMPTZ_CODEC_ID, PG_TIMESTAMP_CODEC_ID, PG_TIMETZ_CODEC_ID, PG_TIME_CODEC_ID, PG_VARBIT_CODEC_ID, SQL_CHAR_CODEC_ID, SQL_VARCHAR_CODEC_ID } from "@prisma-next/target-postgres/codec-ids";
1
+ import { PG_BIT_CODEC_ID, PG_BOOL_CODEC_ID, PG_BYTEA_CODEC_ID, PG_ENUM_CODEC_ID, PG_FLOAT4_CODEC_ID, PG_FLOAT8_CODEC_ID, PG_INT2_CODEC_ID, PG_INT4_CODEC_ID, PG_INT8_CODEC_ID, PG_INTERVAL_CODEC_ID, PG_JSONB_CODEC_ID, PG_JSON_CODEC_ID, PG_NUMERIC_CODEC_ID, PG_TEXT_CODEC_ID, PG_TIMESTAMPTZ_CODEC_ID, PG_TIMESTAMP_CODEC_ID, PG_TIMETZ_CODEC_ID, PG_TIME_CODEC_ID, PG_VARBIT_CODEC_ID, SQL_CHAR_CODEC_ID, SQL_VARCHAR_CODEC_ID } from "@prisma-next/target-postgres/codec-ids";
2
2
 
3
- //#region src/core/standard-schema.ts
4
- function isObjectLike(value) {
5
- return (typeof value === "object" || typeof value === "function") && value !== null;
6
- }
7
- function resolveOutputJsonSchemaField(schema) {
8
- const jsonSchema = schema["~standard"]?.jsonSchema;
9
- if (!jsonSchema) return;
10
- if (typeof jsonSchema.output === "function") return jsonSchema.output({ target: "draft-07" });
11
- return jsonSchema.output;
12
- }
13
- function extractStandardSchemaOutputJsonSchema(schema) {
14
- const outputSchema = resolveOutputJsonSchemaField(schema);
15
- if (!isObjectLike(outputSchema)) return;
16
- return outputSchema;
17
- }
18
- function extractStandardSchemaTypeExpression(schema) {
19
- const expression = schema.expression;
20
- if (typeof expression !== "string") return;
21
- const trimmedExpression = expression.trim();
22
- if (trimmedExpression.length === 0) return;
23
- return trimmedExpression;
24
- }
25
- function isStandardSchemaLike(value) {
26
- return isObjectLike(value) && isObjectLike(value["~standard"]);
27
- }
28
-
29
- //#endregion
30
3
  //#region src/exports/column-types.ts
31
4
  const textColumn = {
32
5
  codecId: PG_TEXT_CODEC_ID,
@@ -116,6 +89,15 @@ function varbitColumn(length) {
116
89
  typeParams: { length }
117
90
  };
118
91
  }
92
+ /**
93
+ * Postgres `bytea` column descriptor — variable-length binary string.
94
+ *
95
+ * Round-trips as `Uint8Array` on the JS side. The pg wire-protocol text encoding (`\x` followed by hex-encoded bytes, canonical for Postgres ≥ 9.0) and binary encoding are both handled by the underlying driver; the codec only normalizes the JS-side representation to a plain `Uint8Array` view.
96
+ */
97
+ const byteaColumn = {
98
+ codecId: PG_BYTEA_CODEC_ID,
99
+ nativeType: "bytea"
100
+ };
119
101
  function intervalColumn(precision) {
120
102
  return {
121
103
  codecId: PG_INTERVAL_CODEC_ID,
@@ -123,43 +105,22 @@ function intervalColumn(precision) {
123
105
  ...precision === void 0 ? {} : { typeParams: { precision } }
124
106
  };
125
107
  }
108
+ /**
109
+ * Postgres `json` column descriptor — untyped raw JSON.
110
+ *
111
+ * For schema-typed JSON columns, use the per-library extension package (`@prisma-next/extension-arktype-json` ships `arktypeJson(schema)` for arktype). The schema-accepting `json(schema)` / `jsonb(schema)` overloads previously shipped from this module retired in Phase C of the codec-registry-unification project — see spec § AC-7.
112
+ */
126
113
  const jsonColumn = {
127
114
  codecId: PG_JSON_CODEC_ID,
128
115
  nativeType: "json"
129
116
  };
117
+ /**
118
+ * Postgres `jsonb` column descriptor — untyped raw JSONB. Same retirement note as {@link jsonColumn}.
119
+ */
130
120
  const jsonbColumn = {
131
121
  codecId: PG_JSONB_CODEC_ID,
132
122
  nativeType: "jsonb"
133
123
  };
134
- function createJsonTypeParams(schema) {
135
- const outputSchema = extractStandardSchemaOutputJsonSchema(schema);
136
- if (!outputSchema) throw new Error("JSON schema must expose ~standard.jsonSchema.output()");
137
- const expression = extractStandardSchemaTypeExpression(schema);
138
- if (expression) return {
139
- schemaJson: outputSchema,
140
- type: expression
141
- };
142
- return { schemaJson: outputSchema };
143
- }
144
- function createJsonColumnFactory(codecId, nativeType, staticDescriptor) {
145
- return (schema) => {
146
- if (!schema) return staticDescriptor;
147
- if (!isStandardSchemaLike(schema)) throw new Error(`${nativeType}(schema) expects a Standard Schema value`);
148
- return {
149
- codecId,
150
- nativeType,
151
- typeParams: createJsonTypeParams(schema)
152
- };
153
- };
154
- }
155
- const _json = createJsonColumnFactory(PG_JSON_CODEC_ID, "json", jsonColumn);
156
- const _jsonb = createJsonColumnFactory(PG_JSONB_CODEC_ID, "jsonb", jsonbColumn);
157
- function json(schema) {
158
- return _json(schema);
159
- }
160
- function jsonb(schema) {
161
- return _jsonb(schema);
162
- }
163
124
  function enumType(name, values) {
164
125
  return {
165
126
  codecId: PG_ENUM_CODEC_ID,
@@ -176,5 +137,5 @@ function enumColumn(typeName, nativeType) {
176
137
  }
177
138
 
178
139
  //#endregion
179
- export { bitColumn, boolColumn, charColumn, enumColumn, enumType, float4Column, float8Column, int2Column, int4Column, int8Column, intervalColumn, json, jsonColumn, jsonb, jsonbColumn, numericColumn, textColumn, timeColumn, timestampColumn, timestamptzColumn, timetzColumn, varbitColumn, varcharColumn };
140
+ export { bitColumn, boolColumn, byteaColumn, charColumn, enumColumn, enumType, float4Column, float8Column, int2Column, int4Column, int8Column, intervalColumn, jsonColumn, jsonbColumn, numericColumn, textColumn, timeColumn, timestampColumn, timestamptzColumn, timetzColumn, varbitColumn, varcharColumn };
180
141
  //# sourceMappingURL=column-types.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"column-types.mjs","names":[],"sources":["../src/core/standard-schema.ts","../src/exports/column-types.ts"],"sourcesContent":["type UnknownRecord = Record<string, unknown>;\n\ntype StandardSchemaJsonSchemaField = {\n readonly output?: unknown;\n};\n\n/**\n * Runtime view of the Standard Schema protocol.\n * Reads `~standard.jsonSchema.output` for the serializable JSON Schema representation,\n * and `.expression` for an optional TypeScript type expression string (Arktype-specific).\n *\n * This differs from the compile-time `StandardSchemaLike` in `codec-types.ts`, which reads\n * `~standard.types.output` for TypeScript type narrowing in contract.d.ts.\n */\nexport type StandardSchemaLike = {\n readonly '~standard'?: {\n readonly version?: number;\n readonly jsonSchema?: StandardSchemaJsonSchemaField;\n };\n readonly expression?: unknown;\n};\n\nfunction isObjectLike(value: unknown): value is UnknownRecord {\n return (typeof value === 'object' || typeof value === 'function') && value !== null;\n}\n\nfunction resolveOutputJsonSchemaField(schema: StandardSchemaLike): unknown {\n const jsonSchema = schema['~standard']?.jsonSchema;\n if (!jsonSchema) {\n return undefined;\n }\n\n if (typeof jsonSchema.output === 'function') {\n return jsonSchema.output({\n target: 'draft-07',\n });\n }\n\n return jsonSchema.output;\n}\n\nexport function extractStandardSchemaOutputJsonSchema(\n schema: StandardSchemaLike,\n): UnknownRecord | undefined {\n const outputSchema = resolveOutputJsonSchemaField(schema);\n if (!isObjectLike(outputSchema)) {\n return undefined;\n }\n\n return outputSchema;\n}\n\nexport function extractStandardSchemaTypeExpression(\n schema: StandardSchemaLike,\n): string | undefined {\n const expression = schema.expression;\n if (typeof expression !== 'string') {\n return undefined;\n }\n\n const trimmedExpression = expression.trim();\n if (trimmedExpression.length === 0) {\n return undefined;\n }\n\n return trimmedExpression;\n}\n\nexport function isStandardSchemaLike(value: unknown): value is StandardSchemaLike {\n return isObjectLike(value) && isObjectLike((value as StandardSchemaLike)['~standard']);\n}\n","/**\n * Column type descriptors for Postgres adapter.\n *\n * These descriptors provide both codecId and nativeType for use in contract authoring.\n * They are derived from the same source of truth as codec definitions and manifests.\n */\n\nimport type { ColumnTypeDescriptor } from '@prisma-next/contract-authoring';\nimport type { StorageTypeInstance } from '@prisma-next/sql-contract/types';\nimport {\n PG_BIT_CODEC_ID,\n PG_BOOL_CODEC_ID,\n PG_ENUM_CODEC_ID,\n PG_FLOAT4_CODEC_ID,\n PG_FLOAT8_CODEC_ID,\n PG_INT2_CODEC_ID,\n PG_INT4_CODEC_ID,\n PG_INT8_CODEC_ID,\n PG_INTERVAL_CODEC_ID,\n PG_JSON_CODEC_ID,\n PG_JSONB_CODEC_ID,\n PG_NUMERIC_CODEC_ID,\n PG_TEXT_CODEC_ID,\n PG_TIME_CODEC_ID,\n PG_TIMESTAMP_CODEC_ID,\n PG_TIMESTAMPTZ_CODEC_ID,\n PG_TIMETZ_CODEC_ID,\n PG_VARBIT_CODEC_ID,\n SQL_CHAR_CODEC_ID,\n SQL_VARCHAR_CODEC_ID,\n} from '@prisma-next/target-postgres/codec-ids';\nimport {\n extractStandardSchemaOutputJsonSchema,\n extractStandardSchemaTypeExpression,\n isStandardSchemaLike,\n type StandardSchemaLike,\n} from '../core/standard-schema';\n\nexport const textColumn = {\n codecId: PG_TEXT_CODEC_ID,\n nativeType: 'text',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function charColumn(length: number): ColumnTypeDescriptor & {\n readonly typeParams: { readonly length: number };\n} {\n return {\n codecId: SQL_CHAR_CODEC_ID,\n nativeType: 'character',\n typeParams: { length },\n } as const;\n}\n\nexport function varcharColumn(length: number): ColumnTypeDescriptor & {\n readonly typeParams: { readonly length: number };\n} {\n return {\n codecId: SQL_VARCHAR_CODEC_ID,\n nativeType: 'character varying',\n typeParams: { length },\n } as const;\n}\n\nexport const int4Column = {\n codecId: PG_INT4_CODEC_ID,\n nativeType: 'int4',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const int2Column = {\n codecId: PG_INT2_CODEC_ID,\n nativeType: 'int2',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const int8Column = {\n codecId: PG_INT8_CODEC_ID,\n nativeType: 'int8',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const float4Column = {\n codecId: PG_FLOAT4_CODEC_ID,\n nativeType: 'float4',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const float8Column = {\n codecId: PG_FLOAT8_CODEC_ID,\n nativeType: 'float8',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function numericColumn(\n precision: number,\n scale?: number,\n): ColumnTypeDescriptor & {\n readonly typeParams: { readonly precision: number; readonly scale?: number };\n} {\n return {\n codecId: PG_NUMERIC_CODEC_ID,\n nativeType: 'numeric',\n typeParams: scale === undefined ? { precision } : { precision, scale },\n } as const;\n}\n\nexport const timestampColumn = {\n codecId: PG_TIMESTAMP_CODEC_ID,\n nativeType: 'timestamp',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const timestamptzColumn = {\n codecId: PG_TIMESTAMPTZ_CODEC_ID,\n nativeType: 'timestamptz',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function timeColumn(precision?: number): ColumnTypeDescriptor & {\n readonly typeParams?: { readonly precision: number };\n} {\n return {\n codecId: PG_TIME_CODEC_ID,\n nativeType: 'time',\n ...(precision === undefined ? {} : { typeParams: { precision } }),\n } as const;\n}\n\nexport function timetzColumn(precision?: number): ColumnTypeDescriptor & {\n readonly typeParams?: { readonly precision: number };\n} {\n return {\n codecId: PG_TIMETZ_CODEC_ID,\n nativeType: 'timetz',\n ...(precision === undefined ? {} : { typeParams: { precision } }),\n } as const;\n}\n\nexport const boolColumn = {\n codecId: PG_BOOL_CODEC_ID,\n nativeType: 'bool',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function bitColumn(length: number): ColumnTypeDescriptor & {\n readonly typeParams: { readonly length: number };\n} {\n return {\n codecId: PG_BIT_CODEC_ID,\n nativeType: 'bit',\n typeParams: { length },\n } as const;\n}\n\nexport function varbitColumn(length: number): ColumnTypeDescriptor & {\n readonly typeParams: { readonly length: number };\n} {\n return {\n codecId: PG_VARBIT_CODEC_ID,\n nativeType: 'bit varying',\n typeParams: { length },\n } as const;\n}\n\nexport function intervalColumn(precision?: number): ColumnTypeDescriptor & {\n readonly typeParams?: { readonly precision: number };\n} {\n return {\n codecId: PG_INTERVAL_CODEC_ID,\n nativeType: 'interval',\n ...(precision === undefined ? {} : { typeParams: { precision } }),\n } as const;\n}\n\nexport const jsonColumn = {\n codecId: PG_JSON_CODEC_ID,\n nativeType: 'json',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const jsonbColumn = {\n codecId: PG_JSONB_CODEC_ID,\n nativeType: 'jsonb',\n} as const satisfies ColumnTypeDescriptor;\n\ntype JsonSchemaTypeParams = {\n readonly schemaJson: Record<string, unknown>;\n readonly type?: string;\n};\n\nfunction createJsonTypeParams(schema: StandardSchemaLike): JsonSchemaTypeParams {\n const outputSchema = extractStandardSchemaOutputJsonSchema(schema);\n if (!outputSchema) {\n throw new Error('JSON schema must expose ~standard.jsonSchema.output()');\n }\n\n const expression = extractStandardSchemaTypeExpression(schema);\n if (expression) {\n return { schemaJson: outputSchema, type: expression };\n }\n\n return { schemaJson: outputSchema };\n}\n\nfunction createJsonColumnFactory(\n codecId: string,\n nativeType: string,\n staticDescriptor: ColumnTypeDescriptor,\n) {\n return (schema?: StandardSchemaLike): ColumnTypeDescriptor => {\n if (!schema) {\n return staticDescriptor;\n }\n\n if (!isStandardSchemaLike(schema)) {\n throw new Error(`${nativeType}(schema) expects a Standard Schema value`);\n }\n\n return {\n codecId,\n nativeType,\n typeParams: createJsonTypeParams(schema),\n };\n };\n}\n\nconst _json = createJsonColumnFactory(PG_JSON_CODEC_ID, 'json', jsonColumn);\nconst _jsonb = createJsonColumnFactory(PG_JSONB_CODEC_ID, 'jsonb', jsonbColumn);\n\nexport function json(schema?: StandardSchemaLike): ColumnTypeDescriptor {\n return _json(schema);\n}\n\nexport function jsonb(schema?: StandardSchemaLike): ColumnTypeDescriptor {\n return _jsonb(schema);\n}\n\nexport function enumType<const Values extends readonly string[]>(\n name: string,\n values: Values,\n): StorageTypeInstance & { readonly typeParams: { readonly values: Values } } {\n return {\n codecId: PG_ENUM_CODEC_ID,\n nativeType: name,\n typeParams: { values },\n } as const;\n}\n\nexport function enumColumn<TypeName extends string>(\n typeName: TypeName,\n nativeType: string,\n): ColumnTypeDescriptor & { readonly typeRef: TypeName } {\n return {\n codecId: PG_ENUM_CODEC_ID,\n nativeType,\n typeRef: typeName,\n };\n}\n"],"mappings":";;;AAsBA,SAAS,aAAa,OAAwC;AAC5D,SAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,eAAe,UAAU;;AAGjF,SAAS,6BAA6B,QAAqC;CACzE,MAAM,aAAa,OAAO,cAAc;AACxC,KAAI,CAAC,WACH;AAGF,KAAI,OAAO,WAAW,WAAW,WAC/B,QAAO,WAAW,OAAO,EACvB,QAAQ,YACT,CAAC;AAGJ,QAAO,WAAW;;AAGpB,SAAgB,sCACd,QAC2B;CAC3B,MAAM,eAAe,6BAA6B,OAAO;AACzD,KAAI,CAAC,aAAa,aAAa,CAC7B;AAGF,QAAO;;AAGT,SAAgB,oCACd,QACoB;CACpB,MAAM,aAAa,OAAO;AAC1B,KAAI,OAAO,eAAe,SACxB;CAGF,MAAM,oBAAoB,WAAW,MAAM;AAC3C,KAAI,kBAAkB,WAAW,EAC/B;AAGF,QAAO;;AAGT,SAAgB,qBAAqB,OAA6C;AAChF,QAAO,aAAa,MAAM,IAAI,aAAc,MAA6B,aAAa;;;;;AC/BxF,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,SAAgB,WAAW,QAEzB;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;AAGH,SAAgB,cAAc,QAE5B;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;AAGH,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,MAAa,eAAe;CAC1B,SAAS;CACT,YAAY;CACb;AAED,MAAa,eAAe;CAC1B,SAAS;CACT,YAAY;CACb;AAED,SAAgB,cACd,WACA,OAGA;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,UAAU,SAAY,EAAE,WAAW,GAAG;GAAE;GAAW;GAAO;EACvE;;AAGH,MAAa,kBAAkB;CAC7B,SAAS;CACT,YAAY;CACb;AAED,MAAa,oBAAoB;CAC/B,SAAS;CACT,YAAY;CACb;AAED,SAAgB,WAAW,WAEzB;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,GAAI,cAAc,SAAY,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE;EACjE;;AAGH,SAAgB,aAAa,WAE3B;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,GAAI,cAAc,SAAY,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE;EACjE;;AAGH,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,SAAgB,UAAU,QAExB;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;AAGH,SAAgB,aAAa,QAE3B;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;AAGH,SAAgB,eAAe,WAE7B;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,GAAI,cAAc,SAAY,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE;EACjE;;AAGH,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,MAAa,cAAc;CACzB,SAAS;CACT,YAAY;CACb;AAOD,SAAS,qBAAqB,QAAkD;CAC9E,MAAM,eAAe,sCAAsC,OAAO;AAClE,KAAI,CAAC,aACH,OAAM,IAAI,MAAM,wDAAwD;CAG1E,MAAM,aAAa,oCAAoC,OAAO;AAC9D,KAAI,WACF,QAAO;EAAE,YAAY;EAAc,MAAM;EAAY;AAGvD,QAAO,EAAE,YAAY,cAAc;;AAGrC,SAAS,wBACP,SACA,YACA,kBACA;AACA,SAAQ,WAAsD;AAC5D,MAAI,CAAC,OACH,QAAO;AAGT,MAAI,CAAC,qBAAqB,OAAO,CAC/B,OAAM,IAAI,MAAM,GAAG,WAAW,0CAA0C;AAG1E,SAAO;GACL;GACA;GACA,YAAY,qBAAqB,OAAO;GACzC;;;AAIL,MAAM,QAAQ,wBAAwB,kBAAkB,QAAQ,WAAW;AAC3E,MAAM,SAAS,wBAAwB,mBAAmB,SAAS,YAAY;AAE/E,SAAgB,KAAK,QAAmD;AACtE,QAAO,MAAM,OAAO;;AAGtB,SAAgB,MAAM,QAAmD;AACvE,QAAO,OAAO,OAAO;;AAGvB,SAAgB,SACd,MACA,QAC4E;AAC5E,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;AAGH,SAAgB,WACd,UACA,YACuD;AACvD,QAAO;EACL,SAAS;EACT;EACA,SAAS;EACV"}
1
+ {"version":3,"file":"column-types.mjs","names":[],"sources":["../src/exports/column-types.ts"],"sourcesContent":["/**\n * Column type descriptors for Postgres adapter.\n *\n * These descriptors provide both codecId and nativeType for use in contract authoring. They are derived from the same source of truth as codec definitions and manifests.\n */\n\nimport type { ColumnTypeDescriptor } from '@prisma-next/framework-components/codec';\nimport type { StorageTypeInstance } from '@prisma-next/sql-contract/types';\nimport {\n PG_BIT_CODEC_ID,\n PG_BOOL_CODEC_ID,\n PG_BYTEA_CODEC_ID,\n PG_ENUM_CODEC_ID,\n PG_FLOAT4_CODEC_ID,\n PG_FLOAT8_CODEC_ID,\n PG_INT2_CODEC_ID,\n PG_INT4_CODEC_ID,\n PG_INT8_CODEC_ID,\n PG_INTERVAL_CODEC_ID,\n PG_JSON_CODEC_ID,\n PG_JSONB_CODEC_ID,\n PG_NUMERIC_CODEC_ID,\n PG_TEXT_CODEC_ID,\n PG_TIME_CODEC_ID,\n PG_TIMESTAMP_CODEC_ID,\n PG_TIMESTAMPTZ_CODEC_ID,\n PG_TIMETZ_CODEC_ID,\n PG_VARBIT_CODEC_ID,\n SQL_CHAR_CODEC_ID,\n SQL_VARCHAR_CODEC_ID,\n} from '@prisma-next/target-postgres/codec-ids';\n\nexport const textColumn = {\n codecId: PG_TEXT_CODEC_ID,\n nativeType: 'text',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function charColumn(length: number): ColumnTypeDescriptor & {\n readonly typeParams: { readonly length: number };\n} {\n return {\n codecId: SQL_CHAR_CODEC_ID,\n nativeType: 'character',\n typeParams: { length },\n } as const;\n}\n\nexport function varcharColumn(length: number): ColumnTypeDescriptor & {\n readonly typeParams: { readonly length: number };\n} {\n return {\n codecId: SQL_VARCHAR_CODEC_ID,\n nativeType: 'character varying',\n typeParams: { length },\n } as const;\n}\n\nexport const int4Column = {\n codecId: PG_INT4_CODEC_ID,\n nativeType: 'int4',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const int2Column = {\n codecId: PG_INT2_CODEC_ID,\n nativeType: 'int2',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const int8Column = {\n codecId: PG_INT8_CODEC_ID,\n nativeType: 'int8',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const float4Column = {\n codecId: PG_FLOAT4_CODEC_ID,\n nativeType: 'float4',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const float8Column = {\n codecId: PG_FLOAT8_CODEC_ID,\n nativeType: 'float8',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function numericColumn(\n precision: number,\n scale?: number,\n): ColumnTypeDescriptor & {\n readonly typeParams: { readonly precision: number; readonly scale?: number };\n} {\n return {\n codecId: PG_NUMERIC_CODEC_ID,\n nativeType: 'numeric',\n typeParams: scale === undefined ? { precision } : { precision, scale },\n } as const;\n}\n\nexport const timestampColumn = {\n codecId: PG_TIMESTAMP_CODEC_ID,\n nativeType: 'timestamp',\n} as const satisfies ColumnTypeDescriptor;\n\nexport const timestamptzColumn = {\n codecId: PG_TIMESTAMPTZ_CODEC_ID,\n nativeType: 'timestamptz',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function timeColumn(precision?: number): ColumnTypeDescriptor & {\n readonly typeParams?: { readonly precision: number };\n} {\n return {\n codecId: PG_TIME_CODEC_ID,\n nativeType: 'time',\n ...(precision === undefined ? {} : { typeParams: { precision } }),\n } as const;\n}\n\nexport function timetzColumn(precision?: number): ColumnTypeDescriptor & {\n readonly typeParams?: { readonly precision: number };\n} {\n return {\n codecId: PG_TIMETZ_CODEC_ID,\n nativeType: 'timetz',\n ...(precision === undefined ? {} : { typeParams: { precision } }),\n } as const;\n}\n\nexport const boolColumn = {\n codecId: PG_BOOL_CODEC_ID,\n nativeType: 'bool',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function bitColumn(length: number): ColumnTypeDescriptor & {\n readonly typeParams: { readonly length: number };\n} {\n return {\n codecId: PG_BIT_CODEC_ID,\n nativeType: 'bit',\n typeParams: { length },\n } as const;\n}\n\nexport function varbitColumn(length: number): ColumnTypeDescriptor & {\n readonly typeParams: { readonly length: number };\n} {\n return {\n codecId: PG_VARBIT_CODEC_ID,\n nativeType: 'bit varying',\n typeParams: { length },\n } as const;\n}\n\n/**\n * Postgres `bytea` column descriptor — variable-length binary string.\n *\n * Round-trips as `Uint8Array` on the JS side. The pg wire-protocol text encoding (`\\x` followed by hex-encoded bytes, canonical for Postgres ≥ 9.0) and binary encoding are both handled by the underlying driver; the codec only normalizes the JS-side representation to a plain `Uint8Array` view.\n */\nexport const byteaColumn = {\n codecId: PG_BYTEA_CODEC_ID,\n nativeType: 'bytea',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function intervalColumn(precision?: number): ColumnTypeDescriptor & {\n readonly typeParams?: { readonly precision: number };\n} {\n return {\n codecId: PG_INTERVAL_CODEC_ID,\n nativeType: 'interval',\n ...(precision === undefined ? {} : { typeParams: { precision } }),\n } as const;\n}\n\n/**\n * Postgres `json` column descriptor — untyped raw JSON.\n *\n * For schema-typed JSON columns, use the per-library extension package (`@prisma-next/extension-arktype-json` ships `arktypeJson(schema)` for arktype). The schema-accepting `json(schema)` / `jsonb(schema)` overloads previously shipped from this module retired in Phase C of the codec-registry-unification project — see spec § AC-7.\n */\nexport const jsonColumn = {\n codecId: PG_JSON_CODEC_ID,\n nativeType: 'json',\n} as const satisfies ColumnTypeDescriptor;\n\n/**\n * Postgres `jsonb` column descriptor — untyped raw JSONB. Same retirement note as {@link jsonColumn}.\n */\nexport const jsonbColumn = {\n codecId: PG_JSONB_CODEC_ID,\n nativeType: 'jsonb',\n} as const satisfies ColumnTypeDescriptor;\n\nexport function enumType<const Values extends readonly string[]>(\n name: string,\n values: Values,\n): StorageTypeInstance & { readonly typeParams: { readonly values: Values } } {\n return {\n codecId: PG_ENUM_CODEC_ID,\n nativeType: name,\n typeParams: { values },\n } as const;\n}\n\nexport function enumColumn<TypeName extends string>(\n typeName: TypeName,\n nativeType: string,\n): ColumnTypeDescriptor & { readonly typeRef: TypeName } {\n return {\n codecId: PG_ENUM_CODEC_ID,\n nativeType,\n typeRef: typeName,\n };\n}\n"],"mappings":";;;AAgCA,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,SAAgB,WAAW,QAEzB;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;AAGH,SAAgB,cAAc,QAE5B;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;AAGH,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,MAAa,eAAe;CAC1B,SAAS;CACT,YAAY;CACb;AAED,MAAa,eAAe;CAC1B,SAAS;CACT,YAAY;CACb;AAED,SAAgB,cACd,WACA,OAGA;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,UAAU,SAAY,EAAE,WAAW,GAAG;GAAE;GAAW;GAAO;EACvE;;AAGH,MAAa,kBAAkB;CAC7B,SAAS;CACT,YAAY;CACb;AAED,MAAa,oBAAoB;CAC/B,SAAS;CACT,YAAY;CACb;AAED,SAAgB,WAAW,WAEzB;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,GAAI,cAAc,SAAY,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE;EACjE;;AAGH,SAAgB,aAAa,WAE3B;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,GAAI,cAAc,SAAY,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE;EACjE;;AAGH,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;AAED,SAAgB,UAAU,QAExB;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;AAGH,SAAgB,aAAa,QAE3B;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;;;;;;AAQH,MAAa,cAAc;CACzB,SAAS;CACT,YAAY;CACb;AAED,SAAgB,eAAe,WAE7B;AACA,QAAO;EACL,SAAS;EACT,YAAY;EACZ,GAAI,cAAc,SAAY,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE;EACjE;;;;;;;AAQH,MAAa,aAAa;CACxB,SAAS;CACT,YAAY;CACb;;;;AAKD,MAAa,cAAc;CACzB,SAAS;CACT,YAAY;CACb;AAED,SAAgB,SACd,MACA,QAC4E;AAC5E,QAAO;EACL,SAAS;EACT,YAAY;EACZ,YAAY,EAAE,QAAQ;EACvB;;AAGH,SAAgB,WACd,UACA,YACuD;AACvD,QAAO;EACL,SAAS;EACT;EACA,SAAS;EACV"}
@@ -1,10 +1,83 @@
1
+ import { ControlDriverInstance } from "@prisma-next/framework-components/control";
2
+ import { AnyQueryAst, LoweredStatement, LowererContext } from "@prisma-next/sql-relational-core/ast";
1
3
  import { SqlEscapeError, escapeLiteral, qualifyName, quoteIdentifier } from "@prisma-next/target-postgres/sql-utils";
2
- import { parsePostgresDefault } from "@prisma-next/target-postgres/default-normalizer";
3
- import { normalizeSchemaNativeType } from "@prisma-next/target-postgres/native-type-normalizer";
4
+ import { parsePostgresDefault, parsePostgresDefault as parsePostgresDefault$1 } from "@prisma-next/target-postgres/default-normalizer";
5
+ import { normalizeSchemaNativeType, normalizeSchemaNativeType as normalizeSchemaNativeType$1 } from "@prisma-next/target-postgres/native-type-normalizer";
4
6
  import { SqlControlAdapterDescriptor } from "@prisma-next/family-sql/control";
7
+ import { ContractMarkerRecord } from "@prisma-next/contract/types";
8
+ import { CodecLookup } from "@prisma-next/framework-components/codec";
9
+ import { SqlControlAdapter } from "@prisma-next/family-sql/control-adapter";
10
+ import { SqlSchemaIR } from "@prisma-next/sql-schema-ir/types";
5
11
 
12
+ //#region src/core/control-adapter.d.ts
13
+ /**
14
+ * Postgres control plane adapter for control-plane operations like introspection.
15
+ * Provides target-specific implementations for control-plane domain actions.
16
+ */
17
+ declare class PostgresControlAdapter implements SqlControlAdapter<'postgres'> {
18
+ readonly familyId: "sql";
19
+ readonly targetId: "postgres";
20
+ private readonly codecLookup;
21
+ /**
22
+ * @param codecLookup - Codec lookup used by the SQL renderer to resolve
23
+ * per-codec metadata at lower-time. Defaults to a Postgres-builtins-only
24
+ * lookup when omitted. Stack-aware callers
25
+ * (`SqlControlAdapterDescriptor.create(stack)`) supply
26
+ * `stack.codecLookup` so extension codecs are visible to the renderer.
27
+ */
28
+ constructor(codecLookup?: CodecLookup);
29
+ /**
30
+ * Target-specific normalizer for raw Postgres default expressions.
31
+ * Used by schema verification to normalize raw defaults before comparison.
32
+ */
33
+ readonly normalizeDefault: typeof parsePostgresDefault$1;
34
+ /**
35
+ * Target-specific normalizer for Postgres schema native type names.
36
+ * Used by schema verification to normalize introspected type names
37
+ * before comparison with contract native types.
38
+ */
39
+ readonly normalizeNativeType: typeof normalizeSchemaNativeType$1;
40
+ /**
41
+ * Lower a SQL query AST into a Postgres-flavored `{ sql, params }` payload.
42
+ *
43
+ * Delegates to the shared `renderLoweredSql` renderer so the control adapter
44
+ * emits byte-identical SQL to `PostgresAdapterImpl.lower()` for the same AST
45
+ * and contract. Used at migration plan/emit time (e.g. by `dataTransform`)
46
+ * without instantiating the runtime adapter.
47
+ */
48
+ lower(ast: AnyQueryAst, context: LowererContext<unknown>): LoweredStatement;
49
+ /**
50
+ * Reads the contract marker from `prisma_contract.marker`. Probes
51
+ * `information_schema.tables` first so a fresh database (where the
52
+ * `prisma_contract` schema doesn't yet exist) returns `null` instead of a
53
+ * "relation does not exist" error — some Postgres wire-protocol clients
54
+ * (e.g. PGlite's TCP proxy) don't fully recover from extended-protocol
55
+ * parse errors, so we probe before reading.
56
+ */
57
+ readMarker(driver: ControlDriverInstance<'sql', 'postgres'>): Promise<ContractMarkerRecord | null>;
58
+ /**
59
+ * Introspects a Postgres database schema and returns a raw SqlSchemaIR.
60
+ *
61
+ * This is a pure schema discovery operation that queries the Postgres catalog
62
+ * and returns the schema structure without type mapping or contract enrichment.
63
+ * Type mapping and enrichment are handled separately by enrichment helpers.
64
+ *
65
+ * Uses batched queries to minimize database round trips (7 queries instead of 5T+3).
66
+ *
67
+ * @param driver - ControlDriverInstance<'sql', 'postgres'> instance for executing queries
68
+ * @param contract - Optional contract for contract-guided introspection (filtering, optimization)
69
+ * @param schema - Schema name to introspect (defaults to 'public')
70
+ * @returns Promise resolving to SqlSchemaIR representing the live database schema
71
+ */
72
+ introspect(driver: ControlDriverInstance<'sql', 'postgres'>, _contract?: unknown, schema?: string): Promise<SqlSchemaIR>;
73
+ /**
74
+ * Gets the Postgres version from the database.
75
+ */
76
+ private getPostgresVersion;
77
+ }
78
+ //#endregion
6
79
  //#region src/exports/control.d.ts
7
80
  declare const postgresAdapterDescriptor: SqlControlAdapterDescriptor<'postgres'>;
8
81
  //#endregion
9
- export { SqlEscapeError, postgresAdapterDescriptor as default, escapeLiteral, normalizeSchemaNativeType, parsePostgresDefault, qualifyName, quoteIdentifier };
82
+ export { PostgresControlAdapter, SqlEscapeError, postgresAdapterDescriptor as default, escapeLiteral, normalizeSchemaNativeType, parsePostgresDefault, qualifyName, quoteIdentifier };
10
83
  //# sourceMappingURL=control.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"control.d.mts","names":[],"sources":["../src/exports/control.ts"],"sourcesContent":[],"mappings":";;;;;;cAgBM,2BAA2B"}
1
+ {"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/control-adapter.ts","../src/exports/control.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;AAiCa,cAAA,sBAAA,YAAkC,iBAAX,CAAA,UAAA,CAAA,CAAA;EAaR,SAAA,QAAA,EAAA,KAAA;EAQD,SAAA,QAAA,EAAA,UAAA;EAOG,iBAAA,WAAA;EAUjB;;;;;;;EAwEA,WAAA,CAAA,WAAA,CAAA,EAjGe,WAiGf;EAAR;;;;oCAzFsB;;AC/CqB;;;;uCDsDlB;;;;;;;;;aAUjB,sBAAsB,0BAA0B;;;;;;;;;qBAajD,2CACP,QAAQ;;;;;;;;;;;;;;;qBAuDD,iFAGP,QAAQ;;;;;;;;cC/HP,2BAA2B"}
package/dist/control.mjs CHANGED
@@ -1,9 +1,11 @@
1
- import { t as renderLoweredSql } from "./sql-renderer-pEaSP82_.mjs";
2
- import { r as pgEnumControlHooks, t as postgresAdapterDescriptorMeta } from "./descriptor-meta-RTDzyrae.mjs";
3
- import { ifDefined } from "@prisma-next/utils/defined";
1
+ import { n as createPostgresBuiltinCodecLookup, t as renderLoweredSql } from "./sql-renderer-Qt6yk5Qj.mjs";
2
+ import { r as pgEnumControlHooks, t as postgresAdapterDescriptorMeta } from "./descriptor-meta-D8znZhXl.mjs";
4
3
  import { SqlEscapeError, escapeLiteral, qualifyName, quoteIdentifier } from "@prisma-next/target-postgres/sql-utils";
4
+ import { parseContractMarkerRow } from "@prisma-next/family-sql/verify";
5
5
  import { parsePostgresDefault, parsePostgresDefault as parsePostgresDefault$1 } from "@prisma-next/target-postgres/default-normalizer";
6
6
  import { normalizeSchemaNativeType, normalizeSchemaNativeType as normalizeSchemaNativeType$1 } from "@prisma-next/target-postgres/native-type-normalizer";
7
+ import { ifDefined } from "@prisma-next/utils/defined";
8
+ import { timestampNowControlDescriptor } from "@prisma-next/family-sql/control";
7
9
  import { builtinGeneratorRegistryMetadata, resolveBuiltinGeneratedColumnDescriptor } from "@prisma-next/ids";
8
10
 
9
11
  //#region src/core/control-adapter.ts
@@ -14,6 +16,17 @@ import { builtinGeneratorRegistryMetadata, resolveBuiltinGeneratedColumnDescript
14
16
  var PostgresControlAdapter = class {
15
17
  familyId = "sql";
16
18
  targetId = "postgres";
19
+ codecLookup;
20
+ /**
21
+ * @param codecLookup - Codec lookup used by the SQL renderer to resolve
22
+ * per-codec metadata at lower-time. Defaults to a Postgres-builtins-only
23
+ * lookup when omitted. Stack-aware callers
24
+ * (`SqlControlAdapterDescriptor.create(stack)`) supply
25
+ * `stack.codecLookup` so extension codecs are visible to the renderer.
26
+ */
27
+ constructor(codecLookup) {
28
+ this.codecLookup = codecLookup ?? createPostgresBuiltinCodecLookup();
29
+ }
17
30
  /**
18
31
  * Target-specific normalizer for raw Postgres default expressions.
19
32
  * Used by schema verification to normalize raw defaults before comparison.
@@ -34,7 +47,33 @@ var PostgresControlAdapter = class {
34
47
  * without instantiating the runtime adapter.
35
48
  */
36
49
  lower(ast, context) {
37
- return renderLoweredSql(ast, context.contract);
50
+ return renderLoweredSql(ast, context.contract, this.codecLookup);
51
+ }
52
+ /**
53
+ * Reads the contract marker from `prisma_contract.marker`. Probes
54
+ * `information_schema.tables` first so a fresh database (where the
55
+ * `prisma_contract` schema doesn't yet exist) returns `null` instead of a
56
+ * "relation does not exist" error — some Postgres wire-protocol clients
57
+ * (e.g. PGlite's TCP proxy) don't fully recover from extended-protocol
58
+ * parse errors, so we probe before reading.
59
+ */
60
+ async readMarker(driver) {
61
+ if ((await driver.query(`select 1
62
+ from information_schema.tables
63
+ where table_schema = $1 and table_name = $2`, ["prisma_contract", "marker"])).rows.length === 0) return null;
64
+ const row = (await driver.query(`select
65
+ core_hash,
66
+ profile_hash,
67
+ contract_json,
68
+ canonical_version,
69
+ updated_at,
70
+ app_tag,
71
+ meta,
72
+ invariants
73
+ from prisma_contract.marker
74
+ where id = $1`, [1])).rows[0];
75
+ if (!row) return null;
76
+ return parseContractMarkerRow(row);
38
77
  }
39
78
  /**
40
79
  * Introspects a Postgres database schema and returns a raw SqlSchemaIR.
@@ -566,7 +605,7 @@ function createPostgresDefaultFunctionRegistry() {
566
605
  return new Map(postgresDefaultFunctionRegistryEntries);
567
606
  }
568
607
  function createPostgresMutationDefaultGeneratorDescriptors() {
569
- return builtinGeneratorRegistryMetadata.map(({ id, applicableCodecIds }) => ({
608
+ return [...builtinGeneratorRegistryMetadata.map(({ id, applicableCodecIds }) => ({
570
609
  id,
571
610
  applicableCodecIds,
572
611
  resolveGeneratedColumnDescriptor: ({ generated }) => {
@@ -582,7 +621,7 @@ function createPostgresMutationDefaultGeneratorDescriptors() {
582
621
  ...descriptor.typeParams ? { typeParams: descriptor.typeParams } : {}
583
622
  };
584
623
  }
585
- }));
624
+ })), timestampNowControlDescriptor()];
586
625
  }
587
626
  function createPostgresScalarTypeDescriptors() {
588
627
  return new Map(postgresScalarTypeDescriptors);
@@ -597,12 +636,12 @@ const postgresAdapterDescriptor = {
597
636
  defaultFunctionRegistry: createPostgresDefaultFunctionRegistry(),
598
637
  generatorDescriptors: createPostgresMutationDefaultGeneratorDescriptors()
599
638
  },
600
- create(_stack) {
601
- return new PostgresControlAdapter();
639
+ create(stack) {
640
+ return new PostgresControlAdapter(stack.codecLookup);
602
641
  }
603
642
  };
604
643
  var control_default = postgresAdapterDescriptor;
605
644
 
606
645
  //#endregion
607
- export { SqlEscapeError, control_default as default, escapeLiteral, normalizeSchemaNativeType, parsePostgresDefault, qualifyName, quoteIdentifier };
646
+ export { PostgresControlAdapter, SqlEscapeError, control_default as default, escapeLiteral, normalizeSchemaNativeType, parsePostgresDefault, qualifyName, quoteIdentifier };
608
647
  //# sourceMappingURL=control.mjs.map