@prisma-next/adapter-postgres 0.3.0-dev.6 → 0.3.0-dev.64

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 (91) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +64 -2
  3. package/dist/adapter-DtehReRR.mjs +271 -0
  4. package/dist/adapter-DtehReRR.mjs.map +1 -0
  5. package/dist/adapter.d.mts +23 -0
  6. package/dist/adapter.d.mts.map +1 -0
  7. package/dist/adapter.mjs +5 -0
  8. package/dist/codec-ids-Bsm9c7ns.mjs +29 -0
  9. package/dist/codec-ids-Bsm9c7ns.mjs.map +1 -0
  10. package/dist/codec-types.d.mts +141 -0
  11. package/dist/codec-types.d.mts.map +1 -0
  12. package/dist/codec-types.mjs +4 -0
  13. package/dist/codecs-BfC_5c-4.mjs +207 -0
  14. package/dist/codecs-BfC_5c-4.mjs.map +1 -0
  15. package/dist/column-types.d.mts +110 -0
  16. package/dist/column-types.d.mts.map +1 -0
  17. package/dist/column-types.mjs +180 -0
  18. package/dist/column-types.mjs.map +1 -0
  19. package/dist/control.d.mts +111 -0
  20. package/dist/control.d.mts.map +1 -0
  21. package/dist/control.mjs +463 -0
  22. package/dist/control.mjs.map +1 -0
  23. package/dist/descriptor-meta-ilnFI7bx.mjs +921 -0
  24. package/dist/descriptor-meta-ilnFI7bx.mjs.map +1 -0
  25. package/dist/runtime.d.mts +19 -0
  26. package/dist/runtime.d.mts.map +1 -0
  27. package/dist/runtime.mjs +85 -0
  28. package/dist/runtime.mjs.map +1 -0
  29. package/dist/sql-utils-CSfAGEwF.mjs +78 -0
  30. package/dist/sql-utils-CSfAGEwF.mjs.map +1 -0
  31. package/dist/types-CXO7EB60.d.mts +19 -0
  32. package/dist/types-CXO7EB60.d.mts.map +1 -0
  33. package/dist/types.d.mts +2 -0
  34. package/dist/types.mjs +1 -0
  35. package/package.json +37 -46
  36. package/src/core/adapter.ts +139 -28
  37. package/src/core/codec-ids.ts +28 -0
  38. package/src/core/codecs.ts +325 -23
  39. package/src/core/control-adapter.ts +400 -178
  40. package/src/core/default-normalizer.ts +90 -0
  41. package/src/core/descriptor-meta.ts +221 -9
  42. package/src/core/enum-control-hooks.ts +735 -0
  43. package/src/core/json-schema-type-expression.ts +131 -0
  44. package/src/core/json-schema-validator.ts +53 -0
  45. package/src/core/parameterized-types.ts +118 -0
  46. package/src/core/sql-utils.ts +111 -0
  47. package/src/core/standard-schema.ts +71 -0
  48. package/src/exports/codec-types.ts +73 -1
  49. package/src/exports/column-types.ts +233 -9
  50. package/src/exports/control.ts +16 -9
  51. package/src/exports/runtime.ts +61 -18
  52. package/dist/chunk-HD5YISNQ.js +0 -47
  53. package/dist/chunk-HD5YISNQ.js.map +0 -1
  54. package/dist/chunk-J3XSOAM2.js +0 -162
  55. package/dist/chunk-J3XSOAM2.js.map +0 -1
  56. package/dist/chunk-T6S3A6VT.js +0 -301
  57. package/dist/chunk-T6S3A6VT.js.map +0 -1
  58. package/dist/core/adapter.d.ts +0 -19
  59. package/dist/core/adapter.d.ts.map +0 -1
  60. package/dist/core/codecs.d.ts +0 -110
  61. package/dist/core/codecs.d.ts.map +0 -1
  62. package/dist/core/control-adapter.d.ts +0 -33
  63. package/dist/core/control-adapter.d.ts.map +0 -1
  64. package/dist/core/descriptor-meta.d.ts +0 -72
  65. package/dist/core/descriptor-meta.d.ts.map +0 -1
  66. package/dist/core/types.d.ts +0 -16
  67. package/dist/core/types.d.ts.map +0 -1
  68. package/dist/exports/adapter.d.ts +0 -2
  69. package/dist/exports/adapter.d.ts.map +0 -1
  70. package/dist/exports/adapter.js +0 -8
  71. package/dist/exports/adapter.js.map +0 -1
  72. package/dist/exports/codec-types.d.ts +0 -11
  73. package/dist/exports/codec-types.d.ts.map +0 -1
  74. package/dist/exports/codec-types.js +0 -7
  75. package/dist/exports/codec-types.js.map +0 -1
  76. package/dist/exports/column-types.d.ts +0 -17
  77. package/dist/exports/column-types.d.ts.map +0 -1
  78. package/dist/exports/column-types.js +0 -49
  79. package/dist/exports/column-types.js.map +0 -1
  80. package/dist/exports/control.d.ts +0 -8
  81. package/dist/exports/control.d.ts.map +0 -1
  82. package/dist/exports/control.js +0 -279
  83. package/dist/exports/control.js.map +0 -1
  84. package/dist/exports/runtime.d.ts +0 -15
  85. package/dist/exports/runtime.d.ts.map +0 -1
  86. package/dist/exports/runtime.js +0 -20
  87. package/dist/exports/runtime.js.map +0 -1
  88. package/dist/exports/types.d.ts +0 -2
  89. package/dist/exports/types.d.ts.map +0 -1
  90. package/dist/exports/types.js +0 -1
  91. package/dist/exports/types.js.map +0 -1
@@ -0,0 +1,180 @@
1
+ import { C as SQL_CHAR_CODEC_ID, E as SQL_VARCHAR_CODEC_ID, _ as PG_TIMESTAMPTZ_CODEC_ID, a as PG_FLOAT4_CODEC_ID, b as PG_TIME_CODEC_ID, c as PG_INT2_CODEC_ID, d as PG_INTERVAL_CODEC_ID, g as PG_TEXT_CODEC_ID, h as PG_NUMERIC_CODEC_ID, i as PG_ENUM_CODEC_ID, l as PG_INT4_CODEC_ID, m as PG_JSON_CODEC_ID, n as PG_BOOL_CODEC_ID, o as PG_FLOAT8_CODEC_ID, p as PG_JSONB_CODEC_ID, t as PG_BIT_CODEC_ID, u as PG_INT8_CODEC_ID, v as PG_TIMESTAMP_CODEC_ID, x as PG_VARBIT_CODEC_ID, y as PG_TIMETZ_CODEC_ID } from "./codec-ids-Bsm9c7ns.mjs";
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
+ //#region src/exports/column-types.ts
31
+ const textColumn = {
32
+ codecId: PG_TEXT_CODEC_ID,
33
+ nativeType: "text"
34
+ };
35
+ function charColumn(length) {
36
+ return {
37
+ codecId: SQL_CHAR_CODEC_ID,
38
+ nativeType: "character",
39
+ typeParams: { length }
40
+ };
41
+ }
42
+ function varcharColumn(length) {
43
+ return {
44
+ codecId: SQL_VARCHAR_CODEC_ID,
45
+ nativeType: "character varying",
46
+ typeParams: { length }
47
+ };
48
+ }
49
+ const int4Column = {
50
+ codecId: PG_INT4_CODEC_ID,
51
+ nativeType: "int4"
52
+ };
53
+ const int2Column = {
54
+ codecId: PG_INT2_CODEC_ID,
55
+ nativeType: "int2"
56
+ };
57
+ const int8Column = {
58
+ codecId: PG_INT8_CODEC_ID,
59
+ nativeType: "int8"
60
+ };
61
+ const float4Column = {
62
+ codecId: PG_FLOAT4_CODEC_ID,
63
+ nativeType: "float4"
64
+ };
65
+ const float8Column = {
66
+ codecId: PG_FLOAT8_CODEC_ID,
67
+ nativeType: "float8"
68
+ };
69
+ function numericColumn(precision, scale) {
70
+ return {
71
+ codecId: PG_NUMERIC_CODEC_ID,
72
+ nativeType: "numeric",
73
+ typeParams: scale === void 0 ? { precision } : {
74
+ precision,
75
+ scale
76
+ }
77
+ };
78
+ }
79
+ const timestampColumn = {
80
+ codecId: PG_TIMESTAMP_CODEC_ID,
81
+ nativeType: "timestamp"
82
+ };
83
+ const timestamptzColumn = {
84
+ codecId: PG_TIMESTAMPTZ_CODEC_ID,
85
+ nativeType: "timestamptz"
86
+ };
87
+ function timeColumn(precision) {
88
+ return {
89
+ codecId: PG_TIME_CODEC_ID,
90
+ nativeType: "time",
91
+ ...precision === void 0 ? {} : { typeParams: { precision } }
92
+ };
93
+ }
94
+ function timetzColumn(precision) {
95
+ return {
96
+ codecId: PG_TIMETZ_CODEC_ID,
97
+ nativeType: "timetz",
98
+ ...precision === void 0 ? {} : { typeParams: { precision } }
99
+ };
100
+ }
101
+ const boolColumn = {
102
+ codecId: PG_BOOL_CODEC_ID,
103
+ nativeType: "bool"
104
+ };
105
+ function bitColumn(length) {
106
+ return {
107
+ codecId: PG_BIT_CODEC_ID,
108
+ nativeType: "bit",
109
+ typeParams: { length }
110
+ };
111
+ }
112
+ function varbitColumn(length) {
113
+ return {
114
+ codecId: PG_VARBIT_CODEC_ID,
115
+ nativeType: "bit varying",
116
+ typeParams: { length }
117
+ };
118
+ }
119
+ function intervalColumn(precision) {
120
+ return {
121
+ codecId: PG_INTERVAL_CODEC_ID,
122
+ nativeType: "interval",
123
+ ...precision === void 0 ? {} : { typeParams: { precision } }
124
+ };
125
+ }
126
+ const jsonColumn = {
127
+ codecId: PG_JSON_CODEC_ID,
128
+ nativeType: "json"
129
+ };
130
+ const jsonbColumn = {
131
+ codecId: PG_JSONB_CODEC_ID,
132
+ nativeType: "jsonb"
133
+ };
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
+ function enumType(name, values) {
164
+ return {
165
+ codecId: PG_ENUM_CODEC_ID,
166
+ nativeType: name,
167
+ typeParams: { values }
168
+ };
169
+ }
170
+ function enumColumn(typeName, nativeType) {
171
+ return {
172
+ codecId: PG_ENUM_CODEC_ID,
173
+ nativeType,
174
+ typeRef: typeName
175
+ };
176
+ }
177
+
178
+ //#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 };
180
+ //# sourceMappingURL=column-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-types.mjs","names":["textColumn: ColumnTypeDescriptor","int4Column: ColumnTypeDescriptor","int2Column: ColumnTypeDescriptor","int8Column: ColumnTypeDescriptor","float4Column: ColumnTypeDescriptor","float8Column: ColumnTypeDescriptor","timestampColumn: ColumnTypeDescriptor","timestamptzColumn: ColumnTypeDescriptor","boolColumn: ColumnTypeDescriptor","jsonColumn: ColumnTypeDescriptor","jsonbColumn: ColumnTypeDescriptor"],"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 '../core/codec-ids';\nimport {\n extractStandardSchemaOutputJsonSchema,\n extractStandardSchemaTypeExpression,\n isStandardSchemaLike,\n type StandardSchemaLike,\n} from '../core/standard-schema';\n\nexport const textColumn: ColumnTypeDescriptor = {\n codecId: PG_TEXT_CODEC_ID,\n nativeType: 'text',\n} as const;\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: ColumnTypeDescriptor = {\n codecId: PG_INT4_CODEC_ID,\n nativeType: 'int4',\n} as const;\n\nexport const int2Column: ColumnTypeDescriptor = {\n codecId: PG_INT2_CODEC_ID,\n nativeType: 'int2',\n} as const;\n\nexport const int8Column: ColumnTypeDescriptor = {\n codecId: PG_INT8_CODEC_ID,\n nativeType: 'int8',\n} as const;\n\nexport const float4Column: ColumnTypeDescriptor = {\n codecId: PG_FLOAT4_CODEC_ID,\n nativeType: 'float4',\n} as const;\n\nexport const float8Column: ColumnTypeDescriptor = {\n codecId: PG_FLOAT8_CODEC_ID,\n nativeType: 'float8',\n} as const;\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: ColumnTypeDescriptor = {\n codecId: PG_TIMESTAMP_CODEC_ID,\n nativeType: 'timestamp',\n} as const;\n\nexport const timestamptzColumn: ColumnTypeDescriptor = {\n codecId: PG_TIMESTAMPTZ_CODEC_ID,\n nativeType: 'timestamptz',\n} as const;\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: ColumnTypeDescriptor = {\n codecId: PG_BOOL_CODEC_ID,\n nativeType: 'bool',\n} as const;\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: ColumnTypeDescriptor = {\n codecId: PG_JSON_CODEC_ID,\n nativeType: 'json',\n} as const;\n\nexport const jsonbColumn: ColumnTypeDescriptor = {\n codecId: PG_JSONB_CODEC_ID,\n nativeType: 'jsonb',\n} as const;\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\n/**\n * Typed column descriptor for JSON/JSONB columns with Standard Schema.\n *\n * `typeParams.schemaJson` carries the runtime JSON Schema payload (serializable record)\n * used by the emitter to render TypeScript type expressions in contract.d.ts.\n *\n * `typeParams.schema` is a phantom-only key: at runtime it does not exist, but at the\n * type level it preserves the original `TSchema` so that `ResolveStandardSchemaOutput<P>`\n * in codec-types.ts can resolve the output type via `~standard.types.output` or `.infer`.\n */\ntype TypedColumnDescriptor<TSchema extends StandardSchemaLike> = ColumnTypeDescriptor & {\n readonly typeParams: JsonSchemaTypeParams & { readonly schema: TSchema };\n};\n\nfunction createJsonColumnFactory(\n codecId: string,\n nativeType: string,\n staticDescriptor: ColumnTypeDescriptor,\n) {\n return <TSchema extends StandardSchemaLike>(schema?: TSchema): 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 // At runtime, typeParams only contains { schemaJson, type? }.\n // The `schema` key exists only at the type level (phantom) so that\n // `ResolveStandardSchemaOutput<P>` in codec-types.ts can resolve the\n // schema's output type via `~standard.types.output` or `.infer`.\n typeParams: createJsonTypeParams(schema) as JsonSchemaTypeParams & {\n readonly schema: TSchema;\n },\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(): ColumnTypeDescriptor;\nexport function json<TSchema extends StandardSchemaLike>(\n schema: TSchema,\n): TypedColumnDescriptor<TSchema>;\nexport function json<TSchema extends StandardSchemaLike>(schema?: TSchema): ColumnTypeDescriptor {\n return _json(schema);\n}\n\nexport function jsonb(): ColumnTypeDescriptor;\nexport function jsonb<TSchema extends StandardSchemaLike>(\n schema: TSchema,\n): TypedColumnDescriptor<TSchema>;\nexport function jsonb<TSchema extends StandardSchemaLike>(schema?: TSchema): 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":"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"}
@@ -0,0 +1,111 @@
1
+ import { SqlControlAdapterDescriptor } from "@prisma-next/family-sql/control";
2
+ import { ColumnDefault } from "@prisma-next/contract/types";
3
+
4
+ //#region src/core/default-normalizer.d.ts
5
+
6
+ /**
7
+ * Parses a raw Postgres column default expression into a normalized ColumnDefault.
8
+ * This enables semantic comparison between contract defaults and introspected schema defaults.
9
+ *
10
+ * Used by the migration diff layer to normalize raw database defaults during comparison,
11
+ * keeping the introspection layer focused on faithful data capture.
12
+ *
13
+ * @param rawDefault - Raw default expression from information_schema.columns.column_default
14
+ * @param _nativeType - Native column type (currently unused, reserved for future type-aware parsing)
15
+ * @returns Normalized ColumnDefault or undefined if the expression cannot be parsed
16
+ */
17
+ declare function parsePostgresDefault(rawDefault: string, _nativeType?: string): ColumnDefault | undefined;
18
+ //#endregion
19
+ //#region src/core/parameterized-types.d.ts
20
+ /**
21
+ * Shared utility for expanding parameterized Postgres types to their full SQL representation.
22
+ *
23
+ * This module provides a single source of truth for type expansion logic, used by:
24
+ * - Schema verification (verify-sql-schema.ts) via the expandNativeType codec control hook
25
+ * - Migration planner (planner.ts) via direct import
26
+ *
27
+ * @module
28
+ */
29
+ /**
30
+ * Input for expanding parameterized native types.
31
+ */
32
+ interface ExpandNativeTypeInput {
33
+ readonly nativeType: string;
34
+ readonly codecId?: string;
35
+ readonly typeParams?: Record<string, unknown>;
36
+ }
37
+ /**
38
+ * Expands a parameterized native type to its full SQL representation.
39
+ *
40
+ * For example:
41
+ * - { nativeType: 'character varying', typeParams: { length: 255 } } -> 'character varying(255)'
42
+ * - { nativeType: 'numeric', typeParams: { precision: 10, scale: 2 } } -> 'numeric(10,2)'
43
+ * - { nativeType: 'timestamp without time zone', typeParams: { precision: 3 } } -> 'timestamp without time zone(3)'
44
+ *
45
+ * Returns the original nativeType if:
46
+ * - No typeParams are provided
47
+ * - No codecId is provided
48
+ * - The codecId is not a known parameterized type
49
+ * - The typeParams values are invalid
50
+ */
51
+ declare function expandParameterizedNativeType(input: ExpandNativeTypeInput): string;
52
+ //#endregion
53
+ //#region src/core/sql-utils.d.ts
54
+ /**
55
+ * Shared SQL utility functions for the Postgres adapter.
56
+ *
57
+ * These functions handle safe SQL identifier and literal escaping
58
+ * with security validations to prevent injection and encoding issues.
59
+ */
60
+ /**
61
+ * Error thrown when an invalid SQL identifier or literal is detected.
62
+ * Boundary layers map this to structured envelopes.
63
+ */
64
+ declare class SqlEscapeError extends Error {
65
+ readonly value: string;
66
+ readonly kind: 'identifier' | 'literal';
67
+ constructor(message: string, value: string, kind: 'identifier' | 'literal');
68
+ }
69
+ /**
70
+ * Validates and quotes a PostgreSQL identifier (table, column, type, schema names).
71
+ *
72
+ * Security validations:
73
+ * - Rejects null bytes which could cause truncation or unexpected behavior
74
+ * - Rejects empty identifiers
75
+ * - Warns on identifiers exceeding PostgreSQL's 63-character limit
76
+ *
77
+ * @throws {SqlEscapeError} If the identifier contains null bytes or is empty
78
+ */
79
+ declare function quoteIdentifier(identifier: string): string;
80
+ /**
81
+ * Escapes a string literal for safe use in SQL statements.
82
+ *
83
+ * Security validations:
84
+ * - Rejects null bytes which could cause truncation or unexpected behavior
85
+ *
86
+ * Note: This assumes PostgreSQL's `standard_conforming_strings` is ON (default since PG 9.1).
87
+ * Backslashes are treated as literal characters, not escape sequences.
88
+ *
89
+ * @throws {SqlEscapeError} If the value contains null bytes
90
+ */
91
+ declare function escapeLiteral(value: string): string;
92
+ /**
93
+ * Builds a qualified name (schema.object) with proper quoting.
94
+ */
95
+ declare function qualifyName(schemaName: string, objectName: string): string;
96
+ //#endregion
97
+ //#region src/core/control-adapter.d.ts
98
+
99
+ /**
100
+ * Normalizes a Postgres schema native type to its canonical form for comparison.
101
+ *
102
+ * Uses a pre-computed lookup map for simple prefix replacements (O(1))
103
+ * and handles complex temporal type normalization separately.
104
+ */
105
+ declare function normalizeSchemaNativeType(nativeType: string): string;
106
+ //#endregion
107
+ //#region src/exports/control.d.ts
108
+ declare const postgresAdapterDescriptor: SqlControlAdapterDescriptor<'postgres'>;
109
+ //#endregion
110
+ export { SqlEscapeError, postgresAdapterDescriptor as default, escapeLiteral, expandParameterizedNativeType, normalizeSchemaNativeType, parsePostgresDefault, qualifyName, quoteIdentifier };
111
+ //# sourceMappingURL=control.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/default-normalizer.ts","../src/core/parameterized-types.ts","../src/core/sql-utils.ts","../src/core/control-adapter.ts","../src/exports/control.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA0BA;;;;ACEA;AAiDA;;;iBDnDgB,oBAAA,4CAGb;;;;;;;AAHH;;;;ACEA;AAiDA;;;UAjDiB,qBAAA;ECjBJ,SAAA,UAAe,EAAA,MAAA;EA0BZ,SAAA,OAAA,CAAA,EAAe,MAAA;EAiCf,SAAA,UAAa,CAAA,EDvCL,MCuCK,CAAA,MAAA,EAAA,OAAA,CAAA;AAc7B;;;;ACqYA;;;;ACndgG;;;;;;;iBHuEhF,6BAAA,QAAqC;;;;;;;ADnDrD;;;;ACEA;AAiDA;cClEa,cAAA,SAAuB,KAAA;;;EAAvB,WAAA,CAAA,OAAe,EAAA,MAAA,EAAQ,KAAA,EAAK,MAAA,EAAA,IAAA,EAAA,YAAA,GAAA,SAAA;AA0BzC;AAiCA;AAcA;;;;ACqYA;;;;ACndgG;iBF+BhF,eAAA;;;;;;;;;;;;iBAiCA,aAAA;;;;iBAcA,WAAA;;;;;;;;;;iBCqYA,yBAAA;;;AH/bhB,cIlBM,yBJqBH,EIrB8B,2BJqBjB,CAAA,UAAA,CAAA"}