@prisma-next/adapter-postgres 0.3.0-pr.90.2 → 0.3.0-pr.91.1

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.
@@ -151,25 +151,7 @@ var pgBoolCodec = codec({
151
151
  }
152
152
  }
153
153
  });
154
- var pgEnumCodec = codec({
155
- typeId: "pg/enum@1",
156
- targetTypes: [],
157
- // Enum types are dynamically determined by nativeType
158
- encode: (value) => value,
159
- decode: (wire) => wire,
160
- meta: {
161
- db: {
162
- sql: {
163
- postgres: {
164
- // The actual enum type name is specified per-column via nativeType.
165
- // This placeholder indicates it's an enum without specifying which one.
166
- nativeType: "enum"
167
- }
168
- }
169
- }
170
- }
171
- });
172
- var codecs = defineCodecs().add("text", pgTextCodec).add("int4", pgInt4Codec).add("int2", pgInt2Codec).add("int8", pgInt8Codec).add("float4", pgFloat4Codec).add("float8", pgFloat8Codec).add("timestamp", pgTimestampCodec).add("timestamptz", pgTimestamptzCodec).add("bool", pgBoolCodec).add("enum", pgEnumCodec);
154
+ var codecs = defineCodecs().add("text", pgTextCodec).add("int4", pgInt4Codec).add("int2", pgInt2Codec).add("int8", pgInt8Codec).add("float4", pgFloat4Codec).add("float8", pgFloat8Codec).add("timestamp", pgTimestampCodec).add("timestamptz", pgTimestamptzCodec).add("bool", pgBoolCodec);
173
155
  var codecDefinitions = codecs.codecDefinitions;
174
156
  var dataTypes = codecs.dataTypes;
175
157
 
@@ -177,4 +159,4 @@ export {
177
159
  codecDefinitions,
178
160
  dataTypes
179
161
  };
180
- //# sourceMappingURL=chunk-XXBV77N7.js.map
162
+ //# sourceMappingURL=chunk-J3XSOAM2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/codecs.ts"],"sourcesContent":["/**\n * Unified codec definitions for Postgres adapter.\n *\n * This file contains a single source of truth for all codec information:\n * - Scalar names\n * - Type IDs\n * - Codec implementations (runtime)\n * - Type information (compile-time)\n *\n * This structure is used both at runtime (to populate the registry) and\n * at compile time (to derive CodecTypes).\n */\n\nimport { codec, defineCodecs } from '@prisma-next/sql-relational-core/ast';\n\n// Create individual codec instances\nconst pgTextCodec = codec({\n typeId: 'pg/text@1',\n targetTypes: ['text'],\n encode: (value: string): string => value,\n decode: (wire: string): string => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'text',\n },\n },\n },\n },\n});\n\nconst pgInt4Codec = codec<'pg/int4@1', number, number>({\n typeId: 'pg/int4@1',\n targetTypes: ['int4'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'integer',\n },\n },\n },\n },\n});\n\nconst pgInt2Codec = codec<'pg/int2@1', number, number>({\n typeId: 'pg/int2@1',\n targetTypes: ['int2'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'smallint',\n },\n },\n },\n },\n});\n\nconst pgInt8Codec = codec<'pg/int8@1', number, number>({\n typeId: 'pg/int8@1',\n targetTypes: ['int8'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'bigint',\n },\n },\n },\n },\n});\n\nconst pgFloat4Codec = codec<'pg/float4@1', number, number>({\n typeId: 'pg/float4@1',\n targetTypes: ['float4'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'real',\n },\n },\n },\n },\n});\n\nconst pgFloat8Codec = codec<'pg/float8@1', number, number>({\n typeId: 'pg/float8@1',\n targetTypes: ['float8'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'double precision',\n },\n },\n },\n },\n});\n\nconst pgTimestampCodec = codec<'pg/timestamp@1', string | Date, string>({\n typeId: 'pg/timestamp@1',\n targetTypes: ['timestamp'],\n encode: (value: string | Date): string => {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'string') return value;\n return String(value);\n },\n decode: (wire: string | Date): string => {\n if (typeof wire === 'string') return wire;\n if (wire instanceof Date) return wire.toISOString();\n return String(wire);\n },\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'timestamp without time zone',\n },\n },\n },\n },\n});\n\nconst pgTimestamptzCodec = codec<'pg/timestamptz@1', string | Date, string>({\n typeId: 'pg/timestamptz@1',\n targetTypes: ['timestamptz'],\n encode: (value: string | Date): string => {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'string') return value;\n return String(value);\n },\n decode: (wire: string | Date): string => {\n if (typeof wire === 'string') return wire;\n if (wire instanceof Date) return wire.toISOString();\n return String(wire);\n },\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'timestamp with time zone',\n },\n },\n },\n },\n});\n\nconst pgBoolCodec = codec<'pg/bool@1', boolean, boolean>({\n typeId: 'pg/bool@1',\n targetTypes: ['bool'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'boolean',\n },\n },\n },\n },\n});\n\n// Build codec definitions using the builder DSL\nconst codecs = defineCodecs()\n .add('text', pgTextCodec)\n .add('int4', pgInt4Codec)\n .add('int2', pgInt2Codec)\n .add('int8', pgInt8Codec)\n .add('float4', pgFloat4Codec)\n .add('float8', pgFloat8Codec)\n .add('timestamp', pgTimestampCodec)\n .add('timestamptz', pgTimestamptzCodec)\n .add('bool', pgBoolCodec);\n\n// Export derived structures directly from codecs builder\nexport const codecDefinitions = codecs.codecDefinitions;\nexport const dataTypes = codecs.dataTypes;\n\n// Export types derived from codecs builder\nexport type CodecTypes = typeof codecs.CodecTypes;\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  codecDefinitions
3
- } from "./chunk-XXBV77N7.js";
3
+ } from "./chunk-J3XSOAM2.js";
4
4
 
5
5
  // src/core/adapter.ts
6
6
  import { createCodecRegistry, isOperationExpr } from "@prisma-next/sql-relational-core/ast";
@@ -298,4 +298,4 @@ function createPostgresAdapter(options) {
298
298
  export {
299
299
  createPostgresAdapter
300
300
  };
301
- //# sourceMappingURL=chunk-NLY5NYN4.js.map
301
+ //# sourceMappingURL=chunk-T6S3A6VT.js.map
@@ -19,8 +19,7 @@ declare const codecs: import("@prisma-next/sql-relational-core/ast").CodecDefBui
19
19
  float8: import("@prisma-next/sql-relational-core/ast").Codec<"pg/float8@1", number, number>;
20
20
  timestamp: import("@prisma-next/sql-relational-core/ast").Codec<"pg/timestamp@1", string | Date, string>;
21
21
  timestamptz: import("@prisma-next/sql-relational-core/ast").Codec<"pg/timestamptz@1", string | Date, string>;
22
- bool: import("@prisma-next/sql-relational-core/ast").Codec<"pg/bool@1", boolean, boolean>;
23
- } & Record<"enum", import("@prisma-next/sql-relational-core/ast").Codec<"pg/enum@1", string, string>>>;
22
+ } & Record<"bool", import("@prisma-next/sql-relational-core/ast").Codec<"pg/bool@1", boolean, boolean>>>;
24
23
  export declare const codecDefinitions: {
25
24
  readonly text: {
26
25
  readonly typeId: "pg/text@1";
@@ -94,14 +93,6 @@ export declare const codecDefinitions: {
94
93
  readonly output: boolean;
95
94
  readonly jsType: boolean;
96
95
  };
97
- readonly enum: {
98
- readonly typeId: "pg/enum@1";
99
- readonly scalar: "enum";
100
- readonly codec: import("@prisma-next/sql-relational-core/ast").Codec<"pg/enum@1", string, string>;
101
- readonly input: string;
102
- readonly output: string;
103
- readonly jsType: string;
104
- };
105
96
  };
106
97
  export declare const dataTypes: {
107
98
  readonly text: "pg/text@1";
@@ -113,7 +104,6 @@ export declare const dataTypes: {
113
104
  readonly timestamp: "pg/timestamp@1";
114
105
  readonly timestamptz: "pg/timestamptz@1";
115
106
  readonly bool: "pg/bool@1";
116
- readonly enum: "pg/enum@1";
117
107
  };
118
108
  export type CodecTypes = typeof codecs.CodecTypes;
119
109
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"codecs.d.ts","sourceRoot":"","sources":["../../src/core/codecs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA6LH,QAAA,MAAM,MAAM;;;;;;;;;;sGAUe,CAAC;AAG5B,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA0B,CAAC;AACxD,eAAO,MAAM,SAAS;;;;;;;;;;;CAAmB,CAAC;AAG1C,MAAM,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,UAAU,CAAC"}
1
+ {"version":3,"file":"codecs.d.ts","sourceRoot":"","sources":["../../src/core/codecs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsKH,QAAA,MAAM,MAAM;;;;;;;;;wGASe,CAAC;AAG5B,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA0B,CAAC;AACxD,eAAO,MAAM,SAAS;;;;;;;;;;CAAmB,CAAC;AAG1C,MAAM,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"control-adapter.d.ts","sourceRoot":"","sources":["../../src/core/control-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAMV,WAAW,EAGZ,MAAM,kCAAkC,CAAC;AAE1C;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB,CAAC,UAAU,CAAC;IAC1E,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAU;IACnC,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IACxC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAG,UAAU,CAAU;IAEtC;;;;;;;;;;;OAWG;IACG,UAAU,CACd,MAAM,EAAE,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,EAChD,WAAW,CAAC,EAAE,OAAO,EACrB,MAAM,SAAW,GAChB,OAAO,CAAC,WAAW,CAAC;IAyWvB;;OAEG;YACW,kBAAkB;CASjC"}
1
+ {"version":3,"file":"control-adapter.d.ts","sourceRoot":"","sources":["../../src/core/control-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAKV,WAAW,EAGZ,MAAM,kCAAkC,CAAC;AAE1C;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB,CAAC,UAAU,CAAC;IAC1E,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAU;IACnC,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IACxC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAG,UAAU,CAAU;IAEtC;;;;;;;;;;;OAWG;IACG,UAAU,CACd,MAAM,EAAE,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,EAChD,WAAW,CAAC,EAAE,OAAO,EACrB,MAAM,SAAW,GAChB,OAAO,CAAC,WAAW,CAAC;IAkUvB;;OAEG;YACW,kBAAkB;CASjC"}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createPostgresAdapter
3
- } from "../chunk-NLY5NYN4.js";
4
- import "../chunk-XXBV77N7.js";
3
+ } from "../chunk-T6S3A6VT.js";
4
+ import "../chunk-J3XSOAM2.js";
5
5
  export {
6
6
  createPostgresAdapter
7
7
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  dataTypes
3
- } from "../chunk-XXBV77N7.js";
3
+ } from "../chunk-J3XSOAM2.js";
4
4
  export {
5
5
  dataTypes
6
6
  };
@@ -14,12 +14,4 @@ export declare const float8Column: ColumnTypeDescriptor;
14
14
  export declare const timestampColumn: ColumnTypeDescriptor;
15
15
  export declare const timestamptzColumn: ColumnTypeDescriptor;
16
16
  export declare const boolColumn: ColumnTypeDescriptor;
17
- /**
18
- * Create a column type descriptor for a Postgres enum type.
19
- * @param enumName The name of the enum type (must match the enum defined in the contract)
20
- * @returns A ColumnTypeDescriptor for the enum column
21
- */
22
- export declare function enumColumn<T extends string>(enumName: T): ColumnTypeDescriptor & {
23
- nativeType: T;
24
- };
25
17
  //# sourceMappingURL=column-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"column-types.d.ts","sourceRoot":"","sources":["../../src/exports/column-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAE5E,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC;AAEX,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC;AAEX,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC;AAEX,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC;AAEX,eAAO,MAAM,YAAY,EAAE,oBAGjB,CAAC;AAEX,eAAO,MAAM,YAAY,EAAE,oBAGjB,CAAC;AAEX,eAAO,MAAM,eAAe,EAAE,oBAGpB,CAAC;AAEX,eAAO,MAAM,iBAAiB,EAAE,oBAGtB,CAAC;AAEX,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,QAAQ,EAAE,CAAC,GACV,oBAAoB,GAAG;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAK1C"}
1
+ {"version":3,"file":"column-types.d.ts","sourceRoot":"","sources":["../../src/exports/column-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAE5E,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC;AAEX,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC;AAEX,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC;AAEX,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC;AAEX,eAAO,MAAM,YAAY,EAAE,oBAGjB,CAAC;AAEX,eAAO,MAAM,YAAY,EAAE,oBAGjB,CAAC;AAEX,eAAO,MAAM,eAAe,EAAE,oBAGpB,CAAC;AAEX,eAAO,MAAM,iBAAiB,EAAE,oBAGtB,CAAC;AAEX,eAAO,MAAM,UAAU,EAAE,oBAGf,CAAC"}
@@ -35,15 +35,8 @@ var boolColumn = {
35
35
  codecId: "pg/bool@1",
36
36
  nativeType: "bool"
37
37
  };
38
- function enumColumn(enumName) {
39
- return {
40
- codecId: "pg/enum@1",
41
- nativeType: enumName
42
- };
43
- }
44
38
  export {
45
39
  boolColumn,
46
- enumColumn,
47
40
  float4Column,
48
41
  float8Column,
49
42
  int2Column,
@@ -1 +1 @@
1
- {"version":3,"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.\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';\n\nexport const textColumn: ColumnTypeDescriptor = {\n codecId: 'pg/text@1',\n nativeType: 'text',\n} as const;\n\nexport const int4Column: ColumnTypeDescriptor = {\n codecId: 'pg/int4@1',\n nativeType: 'int4',\n} as const;\n\nexport const int2Column: ColumnTypeDescriptor = {\n codecId: 'pg/int2@1',\n nativeType: 'int2',\n} as const;\n\nexport const int8Column: ColumnTypeDescriptor = {\n codecId: 'pg/int8@1',\n nativeType: 'int8',\n} as const;\n\nexport const float4Column: ColumnTypeDescriptor = {\n codecId: 'pg/float4@1',\n nativeType: 'float4',\n} as const;\n\nexport const float8Column: ColumnTypeDescriptor = {\n codecId: 'pg/float8@1',\n nativeType: 'float8',\n} as const;\n\nexport const timestampColumn: ColumnTypeDescriptor = {\n codecId: 'pg/timestamp@1',\n nativeType: 'timestamp',\n} as const;\n\nexport const timestamptzColumn: ColumnTypeDescriptor = {\n codecId: 'pg/timestamptz@1',\n nativeType: 'timestamptz',\n} as const;\n\nexport const boolColumn: ColumnTypeDescriptor = {\n codecId: 'pg/bool@1',\n nativeType: 'bool',\n} as const;\n\n/**\n * Create a column type descriptor for a Postgres enum type.\n * @param enumName The name of the enum type (must match the enum defined in the contract)\n * @returns A ColumnTypeDescriptor for the enum column\n */\nexport function enumColumn<T extends string>(\n enumName: T,\n): ColumnTypeDescriptor & { nativeType: T } {\n return {\n codecId: 'pg/enum@1',\n nativeType: enumName,\n };\n}\n"],"mappings":";AASO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,eAAqC;AAAA,EAChD,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,eAAqC;AAAA,EAChD,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,kBAAwC;AAAA,EACnD,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,oBAA0C;AAAA,EACrD,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;AAOO,SAAS,WACd,UAC0C;AAC1C,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AACF;","names":[]}
1
+ {"version":3,"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.\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';\n\nexport const textColumn: ColumnTypeDescriptor = {\n codecId: 'pg/text@1',\n nativeType: 'text',\n} as const;\n\nexport const int4Column: ColumnTypeDescriptor = {\n codecId: 'pg/int4@1',\n nativeType: 'int4',\n} as const;\n\nexport const int2Column: ColumnTypeDescriptor = {\n codecId: 'pg/int2@1',\n nativeType: 'int2',\n} as const;\n\nexport const int8Column: ColumnTypeDescriptor = {\n codecId: 'pg/int8@1',\n nativeType: 'int8',\n} as const;\n\nexport const float4Column: ColumnTypeDescriptor = {\n codecId: 'pg/float4@1',\n nativeType: 'float4',\n} as const;\n\nexport const float8Column: ColumnTypeDescriptor = {\n codecId: 'pg/float8@1',\n nativeType: 'float8',\n} as const;\n\nexport const timestampColumn: ColumnTypeDescriptor = {\n codecId: 'pg/timestamp@1',\n nativeType: 'timestamp',\n} as const;\n\nexport const timestamptzColumn: ColumnTypeDescriptor = {\n codecId: 'pg/timestamptz@1',\n nativeType: 'timestamptz',\n} as const;\n\nexport const boolColumn: ColumnTypeDescriptor = {\n codecId: 'pg/bool@1',\n nativeType: 'bool',\n} as const;\n"],"mappings":";AASO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,eAAqC;AAAA,EAChD,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,eAAqC;AAAA,EAChD,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,kBAAwC;AAAA,EACnD,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,oBAA0C;AAAA,EACrD,SAAS;AAAA,EACT,YAAY;AACd;AAEO,IAAM,aAAmC;AAAA,EAC9C,SAAS;AAAA,EACT,YAAY;AACd;","names":[]}
@@ -235,35 +235,6 @@ var PostgresControlAdapter = class {
235
235
  indexes
236
236
  };
237
237
  }
238
- const enumsResult = await driver.query(
239
- `SELECT
240
- t.typname AS enum_name,
241
- e.enumlabel AS enum_value,
242
- e.enumsortorder AS sort_order
243
- FROM pg_type t
244
- JOIN pg_enum e ON t.oid = e.enumtypid
245
- JOIN pg_namespace n ON t.typnamespace = n.oid
246
- WHERE n.nspname = $1
247
- AND t.typtype = 'e'
248
- ORDER BY t.typname, e.enumsortorder`,
249
- [schema]
250
- );
251
- const sortedEnumRows = [...enumsResult.rows].sort((a, b) => a.sort_order - b.sort_order);
252
- const enums = {};
253
- for (const row of sortedEnumRows) {
254
- let enumEntry = enums[row.enum_name];
255
- if (!enumEntry) {
256
- enumEntry = {
257
- name: row.enum_name,
258
- values: []
259
- };
260
- enums[row.enum_name] = enumEntry;
261
- }
262
- enumEntry.values.push(row.enum_value);
263
- }
264
- for (const enumIR of Object.values(enums)) {
265
- enumIR.values = Object.freeze(enumIR.values);
266
- }
267
238
  const extensionsResult = await driver.query(
268
239
  `SELECT extname
269
240
  FROM pg_extension
@@ -279,7 +250,6 @@ var PostgresControlAdapter = class {
279
250
  };
280
251
  return {
281
252
  tables,
282
- enums,
283
253
  extensions,
284
254
  annotations
285
255
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/control-adapter.ts","../../src/exports/control.ts"],"sourcesContent":["import type { ControlDriverInstance } from '@prisma-next/core-control-plane/types';\nimport type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter';\nimport type {\n PrimaryKey,\n SqlColumnIR,\n SqlEnumIR,\n SqlForeignKeyIR,\n SqlIndexIR,\n SqlSchemaIR,\n SqlTableIR,\n SqlUniqueIR,\n} from '@prisma-next/sql-schema-ir/types';\n\n/**\n * Postgres control plane adapter for control-plane operations like introspection.\n * Provides target-specific implementations for control-plane domain actions.\n */\nexport class PostgresControlAdapter implements SqlControlAdapter<'postgres'> {\n readonly familyId = 'sql' as const;\n readonly targetId = 'postgres' as const;\n /**\n * @deprecated Use targetId instead\n */\n readonly target = 'postgres' as const;\n\n /**\n * Introspects a Postgres database schema and returns a raw SqlSchemaIR.\n *\n * This is a pure schema discovery operation that queries the Postgres catalog\n * and returns the schema structure without type mapping or contract enrichment.\n * Type mapping and enrichment are handled separately by enrichment helpers.\n *\n * @param driver - ControlDriverInstance<'sql', 'postgres'> instance for executing queries\n * @param contractIR - Optional contract IR for contract-guided introspection (filtering, optimization)\n * @param schema - Schema name to introspect (defaults to 'public')\n * @returns Promise resolving to SqlSchemaIR representing the live database schema\n */\n async introspect(\n driver: ControlDriverInstance<'sql', 'postgres'>,\n _contractIR?: unknown,\n schema = 'public',\n ): Promise<SqlSchemaIR> {\n // Query tables\n const tablesResult = await driver.query<{\n table_name: string;\n }>(\n `SELECT table_name\n FROM information_schema.tables\n WHERE table_schema = $1\n AND table_type = 'BASE TABLE'\n ORDER BY table_name`,\n [schema],\n );\n\n const tables: Record<string, SqlTableIR> = {};\n\n for (const tableRow of tablesResult.rows) {\n const tableName = tableRow.table_name;\n\n // Query columns for this table\n const columnsResult = await driver.query<{\n column_name: string;\n data_type: string;\n udt_name: string;\n is_nullable: string;\n character_maximum_length: number | null;\n numeric_precision: number | null;\n numeric_scale: number | null;\n }>(\n `SELECT\n column_name,\n data_type,\n udt_name,\n is_nullable,\n character_maximum_length,\n numeric_precision,\n numeric_scale\n FROM information_schema.columns\n WHERE table_schema = $1\n AND table_name = $2\n ORDER BY ordinal_position`,\n [schema, tableName],\n );\n\n const columns: Record<string, SqlColumnIR> = {};\n for (const colRow of columnsResult.rows) {\n // Build native type string from catalog data\n let nativeType = colRow.udt_name;\n if (colRow.data_type === 'character varying' || colRow.data_type === 'character') {\n if (colRow.character_maximum_length) {\n nativeType = `${colRow.data_type}(${colRow.character_maximum_length})`;\n } else {\n nativeType = colRow.data_type;\n }\n } else if (colRow.data_type === 'numeric' || colRow.data_type === 'decimal') {\n if (colRow.numeric_precision && colRow.numeric_scale !== null) {\n nativeType = `${colRow.data_type}(${colRow.numeric_precision},${colRow.numeric_scale})`;\n } else if (colRow.numeric_precision) {\n nativeType = `${colRow.data_type}(${colRow.numeric_precision})`;\n } else {\n nativeType = colRow.data_type;\n }\n } else {\n nativeType = colRow.udt_name || colRow.data_type;\n }\n\n columns[colRow.column_name] = {\n name: colRow.column_name,\n nativeType,\n nullable: colRow.is_nullable === 'YES',\n };\n }\n\n // Query primary key\n const pkResult = await driver.query<{\n constraint_name: string;\n column_name: string;\n ordinal_position: number;\n }>(\n `SELECT\n tc.constraint_name,\n kcu.column_name,\n kcu.ordinal_position\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n AND tc.table_name = kcu.table_name\n WHERE tc.table_schema = $1\n AND tc.table_name = $2\n AND tc.constraint_type = 'PRIMARY KEY'\n ORDER BY kcu.ordinal_position`,\n [schema, tableName],\n );\n\n const primaryKeyColumns = pkResult.rows\n .sort((a, b) => a.ordinal_position - b.ordinal_position)\n .map((row) => row.column_name);\n const primaryKey: PrimaryKey | undefined =\n primaryKeyColumns.length > 0\n ? {\n columns: primaryKeyColumns,\n ...(pkResult.rows[0]?.constraint_name\n ? { name: pkResult.rows[0].constraint_name }\n : {}),\n }\n : undefined;\n\n // Query foreign keys\n const fkResult = await driver.query<{\n constraint_name: string;\n column_name: string;\n ordinal_position: number;\n referenced_table_schema: string;\n referenced_table_name: string;\n referenced_column_name: string;\n }>(\n `SELECT\n tc.constraint_name,\n kcu.column_name,\n kcu.ordinal_position,\n ccu.table_schema AS referenced_table_schema,\n ccu.table_name AS referenced_table_name,\n ccu.column_name AS referenced_column_name\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n AND tc.table_name = kcu.table_name\n JOIN information_schema.constraint_column_usage ccu\n ON ccu.constraint_name = tc.constraint_name\n AND ccu.table_schema = tc.table_schema\n WHERE tc.table_schema = $1\n AND tc.table_name = $2\n AND tc.constraint_type = 'FOREIGN KEY'\n ORDER BY tc.constraint_name, kcu.ordinal_position`,\n [schema, tableName],\n );\n\n const foreignKeysMap = new Map<\n string,\n {\n columns: string[];\n referencedTable: string;\n referencedColumns: string[];\n name: string;\n }\n >();\n for (const fkRow of fkResult.rows) {\n const existing = foreignKeysMap.get(fkRow.constraint_name);\n if (existing) {\n // Multi-column FK - add column\n existing.columns.push(fkRow.column_name);\n existing.referencedColumns.push(fkRow.referenced_column_name);\n } else {\n foreignKeysMap.set(fkRow.constraint_name, {\n columns: [fkRow.column_name],\n referencedTable: fkRow.referenced_table_name,\n referencedColumns: [fkRow.referenced_column_name],\n name: fkRow.constraint_name,\n });\n }\n }\n const foreignKeys: readonly SqlForeignKeyIR[] = Array.from(foreignKeysMap.values()).map(\n (fk) => ({\n columns: Object.freeze([...fk.columns]) as readonly string[],\n referencedTable: fk.referencedTable,\n referencedColumns: Object.freeze([...fk.referencedColumns]) as readonly string[],\n name: fk.name,\n }),\n );\n\n // Query unique constraints (excluding PK)\n const uniqueResult = await driver.query<{\n constraint_name: string;\n column_name: string;\n ordinal_position: number;\n }>(\n `SELECT\n tc.constraint_name,\n kcu.column_name,\n kcu.ordinal_position\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n AND tc.table_name = kcu.table_name\n WHERE tc.table_schema = $1\n AND tc.table_name = $2\n AND tc.constraint_type = 'UNIQUE'\n AND tc.constraint_name NOT IN (\n SELECT constraint_name\n FROM information_schema.table_constraints\n WHERE table_schema = $1\n AND table_name = $2\n AND constraint_type = 'PRIMARY KEY'\n )\n ORDER BY tc.constraint_name, kcu.ordinal_position`,\n [schema, tableName],\n );\n\n const uniquesMap = new Map<\n string,\n {\n columns: string[];\n name: string;\n }\n >();\n for (const uniqueRow of uniqueResult.rows) {\n const existing = uniquesMap.get(uniqueRow.constraint_name);\n if (existing) {\n existing.columns.push(uniqueRow.column_name);\n } else {\n uniquesMap.set(uniqueRow.constraint_name, {\n columns: [uniqueRow.column_name],\n name: uniqueRow.constraint_name,\n });\n }\n }\n const uniques: readonly SqlUniqueIR[] = Array.from(uniquesMap.values()).map((uq) => ({\n columns: Object.freeze([...uq.columns]) as readonly string[],\n name: uq.name,\n }));\n\n // Query indexes (excluding PK and unique constraints)\n const indexResult = await driver.query<{\n indexname: string;\n indisunique: boolean;\n attname: string;\n attnum: number;\n }>(\n `SELECT\n i.indexname,\n ix.indisunique,\n a.attname,\n a.attnum\n FROM pg_indexes i\n JOIN pg_class ic ON ic.relname = i.indexname\n JOIN pg_namespace ins ON ins.oid = ic.relnamespace AND ins.nspname = $1\n JOIN pg_index ix ON ix.indexrelid = ic.oid\n JOIN pg_class t ON t.oid = ix.indrelid\n JOIN pg_namespace tn ON tn.oid = t.relnamespace AND tn.nspname = $1\n LEFT JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey) AND a.attnum > 0\n WHERE i.schemaname = $1\n AND i.tablename = $2\n AND NOT EXISTS (\n SELECT 1\n FROM information_schema.table_constraints tc\n WHERE tc.table_schema = $1\n AND tc.table_name = $2\n AND tc.constraint_name = i.indexname\n )\n ORDER BY i.indexname, a.attnum`,\n [schema, tableName],\n );\n\n const indexesMap = new Map<\n string,\n {\n columns: string[];\n name: string;\n unique: boolean;\n }\n >();\n for (const idxRow of indexResult.rows) {\n // Skip rows where attname is null (system columns or invalid attnum)\n if (!idxRow.attname) {\n continue;\n }\n const existing = indexesMap.get(idxRow.indexname);\n if (existing) {\n existing.columns.push(idxRow.attname);\n } else {\n indexesMap.set(idxRow.indexname, {\n columns: [idxRow.attname],\n name: idxRow.indexname,\n unique: idxRow.indisunique,\n });\n }\n }\n const indexes: readonly SqlIndexIR[] = Array.from(indexesMap.values()).map((idx) => ({\n columns: Object.freeze([...idx.columns]) as readonly string[],\n name: idx.name,\n unique: idx.unique,\n }));\n\n tables[tableName] = {\n name: tableName,\n columns,\n ...(primaryKey ? { primaryKey } : {}),\n foreignKeys,\n uniques,\n indexes,\n };\n }\n\n // Query enum types\n const enumsResult = await driver.query<{\n enum_name: string;\n enum_value: string;\n sort_order: number;\n }>(\n `SELECT\n t.typname AS enum_name,\n e.enumlabel AS enum_value,\n e.enumsortorder AS sort_order\n FROM pg_type t\n JOIN pg_enum e ON t.oid = e.enumtypid\n JOIN pg_namespace n ON t.typnamespace = n.oid\n WHERE n.nspname = $1\n AND t.typtype = 'e'\n ORDER BY t.typname, e.enumsortorder`,\n [schema],\n );\n\n // Sort enum values by sort_order, then group by enum name\n const sortedEnumRows = [...enumsResult.rows].sort((a, b) => a.sort_order - b.sort_order);\n const enums: Record<string, SqlEnumIR> = {};\n for (const row of sortedEnumRows) {\n let enumEntry = enums[row.enum_name];\n if (!enumEntry) {\n enumEntry = {\n name: row.enum_name,\n values: [],\n };\n enums[row.enum_name] = enumEntry;\n }\n (enumEntry.values as string[]).push(row.enum_value);\n }\n // Freeze values arrays\n for (const enumIR of Object.values(enums)) {\n (enumIR as { values: readonly string[] }).values = Object.freeze(enumIR.values);\n }\n\n // Query extensions\n const extensionsResult = await driver.query<{\n extname: string;\n }>(\n `SELECT extname\n FROM pg_extension\n ORDER BY extname`,\n [],\n );\n\n const extensions = extensionsResult.rows.map((row) => row.extname);\n\n // Build annotations with Postgres-specific metadata\n const annotations = {\n pg: {\n schema,\n version: await this.getPostgresVersion(driver),\n },\n };\n\n return {\n tables,\n enums,\n extensions,\n annotations,\n };\n }\n\n /**\n * Gets the Postgres version from the database.\n */\n private async getPostgresVersion(\n driver: ControlDriverInstance<'sql', 'postgres'>,\n ): Promise<string> {\n const result = await driver.query<{ version: string }>('SELECT version() AS version', []);\n const versionString = result.rows[0]?.version ?? '';\n // Extract version number from \"PostgreSQL 15.1 ...\" format\n const match = versionString.match(/PostgreSQL (\\d+\\.\\d+)/);\n return match?.[1] ?? 'unknown';\n }\n}\n","import type { ControlAdapterDescriptor } from '@prisma-next/core-control-plane/types';\nimport type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter';\nimport { PostgresControlAdapter } from '../core/control-adapter';\nimport { postgresAdapterDescriptorMeta } from '../core/descriptor-meta';\n\n/**\n * Postgres adapter descriptor for CLI config.\n */\nconst postgresAdapterDescriptor: ControlAdapterDescriptor<\n 'sql',\n 'postgres',\n SqlControlAdapter<'postgres'>\n> = {\n ...postgresAdapterDescriptorMeta,\n create(): SqlControlAdapter<'postgres'> {\n return new PostgresControlAdapter();\n },\n};\n\nexport default postgresAdapterDescriptor;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/core/control-adapter.ts","../../src/exports/control.ts"],"sourcesContent":["import type { ControlDriverInstance } from '@prisma-next/core-control-plane/types';\nimport type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter';\nimport type {\n PrimaryKey,\n SqlColumnIR,\n SqlForeignKeyIR,\n SqlIndexIR,\n SqlSchemaIR,\n SqlTableIR,\n SqlUniqueIR,\n} from '@prisma-next/sql-schema-ir/types';\n\n/**\n * Postgres control plane adapter for control-plane operations like introspection.\n * Provides target-specific implementations for control-plane domain actions.\n */\nexport class PostgresControlAdapter implements SqlControlAdapter<'postgres'> {\n readonly familyId = 'sql' as const;\n readonly targetId = 'postgres' as const;\n /**\n * @deprecated Use targetId instead\n */\n readonly target = 'postgres' as const;\n\n /**\n * Introspects a Postgres database schema and returns a raw SqlSchemaIR.\n *\n * This is a pure schema discovery operation that queries the Postgres catalog\n * and returns the schema structure without type mapping or contract enrichment.\n * Type mapping and enrichment are handled separately by enrichment helpers.\n *\n * @param driver - ControlDriverInstance<'sql', 'postgres'> instance for executing queries\n * @param contractIR - Optional contract IR for contract-guided introspection (filtering, optimization)\n * @param schema - Schema name to introspect (defaults to 'public')\n * @returns Promise resolving to SqlSchemaIR representing the live database schema\n */\n async introspect(\n driver: ControlDriverInstance<'sql', 'postgres'>,\n _contractIR?: unknown,\n schema = 'public',\n ): Promise<SqlSchemaIR> {\n // Query tables\n const tablesResult = await driver.query<{\n table_name: string;\n }>(\n `SELECT table_name\n FROM information_schema.tables\n WHERE table_schema = $1\n AND table_type = 'BASE TABLE'\n ORDER BY table_name`,\n [schema],\n );\n\n const tables: Record<string, SqlTableIR> = {};\n\n for (const tableRow of tablesResult.rows) {\n const tableName = tableRow.table_name;\n\n // Query columns for this table\n const columnsResult = await driver.query<{\n column_name: string;\n data_type: string;\n udt_name: string;\n is_nullable: string;\n character_maximum_length: number | null;\n numeric_precision: number | null;\n numeric_scale: number | null;\n }>(\n `SELECT\n column_name,\n data_type,\n udt_name,\n is_nullable,\n character_maximum_length,\n numeric_precision,\n numeric_scale\n FROM information_schema.columns\n WHERE table_schema = $1\n AND table_name = $2\n ORDER BY ordinal_position`,\n [schema, tableName],\n );\n\n const columns: Record<string, SqlColumnIR> = {};\n for (const colRow of columnsResult.rows) {\n // Build native type string from catalog data\n let nativeType = colRow.udt_name;\n if (colRow.data_type === 'character varying' || colRow.data_type === 'character') {\n if (colRow.character_maximum_length) {\n nativeType = `${colRow.data_type}(${colRow.character_maximum_length})`;\n } else {\n nativeType = colRow.data_type;\n }\n } else if (colRow.data_type === 'numeric' || colRow.data_type === 'decimal') {\n if (colRow.numeric_precision && colRow.numeric_scale !== null) {\n nativeType = `${colRow.data_type}(${colRow.numeric_precision},${colRow.numeric_scale})`;\n } else if (colRow.numeric_precision) {\n nativeType = `${colRow.data_type}(${colRow.numeric_precision})`;\n } else {\n nativeType = colRow.data_type;\n }\n } else {\n nativeType = colRow.udt_name || colRow.data_type;\n }\n\n columns[colRow.column_name] = {\n name: colRow.column_name,\n nativeType,\n nullable: colRow.is_nullable === 'YES',\n };\n }\n\n // Query primary key\n const pkResult = await driver.query<{\n constraint_name: string;\n column_name: string;\n ordinal_position: number;\n }>(\n `SELECT\n tc.constraint_name,\n kcu.column_name,\n kcu.ordinal_position\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n AND tc.table_name = kcu.table_name\n WHERE tc.table_schema = $1\n AND tc.table_name = $2\n AND tc.constraint_type = 'PRIMARY KEY'\n ORDER BY kcu.ordinal_position`,\n [schema, tableName],\n );\n\n const primaryKeyColumns = pkResult.rows\n .sort((a, b) => a.ordinal_position - b.ordinal_position)\n .map((row) => row.column_name);\n const primaryKey: PrimaryKey | undefined =\n primaryKeyColumns.length > 0\n ? {\n columns: primaryKeyColumns,\n ...(pkResult.rows[0]?.constraint_name\n ? { name: pkResult.rows[0].constraint_name }\n : {}),\n }\n : undefined;\n\n // Query foreign keys\n const fkResult = await driver.query<{\n constraint_name: string;\n column_name: string;\n ordinal_position: number;\n referenced_table_schema: string;\n referenced_table_name: string;\n referenced_column_name: string;\n }>(\n `SELECT\n tc.constraint_name,\n kcu.column_name,\n kcu.ordinal_position,\n ccu.table_schema AS referenced_table_schema,\n ccu.table_name AS referenced_table_name,\n ccu.column_name AS referenced_column_name\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n AND tc.table_name = kcu.table_name\n JOIN information_schema.constraint_column_usage ccu\n ON ccu.constraint_name = tc.constraint_name\n AND ccu.table_schema = tc.table_schema\n WHERE tc.table_schema = $1\n AND tc.table_name = $2\n AND tc.constraint_type = 'FOREIGN KEY'\n ORDER BY tc.constraint_name, kcu.ordinal_position`,\n [schema, tableName],\n );\n\n const foreignKeysMap = new Map<\n string,\n {\n columns: string[];\n referencedTable: string;\n referencedColumns: string[];\n name: string;\n }\n >();\n for (const fkRow of fkResult.rows) {\n const existing = foreignKeysMap.get(fkRow.constraint_name);\n if (existing) {\n // Multi-column FK - add column\n existing.columns.push(fkRow.column_name);\n existing.referencedColumns.push(fkRow.referenced_column_name);\n } else {\n foreignKeysMap.set(fkRow.constraint_name, {\n columns: [fkRow.column_name],\n referencedTable: fkRow.referenced_table_name,\n referencedColumns: [fkRow.referenced_column_name],\n name: fkRow.constraint_name,\n });\n }\n }\n const foreignKeys: readonly SqlForeignKeyIR[] = Array.from(foreignKeysMap.values()).map(\n (fk) => ({\n columns: Object.freeze([...fk.columns]) as readonly string[],\n referencedTable: fk.referencedTable,\n referencedColumns: Object.freeze([...fk.referencedColumns]) as readonly string[],\n name: fk.name,\n }),\n );\n\n // Query unique constraints (excluding PK)\n const uniqueResult = await driver.query<{\n constraint_name: string;\n column_name: string;\n ordinal_position: number;\n }>(\n `SELECT\n tc.constraint_name,\n kcu.column_name,\n kcu.ordinal_position\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n AND tc.table_name = kcu.table_name\n WHERE tc.table_schema = $1\n AND tc.table_name = $2\n AND tc.constraint_type = 'UNIQUE'\n AND tc.constraint_name NOT IN (\n SELECT constraint_name\n FROM information_schema.table_constraints\n WHERE table_schema = $1\n AND table_name = $2\n AND constraint_type = 'PRIMARY KEY'\n )\n ORDER BY tc.constraint_name, kcu.ordinal_position`,\n [schema, tableName],\n );\n\n const uniquesMap = new Map<\n string,\n {\n columns: string[];\n name: string;\n }\n >();\n for (const uniqueRow of uniqueResult.rows) {\n const existing = uniquesMap.get(uniqueRow.constraint_name);\n if (existing) {\n existing.columns.push(uniqueRow.column_name);\n } else {\n uniquesMap.set(uniqueRow.constraint_name, {\n columns: [uniqueRow.column_name],\n name: uniqueRow.constraint_name,\n });\n }\n }\n const uniques: readonly SqlUniqueIR[] = Array.from(uniquesMap.values()).map((uq) => ({\n columns: Object.freeze([...uq.columns]) as readonly string[],\n name: uq.name,\n }));\n\n // Query indexes (excluding PK and unique constraints)\n const indexResult = await driver.query<{\n indexname: string;\n indisunique: boolean;\n attname: string;\n attnum: number;\n }>(\n `SELECT\n i.indexname,\n ix.indisunique,\n a.attname,\n a.attnum\n FROM pg_indexes i\n JOIN pg_class ic ON ic.relname = i.indexname\n JOIN pg_namespace ins ON ins.oid = ic.relnamespace AND ins.nspname = $1\n JOIN pg_index ix ON ix.indexrelid = ic.oid\n JOIN pg_class t ON t.oid = ix.indrelid\n JOIN pg_namespace tn ON tn.oid = t.relnamespace AND tn.nspname = $1\n LEFT JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey) AND a.attnum > 0\n WHERE i.schemaname = $1\n AND i.tablename = $2\n AND NOT EXISTS (\n SELECT 1\n FROM information_schema.table_constraints tc\n WHERE tc.table_schema = $1\n AND tc.table_name = $2\n AND tc.constraint_name = i.indexname\n )\n ORDER BY i.indexname, a.attnum`,\n [schema, tableName],\n );\n\n const indexesMap = new Map<\n string,\n {\n columns: string[];\n name: string;\n unique: boolean;\n }\n >();\n for (const idxRow of indexResult.rows) {\n // Skip rows where attname is null (system columns or invalid attnum)\n if (!idxRow.attname) {\n continue;\n }\n const existing = indexesMap.get(idxRow.indexname);\n if (existing) {\n existing.columns.push(idxRow.attname);\n } else {\n indexesMap.set(idxRow.indexname, {\n columns: [idxRow.attname],\n name: idxRow.indexname,\n unique: idxRow.indisunique,\n });\n }\n }\n const indexes: readonly SqlIndexIR[] = Array.from(indexesMap.values()).map((idx) => ({\n columns: Object.freeze([...idx.columns]) as readonly string[],\n name: idx.name,\n unique: idx.unique,\n }));\n\n tables[tableName] = {\n name: tableName,\n columns,\n ...(primaryKey ? { primaryKey } : {}),\n foreignKeys,\n uniques,\n indexes,\n };\n }\n\n // Query extensions\n const extensionsResult = await driver.query<{\n extname: string;\n }>(\n `SELECT extname\n FROM pg_extension\n ORDER BY extname`,\n [],\n );\n\n const extensions = extensionsResult.rows.map((row) => row.extname);\n\n // Build annotations with Postgres-specific metadata\n const annotations = {\n pg: {\n schema,\n version: await this.getPostgresVersion(driver),\n },\n };\n\n return {\n tables,\n extensions,\n annotations,\n };\n }\n\n /**\n * Gets the Postgres version from the database.\n */\n private async getPostgresVersion(\n driver: ControlDriverInstance<'sql', 'postgres'>,\n ): Promise<string> {\n const result = await driver.query<{ version: string }>('SELECT version() AS version', []);\n const versionString = result.rows[0]?.version ?? '';\n // Extract version number from \"PostgreSQL 15.1 ...\" format\n const match = versionString.match(/PostgreSQL (\\d+\\.\\d+)/);\n return match?.[1] ?? 'unknown';\n }\n}\n","import type { ControlAdapterDescriptor } from '@prisma-next/core-control-plane/types';\nimport type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter';\nimport { PostgresControlAdapter } from '../core/control-adapter';\nimport { postgresAdapterDescriptorMeta } from '../core/descriptor-meta';\n\n/**\n * Postgres adapter descriptor for CLI config.\n */\nconst postgresAdapterDescriptor: ControlAdapterDescriptor<\n 'sql',\n 'postgres',\n SqlControlAdapter<'postgres'>\n> = {\n ...postgresAdapterDescriptorMeta,\n create(): SqlControlAdapter<'postgres'> {\n return new PostgresControlAdapter();\n },\n};\n\nexport default postgresAdapterDescriptor;\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createPostgresAdapter
3
- } from "../chunk-NLY5NYN4.js";
4
- import "../chunk-XXBV77N7.js";
3
+ } from "../chunk-T6S3A6VT.js";
4
+ import "../chunk-J3XSOAM2.js";
5
5
  import {
6
6
  postgresAdapterDescriptorMeta
7
7
  } from "../chunk-HD5YISNQ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma-next/adapter-postgres",
3
- "version": "0.3.0-pr.90.2",
3
+ "version": "0.3.0-pr.91.1",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "files": [
@@ -9,17 +9,17 @@
9
9
  ],
10
10
  "dependencies": {
11
11
  "arktype": "^2.0.0",
12
- "@prisma-next/cli": "0.3.0-pr.90.2",
13
- "@prisma-next/contract": "0.3.0-pr.90.2",
14
- "@prisma-next/contract-authoring": "0.3.0-pr.90.2",
15
- "@prisma-next/core-execution-plane": "0.3.0-pr.90.2",
16
- "@prisma-next/family-sql": "0.3.0-pr.90.2",
17
- "@prisma-next/core-control-plane": "0.3.0-pr.90.2",
18
- "@prisma-next/sql-contract": "0.3.0-pr.90.2",
19
- "@prisma-next/sql-contract-ts": "0.3.0-pr.90.2",
20
- "@prisma-next/sql-operations": "0.3.0-pr.90.2",
21
- "@prisma-next/sql-relational-core": "0.3.0-pr.90.2",
22
- "@prisma-next/sql-schema-ir": "0.3.0-pr.90.2"
12
+ "@prisma-next/cli": "0.3.0-pr.91.1",
13
+ "@prisma-next/contract": "0.3.0-pr.91.1",
14
+ "@prisma-next/contract-authoring": "0.3.0-pr.91.1",
15
+ "@prisma-next/core-control-plane": "0.3.0-pr.91.1",
16
+ "@prisma-next/core-execution-plane": "0.3.0-pr.91.1",
17
+ "@prisma-next/family-sql": "0.3.0-pr.91.1",
18
+ "@prisma-next/sql-contract": "0.3.0-pr.91.1",
19
+ "@prisma-next/sql-operations": "0.3.0-pr.91.1",
20
+ "@prisma-next/sql-relational-core": "0.3.0-pr.91.1",
21
+ "@prisma-next/sql-contract-ts": "0.3.0-pr.91.1",
22
+ "@prisma-next/sql-schema-ir": "0.3.0-pr.91.1"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@vitest/coverage-v8": "4.0.16",
@@ -63,6 +63,6 @@
63
63
  "lint": "biome check . --error-on-warnings",
64
64
  "lint:fix": "biome check --write .",
65
65
  "lint:fix:unsafe": "biome check --write --unsafe .",
66
- "clean": "node ../../../../scripts/clean.mjs"
66
+ "clean": "rm -rf dist coverage .tmp-output"
67
67
  }
68
68
  }
@@ -174,29 +174,6 @@ const pgBoolCodec = codec<'pg/bool@1', boolean, boolean>({
174
174
  },
175
175
  });
176
176
 
177
- /**
178
- * Generic codec for Postgres enum types.
179
- * Enums are wire-encoded as strings and JS-typed as strings.
180
- * The specific enum type name is provided via nativeType in the storage column.
181
- */
182
- const pgEnumCodec = codec<'pg/enum@1', string, string>({
183
- typeId: 'pg/enum@1',
184
- targetTypes: [], // Enum types are dynamically determined by nativeType
185
- encode: (value) => value,
186
- decode: (wire) => wire,
187
- meta: {
188
- db: {
189
- sql: {
190
- postgres: {
191
- // The actual enum type name is specified per-column via nativeType.
192
- // This placeholder indicates it's an enum without specifying which one.
193
- nativeType: 'enum',
194
- },
195
- },
196
- },
197
- },
198
- });
199
-
200
177
  // Build codec definitions using the builder DSL
201
178
  const codecs = defineCodecs()
202
179
  .add('text', pgTextCodec)
@@ -207,8 +184,7 @@ const codecs = defineCodecs()
207
184
  .add('float8', pgFloat8Codec)
208
185
  .add('timestamp', pgTimestampCodec)
209
186
  .add('timestamptz', pgTimestamptzCodec)
210
- .add('bool', pgBoolCodec)
211
- .add('enum', pgEnumCodec);
187
+ .add('bool', pgBoolCodec);
212
188
 
213
189
  // Export derived structures directly from codecs builder
214
190
  export const codecDefinitions = codecs.codecDefinitions;
@@ -3,7 +3,6 @@ import type { SqlControlAdapter } from '@prisma-next/family-sql/control-adapter'
3
3
  import type {
4
4
  PrimaryKey,
5
5
  SqlColumnIR,
6
- SqlEnumIR,
7
6
  SqlForeignKeyIR,
8
7
  SqlIndexIR,
9
8
  SqlSchemaIR,
@@ -334,44 +333,6 @@ export class PostgresControlAdapter implements SqlControlAdapter<'postgres'> {
334
333
  };
335
334
  }
336
335
 
337
- // Query enum types
338
- const enumsResult = await driver.query<{
339
- enum_name: string;
340
- enum_value: string;
341
- sort_order: number;
342
- }>(
343
- `SELECT
344
- t.typname AS enum_name,
345
- e.enumlabel AS enum_value,
346
- e.enumsortorder AS sort_order
347
- FROM pg_type t
348
- JOIN pg_enum e ON t.oid = e.enumtypid
349
- JOIN pg_namespace n ON t.typnamespace = n.oid
350
- WHERE n.nspname = $1
351
- AND t.typtype = 'e'
352
- ORDER BY t.typname, e.enumsortorder`,
353
- [schema],
354
- );
355
-
356
- // Sort enum values by sort_order, then group by enum name
357
- const sortedEnumRows = [...enumsResult.rows].sort((a, b) => a.sort_order - b.sort_order);
358
- const enums: Record<string, SqlEnumIR> = {};
359
- for (const row of sortedEnumRows) {
360
- let enumEntry = enums[row.enum_name];
361
- if (!enumEntry) {
362
- enumEntry = {
363
- name: row.enum_name,
364
- values: [],
365
- };
366
- enums[row.enum_name] = enumEntry;
367
- }
368
- (enumEntry.values as string[]).push(row.enum_value);
369
- }
370
- // Freeze values arrays
371
- for (const enumIR of Object.values(enums)) {
372
- (enumIR as { values: readonly string[] }).values = Object.freeze(enumIR.values);
373
- }
374
-
375
336
  // Query extensions
376
337
  const extensionsResult = await driver.query<{
377
338
  extname: string;
@@ -394,7 +355,6 @@ export class PostgresControlAdapter implements SqlControlAdapter<'postgres'> {
394
355
 
395
356
  return {
396
357
  tables,
397
- enums,
398
358
  extensions,
399
359
  annotations,
400
360
  };
@@ -51,17 +51,3 @@ export const boolColumn: ColumnTypeDescriptor = {
51
51
  codecId: 'pg/bool@1',
52
52
  nativeType: 'bool',
53
53
  } as const;
54
-
55
- /**
56
- * Create a column type descriptor for a Postgres enum type.
57
- * @param enumName The name of the enum type (must match the enum defined in the contract)
58
- * @returns A ColumnTypeDescriptor for the enum column
59
- */
60
- export function enumColumn<T extends string>(
61
- enumName: T,
62
- ): ColumnTypeDescriptor & { nativeType: T } {
63
- return {
64
- codecId: 'pg/enum@1',
65
- nativeType: enumName,
66
- };
67
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/codecs.ts"],"sourcesContent":["/**\n * Unified codec definitions for Postgres adapter.\n *\n * This file contains a single source of truth for all codec information:\n * - Scalar names\n * - Type IDs\n * - Codec implementations (runtime)\n * - Type information (compile-time)\n *\n * This structure is used both at runtime (to populate the registry) and\n * at compile time (to derive CodecTypes).\n */\n\nimport { codec, defineCodecs } from '@prisma-next/sql-relational-core/ast';\n\n// Create individual codec instances\nconst pgTextCodec = codec({\n typeId: 'pg/text@1',\n targetTypes: ['text'],\n encode: (value: string): string => value,\n decode: (wire: string): string => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'text',\n },\n },\n },\n },\n});\n\nconst pgInt4Codec = codec<'pg/int4@1', number, number>({\n typeId: 'pg/int4@1',\n targetTypes: ['int4'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'integer',\n },\n },\n },\n },\n});\n\nconst pgInt2Codec = codec<'pg/int2@1', number, number>({\n typeId: 'pg/int2@1',\n targetTypes: ['int2'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'smallint',\n },\n },\n },\n },\n});\n\nconst pgInt8Codec = codec<'pg/int8@1', number, number>({\n typeId: 'pg/int8@1',\n targetTypes: ['int8'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'bigint',\n },\n },\n },\n },\n});\n\nconst pgFloat4Codec = codec<'pg/float4@1', number, number>({\n typeId: 'pg/float4@1',\n targetTypes: ['float4'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'real',\n },\n },\n },\n },\n});\n\nconst pgFloat8Codec = codec<'pg/float8@1', number, number>({\n typeId: 'pg/float8@1',\n targetTypes: ['float8'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'double precision',\n },\n },\n },\n },\n});\n\nconst pgTimestampCodec = codec<'pg/timestamp@1', string | Date, string>({\n typeId: 'pg/timestamp@1',\n targetTypes: ['timestamp'],\n encode: (value: string | Date): string => {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'string') return value;\n return String(value);\n },\n decode: (wire: string | Date): string => {\n if (typeof wire === 'string') return wire;\n if (wire instanceof Date) return wire.toISOString();\n return String(wire);\n },\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'timestamp without time zone',\n },\n },\n },\n },\n});\n\nconst pgTimestamptzCodec = codec<'pg/timestamptz@1', string | Date, string>({\n typeId: 'pg/timestamptz@1',\n targetTypes: ['timestamptz'],\n encode: (value: string | Date): string => {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'string') return value;\n return String(value);\n },\n decode: (wire: string | Date): string => {\n if (typeof wire === 'string') return wire;\n if (wire instanceof Date) return wire.toISOString();\n return String(wire);\n },\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'timestamp with time zone',\n },\n },\n },\n },\n});\n\nconst pgBoolCodec = codec<'pg/bool@1', boolean, boolean>({\n typeId: 'pg/bool@1',\n targetTypes: ['bool'],\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n nativeType: 'boolean',\n },\n },\n },\n },\n});\n\n/**\n * Generic codec for Postgres enum types.\n * Enums are wire-encoded as strings and JS-typed as strings.\n * The specific enum type name is provided via nativeType in the storage column.\n */\nconst pgEnumCodec = codec<'pg/enum@1', string, string>({\n typeId: 'pg/enum@1',\n targetTypes: [], // Enum types are dynamically determined by nativeType\n encode: (value) => value,\n decode: (wire) => wire,\n meta: {\n db: {\n sql: {\n postgres: {\n // The actual enum type name is specified per-column via nativeType.\n // This placeholder indicates it's an enum without specifying which one.\n nativeType: 'enum',\n },\n },\n },\n },\n});\n\n// Build codec definitions using the builder DSL\nconst codecs = defineCodecs()\n .add('text', pgTextCodec)\n .add('int4', pgInt4Codec)\n .add('int2', pgInt2Codec)\n .add('int8', pgInt8Codec)\n .add('float4', pgFloat4Codec)\n .add('float8', pgFloat8Codec)\n .add('timestamp', pgTimestampCodec)\n .add('timestamptz', pgTimestamptzCodec)\n .add('bool', pgBoolCodec)\n .add('enum', pgEnumCodec);\n\n// Export derived structures directly from codecs builder\nexport const codecDefinitions = codecs.codecDefinitions;\nexport const dataTypes = codecs.dataTypes;\n\n// Export types derived from codecs builder\nexport type CodecTypes = typeof codecs.CodecTypes;\n"],"mappings":"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","names":[]}