@prisma-next/sql-relational-core 0.3.0-dev.5 → 0.3.0-dev.51

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 (173) hide show
  1. package/README.md +18 -2
  2. package/dist/errors-7_V3El9I.mjs +3 -0
  3. package/dist/errors-DVufq9PT.d.mts +2 -0
  4. package/dist/exports/ast.d.mts +192 -0
  5. package/dist/exports/ast.d.mts.map +1 -0
  6. package/dist/exports/ast.mjs +361 -0
  7. package/dist/exports/ast.mjs.map +1 -0
  8. package/dist/exports/errors.d.mts +2 -0
  9. package/dist/exports/errors.mjs +3 -0
  10. package/dist/exports/guards.d.mts +5 -0
  11. package/dist/exports/guards.mjs +3 -0
  12. package/dist/exports/operations-registry.d.mts +5 -0
  13. package/dist/exports/operations-registry.mjs +3 -0
  14. package/dist/exports/param.d.mts +5 -0
  15. package/dist/exports/param.mjs +3 -0
  16. package/dist/exports/plan.d.mts +2 -0
  17. package/dist/exports/plan.mjs +17 -0
  18. package/dist/exports/plan.mjs.map +1 -0
  19. package/dist/exports/query-lane-context.d.mts +2 -0
  20. package/dist/exports/query-lane-context.mjs +1 -0
  21. package/dist/exports/schema.d.mts +5 -0
  22. package/dist/exports/schema.mjs +4 -0
  23. package/dist/exports/types.d.mts +4 -0
  24. package/dist/exports/types.mjs +3 -0
  25. package/dist/exports/utils/guards.d.mts +5 -0
  26. package/dist/exports/utils/guards.mjs +4 -0
  27. package/dist/guards-0ycyntYX.mjs +132 -0
  28. package/dist/guards-0ycyntYX.mjs.map +1 -0
  29. package/dist/guards-DCCpAlOL.d.mts +87 -0
  30. package/dist/guards-DCCpAlOL.d.mts.map +1 -0
  31. package/dist/index.d.mts +12 -0
  32. package/dist/index.mjs +12 -0
  33. package/dist/operations-registry-DPZ5aElH.mjs +152 -0
  34. package/dist/operations-registry-DPZ5aElH.mjs.map +1 -0
  35. package/dist/operations-registry-wVEaiLyt.d.mts +9 -0
  36. package/dist/operations-registry-wVEaiLyt.d.mts.map +1 -0
  37. package/dist/param-C4n0OW59.d.mts +8 -0
  38. package/dist/param-C4n0OW59.d.mts.map +1 -0
  39. package/dist/param-DMU3OWfI.mjs +14 -0
  40. package/dist/param-DMU3OWfI.mjs.map +1 -0
  41. package/dist/plan-BhSWuTfw.d.mts +194 -0
  42. package/dist/plan-BhSWuTfw.d.mts.map +1 -0
  43. package/dist/query-lane-context-CgkPuKaR.d.mts +259 -0
  44. package/dist/query-lane-context-CgkPuKaR.d.mts.map +1 -0
  45. package/dist/schema-Bi5p4aAc.mjs +175 -0
  46. package/dist/schema-Bi5p4aAc.mjs.map +1 -0
  47. package/dist/schema-CgrEMqEd.d.mts +86 -0
  48. package/dist/schema-CgrEMqEd.d.mts.map +1 -0
  49. package/dist/types-CEUzDuDC.d.mts +447 -0
  50. package/dist/types-CEUzDuDC.d.mts.map +1 -0
  51. package/dist/types-Cdi4Whda.mjs +18 -0
  52. package/dist/types-Cdi4Whda.mjs.map +1 -0
  53. package/package.json +39 -56
  54. package/src/ast/codec-types.ts +77 -8
  55. package/src/ast/delete.ts +2 -2
  56. package/src/ast/driver-types.ts +20 -3
  57. package/src/ast/predicate.ts +14 -4
  58. package/src/ast/select.ts +4 -3
  59. package/src/ast/sql-codecs.ts +67 -0
  60. package/src/ast/types.ts +89 -19
  61. package/src/ast/update.ts +2 -2
  62. package/src/exports/ast.ts +1 -0
  63. package/src/exports/guards.ts +5 -0
  64. package/src/exports/utils/guards.ts +1 -0
  65. package/src/operations-registry.ts +112 -73
  66. package/src/query-lane-context.ts +77 -1
  67. package/src/schema.ts +91 -33
  68. package/src/types.ts +327 -75
  69. package/src/utils/guards.ts +88 -18
  70. package/dist/ast/adapter-types.d.ts +0 -28
  71. package/dist/ast/adapter-types.d.ts.map +0 -1
  72. package/dist/ast/codec-types.d.ts +0 -141
  73. package/dist/ast/codec-types.d.ts.map +0 -1
  74. package/dist/ast/common.d.ts +0 -7
  75. package/dist/ast/common.d.ts.map +0 -1
  76. package/dist/ast/delete.d.ts +0 -8
  77. package/dist/ast/delete.d.ts.map +0 -1
  78. package/dist/ast/driver-types.d.ts +0 -20
  79. package/dist/ast/driver-types.d.ts.map +0 -1
  80. package/dist/ast/insert.d.ts +0 -8
  81. package/dist/ast/insert.d.ts.map +0 -1
  82. package/dist/ast/join.d.ts +0 -6
  83. package/dist/ast/join.d.ts.map +0 -1
  84. package/dist/ast/order.d.ts +0 -6
  85. package/dist/ast/order.d.ts.map +0 -1
  86. package/dist/ast/predicate.d.ts +0 -4
  87. package/dist/ast/predicate.d.ts.map +0 -1
  88. package/dist/ast/select.d.ts +0 -18
  89. package/dist/ast/select.d.ts.map +0 -1
  90. package/dist/ast/types.d.ts +0 -118
  91. package/dist/ast/types.d.ts.map +0 -1
  92. package/dist/ast/update.d.ts +0 -9
  93. package/dist/ast/update.d.ts.map +0 -1
  94. package/dist/ast/util.d.ts +0 -2
  95. package/dist/ast/util.d.ts.map +0 -1
  96. package/dist/chunk-2F7DSEOU.js +0 -8
  97. package/dist/chunk-2F7DSEOU.js.map +0 -1
  98. package/dist/chunk-36WJWNHT.js +0 -1
  99. package/dist/chunk-36WJWNHT.js.map +0 -1
  100. package/dist/chunk-5N34PNVZ.js +0 -62
  101. package/dist/chunk-5N34PNVZ.js.map +0 -1
  102. package/dist/chunk-7I3EMQID.js +0 -16
  103. package/dist/chunk-7I3EMQID.js.map +0 -1
  104. package/dist/chunk-CBTYMOX2.js +0 -152
  105. package/dist/chunk-CBTYMOX2.js.map +0 -1
  106. package/dist/chunk-G52ENULI.js +0 -1
  107. package/dist/chunk-G52ENULI.js.map +0 -1
  108. package/dist/chunk-KYSP7L5C.js +0 -16
  109. package/dist/chunk-KYSP7L5C.js.map +0 -1
  110. package/dist/chunk-M23L3JHG.js +0 -159
  111. package/dist/chunk-M23L3JHG.js.map +0 -1
  112. package/dist/chunk-MM74SVJ4.js +0 -13
  113. package/dist/chunk-MM74SVJ4.js.map +0 -1
  114. package/dist/chunk-U7AXAUJA.js +0 -1
  115. package/dist/chunk-U7AXAUJA.js.map +0 -1
  116. package/dist/chunk-WZBPVEZI.js +0 -320
  117. package/dist/chunk-WZBPVEZI.js.map +0 -1
  118. package/dist/errors.d.ts +0 -2
  119. package/dist/errors.d.ts.map +0 -1
  120. package/dist/exports/ast.d.ts +0 -14
  121. package/dist/exports/ast.d.ts.map +0 -1
  122. package/dist/exports/ast.js +0 -46
  123. package/dist/exports/ast.js.map +0 -1
  124. package/dist/exports/errors.d.ts +0 -2
  125. package/dist/exports/errors.d.ts.map +0 -1
  126. package/dist/exports/errors.js +0 -9
  127. package/dist/exports/errors.js.map +0 -1
  128. package/dist/exports/guards.d.ts +0 -2
  129. package/dist/exports/guards.d.ts.map +0 -1
  130. package/dist/exports/guards.js +0 -21
  131. package/dist/exports/guards.js.map +0 -1
  132. package/dist/exports/operations-registry.d.ts +0 -2
  133. package/dist/exports/operations-registry.d.ts.map +0 -1
  134. package/dist/exports/operations-registry.js +0 -9
  135. package/dist/exports/operations-registry.js.map +0 -1
  136. package/dist/exports/param.d.ts +0 -3
  137. package/dist/exports/param.d.ts.map +0 -1
  138. package/dist/exports/param.js +0 -7
  139. package/dist/exports/param.js.map +0 -1
  140. package/dist/exports/plan.d.ts +0 -2
  141. package/dist/exports/plan.d.ts.map +0 -1
  142. package/dist/exports/plan.js +0 -7
  143. package/dist/exports/plan.js.map +0 -1
  144. package/dist/exports/query-lane-context.d.ts +0 -2
  145. package/dist/exports/query-lane-context.d.ts.map +0 -1
  146. package/dist/exports/query-lane-context.js +0 -2
  147. package/dist/exports/query-lane-context.js.map +0 -1
  148. package/dist/exports/schema.d.ts +0 -3
  149. package/dist/exports/schema.d.ts.map +0 -1
  150. package/dist/exports/schema.js +0 -14
  151. package/dist/exports/schema.js.map +0 -1
  152. package/dist/exports/types.d.ts +0 -2
  153. package/dist/exports/types.d.ts.map +0 -1
  154. package/dist/exports/types.js +0 -10
  155. package/dist/exports/types.js.map +0 -1
  156. package/dist/index.d.ts +0 -9
  157. package/dist/index.d.ts.map +0 -1
  158. package/dist/index.js +0 -81
  159. package/dist/index.js.map +0 -1
  160. package/dist/operations-registry.d.ts +0 -5
  161. package/dist/operations-registry.d.ts.map +0 -1
  162. package/dist/param.d.ts +0 -4
  163. package/dist/param.d.ts.map +0 -1
  164. package/dist/plan.d.ts +0 -23
  165. package/dist/plan.d.ts.map +0 -1
  166. package/dist/query-lane-context.d.ts +0 -16
  167. package/dist/query-lane-context.d.ts.map +0 -1
  168. package/dist/schema.d.ts +0 -63
  169. package/dist/schema.d.ts.map +0 -1
  170. package/dist/types.d.ts +0 -332
  171. package/dist/types.d.ts.map +0 -1
  172. package/dist/utils/guards.d.ts +0 -55
  173. package/dist/utils/guards.d.ts.map +0 -1
@@ -0,0 +1,259 @@
1
+ import { Type } from "arktype";
2
+ import { OperationRegistry } from "@prisma-next/operations";
3
+ import { O } from "ts-toolbelt";
4
+ import { SqlContract, SqlStorage } from "@prisma-next/sql-contract/types";
5
+
6
+ //#region src/ast/codec-types.d.ts
7
+
8
+ /**
9
+ * Descriptor for parameterized codecs that require type parameter validation.
10
+ * Shared between adapter (compile-time) and runtime layers to avoid duplication.
11
+ *
12
+ * @template TParams - The shape of the type parameters (e.g., `{ length: number }`)
13
+ * @template THelper - The type returned by the optional `init` hook
14
+ */
15
+ interface CodecParamsDescriptor<TParams = Record<string, unknown>, THelper = unknown> {
16
+ /** The codec ID this descriptor applies to (e.g., 'pg/vector@1') */
17
+ readonly codecId: string;
18
+ /**
19
+ * Arktype schema for validating typeParams.
20
+ * Used to validate both storage.types entries and inline column typeParams.
21
+ */
22
+ readonly paramsSchema: Type<TParams>;
23
+ /**
24
+ * Optional init hook called during runtime context creation.
25
+ * Receives validated params and returns a helper object to be stored in context.types.
26
+ * If not provided, the validated params are stored directly.
27
+ */
28
+ readonly init?: (params: TParams) => THelper;
29
+ }
30
+ /**
31
+ * Codec metadata for database-specific type information.
32
+ * Used for schema introspection and verification.
33
+ */
34
+ interface CodecMeta {
35
+ readonly db?: {
36
+ readonly sql?: {
37
+ readonly postgres?: {
38
+ readonly nativeType: string;
39
+ };
40
+ };
41
+ };
42
+ }
43
+ /**
44
+ * Codec interface for encoding/decoding values between wire format and JavaScript types.
45
+ *
46
+ * Codecs are pure, synchronous functions with no side effects or IO.
47
+ * They provide deterministic conversion between database wire types and JS values.
48
+ */
49
+ interface Codec<Id$1 extends string = string, TWire = unknown, TJs = unknown, TParams = Record<string, unknown>, THelper = unknown> {
50
+ /**
51
+ * Namespaced codec identifier in format 'namespace/name@version'
52
+ * Examples: 'pg/text@1', 'pg/uuid@1', 'pg/timestamptz@1'
53
+ */
54
+ readonly id: Id$1;
55
+ /**
56
+ * Contract scalar type IDs that this codec can handle.
57
+ * Examples: ['text'], ['int4', 'float8'], ['timestamp', 'timestamptz']
58
+ */
59
+ readonly targetTypes: readonly string[];
60
+ /**
61
+ * Optional metadata for database-specific type information.
62
+ * Used for schema introspection and verification.
63
+ */
64
+ readonly meta?: CodecMeta;
65
+ /**
66
+ * Optional params schema for parameterized codecs.
67
+ * If provided, typeParams are validated against this schema.
68
+ */
69
+ readonly paramsSchema?: Type<TParams>;
70
+ /**
71
+ * Optional init hook for building runtime helper state from validated params.
72
+ *
73
+ * Useful when parameterized types need derived data at runtime, for example:
74
+ * - normalize typeParams into a stable helper shape consumed by lanes/adapters
75
+ * - precompute reusable values once during context creation
76
+ * - avoid repeating typeParams parsing logic during query execution
77
+ *
78
+ * Example:
79
+ * { length: 255 } -> { kind: 'variable', maxLength: 255 }
80
+ *
81
+ * **Convention for JSON/JSONB codecs**: When the helper includes a `validate`
82
+ * property of type `JsonSchemaValidateFn`, the runtime will use it to enforce
83
+ * JSON Schema conformance during encoding and decoding. The property is
84
+ * discovered via duck typing (`helper?.validate`) for flexibility across
85
+ * different codec types.
86
+ */
87
+ readonly init?: (params: TParams) => THelper;
88
+ /**
89
+ * Decode a wire value (from database) to JavaScript type.
90
+ * Must be synchronous and pure (no side effects).
91
+ */
92
+ decode(wire: TWire): TJs;
93
+ /**
94
+ * Encode a JavaScript value to wire format (for database).
95
+ * Optional - if not provided, values pass through unchanged.
96
+ * Must be synchronous and pure (no side effects).
97
+ */
98
+ encode?(value: TJs): TWire;
99
+ }
100
+ /**
101
+ * Registry interface for codecs organized by ID and by contract scalar type.
102
+ *
103
+ * The registry allows looking up codecs by their namespaced ID or by the
104
+ * contract scalar types they handle. Multiple codecs may handle the same
105
+ * scalar type; ordering in byScalar reflects preference (adapter first,
106
+ * then packs, then app overrides).
107
+ */
108
+ interface CodecRegistry {
109
+ get(id: string): Codec<string> | undefined;
110
+ has(id: string): boolean;
111
+ getByScalar(scalar: string): readonly Codec<string>[];
112
+ getDefaultCodec(scalar: string): Codec<string> | undefined;
113
+ register(codec: Codec<string>): void;
114
+ [Symbol.iterator](): Iterator<Codec<string>>;
115
+ values(): IterableIterator<Codec<string>>;
116
+ }
117
+ /**
118
+ * Codec factory - creates a codec with typeId and encode/decode functions.
119
+ */
120
+ declare function codec<Id$1 extends string, TWire, TJs, TParams = Record<string, unknown>, THelper = unknown>(config: {
121
+ typeId: Id$1;
122
+ targetTypes: readonly string[];
123
+ encode: (value: TJs) => TWire;
124
+ decode: (wire: TWire) => TJs;
125
+ meta?: CodecMeta;
126
+ paramsSchema?: Type<TParams>;
127
+ init?: (params: TParams) => THelper;
128
+ }): Codec<Id$1, TWire, TJs, TParams, THelper>;
129
+ /**
130
+ * Type helpers to extract codec types.
131
+ */
132
+ type CodecId<T> = T extends Codec<infer Id, unknown, unknown> ? Id : T extends {
133
+ readonly id: infer Id;
134
+ } ? Id : never;
135
+ type CodecInput<T> = T extends Codec<string, unknown, infer JsT> ? JsT : never;
136
+ type CodecOutput<T> = T extends Codec<string, unknown, infer JsT> ? JsT : never;
137
+ /**
138
+ * Type helper to extract codec types from builder instance.
139
+ */
140
+ type ExtractCodecTypes$1<ScalarNames extends { readonly [K in keyof ScalarNames]: Codec<string> } = Record<never, never>> = { readonly [K in keyof ScalarNames as ScalarNames[K] extends Codec<infer Id, unknown, unknown> ? Id : never]: {
141
+ readonly input: CodecInput<ScalarNames[K]>;
142
+ readonly output: CodecOutput<ScalarNames[K]>;
143
+ } };
144
+ /**
145
+ * Type helper to extract data type IDs from builder instance.
146
+ * Uses ExtractCodecTypes which preserves literal types as keys.
147
+ * Since ExtractCodecTypes<Record<K, ScalarNames[K]>> has exactly one key (the Id),
148
+ * we extract it by creating a mapped type that uses the Id as both key and value,
149
+ * then extract the value type. This preserves literal types.
150
+ */
151
+ type ExtractDataTypes<ScalarNames extends { readonly [K in keyof ScalarNames]: Codec<string> }> = { readonly [K in keyof ScalarNames]: { readonly [Id in keyof ExtractCodecTypes$1<Record<K, ScalarNames[K]>>]: Id }[keyof ExtractCodecTypes$1<Record<K, ScalarNames[K]>>] };
152
+ /**
153
+ * Builder interface for declaring codecs.
154
+ */
155
+ interface CodecDefBuilder<ScalarNames extends { readonly [K in keyof ScalarNames]: Codec<string> } = Record<never, never>> {
156
+ readonly CodecTypes: ExtractCodecTypes$1<ScalarNames>;
157
+ add<ScalarName extends string, CodecImpl extends Codec<string>>(scalarName: ScalarName, codecImpl: CodecImpl): CodecDefBuilder<O.Overwrite<ScalarNames, Record<ScalarName, CodecImpl>> & Record<ScalarName, CodecImpl>>;
158
+ readonly codecDefinitions: { readonly [K in keyof ScalarNames]: {
159
+ readonly typeId: ScalarNames[K] extends Codec<infer Id extends string, unknown, unknown> ? Id : never;
160
+ readonly scalar: K;
161
+ readonly codec: ScalarNames[K];
162
+ readonly input: CodecInput<ScalarNames[K]>;
163
+ readonly output: CodecOutput<ScalarNames[K]>;
164
+ readonly jsType: CodecOutput<ScalarNames[K]>;
165
+ } };
166
+ readonly dataTypes: { readonly [K in keyof ScalarNames]: { readonly [Id in keyof ExtractCodecTypes$1<Record<K, ScalarNames[K]>>]: Id }[keyof ExtractCodecTypes$1<Record<K, ScalarNames[K]>>] };
167
+ }
168
+ /**
169
+ * Create a new codec registry.
170
+ */
171
+ declare function createCodecRegistry(): CodecRegistry;
172
+ /**
173
+ * Create a new codec definition builder.
174
+ */
175
+ declare function defineCodecs(): CodecDefBuilder<Record<never, never>>;
176
+ //#endregion
177
+ //#region src/query-lane-context.d.ts
178
+ /**
179
+ * Registry of initialized type helpers from storage.types.
180
+ * Each key is a type name from storage.types, and the value is:
181
+ * - The result of the codec's init hook (if provided), or
182
+ * - The full StorageTypeInstance metadata (codecId, nativeType, typeParams) if no init hook
183
+ */
184
+ type TypeHelperRegistry = Record<string, unknown>;
185
+ /**
186
+ * A single validation error from JSON Schema validation.
187
+ */
188
+ interface JsonSchemaValidationError {
189
+ readonly path: string;
190
+ readonly message: string;
191
+ readonly keyword: string;
192
+ }
193
+ /**
194
+ * Result of a JSON Schema validation.
195
+ */
196
+ type JsonSchemaValidationResult = {
197
+ readonly valid: true;
198
+ } | {
199
+ readonly valid: false;
200
+ readonly errors: ReadonlyArray<JsonSchemaValidationError>;
201
+ };
202
+ /**
203
+ * A compiled JSON Schema validate function.
204
+ * Returns a structured result indicating whether the value conforms to the schema.
205
+ */
206
+ type JsonSchemaValidateFn = (value: unknown) => JsonSchemaValidationResult;
207
+ /**
208
+ * Registry of compiled JSON Schema validators for columns with typed JSON/JSONB.
209
+ *
210
+ * Built during context creation by scanning the contract for columns whose codec
211
+ * descriptor provides an `init` hook that returns a `{ validate }` helper.
212
+ * Keys are `"table.column"` (e.g., `"user.metadata"`).
213
+ */
214
+ interface JsonSchemaValidatorRegistry {
215
+ /** Get the compiled validator for a column. Key format: "table.column". */
216
+ get(key: string): JsonSchemaValidateFn | undefined;
217
+ /** Number of registered validators. */
218
+ readonly size: number;
219
+ }
220
+ type MutationDefaultsOp = 'create' | 'update';
221
+ type AppliedMutationDefault = {
222
+ readonly column: string;
223
+ readonly value: unknown;
224
+ };
225
+ type MutationDefaultsOptions = {
226
+ readonly op: MutationDefaultsOp;
227
+ readonly table: string;
228
+ readonly values: Record<string, unknown>;
229
+ };
230
+ /**
231
+ * Minimal context interface for SQL query lanes.
232
+ *
233
+ * Lanes only need contract, operations, and codecs to build typed ASTs and attach
234
+ * operation builders. This interface explicitly excludes runtime concerns like
235
+ * adapters, connection management, and transaction state.
236
+ */
237
+ interface ExecutionContext<TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>> {
238
+ readonly contract: TContract;
239
+ readonly operations: OperationRegistry;
240
+ readonly codecs: CodecRegistry;
241
+ /**
242
+ * Type helper registry for parameterized types.
243
+ * Schema builders expose these helpers via schema.types.
244
+ */
245
+ readonly types: TypeHelperRegistry;
246
+ /**
247
+ * Compiled JSON Schema validators for typed JSON/JSONB columns.
248
+ * Present only when the contract declares columns with JSON Schema typeParams.
249
+ */
250
+ readonly jsonSchemaValidators?: JsonSchemaValidatorRegistry;
251
+ /**
252
+ * Applies execution-time mutation defaults for the given table.
253
+ * Returns the applied defaults (caller-provided values always win).
254
+ */
255
+ applyMutationDefaults(options: MutationDefaultsOptions): ReadonlyArray<AppliedMutationDefault>;
256
+ }
257
+ //#endregion
258
+ export { defineCodecs as S, CodecRegistry as _, JsonSchemaValidationResult as a, codec as b, MutationDefaultsOptions as c, CodecDefBuilder as d, CodecId as f, CodecParamsDescriptor as g, CodecOutput as h, JsonSchemaValidationError as i, TypeHelperRegistry as l, CodecMeta as m, ExecutionContext as n, JsonSchemaValidatorRegistry as o, CodecInput as p, JsonSchemaValidateFn as r, MutationDefaultsOp as s, AppliedMutationDefault as t, Codec as u, ExtractCodecTypes$1 as v, createCodecRegistry as x, ExtractDataTypes as y };
259
+ //# sourceMappingURL=query-lane-context-CgkPuKaR.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-lane-context-CgkPuKaR.d.mts","names":[],"sources":["../src/ast/codec-types.ts","../src/query-lane-context.ts"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ import { t as attachOperationsToColumnBuilder } from "./operations-registry-DPZ5aElH.mjs";
2
+ import { planInvalid } from "@prisma-next/plan";
3
+
4
+ //#region src/schema.ts
5
+ var ColumnBuilderImpl = class {
6
+ kind = "column";
7
+ constructor(table, column, storageColumn) {
8
+ this.table = table;
9
+ this.column = column;
10
+ this.storageColumn = storageColumn;
11
+ }
12
+ get columnMeta() {
13
+ return this.storageColumn;
14
+ }
15
+ get __jsType() {}
16
+ /**
17
+ * Converts this column builder to a ColumnRef expression.
18
+ * This is the canonical way to get an AST node from a builder.
19
+ */
20
+ toExpr() {
21
+ return Object.freeze({
22
+ kind: "col",
23
+ table: this.table,
24
+ column: this.column
25
+ });
26
+ }
27
+ createBinaryBuilder(op, value) {
28
+ if (value == null) throw planInvalid("Parameter placeholder or expression source required for column comparison");
29
+ if ("toExpr" in value && typeof value.toExpr === "function") return Object.freeze({
30
+ kind: "binary",
31
+ op,
32
+ left: this.toExpr(),
33
+ right: value
34
+ });
35
+ if ("kind" in value && value.kind === "param-placeholder") return Object.freeze({
36
+ kind: "binary",
37
+ op,
38
+ left: this.toExpr(),
39
+ right: value
40
+ });
41
+ throw planInvalid("Parameter placeholder or expression source required for column comparison");
42
+ }
43
+ eq(value) {
44
+ return this.createBinaryBuilder("eq", value);
45
+ }
46
+ neq(value) {
47
+ return this.createBinaryBuilder("neq", value);
48
+ }
49
+ gt(value) {
50
+ return this.createBinaryBuilder("gt", value);
51
+ }
52
+ lt(value) {
53
+ return this.createBinaryBuilder("lt", value);
54
+ }
55
+ gte(value) {
56
+ return this.createBinaryBuilder("gte", value);
57
+ }
58
+ lte(value) {
59
+ return this.createBinaryBuilder("lte", value);
60
+ }
61
+ asc() {
62
+ return Object.freeze({
63
+ kind: "order",
64
+ expr: this.toExpr(),
65
+ dir: "asc"
66
+ });
67
+ }
68
+ desc() {
69
+ return Object.freeze({
70
+ kind: "order",
71
+ expr: this.toExpr(),
72
+ dir: "desc"
73
+ });
74
+ }
75
+ /**
76
+ * Creates an IS NULL check for this column.
77
+ * Available on all columns at runtime, but typed to only be visible on nullable columns.
78
+ */
79
+ isNull() {
80
+ return Object.freeze({
81
+ kind: "nullCheck",
82
+ expr: this.toExpr(),
83
+ isNull: true
84
+ });
85
+ }
86
+ /**
87
+ * Creates an IS NOT NULL check for this column.
88
+ * Available on all columns at runtime, but typed to only be visible on nullable columns.
89
+ */
90
+ isNotNull() {
91
+ return Object.freeze({
92
+ kind: "nullCheck",
93
+ expr: this.toExpr(),
94
+ isNull: false
95
+ });
96
+ }
97
+ };
98
+ var TableBuilderImpl = class {
99
+ kind = "table";
100
+ columns;
101
+ _name;
102
+ constructor(name, columns) {
103
+ this._name = name;
104
+ this.columns = columns;
105
+ }
106
+ get name() {
107
+ return this._name;
108
+ }
109
+ };
110
+ function buildColumns(tableName, storage, _contract, operationRegistry, contractCapabilities) {
111
+ const table = storage.tables[tableName];
112
+ if (!table) throw planInvalid(`Unknown table ${tableName}`);
113
+ const tableColumns = table.columns;
114
+ const result = {};
115
+ const assignColumn = (columnName, columnDef) => {
116
+ result[columnName] = attachOperationsToColumnBuilder(new ColumnBuilderImpl(tableName, columnName, columnDef), columnDef, operationRegistry, contractCapabilities);
117
+ };
118
+ for (const columnName of Object.keys(tableColumns)) {
119
+ const columnDef = tableColumns[columnName];
120
+ if (!columnDef) continue;
121
+ assignColumn(columnName, columnDef);
122
+ }
123
+ return result;
124
+ }
125
+ /**
126
+ * Creates a Proxy that enables accessing table columns directly on the table object,
127
+ * in addition to the standard `table.columns.columnName` syntax.
128
+ *
129
+ * This allows both access patterns:
130
+ * - `tables.user.columns.id` (standard access)
131
+ * - `tables.user.id` (convenience access via proxy)
132
+ *
133
+ * The proxy intercepts property access and routes column name lookups to
134
+ * `table.columns[prop]`, while preserving direct access to table properties
135
+ * like `name`, `kind`, and `columns`.
136
+ */
137
+ function createTableProxy(table) {
138
+ return new Proxy(table, { get(target, prop) {
139
+ if (prop === "name" || prop === "kind" || prop === "columns") return Reflect.get(target, prop);
140
+ if (typeof prop === "string" && prop in target.columns) return target.columns[prop];
141
+ } });
142
+ }
143
+ /**
144
+ * Creates a schema handle for building SQL queries.
145
+ *
146
+ * @param context - Query lane context containing contract, codec and operation registries
147
+ * @returns A schema handle with typed table builders and type helpers
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * const schemaHandle = schema<Contract>(context);
152
+ * const userTable = schemaHandle.tables.user;
153
+ * const vectorType = schemaHandle.types.Vector1536;
154
+ * ```
155
+ */
156
+ function schema(context) {
157
+ const contract = context.contract;
158
+ const storage = contract.storage;
159
+ const tables = {};
160
+ const contractCapabilities = contract.capabilities;
161
+ const operationRegistry = context.operations;
162
+ for (const tableName of Object.keys(storage.tables)) {
163
+ const proxiedTable = createTableProxy(new TableBuilderImpl(tableName, buildColumns(tableName, storage, contract, operationRegistry, contractCapabilities)));
164
+ tables[tableName] = Object.freeze(proxiedTable);
165
+ }
166
+ const types = context.types;
167
+ return Object.freeze({
168
+ tables,
169
+ types
170
+ });
171
+ }
172
+
173
+ //#endregion
174
+ export { TableBuilderImpl as n, schema as r, ColumnBuilderImpl as t };
175
+ //# sourceMappingURL=schema-Bi5p4aAc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-Bi5p4aAc.mjs","names":["table: string","column: ColumnName","storageColumn: ColumnMeta"],"sources":["../src/schema.ts"],"sourcesContent":["import type { OperationRegistry } from '@prisma-next/operations';\nimport { planInvalid } from '@prisma-next/plan';\nimport type {\n ExtractCodecTypes,\n ExtractOperationTypes,\n SqlContract,\n SqlStorage,\n StorageColumn,\n} from '@prisma-next/sql-contract/types';\nimport type { BinaryOp, ColumnRef, ExpressionSource, TableRef } from './ast/types';\nimport { attachOperationsToColumnBuilder } from './operations-registry';\nimport type { ExecutionContext } from './query-lane-context';\nimport type {\n BinaryBuilder,\n CodecTypes as CodecTypesType,\n ColumnBuilder,\n ComputeColumnJsType,\n NullCheckBuilder,\n OperationTypeSignature,\n OperationTypes,\n OrderBuilder,\n ParamPlaceholder,\n} from './types';\n\ntype TableColumns<Table extends { columns: Record<string, StorageColumn> }> = Table['columns'];\n\ntype ColumnBuilders<\n Contract extends SqlContract<SqlStorage>,\n TableName extends string,\n Columns extends Record<string, StorageColumn>,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n> = {\n readonly [K in keyof Columns]: ColumnBuilder<\n K & string,\n Columns[K],\n ComputeColumnJsType<Contract, TableName, K & string, Columns[K], CodecTypes>,\n Operations\n >;\n};\n\nexport class ColumnBuilderImpl<\n ColumnName extends string,\n ColumnMeta extends StorageColumn,\n JsType = unknown,\n> implements ExpressionSource\n{\n readonly kind = 'column' as const;\n\n constructor(\n readonly table: string,\n readonly column: ColumnName,\n private readonly storageColumn: ColumnMeta,\n ) {}\n\n get columnMeta(): ColumnMeta {\n return this.storageColumn;\n }\n\n // Type-level helper property (not used at runtime)\n get __jsType(): JsType {\n return undefined as unknown as JsType;\n }\n\n /**\n * Converts this column builder to a ColumnRef expression.\n * This is the canonical way to get an AST node from a builder.\n */\n toExpr(): ColumnRef {\n return Object.freeze({\n kind: 'col' as const,\n table: this.table,\n column: this.column,\n });\n }\n\n private createBinaryBuilder(\n op: BinaryOp,\n value: ParamPlaceholder | ExpressionSource,\n ): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n if (value == null) {\n throw planInvalid(\n 'Parameter placeholder or expression source required for column comparison',\n );\n }\n // Check for ExpressionSource first (has toExpr method)\n if ('toExpr' in value && typeof value.toExpr === 'function') {\n return Object.freeze({\n kind: 'binary' as const,\n op,\n left: this.toExpr(),\n right: value,\n }) as BinaryBuilder<ColumnName, ColumnMeta, JsType>;\n }\n // Must be a ParamPlaceholder\n if ('kind' in value && value.kind === 'param-placeholder') {\n return Object.freeze({\n kind: 'binary' as const,\n op,\n left: this.toExpr(),\n right: value,\n }) as BinaryBuilder<ColumnName, ColumnMeta, JsType>;\n }\n throw planInvalid('Parameter placeholder or expression source required for column comparison');\n }\n\n eq(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('eq', value);\n }\n\n neq(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('neq', value);\n }\n\n gt(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('gt', value);\n }\n\n lt(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('lt', value);\n }\n\n gte(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('gte', value);\n }\n\n lte(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType> {\n return this.createBinaryBuilder('lte', value);\n }\n\n asc(): OrderBuilder<ColumnName, ColumnMeta, JsType> {\n return Object.freeze({\n kind: 'order' as const,\n expr: this.toExpr(),\n dir: 'asc' as const,\n }) as OrderBuilder<ColumnName, ColumnMeta, JsType>;\n }\n\n desc(): OrderBuilder<ColumnName, ColumnMeta, JsType> {\n return Object.freeze({\n kind: 'order' as const,\n expr: this.toExpr(),\n dir: 'desc' as const,\n }) as OrderBuilder<ColumnName, ColumnMeta, JsType>;\n }\n\n /**\n * Creates an IS NULL check for this column.\n * Available on all columns at runtime, but typed to only be visible on nullable columns.\n */\n isNull(): NullCheckBuilder<ColumnName, ColumnMeta, JsType> {\n return Object.freeze({\n kind: 'nullCheck' as const,\n expr: this.toExpr(),\n isNull: true,\n }) as NullCheckBuilder<ColumnName, ColumnMeta, JsType>;\n }\n\n /**\n * Creates an IS NOT NULL check for this column.\n * Available on all columns at runtime, but typed to only be visible on nullable columns.\n */\n isNotNull(): NullCheckBuilder<ColumnName, ColumnMeta, JsType> {\n return Object.freeze({\n kind: 'nullCheck' as const,\n expr: this.toExpr(),\n isNull: false,\n }) as NullCheckBuilder<ColumnName, ColumnMeta, JsType>;\n }\n}\n\nexport class TableBuilderImpl<\n Contract extends SqlContract<SqlStorage>,\n TableName extends string,\n Columns extends Record<string, StorageColumn>,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n> implements TableRef\n{\n readonly kind = 'table' as const;\n readonly columns: ColumnBuilders<Contract, TableName, Columns, CodecTypes, Operations>;\n private readonly _name: TableName;\n\n constructor(\n name: TableName,\n columns: ColumnBuilders<Contract, TableName, Columns, CodecTypes, Operations>,\n ) {\n this._name = name;\n this.columns = columns;\n }\n\n get name(): string {\n return this._name;\n }\n}\n\nfunction buildColumns<\n Contract extends SqlContract<SqlStorage>,\n TableName extends keyof Contract['storage']['tables'] & string,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n>(\n tableName: TableName,\n storage: SqlStorage,\n _contract: Contract,\n operationRegistry?: OperationRegistry,\n contractCapabilities?: Record<string, Record<string, boolean>>,\n): ColumnBuilders<\n Contract,\n TableName,\n Contract['storage']['tables'][TableName]['columns'],\n CodecTypes,\n Operations\n> {\n const table = storage.tables[tableName];\n\n if (!table) {\n throw planInvalid(`Unknown table ${tableName}`);\n }\n\n type Columns = Contract['storage']['tables'][TableName]['columns'];\n const tableColumns = table.columns as Columns;\n\n const result = {} as {\n [K in keyof Columns]: ColumnBuilder<\n K & string,\n Columns[K],\n ComputeColumnJsType<Contract, TableName, K & string, Columns[K], CodecTypes>,\n Operations\n >;\n };\n\n const assignColumn = <ColumnKey extends keyof Columns & string>(\n columnName: ColumnKey,\n columnDef: Columns[ColumnKey],\n ) => {\n type JsType = ComputeColumnJsType<\n Contract,\n TableName,\n ColumnKey,\n Columns[ColumnKey],\n CodecTypes\n >;\n\n const columnBuilder = new ColumnBuilderImpl<ColumnKey, Columns[ColumnKey], JsType>(\n tableName,\n columnName,\n columnDef,\n );\n\n const builderWithOps = attachOperationsToColumnBuilder<\n ColumnKey,\n Columns[ColumnKey],\n JsType,\n Operations\n >(\n columnBuilder as unknown as ColumnBuilder<\n ColumnKey,\n Columns[ColumnKey],\n JsType,\n Record<string, never>\n >,\n columnDef,\n operationRegistry,\n contractCapabilities,\n );\n\n (result as Record<string, unknown>)[columnName] = builderWithOps;\n };\n\n for (const columnName of Object.keys(tableColumns) as Array<keyof Columns & string>) {\n const columnDef = tableColumns[columnName];\n if (!columnDef) continue;\n assignColumn(columnName, columnDef);\n }\n\n return result as ColumnBuilders<Contract, TableName, Columns, CodecTypes, Operations>;\n}\n\n/**\n * Creates a Proxy that enables accessing table columns directly on the table object,\n * in addition to the standard `table.columns.columnName` syntax.\n *\n * This allows both access patterns:\n * - `tables.user.columns.id` (standard access)\n * - `tables.user.id` (convenience access via proxy)\n *\n * The proxy intercepts property access and routes column name lookups to\n * `table.columns[prop]`, while preserving direct access to table properties\n * like `name`, `kind`, and `columns`.\n */\nfunction createTableProxy<\n Contract extends SqlContract<SqlStorage>,\n TableName extends string,\n Columns extends Record<string, StorageColumn>,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n>(\n table: TableBuilderImpl<Contract, TableName, Columns, CodecTypes, Operations>,\n): TableBuilderImpl<Contract, TableName, Columns, CodecTypes, Operations> {\n return new Proxy(table, {\n get(target, prop) {\n if (prop === 'name' || prop === 'kind' || prop === 'columns') {\n return Reflect.get(target, prop);\n }\n if (typeof prop === 'string' && prop in target.columns) {\n return target.columns[prop as keyof typeof target.columns];\n }\n return undefined;\n },\n });\n}\n\ntype ExtractSchemaTables<\n Contract extends SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesType,\n Operations extends OperationTypes,\n> = {\n readonly [TableName in keyof Contract['storage']['tables']]: TableBuilderImpl<\n Contract,\n TableName & string,\n TableColumns<Contract['storage']['tables'][TableName]>,\n CodecTypes,\n Operations\n > &\n TableRef;\n};\n\n/**\n * Extracts the types registry shape from a contract.\n * Each key is a type name from storage.types, and the value preserves the\n * literal type from the contract (including codecId, nativeType, and typeParams).\n * Returns an empty object type {} when storage.types is undefined.\n */\ntype ExtractSchemaTypes<Contract extends SqlContract<SqlStorage>> =\n Contract['storage']['types'] extends infer Types\n ? Types extends Record<string, unknown>\n ? { readonly [TypeName in keyof Types]: Types[TypeName] }\n : Record<string, never>\n : Record<string, never>;\n\nexport type SchemaHandle<\n Contract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesType = CodecTypesType,\n Operations extends OperationTypes = Record<string, never>,\n> = {\n readonly tables: ExtractSchemaTables<Contract, CodecTypes, Operations>;\n /**\n * Initialized type helpers from storage.types.\n * Each entry corresponds to a named type instance in the contract's storage.types.\n */\n readonly types: ExtractSchemaTypes<Contract>;\n};\n\ntype SchemaReturnType<Contract extends SqlContract<SqlStorage>> = SchemaHandle<\n Contract,\n ExtractCodecTypes<Contract>,\n ToOperationTypes<ExtractOperationTypes<Contract>>\n>;\n\ntype NormalizeOperationTypes<T> = {\n [TypeId in keyof T]: {\n [Method in keyof T[TypeId]]: T[TypeId][Method] extends OperationTypeSignature\n ? T[TypeId][Method]\n : OperationTypeSignature;\n };\n};\n\ntype ToOperationTypes<T> = T extends OperationTypes ? T : NormalizeOperationTypes<T>;\n\n/**\n * Creates a schema handle for building SQL queries.\n *\n * @param context - Query lane context containing contract, codec and operation registries\n * @returns A schema handle with typed table builders and type helpers\n *\n * @example\n * ```typescript\n * const schemaHandle = schema<Contract>(context);\n * const userTable = schemaHandle.tables.user;\n * const vectorType = schemaHandle.types.Vector1536;\n * ```\n */\nexport function schema<Contract extends SqlContract<SqlStorage>>(\n context: ExecutionContext<Contract>,\n): SchemaReturnType<Contract> {\n const contract = context.contract;\n const storage = contract.storage;\n type CodecTypes = ExtractCodecTypes<Contract>;\n type Operations = ToOperationTypes<ExtractOperationTypes<Contract>>;\n const tables = {} as ExtractSchemaTables<Contract, CodecTypes, Operations>;\n const contractCapabilities = contract.capabilities;\n\n const operationRegistry = context.operations;\n\n for (const tableName of Object.keys(storage.tables) as Array<\n keyof Contract['storage']['tables'] & string\n >) {\n const columns = buildColumns<Contract, typeof tableName, CodecTypes, Operations>(\n tableName,\n storage,\n contract,\n operationRegistry,\n contractCapabilities,\n );\n const table = new TableBuilderImpl<\n Contract,\n typeof tableName & string,\n Contract['storage']['tables'][typeof tableName]['columns'],\n CodecTypes,\n Operations\n >(tableName, columns);\n const proxiedTable = createTableProxy<\n Contract,\n typeof tableName & string,\n Contract['storage']['tables'][typeof tableName]['columns'],\n CodecTypes,\n Operations\n >(table);\n (tables as Record<string, unknown>)[tableName] = Object.freeze(\n proxiedTable,\n ) as ExtractSchemaTables<Contract, CodecTypes, Operations>[typeof tableName];\n }\n\n // Get type helpers from context (populated by runtime context creation)\n const types = context.types as ExtractSchemaTypes<Contract>;\n\n return Object.freeze({ tables, types }) as SchemaReturnType<Contract>;\n}\n\nexport type { ColumnBuilderImpl as Column, TableBuilderImpl as Table };\n"],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import { n as ExecutionContext } from "./query-lane-context-CgkPuKaR.mjs";
2
+ import { D as TableRef, f as ExpressionSource, s as ColumnRef } from "./plan-BhSWuTfw.mjs";
3
+ import { A as OperationTypes, D as NullCheckBuilder, M as OrderBuilder, N as ParamPlaceholder, d as ColumnBuilder, k as OperationTypeSignature, p as ComputeColumnJsType, s as BinaryBuilder, u as CodecTypes } from "./types-CEUzDuDC.mjs";
4
+ import { ExtractCodecTypes, ExtractOperationTypes, SqlContract, SqlStorage, StorageColumn } from "@prisma-next/sql-contract/types";
5
+
6
+ //#region src/schema.d.ts
7
+ type TableColumns<Table extends {
8
+ columns: Record<string, StorageColumn>;
9
+ }> = Table['columns'];
10
+ type ColumnBuilders<Contract extends SqlContract<SqlStorage>, TableName$1 extends string, Columns extends Record<string, StorageColumn>, CodecTypes$1 extends CodecTypes, Operations extends OperationTypes> = { readonly [K in keyof Columns]: ColumnBuilder<K & string, Columns[K], ComputeColumnJsType<Contract, TableName$1, K & string, Columns[K], CodecTypes$1>, Operations> };
11
+ declare class ColumnBuilderImpl<ColumnName extends string, ColumnMeta extends StorageColumn, JsType = unknown> implements ExpressionSource {
12
+ readonly table: string;
13
+ readonly column: ColumnName;
14
+ private readonly storageColumn;
15
+ readonly kind: "column";
16
+ constructor(table: string, column: ColumnName, storageColumn: ColumnMeta);
17
+ get columnMeta(): ColumnMeta;
18
+ get __jsType(): JsType;
19
+ /**
20
+ * Converts this column builder to a ColumnRef expression.
21
+ * This is the canonical way to get an AST node from a builder.
22
+ */
23
+ toExpr(): ColumnRef;
24
+ private createBinaryBuilder;
25
+ eq(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType>;
26
+ neq(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType>;
27
+ gt(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType>;
28
+ lt(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType>;
29
+ gte(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType>;
30
+ lte(value: ParamPlaceholder | ExpressionSource): BinaryBuilder<ColumnName, ColumnMeta, JsType>;
31
+ asc(): OrderBuilder<ColumnName, ColumnMeta, JsType>;
32
+ desc(): OrderBuilder<ColumnName, ColumnMeta, JsType>;
33
+ /**
34
+ * Creates an IS NULL check for this column.
35
+ * Available on all columns at runtime, but typed to only be visible on nullable columns.
36
+ */
37
+ isNull(): NullCheckBuilder<ColumnName, ColumnMeta, JsType>;
38
+ /**
39
+ * Creates an IS NOT NULL check for this column.
40
+ * Available on all columns at runtime, but typed to only be visible on nullable columns.
41
+ */
42
+ isNotNull(): NullCheckBuilder<ColumnName, ColumnMeta, JsType>;
43
+ }
44
+ declare class TableBuilderImpl<Contract extends SqlContract<SqlStorage>, TableName$1 extends string, Columns extends Record<string, StorageColumn>, CodecTypes$1 extends CodecTypes, Operations extends OperationTypes> implements TableRef {
45
+ readonly kind: "table";
46
+ readonly columns: ColumnBuilders<Contract, TableName$1, Columns, CodecTypes$1, Operations>;
47
+ private readonly _name;
48
+ constructor(name: TableName$1, columns: ColumnBuilders<Contract, TableName$1, Columns, CodecTypes$1, Operations>);
49
+ get name(): string;
50
+ }
51
+ type ExtractSchemaTables<Contract extends SqlContract<SqlStorage>, CodecTypes$1 extends CodecTypes, Operations extends OperationTypes> = { readonly [TableName in keyof Contract['storage']['tables']]: TableBuilderImpl<Contract, TableName & string, TableColumns<Contract['storage']['tables'][TableName]>, CodecTypes$1, Operations> & TableRef };
52
+ /**
53
+ * Extracts the types registry shape from a contract.
54
+ * Each key is a type name from storage.types, and the value preserves the
55
+ * literal type from the contract (including codecId, nativeType, and typeParams).
56
+ * Returns an empty object type {} when storage.types is undefined.
57
+ */
58
+ type ExtractSchemaTypes<Contract extends SqlContract<SqlStorage>> = Contract['storage']['types'] extends infer Types ? Types extends Record<string, unknown> ? { readonly [TypeName in keyof Types]: Types[TypeName] } : Record<string, never> : Record<string, never>;
59
+ type SchemaHandle<Contract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>, CodecTypes$1 extends CodecTypes = CodecTypes, Operations extends OperationTypes = Record<string, never>> = {
60
+ readonly tables: ExtractSchemaTables<Contract, CodecTypes$1, Operations>;
61
+ /**
62
+ * Initialized type helpers from storage.types.
63
+ * Each entry corresponds to a named type instance in the contract's storage.types.
64
+ */
65
+ readonly types: ExtractSchemaTypes<Contract>;
66
+ };
67
+ type SchemaReturnType<Contract extends SqlContract<SqlStorage>> = SchemaHandle<Contract, ExtractCodecTypes<Contract>, ToOperationTypes<ExtractOperationTypes<Contract>>>;
68
+ type NormalizeOperationTypes<T> = { [TypeId in keyof T]: { [Method in keyof T[TypeId]]: T[TypeId][Method] extends OperationTypeSignature ? T[TypeId][Method] : OperationTypeSignature } };
69
+ type ToOperationTypes<T> = T extends OperationTypes ? T : NormalizeOperationTypes<T>;
70
+ /**
71
+ * Creates a schema handle for building SQL queries.
72
+ *
73
+ * @param context - Query lane context containing contract, codec and operation registries
74
+ * @returns A schema handle with typed table builders and type helpers
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * const schemaHandle = schema<Contract>(context);
79
+ * const userTable = schemaHandle.tables.user;
80
+ * const vectorType = schemaHandle.types.Vector1536;
81
+ * ```
82
+ */
83
+ declare function schema<Contract extends SqlContract<SqlStorage>>(context: ExecutionContext<Contract>): SchemaReturnType<Contract>;
84
+ //#endregion
85
+ export { schema as i, SchemaHandle as n, TableBuilderImpl as r, ColumnBuilderImpl as t };
86
+ //# sourceMappingURL=schema-CgrEMqEd.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-CgrEMqEd.d.mts","names":[],"sources":["../src/schema.ts"],"sourcesContent":[],"mappings":"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"}