@prisma-next/sql-relational-core 0.6.0-dev.6 → 0.6.0-dev.8

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 (60) hide show
  1. package/README.md +1 -1
  2. package/dist/{codec-types-BUfBna4G.d.mts → codec-types-Cezo7k-i.d.mts} +9 -9
  3. package/dist/codec-types-Cezo7k-i.d.mts.map +1 -0
  4. package/dist/{errors-BgNpVAT8.d.mts → errors-D2KewtVl.d.mts} +2 -2
  5. package/dist/{errors-BgNpVAT8.d.mts.map → errors-D2KewtVl.d.mts.map} +1 -1
  6. package/dist/exports/ast.d.mts +3 -12
  7. package/dist/exports/ast.d.mts.map +1 -1
  8. package/dist/exports/ast.mjs +2 -32
  9. package/dist/exports/ast.mjs.map +1 -1
  10. package/dist/exports/codec-descriptor-registry.d.mts +20 -4
  11. package/dist/exports/codec-descriptor-registry.d.mts.map +1 -1
  12. package/dist/exports/codec-descriptor-registry.mjs +38 -2
  13. package/dist/exports/codec-descriptor-registry.mjs.map +1 -1
  14. package/dist/exports/errors.d.mts +1 -1
  15. package/dist/exports/expression.d.mts +17 -16
  16. package/dist/exports/expression.d.mts.map +1 -1
  17. package/dist/exports/expression.mjs +19 -25
  18. package/dist/exports/expression.mjs.map +1 -1
  19. package/dist/exports/middleware.d.mts +1 -1
  20. package/dist/exports/middleware.mjs +1 -1
  21. package/dist/exports/plan.d.mts +2 -2
  22. package/dist/exports/query-lane-context.d.mts +1 -1
  23. package/dist/exports/types.d.mts +2 -2
  24. package/dist/index.d.mts +12 -12
  25. package/dist/index.mjs +5 -5
  26. package/dist/{middleware-USDeR8p1.d.mts → middleware-CfWhG9hx.d.mts} +3 -9
  27. package/dist/middleware-CfWhG9hx.d.mts.map +1 -0
  28. package/dist/{middleware-D2Wv9QIf.mjs → middleware-DGoIUH9C.mjs} +5 -17
  29. package/dist/middleware-DGoIUH9C.mjs.map +1 -0
  30. package/dist/{plan-DFpOIsKB.d.mts → plan-DmBWXsDN.d.mts} +2 -2
  31. package/dist/{plan-DFpOIsKB.d.mts.map → plan-DmBWXsDN.d.mts.map} +1 -1
  32. package/dist/{query-lane-context-C2tLZGp4.d.mts → query-lane-context-DHsPbikl.d.mts} +16 -5
  33. package/dist/query-lane-context-DHsPbikl.d.mts.map +1 -0
  34. package/dist/{sql-execution-plan-ffz8TSfr.d.mts → sql-execution-plan-DM2Hcvvn.d.mts} +2 -2
  35. package/dist/{sql-execution-plan-ffz8TSfr.d.mts.map → sql-execution-plan-DM2Hcvvn.d.mts.map} +1 -1
  36. package/dist/{types-D6Pk1DTr.d.mts → types-BQK1PdQu.d.mts} +4 -4
  37. package/dist/{types-D6Pk1DTr.d.mts.map → types-BQK1PdQu.d.mts.map} +1 -1
  38. package/dist/{types-CL18G37a.d.mts → types-BWJCGyVL.d.mts} +3 -3
  39. package/dist/{types-CL18G37a.d.mts.map → types-BWJCGyVL.d.mts.map} +1 -1
  40. package/dist/{types-CK9ZJ6OU.mjs → types-DRYJSMk1.mjs} +27 -18
  41. package/dist/types-DRYJSMk1.mjs.map +1 -0
  42. package/dist/{types-BZcKgaYA.d.mts → types-juiKe2qf.d.mts} +18 -25
  43. package/dist/types-juiKe2qf.d.mts.map +1 -0
  44. package/package.json +10 -10
  45. package/src/ast/codec-types.ts +8 -6
  46. package/src/ast/types.ts +32 -38
  47. package/src/codec-descriptor-registry.ts +8 -1
  48. package/src/codec-ref-for-column.ts +34 -0
  49. package/src/exports/ast.ts +0 -1
  50. package/src/exports/codec-descriptor-registry.ts +1 -0
  51. package/src/expression.ts +35 -24
  52. package/src/middleware/param-ref-mutator.ts +3 -19
  53. package/src/query-lane-context.ts +14 -3
  54. package/dist/codec-types-BUfBna4G.d.mts.map +0 -1
  55. package/dist/middleware-D2Wv9QIf.mjs.map +0 -1
  56. package/dist/middleware-USDeR8p1.d.mts.map +0 -1
  57. package/dist/query-lane-context-C2tLZGp4.d.mts.map +0 -1
  58. package/dist/types-BZcKgaYA.d.mts.map +0 -1
  59. package/dist/types-CK9ZJ6OU.mjs.map +0 -1
  60. package/src/ast/validate-param-refs.ts +0 -39
package/README.md CHANGED
@@ -89,7 +89,7 @@ flowchart TD
89
89
 
90
90
  ### Plan Helpers (`plan.ts`)
91
91
  - Defines `SqlQueryPlan<Row>` interface for SQL query plans produced by lanes before lowering
92
- - Per [ADR 205](../../../../docs/architecture%20docs/adrs/ADR%20205%20-%20Execution%20metadata%20lives%20on%20AST.md), codec IDs travel on `ProjectionItem.codecId` (output) and `ParamRef.codecId` (parameters) on the AST itself, not on plan-level descriptor lists
92
+ - Per [ADR 212](../../../../docs/architecture%20docs/adrs/ADR%20212%20-%20AST-bound%20codec%20resolution.md), codec identity travels on `ParamRef.codec` (parameters) and `ProjectionItem.codec` (output) as a `CodecRef` on the AST itself, not on plan-level descriptor lists. See [DEVELOPING.md](DEVELOPING.md) for the `CodecRef` invariant.
93
93
 
94
94
  ### Codec authoring (class form)
95
95
 
@@ -1,4 +1,4 @@
1
- import { Codec, CodecCallContext, CodecCallContext as CodecCallContext$1, CodecDescriptor, CodecDescriptor as CodecDescriptor$1, CodecInstanceContext, CodecTrait, CodecTrait as CodecTrait$1 } from "@prisma-next/framework-components/codec";
1
+ import { Codec, CodecCallContext, CodecCallContext as CodecCallContext$1, CodecDescriptor, CodecDescriptor as CodecDescriptor$1, CodecInstanceContext, CodecRef, CodecRef as CodecRef$1, CodecTrait, CodecTrait as CodecTrait$1 } from "@prisma-next/framework-components/codec";
2
2
 
3
3
  //#region src/ast/codec-types.d.ts
4
4
  /**
@@ -59,10 +59,9 @@ interface Codec$1<Id extends string = string, TTraits extends readonly CodecTrai
59
59
  /**
60
60
  * Contract-bound codec registry.
61
61
  *
62
- * The dispatch interface for encode/decode at runtime: built once at `ExecutionContext` construction time by walking the contract's `storage.tables[].columns[]` and resolving each column through its descriptor's factory (per-instance for parameterized columns; the cached shared codec for non-parameterized columns). The dispatch path calls `forColumn(table, column).encode/decode(...)` and doesn't know whether the codec
63
- * is parameterized.
62
+ * Built once at `ExecutionContext` construction time by walking the contract's `storage.tables[].columns[]` and resolving each column through its descriptor's factory. Runtime encode/decode dispatch resolves codecs via `forCodecRef(ref)` the single dispatch shape for AST-bound codec resolution.
64
63
  *
65
- * `forCodecId(codecId)` is the refs-less fallback. Every column-bound `ParamRef` carries `refs: { table; column }` and the builder-pipeline `validateParamRefRefs` pass enforces refs on every parameterized `ParamRef` before encode runs, so this fallback is only reached for non-parameterized codec ids.
64
+ * `forColumn(table, column)` is retained for build-time helpers that need column-keyed lookup (e.g. projection stamping); runtime dispatch routes through `forCodecRef`.
66
65
  */
67
66
  interface ContractCodecRegistry {
68
67
  /**
@@ -70,10 +69,11 @@ interface ContractCodecRegistry {
70
69
  */
71
70
  forColumn(table: string, column: string): Codec$1 | undefined;
72
71
  /**
73
- * Resolve a codec by id. For non-parameterized codecs this returns the canonical shared instance materialized once at context construction; for parameterized codecs it returns the column-resolved instance when a single column declares the codec id, or the `factory(undefined)` representative when the descriptor's factory is parameter-tolerant. Used by refs-less call sites; the validator pass guarantees the call site's
74
- * `codecId` is non-parameterized (or parameter-tolerant) at this boundary.
72
+ * Resolve a codec by {@link CodecRef}. The single dispatch shape for AST-bound codec resolution every codec-bearing AST node carries a `CodecRef` that resolves through this method via the per-`ExecutionContext` `AstCodecResolver`. Two refs with the same `codecId` and structurally equal `typeParams` (regardless of object key order) return the same memoised codec instance. Throws `RUNTIME.CODEC_DESCRIPTOR_MISSING` for unknown `codecId`s and `RUNTIME.TYPE_PARAMS_INVALID` on `paramsSchema` rejection.
73
+ *
74
+ * Pre-populated from the contract walk at registry construction time (so contract-declared codecs hit on first call); grows lazily for AST-supplied refs not seen at contract-load time (deserialised migration ops, refs-less raw SQL with an explicit codec).
75
75
  */
76
- forCodecId(codecId: string): Codec$1 | undefined;
76
+ forCodecRef(ref: CodecRef): Codec$1;
77
77
  }
78
78
  /**
79
79
  * Variance-erased descriptor type used for heterogeneous storage in collection containers and on the unified contributor `codecs:` slot. The descriptor's `factory` and `renderOutputType` are contravariant in `P`, so descriptors with different params shapes are not in a subtype relationship; collecting them into one container needs an explicit variance erasure rather than `CodecDescriptor<unknown>` (which is the
@@ -103,5 +103,5 @@ type ExtractCodecTypes<ScalarNames extends { readonly [K in keyof ScalarNames]:
103
103
  readonly traits: DescriptorCodecTraits<ScalarNames[K]>;
104
104
  } };
105
105
  //#endregion
106
- export { CodecMeta as a, DescriptorCodecId as c, ExtractCodecTypes as d, SqlCodecCallContext as f, CodecDescriptor$1 as i, DescriptorCodecInput as l, SqlColumnRef as m, Codec$1 as n, CodecTrait$1 as o, SqlCodecInstanceContext as p, CodecCallContext$1 as r, ContractCodecRegistry as s, AnyCodecDescriptor as t, DescriptorCodecTraits as u };
107
- //# sourceMappingURL=codec-types-BUfBna4G.d.mts.map
106
+ export { CodecMeta as a, ContractCodecRegistry as c, DescriptorCodecTraits as d, ExtractCodecTypes as f, SqlColumnRef as h, CodecDescriptor$1 as i, DescriptorCodecId as l, SqlCodecInstanceContext as m, Codec$1 as n, CodecRef$1 as o, SqlCodecCallContext as p, CodecCallContext$1 as r, CodecTrait$1 as s, AnyCodecDescriptor as t, DescriptorCodecInput as u };
107
+ //# sourceMappingURL=codec-types-Cezo7k-i.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec-types-Cezo7k-i.d.mts","names":[],"sources":["../src/ast/codec-types.ts"],"mappings":";;;;AAqBA;;;;UAAiB,YAAA;EAAA,SACN,KAAA;EAAA,SACA,IAAA;AAAA;;;;;;UAQM,mBAAA,SAA4B,gBAAA;EAAA,SAClC,MAAA,GAAS,YAAA;AAAA;;;;;;;;;;UAYH,uBAAA,SAAgC,oBAAA;EAAA,SACtC,MAAA,EAAQ,aAAA;IAAA,SAAyB,KAAA;IAAA,SAAwB,MAAA;EAAA;AAAA;;;;UAMnD,SAAA;EAAA,SACN,EAAA;IAAA,SACE,GAAA;MAAA,SACE,QAAA;QAAA,SACE,UAAA;MAAA;IAAA;EAAA;AAAA;;;;;;;;UAaA,OAAA,sDAEU,UAAA,cAAwB,UAAA,+CAGzC,KAAA,CAAU,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,MAAA;EACtC,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,GAAA,EAAK,mBAAA,GAAsB,OAAA,CAAQ,KAAA;EACzD,MAAA,CAAO,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,mBAAA,GAAsB,OAAA,CAAQ,MAAA;AAAA;;;;;;;;UAUxC,qBAAA;EAZG;;;EAgBlB,SAAA,CAAU,KAAA,UAAe,MAAA,WAAiB,OAAA;EAf1C;;;;;EAsBA,WAAA,CAAY,GAAA,EAAK,QAAA,GAAW,OAAA;AAAA;;;;;KAQlB,kBAAA,GAAqB,eAAA;AAAA,KAE5B,uBAAA,MACH,CAAA,SAAU,eAAA,aAA4B,UAAA,CAAW,UAAA,CAAW,CAAA;AAAA,KAElD,iBAAA,MAAuB,CAAA,SAAU,kBAAA,GAAqB,CAAA;AAAA,KAEtD,oBAAA,MACV,uBAAA,CAAwB,CAAA,UAAW,KAAA,kBAA2B,UAAA,yBAC1D,EAAA;;AA5BN;;;;;KAqCY,qBAAA,MAA2B,CAAA;EAAA,SAC5B,MAAA,iCAAuC,UAAA;AAAA,IAE9C,OAAA,WAAkB,UAAA;;;;;;KAQV,iBAAA,4CAEa,WAAA,GAAc,kBAAA,KACjC,MAAA,yCAEiB,WAAA,IAAe,iBAAA,CAAkB,WAAA,CAAY,CAAA;EAAA,SACvD,KAAA,EAAO,oBAAA,CAAqB,WAAA,CAAY,CAAA;EAAA,SACxC,MAAA,EAAQ,oBAAA,CAAqB,WAAA,CAAY,CAAA;EAAA,SACzC,MAAA,EAAQ,qBAAA,CAAsB,WAAA,CAAY,CAAA;AAAA"}
@@ -1,8 +1,8 @@
1
- import { y as RuntimeError } from "./types-D6Pk1DTr.mjs";
1
+ import { y as RuntimeError } from "./types-BQK1PdQu.mjs";
2
2
 
3
3
  //#region src/errors.d.ts
4
4
  declare function planInvalid(message: string, details?: Record<string, unknown>, hints?: readonly string[], docs?: readonly string[]): RuntimeError;
5
5
  declare function planUnsupported(message: string, details?: Record<string, unknown>, hints?: readonly string[], docs?: readonly string[]): RuntimeError;
6
6
  //#endregion
7
7
  export { planUnsupported as n, planInvalid as t };
8
- //# sourceMappingURL=errors-BgNpVAT8.d.mts.map
8
+ //# sourceMappingURL=errors-D2KewtVl.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors-BgNpVAT8.d.mts","names":[],"sources":["../src/errors.ts"],"mappings":";;;iBAEgB,WAAA,CACd,OAAA,UACA,OAAA,GAAU,MAAA,mBACV,KAAA,sBACA,IAAA,uBACC,YAAA;AAAA,iBAkBa,eAAA,CACd,OAAA,UACA,OAAA,GAAU,MAAA,mBACV,KAAA,sBACA,IAAA,uBACC,YAAA"}
1
+ {"version":3,"file":"errors-D2KewtVl.d.mts","names":[],"sources":["../src/errors.ts"],"mappings":";;;iBAEgB,WAAA,CACd,OAAA,UACA,OAAA,GAAU,MAAA,mBACV,KAAA,sBACA,IAAA,uBACC,YAAA;AAAA,iBAkBa,eAAA,CACd,OAAA,UACA,OAAA,GAAU,MAAA,mBACV,KAAA,sBACA,IAAA,uBACC,YAAA"}
@@ -1,6 +1,5 @@
1
- import { $ as TableRef, A as InsertOnConflict, B as NotExpr, C as ExistsExpr, D as ExpressionSource, E as ExpressionRewriter, F as JsonObjectEntry, G as ParamRef, H as OperationExpr, I as JsonObjectExpr, J as ProjectionItem, K as ParamRefBindingRefs, L as ListExpression, M as JoinAst, N as JoinOnExpr, O as IdentifierRef, P as JsonArrayAggExpr, Q as SubqueryExpr, R as LiteralExpr, S as EqColJoinOn, T as ExpressionFolder, U as OrExpr, V as NullCheckExpr, W as OrderByItem, X as SelectAst, Y as RawSqlExpr, Z as SelectAstOptions, _ as DeleteAst, a as AndExpr, at as isWhereExpr, b as DoNothingConflictAction, c as AnyInsertOnConflictAction, d as AnyQueryAst, et as TableSource, f as AstRewriter, g as DefaultValueExpr, h as ColumnRef, i as AggregateOpFn, it as isQueryAst, j as InsertValue, k as InsertAst, l as AnyInsertValue, m as BinaryOp, n as AggregateExpr, nt as UpdateAst, o as AnyExpression, ot as queryAstKinds, p as BinaryExpr, q as ProjectionExpr, r as AggregateFn, rt as WhereArg, s as AnyFromSource, st as whereExprKinds, t as AggregateCountFn, tt as ToWhereExpr, u as AnyOperationArg, v as DerivedTableSource, w as ExprVisitor, x as DoUpdateSetConflictAction, y as Direction, z as LoweredStatement } from "../types-BZcKgaYA.mjs";
2
- import { a as CodecMeta, c as DescriptorCodecId, d as ExtractCodecTypes, f as SqlCodecCallContext, i as CodecDescriptor, l as DescriptorCodecInput, m as SqlColumnRef, n as Codec, o as CodecTrait, p as SqlCodecInstanceContext, r as CodecCallContext, s as ContractCodecRegistry, t as AnyCodecDescriptor, u as DescriptorCodecTraits } from "../codec-types-BUfBna4G.mjs";
3
- import { n as CodecDescriptorRegistry } from "../query-lane-context-C2tLZGp4.mjs";
1
+ import { a as CodecMeta, c as ContractCodecRegistry, d as DescriptorCodecTraits, f as ExtractCodecTypes, h as SqlColumnRef, i as CodecDescriptor, l as DescriptorCodecId, m as SqlCodecInstanceContext, n as Codec, o as CodecRef, p as SqlCodecCallContext, r as CodecCallContext, s as CodecTrait, t as AnyCodecDescriptor, u as DescriptorCodecInput } from "../codec-types-Cezo7k-i.mjs";
2
+ import { $ as TableSource, A as InsertOnConflict, B as NotExpr, C as ExistsExpr, D as ExpressionSource, E as ExpressionRewriter, F as JsonObjectEntry, G as ParamRef, H as OperationExpr, I as JsonObjectExpr, J as RawSqlExpr, K as ProjectionExpr, L as ListExpression, M as JoinAst, N as JoinOnExpr, O as IdentifierRef, P as JsonArrayAggExpr, Q as TableRef, R as LiteralExpr, S as EqColJoinOn, T as ExpressionFolder, U as OrExpr, V as NullCheckExpr, W as OrderByItem, X as SelectAstOptions, Y as SelectAst, Z as SubqueryExpr, _ as DeleteAst, a as AndExpr, at as queryAstKinds, b as DoNothingConflictAction, c as AnyInsertOnConflictAction, d as AnyQueryAst, et as ToWhereExpr, f as AstRewriter, g as DefaultValueExpr, h as ColumnRef, i as AggregateOpFn, it as isWhereExpr, j as InsertValue, k as InsertAst, l as AnyInsertValue, m as BinaryOp, n as AggregateExpr, nt as WhereArg, o as AnyExpression, ot as whereExprKinds, p as BinaryExpr, q as ProjectionItem, r as AggregateFn, rt as isQueryAst, s as AnyFromSource, t as AggregateCountFn, tt as UpdateAst, u as AnyOperationArg, v as DerivedTableSource, w as ExprVisitor, x as DoUpdateSetConflictAction, y as Direction, z as LoweredStatement } from "../types-juiKe2qf.mjs";
4
3
  import * as _$_prisma_next_framework_components_codec0 from "@prisma-next/framework-components/codec";
5
4
  import { CodecCallContext as CodecCallContext$1, CodecDescriptorImpl, CodecImpl, CodecInstanceContext } from "@prisma-next/framework-components/codec";
6
5
  import { ContractMarkerRecord, JsonValue } from "@prisma-next/contract/types";
@@ -255,13 +254,5 @@ declare function compact<T extends Record<string, unknown>>(o: T): T;
255
254
  */
256
255
  declare function collectOrderedParamRefs(ast: AnyQueryAst): ReadonlyArray<ParamRef>;
257
256
  //#endregion
258
- //#region src/ast/validate-param-refs.d.ts
259
- /**
260
- * Validate that every parameterized-codec `ParamRef` in `plan` carries `refs`. Throws `RUNTIME.PARAM_REF_REFS_REQUIRED` (a runtime envelope) naming the codec id and the binding label when the invariant is violated. Returns the plan unchanged on success — callers that prefer a side-effecting assertion can ignore the return value.
261
- *
262
- * The `registry` is consulted via `descriptorFor(codecId).isParameterized` — `true` whenever the descriptor's `paramsSchema` is not the singleton `voidParamsSchema`.
263
- */
264
- declare function validateParamRefRefs(plan: AnyQueryAst, registry: CodecDescriptorRegistry): void;
265
- //#endregion
266
- export { Adapter, AdapterProfile, AdapterTarget, AggregateCountFn, AggregateExpr, AggregateFn, AggregateOpFn, AndExpr, AnyCodecDescriptor, AnyExpression, AnyFromSource, AnyInsertOnConflictAction, AnyInsertValue, AnyOperationArg, AnyQueryAst, AstRewriter, BinaryExpr, BinaryOp, Codec, CodecCallContext, CodecDescriptor, CodecMeta, CodecTrait, ColumnRef, ContractCodecRegistry, DefaultValueExpr, DeleteAst, DerivedTableSource, DescriptorCodecId, DescriptorCodecInput, DescriptorCodecTraits, Direction, DoNothingConflictAction, DoUpdateSetConflictAction, EqColJoinOn, ExistsExpr, ExprVisitor, ExpressionFolder, ExpressionRewriter, ExpressionSource, ExtractCodecTypes, IdentifierRef, InsertAst, InsertOnConflict, InsertValue, JoinAst, JoinOnExpr, JsonArrayAggExpr, JsonObjectEntry, JsonObjectExpr, ListExpression, LiteralExpr, LoweredStatement, Lowerer, LowererContext, MarkerReadResult, MarkerStatement, NotExpr, NullCheckExpr, OperationExpr, OrExpr, OrderByItem, ParamRef, ParamRefBindingRefs, ProjectionExpr, ProjectionItem, RawSqlExpr, SQL_CHAR_CODEC_ID, SQL_FLOAT_CODEC_ID, SQL_INT_CODEC_ID, SQL_TEXT_CODEC_ID, SQL_TIMESTAMP_CODEC_ID, SQL_VARCHAR_CODEC_ID, SelectAst, SelectAstOptions, SqlCharCodec, SqlCharDescriptor, SqlCodecCallContext, SqlCodecInstanceContext, SqlColumnRef, SqlConnection, SqlDriver, SqlDriverState, SqlExecuteRequest, SqlExplainResult, SqlFloatCodec, SqlFloatDescriptor, SqlIntCodec, SqlIntDescriptor, SqlQueryResult, SqlQueryable, SqlTextCodec, SqlTextDescriptor, SqlTimestampCodec, SqlTimestampDescriptor, SqlTransaction, SqlVarcharCodec, SqlVarcharDescriptor, SubqueryExpr, TableRef, TableSource, ToWhereExpr, UpdateAst, WhereArg, collectOrderedParamRefs, compact, isQueryAst, isWhereExpr, queryAstKinds, sqlCharColumn, sqlCharDecode, sqlCharDescriptor, sqlCharEncode, sqlCharRenderOutputType, sqlFloatColumn, sqlFloatDecode, sqlFloatDescriptor, sqlFloatEncode, sqlIntColumn, sqlIntDecode, sqlIntDescriptor, sqlIntEncode, sqlTextColumn, sqlTextDecode, sqlTextDescriptor, sqlTextEncode, sqlTimestampColumn, sqlTimestampDecode, sqlTimestampDecodeJson, sqlTimestampDescriptor, sqlTimestampEncode, sqlTimestampEncodeJson, sqlTimestampRenderOutputType, sqlVarcharColumn, sqlVarcharDecode, sqlVarcharDescriptor, sqlVarcharEncode, sqlVarcharRenderOutputType, validateParamRefRefs, whereExprKinds };
257
+ export { Adapter, AdapterProfile, AdapterTarget, AggregateCountFn, AggregateExpr, AggregateFn, AggregateOpFn, AndExpr, AnyCodecDescriptor, AnyExpression, AnyFromSource, AnyInsertOnConflictAction, AnyInsertValue, AnyOperationArg, AnyQueryAst, AstRewriter, BinaryExpr, BinaryOp, Codec, CodecCallContext, CodecDescriptor, CodecMeta, CodecRef, CodecTrait, ColumnRef, ContractCodecRegistry, DefaultValueExpr, DeleteAst, DerivedTableSource, DescriptorCodecId, DescriptorCodecInput, DescriptorCodecTraits, Direction, DoNothingConflictAction, DoUpdateSetConflictAction, EqColJoinOn, ExistsExpr, ExprVisitor, ExpressionFolder, ExpressionRewriter, ExpressionSource, ExtractCodecTypes, IdentifierRef, InsertAst, InsertOnConflict, InsertValue, JoinAst, JoinOnExpr, JsonArrayAggExpr, JsonObjectEntry, JsonObjectExpr, ListExpression, LiteralExpr, LoweredStatement, Lowerer, LowererContext, MarkerReadResult, MarkerStatement, NotExpr, NullCheckExpr, OperationExpr, OrExpr, OrderByItem, ParamRef, ProjectionExpr, ProjectionItem, RawSqlExpr, SQL_CHAR_CODEC_ID, SQL_FLOAT_CODEC_ID, SQL_INT_CODEC_ID, SQL_TEXT_CODEC_ID, SQL_TIMESTAMP_CODEC_ID, SQL_VARCHAR_CODEC_ID, SelectAst, SelectAstOptions, SqlCharCodec, SqlCharDescriptor, SqlCodecCallContext, SqlCodecInstanceContext, SqlColumnRef, SqlConnection, SqlDriver, SqlDriverState, SqlExecuteRequest, SqlExplainResult, SqlFloatCodec, SqlFloatDescriptor, SqlIntCodec, SqlIntDescriptor, SqlQueryResult, SqlQueryable, SqlTextCodec, SqlTextDescriptor, SqlTimestampCodec, SqlTimestampDescriptor, SqlTransaction, SqlVarcharCodec, SqlVarcharDescriptor, SubqueryExpr, TableRef, TableSource, ToWhereExpr, UpdateAst, WhereArg, collectOrderedParamRefs, compact, isQueryAst, isWhereExpr, queryAstKinds, sqlCharColumn, sqlCharDecode, sqlCharDescriptor, sqlCharEncode, sqlCharRenderOutputType, sqlFloatColumn, sqlFloatDecode, sqlFloatDescriptor, sqlFloatEncode, sqlIntColumn, sqlIntDecode, sqlIntDescriptor, sqlIntEncode, sqlTextColumn, sqlTextDecode, sqlTextDescriptor, sqlTextEncode, sqlTimestampColumn, sqlTimestampDecode, sqlTimestampDecodeJson, sqlTimestampDescriptor, sqlTimestampEncode, sqlTimestampEncodeJson, sqlTimestampRenderOutputType, sqlVarcharColumn, sqlVarcharDecode, sqlVarcharDescriptor, sqlVarcharEncode, sqlVarcharRenderOutputType, whereExprKinds };
267
258
  //# sourceMappingURL=ast.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast.d.mts","names":[],"sources":["../../src/ast/driver-types.ts","../../src/ast/adapter-types.ts","../../src/ast/sql-codec-helpers.ts","../../src/ast/sql-codecs.ts","../../src/ast/util.ts","../../src/ast/validate-param-refs.ts"],"mappings":";;;;;;;;;UAAiB,iBAAA;EAAA,SACN,GAAA;EAAA,SACA,MAAA;AAAA;AAAA,UAGM,cAAA,OAAqB,MAAA;EAAA,SAC3B,IAAA,EAAM,aAAA,CAAc,GAAA;EAAA,SACpB,QAAA;EAAA,UACC,GAAA;AAAA;AAAA,UAGK,gBAAA,OAAuB,MAAA;EAAA,SAC7B,IAAA,EAAM,aAAA,CAAc,GAAA;AAAA;AAAA,KAGnB,cAAA;AAAA,UAEK,SAAA,0BAAmC,YAAA;EAAA,SACzC,KAAA,GAAQ,cAAA;EACjB,OAAA,CAAQ,OAAA,EAAS,QAAA,GAAW,OAAA;EAC5B,iBAAA,IAAqB,OAAA,CAAQ,aAAA;EAC7B,KAAA,IAAS,OAAA;AAAA;AAAA,UAGM,aAAA,SAAsB,YAAA;EACrC,gBAAA,IAAoB,OAAA,CAAQ,cAAA;EAnBA;;;;;;EA0B5B,OAAA,IAAW,OAAA;EAxBD;;;AAGZ;;;;;;;;;;;;;;;AAIA;;;;;EAyCE,OAAA,CAAQ,MAAA,aAAmB,OAAA;AAAA;AAAA,UAGZ,cAAA,SAAuB,YAAA;EACtC,MAAA,IAAU,OAAA;EACV,QAAA,IAAY,OAAA;AAAA;AAAA,UAGG,YAAA;EACf,OAAA,OAAc,MAAA,mBAAyB,OAAA,EAAS,iBAAA,GAAoB,aAAA,CAAc,GAAA;EAClF,OAAA,EAAS,OAAA,EAAS,iBAAA,GAAoB,OAAA,CAAQ,gBAAA;EAC9C,KAAA,OAAY,MAAA,mBACV,GAAA,UACA,MAAA,wBACC,OAAA,CAAQ,cAAA,CAAe,GAAA;AAAA;;;KClEhB,aAAA;AAAA,UAEK,eAAA;EAAA,SACN,GAAA;EAAA,SACA,MAAA;AAAA;;ADRX;;KCcY,gBAAA;EAAA,SACG,IAAA;EAAA,SAA0B,MAAA,EAAQ,oBAAA;AAAA;EAAA,SAClC,IAAA;AAAA;EAAA,SACA,IAAA;AAAA;AAAA,UAEE,cAAA,iBAA+B,aAAA,GAAgB,aAAA;EAAA,SACrD,EAAA;EAAA,SACA,MAAA,EAAQ,OAAA;EAAA,SACR,YAAA,EAAc,MAAA;EDjBa;;;ECqBpC,UAAA,CAAW,SAAA,EAAW,YAAA,GAAe,OAAA,CAAQ,gBAAA;AAAA;AAAA,UAG9B,cAAA;EAAA,SACN,QAAA,EAAU,SAAA;EAAA,SACV,MAAA;AAAA;AAAA,KAGC,OAAA,6CAAoD,gBAAA,KAC9D,GAAA,EAAK,GAAA,EACL,OAAA,EAAS,cAAA,CAAe,SAAA,MACrB,KAAA;;;;UAKY,OAAA,6CAAoD,gBAAA;EAAA,SAC1D,OAAA,EAAS,cAAA;EAClB,KAAA,CAAM,GAAA,EAAK,GAAA,EAAK,OAAA,EAAS,cAAA,CAAe,SAAA,IAAa,KAAA;AAAA;;;cCpC1C,iBAAA;AAAA,cACA,oBAAA;AAAA,cACA,gBAAA;AAAA,cACA,kBAAA;AAAA,cACA,iBAAA;AAAA,cACA,sBAAA;AAAA,cAEA,aAAA,GAAiB,KAAA;AAAA,cACjB,aAAA,GAAiB,IAAA;AAAA,cACjB,uBAAA,GAA2B,UAAA;EAAA,SAAuB,MAAA;AAAA;AAAA,cAWlD,gBAAA,GAAoB,KAAA;AAAA,cACpB,gBAAA,GAAoB,IAAA;AAAA,cACpB,0BAAA,GAA8B,UAAA;EAAA,SAAuB,MAAA;AAAA;AAAA,cAWrD,YAAA,GAAgB,KAAA;AAAA,cAChB,YAAA,GAAgB,IAAA;AAAA,cAEhB,cAAA,GAAkB,KAAA;AAAA,cAClB,cAAA,GAAkB,IAAA;AAAA,cAElB,aAAA,GAAiB,KAAA;AAAA,cACjB,aAAA,GAAiB,IAAA;AAAA,cAEjB,kBAAA,GAAsB,KAAA,EAAO,IAAA,KAAO,IAAA;AAAA,cACpC,kBAAA,GAAsB,IAAA,EAAM,IAAA,KAAO,IAAA;AAAA,cACnC,sBAAA,GAA0B,KAAA,EAAO,IAAA,KAAO,SAAA;AAAA,cACxC,sBAAA,GAA0B,IAAA,EAAM,SAAA,KAAY,IAAA;AAAA,cAU5C,4BAAA,GAAgC,UAAA;EAAA,SAAuB,SAAA;AAAA;;;KCb/D,YAAA;EAAA,SAA0B,MAAA;AAAA;AAAA,KAC1B,eAAA;EAAA,SAA6B,SAAA;AAAA;AAAA,cAUrB,YAAA,SAAqB,SAAA,QACzB,iBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,iBAAA,SAA0B,mBAAA;EAAA,SACnB,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA;EACvB,OAAA,CAAA,IAAY,GAAA,EAAK,oBAAA,KAAyB,YAAA;AAAA;AAAA,cAKxC,iBAAA,EAAiB,iBAAA;AAAA,cAEjB,aAAA,QAAa,0CAAA,CAAA,UAAA,CAAA,YAAA;AAAA,cAMb,WAAA,SAAoB,SAAA,QACxB,gBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,gBAAA,SAAyB,mBAAA;EAAA,SAClB,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA;EACvB,OAAA,CAAA,IAAY,GAAA,EAAK,oBAAA,KAAyB,WAAA;AAAA;AAAA,cAKxC,gBAAA,EAAgB,gBAAA;AAAA,cAEhB,YAAA,QAAY,0CAAA,CAAA,UAAA,CAAA,WAAA;AAAA,cAMZ,aAAA,SAAsB,SAAA,QAC1B,kBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,kBAAA,SAA2B,mBAAA;EAAA,SACpB,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA;EACvB,OAAA,CAAA,IAAY,GAAA,EAAK,oBAAA,KAAyB,aAAA;AAAA;AAAA,cAKxC,kBAAA,EAAkB,kBAAA;AAAA,cAElB,cAAA,QAAc,0CAAA,CAAA,UAAA,CAAA,aAAA;AAAA,cAMd,YAAA,SAAqB,SAAA,QACzB,iBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,iBAAA,SAA0B,mBAAA,CAAoB,YAAA;EAAA,SACvC,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA,CAAiB,YAAA;EACxC,gBAAA,CAAiB,MAAA,EAAQ,YAAA;EAGzB,OAAA,CAAQ,OAAA,EAAS,YAAA,IAAgB,GAAA,EAAK,oBAAA,KAAyB,YAAA;AAAA;AAAA,cAK7D,iBAAA,EAAiB,iBAAA;AAAA,cAEjB,aAAA,GAAiB,MAAA,GAAQ,YAAA,KAAiB,0CAAA,CAAA,UAAA,CAAA,YAAA,EAAA,YAAA;AAAA,cAM1C,eAAA,SAAwB,SAAA,QAC5B,oBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,oBAAA,SAA6B,mBAAA,CAAoB,YAAA;EAAA,SAC1C,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA,CAAiB,YAAA;EACxC,gBAAA,CAAiB,MAAA,EAAQ,YAAA;EAGzB,OAAA,CAAQ,OAAA,EAAS,YAAA,IAAgB,GAAA,EAAK,oBAAA,KAAyB,eAAA;AAAA;AAAA,cAK7D,oBAAA,EAAoB,oBAAA;AAAA,cAEpB,gBAAA,GAAoB,MAAA,GAAQ,YAAA,KAAiB,0CAAA,CAAA,UAAA,CAAA,eAAA,EAAA,YAAA;AAAA,cAM7C,iBAAA,SAA0B,SAAA,QAC9B,sBAAA,kCAEP,IAAA,EACA,IAAA;EAEM,MAAA,CAAO,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,kBAAA,GAAmB,OAAA,CAAQ,IAAA;EAGrD,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,kBAAA,GAAmB,OAAA,CAAQ,IAAA;EAG1D,UAAA,CAAW,KAAA,EAAO,IAAA,GAAO,SAAA;EAGzB,UAAA,CAAW,IAAA,EAAM,SAAA,GAAY,IAAA;AAAA;AAAA,cAKlB,sBAAA,SAA+B,mBAAA,CAAoB,eAAA;EAAA,SAC5C,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA,CAAiB,eAAA;EACxC,gBAAA,CAAiB,MAAA,EAAQ,eAAA;EAGzB,OAAA,CAAQ,OAAA,EAAS,eAAA,IAAmB,GAAA,EAAK,oBAAA,KAAyB,iBAAA;AAAA;AAAA,cAKhE,sBAAA,EAAsB,sBAAA;AAAA,cAEtB,kBAAA,GAAsB,MAAA,GAAQ,eAAA,KAAoB,0CAAA,CAAA,UAAA,CAAA,iBAAA,EAAA,eAAA;;;iBClS/C,OAAA,WAAkB,MAAA,kBAAA,CAAyB,CAAA,EAAG,CAAA,GAAI,CAAA;;;;;;;;AJFlE;;;iBIsBgB,uBAAA,CAAwB,GAAA,EAAK,WAAA,GAAc,aAAA,CAAc,QAAA;;;;;;;AJjBzE;iBKcgB,oBAAA,CAAqB,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,uBAAA"}
1
+ {"version":3,"file":"ast.d.mts","names":[],"sources":["../../src/ast/driver-types.ts","../../src/ast/adapter-types.ts","../../src/ast/sql-codec-helpers.ts","../../src/ast/sql-codecs.ts","../../src/ast/util.ts"],"mappings":";;;;;;;;UAAiB,iBAAA;EAAA,SACN,GAAA;EAAA,SACA,MAAA;AAAA;AAAA,UAGM,cAAA,OAAqB,MAAA;EAAA,SAC3B,IAAA,EAAM,aAAA,CAAc,GAAA;EAAA,SACpB,QAAA;EAAA,UACC,GAAA;AAAA;AAAA,UAGK,gBAAA,OAAuB,MAAA;EAAA,SAC7B,IAAA,EAAM,aAAA,CAAc,GAAA;AAAA;AAAA,KAGnB,cAAA;AAAA,UAEK,SAAA,0BAAmC,YAAA;EAAA,SACzC,KAAA,GAAQ,cAAA;EACjB,OAAA,CAAQ,OAAA,EAAS,QAAA,GAAW,OAAA;EAC5B,iBAAA,IAAqB,OAAA,CAAQ,aAAA;EAC7B,KAAA,IAAS,OAAA;AAAA;AAAA,UAGM,aAAA,SAAsB,YAAA;EACrC,gBAAA,IAAoB,OAAA,CAAQ,cAAA;EApBE;;;;;;EA2B9B,OAAA,IAAW,OAAA;EAxBU;;AAGvB;;;;;;;;;;;;;;;AAIA;;;;;AAEA;EAuCE,OAAA,CAAQ,MAAA,aAAmB,OAAA;AAAA;AAAA,UAGZ,cAAA,SAAuB,YAAA;EACtC,MAAA,IAAU,OAAA;EACV,QAAA,IAAY,OAAA;AAAA;AAAA,UAGG,YAAA;EACf,OAAA,OAAc,MAAA,mBAAyB,OAAA,EAAS,iBAAA,GAAoB,aAAA,CAAc,GAAA;EAClF,OAAA,EAAS,OAAA,EAAS,iBAAA,GAAoB,OAAA,CAAQ,gBAAA;EAC9C,KAAA,OAAY,MAAA,mBACV,GAAA,UACA,MAAA,wBACC,OAAA,CAAQ,cAAA,CAAe,GAAA;AAAA;;;KClEhB,aAAA;AAAA,UAEK,eAAA;EAAA,SACN,GAAA;EAAA,SACA,MAAA;AAAA;ADRX;;;AAAA,KCcY,gBAAA;EAAA,SACG,IAAA;EAAA,SAA0B,MAAA,EAAQ,oBAAA;AAAA;EAAA,SAClC,IAAA;AAAA;EAAA,SACA,IAAA;AAAA;AAAA,UAEE,cAAA,iBAA+B,aAAA,GAAgB,aAAA;EAAA,SACrD,EAAA;EAAA,SACA,MAAA,EAAQ,OAAA;EAAA,SACR,YAAA,EAAc,MAAA;EDhBd;;;ECoBT,UAAA,CAAW,SAAA,EAAW,YAAA,GAAe,OAAA,CAAQ,gBAAA;AAAA;AAAA,UAG9B,cAAA;EAAA,SACN,QAAA,EAAU,SAAA;EAAA,SACV,MAAA;AAAA;AAAA,KAGC,OAAA,6CAAoD,gBAAA,KAC9D,GAAA,EAAK,GAAA,EACL,OAAA,EAAS,cAAA,CAAe,SAAA,MACrB,KAAA;;;;UAKY,OAAA,6CAAoD,gBAAA;EAAA,SAC1D,OAAA,EAAS,cAAA;EAClB,KAAA,CAAM,GAAA,EAAK,GAAA,EAAK,OAAA,EAAS,cAAA,CAAe,SAAA,IAAa,KAAA;AAAA;;;cCpC1C,iBAAA;AAAA,cACA,oBAAA;AAAA,cACA,gBAAA;AAAA,cACA,kBAAA;AAAA,cACA,iBAAA;AAAA,cACA,sBAAA;AAAA,cAEA,aAAA,GAAiB,KAAA;AAAA,cACjB,aAAA,GAAiB,IAAA;AAAA,cACjB,uBAAA,GAA2B,UAAA;EAAA,SAAuB,MAAA;AAAA;AAAA,cAWlD,gBAAA,GAAoB,KAAA;AAAA,cACpB,gBAAA,GAAoB,IAAA;AAAA,cACpB,0BAAA,GAA8B,UAAA;EAAA,SAAuB,MAAA;AAAA;AAAA,cAWrD,YAAA,GAAgB,KAAA;AAAA,cAChB,YAAA,GAAgB,IAAA;AAAA,cAEhB,cAAA,GAAkB,KAAA;AAAA,cAClB,cAAA,GAAkB,IAAA;AAAA,cAElB,aAAA,GAAiB,KAAA;AAAA,cACjB,aAAA,GAAiB,IAAA;AAAA,cAEjB,kBAAA,GAAsB,KAAA,EAAO,IAAA,KAAO,IAAA;AAAA,cACpC,kBAAA,GAAsB,IAAA,EAAM,IAAA,KAAO,IAAA;AAAA,cACnC,sBAAA,GAA0B,KAAA,EAAO,IAAA,KAAO,SAAA;AAAA,cACxC,sBAAA,GAA0B,IAAA,EAAM,SAAA,KAAY,IAAA;AAAA,cAU5C,4BAAA,GAAgC,UAAA;EAAA,SAAuB,SAAA;AAAA;;;KCb/D,YAAA;EAAA,SAA0B,MAAA;AAAA;AAAA,KAC1B,eAAA;EAAA,SAA6B,SAAA;AAAA;AAAA,cAUrB,YAAA,SAAqB,SAAA,QACzB,iBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,iBAAA,SAA0B,mBAAA;EAAA,SACnB,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA;EACvB,OAAA,CAAA,IAAY,GAAA,EAAK,oBAAA,KAAyB,YAAA;AAAA;AAAA,cAKxC,iBAAA,EAAiB,iBAAA;AAAA,cAEjB,aAAA,QAAa,0CAAA,CAAA,UAAA,CAAA,YAAA;AAAA,cAMb,WAAA,SAAoB,SAAA,QACxB,gBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,gBAAA,SAAyB,mBAAA;EAAA,SAClB,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA;EACvB,OAAA,CAAA,IAAY,GAAA,EAAK,oBAAA,KAAyB,WAAA;AAAA;AAAA,cAKxC,gBAAA,EAAgB,gBAAA;AAAA,cAEhB,YAAA,QAAY,0CAAA,CAAA,UAAA,CAAA,WAAA;AAAA,cAMZ,aAAA,SAAsB,SAAA,QAC1B,kBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,kBAAA,SAA2B,mBAAA;EAAA,SACpB,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA;EACvB,OAAA,CAAA,IAAY,GAAA,EAAK,oBAAA,KAAyB,aAAA;AAAA;AAAA,cAKxC,kBAAA,EAAkB,kBAAA;AAAA,cAElB,cAAA,QAAc,0CAAA,CAAA,UAAA,CAAA,aAAA;AAAA,cAMd,YAAA,SAAqB,SAAA,QACzB,iBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,iBAAA,SAA0B,mBAAA,CAAoB,YAAA;EAAA,SACvC,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA,CAAiB,YAAA;EACxC,gBAAA,CAAiB,MAAA,EAAQ,YAAA;EAGzB,OAAA,CAAQ,OAAA,EAAS,YAAA,IAAgB,GAAA,EAAK,oBAAA,KAAyB,YAAA;AAAA;AAAA,cAK7D,iBAAA,EAAiB,iBAAA;AAAA,cAEjB,aAAA,GAAiB,MAAA,GAAQ,YAAA,KAAiB,0CAAA,CAAA,UAAA,CAAA,YAAA,EAAA,YAAA;AAAA,cAM1C,eAAA,SAAwB,SAAA,QAC5B,oBAAA;EAKD,MAAA,CAAO,KAAA,UAAe,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAG/C,MAAA,CAAO,IAAA,UAAc,IAAA,EAAM,kBAAA,GAAmB,OAAA;EAGpD,UAAA,CAAW,KAAA,WAAgB,SAAA;EAG3B,UAAA,CAAW,IAAA,EAAM,SAAA;AAAA;AAAA,cAKN,oBAAA,SAA6B,mBAAA,CAAoB,YAAA;EAAA,SAC1C,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA,CAAiB,YAAA;EACxC,gBAAA,CAAiB,MAAA,EAAQ,YAAA;EAGzB,OAAA,CAAQ,OAAA,EAAS,YAAA,IAAgB,GAAA,EAAK,oBAAA,KAAyB,eAAA;AAAA;AAAA,cAK7D,oBAAA,EAAoB,oBAAA;AAAA,cAEpB,gBAAA,GAAoB,MAAA,GAAQ,YAAA,KAAiB,0CAAA,CAAA,UAAA,CAAA,eAAA,EAAA,YAAA;AAAA,cAM7C,iBAAA,SAA0B,SAAA,QAC9B,sBAAA,kCAEP,IAAA,EACA,IAAA;EAEM,MAAA,CAAO,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,kBAAA,GAAmB,OAAA,CAAQ,IAAA;EAGrD,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,kBAAA,GAAmB,OAAA,CAAQ,IAAA;EAG1D,UAAA,CAAW,KAAA,EAAO,IAAA,GAAO,SAAA;EAGzB,UAAA,CAAW,IAAA,EAAM,SAAA,GAAY,IAAA;AAAA;AAAA,cAKlB,sBAAA,SAA+B,mBAAA,CAAoB,eAAA;EAAA,SAC5C,OAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA,EAAc,gBAAA,CAAiB,eAAA;EACxC,gBAAA,CAAiB,MAAA,EAAQ,eAAA;EAGzB,OAAA,CAAQ,OAAA,EAAS,eAAA,IAAmB,GAAA,EAAK,oBAAA,KAAyB,iBAAA;AAAA;AAAA,cAKhE,sBAAA,EAAsB,sBAAA;AAAA,cAEtB,kBAAA,GAAsB,MAAA,GAAQ,eAAA,KAAoB,0CAAA,CAAA,UAAA,CAAA,iBAAA,EAAA,eAAA;;;iBClS/C,OAAA,WAAkB,MAAA,kBAAA,CAAyB,CAAA,EAAG,CAAA,GAAI,CAAA;;;;;;;AJFlE;;;;iBIsBgB,uBAAA,CAAwB,GAAA,EAAK,WAAA,GAAc,aAAA,CAAc,QAAA"}
@@ -1,8 +1,7 @@
1
- import { A as TableSource, C as OrExpr, D as RawSqlExpr, E as ProjectionItem, F as whereExprKinds, M as isQueryAst, N as isWhereExpr, O as SelectAst, P as queryAstKinds, S as OperationExpr, T as ParamRef, _ as JsonObjectExpr, a as DefaultValueExpr, b as NotExpr, c as DoNothingConflictAction, d as ExistsExpr, f as IdentifierRef, g as JsonArrayAggExpr, h as JoinAst, i as ColumnRef, j as UpdateAst, k as SubqueryExpr, l as DoUpdateSetConflictAction, m as InsertOnConflict, n as AndExpr, o as DeleteAst, p as InsertAst, r as BinaryExpr, s as DerivedTableSource, t as AggregateExpr, u as EqColJoinOn, v as ListExpression, w as OrderByItem, x as NullCheckExpr, y as LiteralExpr } from "../types-CK9ZJ6OU.mjs";
1
+ import { A as TableSource, C as OrExpr, D as RawSqlExpr, E as ProjectionItem, F as whereExprKinds, M as isQueryAst, N as isWhereExpr, O as SelectAst, P as queryAstKinds, S as OperationExpr, T as ParamRef, _ as JsonObjectExpr, a as DefaultValueExpr, b as NotExpr, c as DoNothingConflictAction, d as ExistsExpr, f as IdentifierRef, g as JsonArrayAggExpr, h as JoinAst, i as ColumnRef, j as UpdateAst, k as SubqueryExpr, l as DoUpdateSetConflictAction, m as InsertOnConflict, n as AndExpr, o as DeleteAst, p as InsertAst, r as BinaryExpr, s as DerivedTableSource, t as AggregateExpr, u as EqColJoinOn, v as ListExpression, w as OrderByItem, x as NullCheckExpr, y as LiteralExpr } from "../types-DRYJSMk1.mjs";
2
2
  import { n as compact, t as collectOrderedParamRefs } from "../util-DWmhUCEO.mjs";
3
3
  import { CodecDescriptorImpl, CodecImpl, column, voidParamsSchema } from "@prisma-next/framework-components/codec";
4
4
  import { type } from "arktype";
5
- import { runtimeError } from "@prisma-next/framework-components/runtime";
6
5
  //#region src/ast/sql-codec-helpers.ts
7
6
  const SQL_CHAR_CODEC_ID = "sql/char@1";
8
7
  const SQL_VARCHAR_CODEC_ID = "sql/varchar@1";
@@ -231,35 +230,6 @@ var SqlTimestampDescriptor = class extends CodecDescriptorImpl {
231
230
  const sqlTimestampDescriptor = new SqlTimestampDescriptor();
232
231
  const sqlTimestampColumn = (params = {}) => column(sqlTimestampDescriptor.factory(params), sqlTimestampDescriptor.codecId, params, "timestamp");
233
232
  //#endregion
234
- //#region src/ast/validate-param-refs.ts
235
- /**
236
- * Builder-pipeline validator pass: every {@link ParamRef} whose `codecId` resolves to a *parameterized* descriptor must carry `refs: { table, column }` so encode-side dispatch can call `contractCodecs.forColumn(table, column)`. Refs-less parameterized `ParamRef`s are a hard error — the codec-id-keyed `forCodecId` fallback cannot disambiguate per-instance codecs (e.g. `vector(1024)` vs. `vector(1536)`), so the dispatch
237
- * path must reject them at validation time rather than silently bind to the wrong instance.
238
- *
239
- * Non-parameterized codec ids (the `voidParamsSchema` case) are always dispatch-safe via codec id alone, so refs-less ParamRefs for those ids are accepted unchanged.
240
- *
241
- * The pass runs post-build / pre-execute — the natural location is the SQL runtime's `lower()` step, between any `beforeCompile` rewrites and `encodeParams`. See AC-5 in the codec-registry-unification spec.
242
- */
243
- /**
244
- * Validate that every parameterized-codec `ParamRef` in `plan` carries `refs`. Throws `RUNTIME.PARAM_REF_REFS_REQUIRED` (a runtime envelope) naming the codec id and the binding label when the invariant is violated. Returns the plan unchanged on success — callers that prefer a side-effecting assertion can ignore the return value.
245
- *
246
- * The `registry` is consulted via `descriptorFor(codecId).isParameterized` — `true` whenever the descriptor's `paramsSchema` is not the singleton `voidParamsSchema`.
247
- */
248
- function validateParamRefRefs(plan, registry) {
249
- for (const ref of collectOrderedParamRefs(plan)) diagnoseRef(ref, registry);
250
- }
251
- function diagnoseRef(ref, registry) {
252
- if (!ref.codecId) return;
253
- const descriptor = registry.descriptorFor(ref.codecId);
254
- if (descriptor === void 0) return;
255
- if (!descriptor.isParameterized) return;
256
- if (ref.refs) return;
257
- throw runtimeError("RUNTIME.PARAM_REF_REFS_REQUIRED", `ParamRef '${ref.name ?? "<anonymous>"}' for parameterized codec '${ref.codecId}' is missing column refs; column-aware dispatch requires { table, column } at the binding site.`, {
258
- codecId: ref.codecId,
259
- paramName: ref.name
260
- });
261
- }
262
- //#endregion
263
- export { AggregateExpr, AndExpr, BinaryExpr, ColumnRef, DefaultValueExpr, DeleteAst, DerivedTableSource, DoNothingConflictAction, DoUpdateSetConflictAction, EqColJoinOn, ExistsExpr, IdentifierRef, InsertAst, InsertOnConflict, JoinAst, JsonArrayAggExpr, JsonObjectExpr, ListExpression, LiteralExpr, NotExpr, NullCheckExpr, OperationExpr, OrExpr, OrderByItem, ParamRef, ProjectionItem, RawSqlExpr, SQL_CHAR_CODEC_ID, SQL_FLOAT_CODEC_ID, SQL_INT_CODEC_ID, SQL_TEXT_CODEC_ID, SQL_TIMESTAMP_CODEC_ID, SQL_VARCHAR_CODEC_ID, SelectAst, SqlCharCodec, SqlCharDescriptor, SqlFloatCodec, SqlFloatDescriptor, SqlIntCodec, SqlIntDescriptor, SqlTextCodec, SqlTextDescriptor, SqlTimestampCodec, SqlTimestampDescriptor, SqlVarcharCodec, SqlVarcharDescriptor, SubqueryExpr, TableSource, UpdateAst, collectOrderedParamRefs, compact, isQueryAst, isWhereExpr, queryAstKinds, sqlCharColumn, sqlCharDecode, sqlCharDescriptor, sqlCharEncode, sqlCharRenderOutputType, sqlFloatColumn, sqlFloatDecode, sqlFloatDescriptor, sqlFloatEncode, sqlIntColumn, sqlIntDecode, sqlIntDescriptor, sqlIntEncode, sqlTextColumn, sqlTextDecode, sqlTextDescriptor, sqlTextEncode, sqlTimestampColumn, sqlTimestampDecode, sqlTimestampDecodeJson, sqlTimestampDescriptor, sqlTimestampEncode, sqlTimestampEncodeJson, sqlTimestampRenderOutputType, sqlVarcharColumn, sqlVarcharDecode, sqlVarcharDescriptor, sqlVarcharEncode, sqlVarcharRenderOutputType, validateParamRefRefs, whereExprKinds };
233
+ export { AggregateExpr, AndExpr, BinaryExpr, ColumnRef, DefaultValueExpr, DeleteAst, DerivedTableSource, DoNothingConflictAction, DoUpdateSetConflictAction, EqColJoinOn, ExistsExpr, IdentifierRef, InsertAst, InsertOnConflict, JoinAst, JsonArrayAggExpr, JsonObjectExpr, ListExpression, LiteralExpr, NotExpr, NullCheckExpr, OperationExpr, OrExpr, OrderByItem, ParamRef, ProjectionItem, RawSqlExpr, SQL_CHAR_CODEC_ID, SQL_FLOAT_CODEC_ID, SQL_INT_CODEC_ID, SQL_TEXT_CODEC_ID, SQL_TIMESTAMP_CODEC_ID, SQL_VARCHAR_CODEC_ID, SelectAst, SqlCharCodec, SqlCharDescriptor, SqlFloatCodec, SqlFloatDescriptor, SqlIntCodec, SqlIntDescriptor, SqlTextCodec, SqlTextDescriptor, SqlTimestampCodec, SqlTimestampDescriptor, SqlVarcharCodec, SqlVarcharDescriptor, SubqueryExpr, TableSource, UpdateAst, collectOrderedParamRefs, compact, isQueryAst, isWhereExpr, queryAstKinds, sqlCharColumn, sqlCharDecode, sqlCharDescriptor, sqlCharEncode, sqlCharRenderOutputType, sqlFloatColumn, sqlFloatDecode, sqlFloatDescriptor, sqlFloatEncode, sqlIntColumn, sqlIntDecode, sqlIntDescriptor, sqlIntEncode, sqlTextColumn, sqlTextDecode, sqlTextDescriptor, sqlTextEncode, sqlTimestampColumn, sqlTimestampDecode, sqlTimestampDecodeJson, sqlTimestampDescriptor, sqlTimestampEncode, sqlTimestampEncodeJson, sqlTimestampRenderOutputType, sqlVarcharColumn, sqlVarcharDecode, sqlVarcharDescriptor, sqlVarcharEncode, sqlVarcharRenderOutputType, whereExprKinds };
264
234
 
265
235
  //# sourceMappingURL=ast.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast.mjs","names":["arktype"],"sources":["../../src/ast/sql-codec-helpers.ts","../../src/ast/sql-codecs.ts","../../src/ast/validate-param-refs.ts"],"sourcesContent":["/**\n * Shared encode/decode/render constants and codec id literals for the six SQL base codecs (`sql/char@1`, `sql/varchar@1`, `sql/int@1`, `sql/float@1`, `sql/text@1`, `sql/timestamp@1`).\n *\n * The codec implementations live in `sql-codecs.ts` (TML-2357). This module retains only the conversion helpers + emit-path renderers the codec methods compose with — keeping a single source of truth for non-trivial conversions while the codec methods provide the framework-required `Promise<…>` boundary.\n */\n\nimport type { JsonValue } from '@prisma-next/contract/types';\n\nexport const SQL_CHAR_CODEC_ID = 'sql/char@1' as const;\nexport const SQL_VARCHAR_CODEC_ID = 'sql/varchar@1' as const;\nexport const SQL_INT_CODEC_ID = 'sql/int@1' as const;\nexport const SQL_FLOAT_CODEC_ID = 'sql/float@1' as const;\nexport const SQL_TEXT_CODEC_ID = 'sql/text@1' as const;\nexport const SQL_TIMESTAMP_CODEC_ID = 'sql/timestamp@1' as const;\n\nexport const sqlCharEncode = (value: string): string => value;\nexport const sqlCharDecode = (wire: string): string => wire.trimEnd();\nexport const sqlCharRenderOutputType = (typeParams: { readonly length?: number }) => {\n const length = typeParams.length;\n if (length === undefined) return undefined;\n if (typeof length !== 'number' || !Number.isFinite(length) || !Number.isInteger(length)) {\n throw new Error(\n `renderOutputType: expected integer \"length\" in typeParams for Char, got ${String(length)}`,\n );\n }\n return `Char<${length}>`;\n};\n\nexport const sqlVarcharEncode = (value: string): string => value;\nexport const sqlVarcharDecode = (wire: string): string => wire;\nexport const sqlVarcharRenderOutputType = (typeParams: { readonly length?: number }) => {\n const length = typeParams.length;\n if (length === undefined) return undefined;\n if (typeof length !== 'number' || !Number.isFinite(length) || !Number.isInteger(length)) {\n throw new Error(\n `renderOutputType: expected integer \"length\" in typeParams for Varchar, got ${String(length)}`,\n );\n }\n return `Varchar<${length}>`;\n};\n\nexport const sqlIntEncode = (value: number): number => value;\nexport const sqlIntDecode = (wire: number): number => wire;\n\nexport const sqlFloatEncode = (value: number): number => value;\nexport const sqlFloatDecode = (wire: number): number => wire;\n\nexport const sqlTextEncode = (value: string): string => value;\nexport const sqlTextDecode = (wire: string): string => wire;\n\nexport const sqlTimestampEncode = (value: Date): Date => value;\nexport const sqlTimestampDecode = (wire: Date): Date => wire;\nexport const sqlTimestampEncodeJson = (value: Date): JsonValue => value.toISOString();\nexport const sqlTimestampDecodeJson = (json: JsonValue): Date => {\n if (typeof json !== 'string') {\n throw new Error(`Expected ISO date string for sql/timestamp@1, got ${typeof json}`);\n }\n const date = new Date(json);\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Invalid ISO date string for sql/timestamp@1: ${json}`);\n }\n return date;\n};\nexport const sqlTimestampRenderOutputType = (typeParams: { readonly precision?: number }) => {\n const precision = typeParams.precision;\n if (precision === undefined) {\n return 'Timestamp';\n }\n if (\n typeof precision !== 'number' ||\n !Number.isFinite(precision) ||\n !Number.isInteger(precision)\n ) {\n throw new Error(\n `renderOutputType: expected integer \"precision\" in typeParams for Timestamp, got ${String(precision)}`,\n );\n }\n return `Timestamp<${precision}>`;\n};\n","/**\n * The six SQL base codecs (TML-2357).\n *\n * Each codec ships as three artifacts:\n *\n * 1. A `SqlXCodec` class extending {@link CodecImpl} that wraps the module-level encode/decode constants exported from `sql-codec-helpers.ts` (the single source of truth for runtime behaviour). 2. A `SqlXDescriptor` class extending {@link CodecDescriptorImpl} declaring the codec id, traits, target types, params schema, and (where applicable) the emit-path `renderOutputType`. 3. A per-codec column helper (`sqlXColumn`)\n * that calls `descriptor.factory(...)` directly and packages the result into a {@link ColumnSpec} via the framework {@link column} packager. The helper is tied to its descriptor with `satisfies ColumnHelperFor`.\n *\n * After TML-2357 this file is the canonical source of SQL base codec metadata and runtime behaviour — the legacy `mkCodec` / `defineCodec` carriers retired with the deletion sweep.\n */\n\nimport type { JsonValue } from '@prisma-next/contract/types';\nimport {\n type CodecCallContext,\n CodecDescriptorImpl,\n CodecImpl,\n type CodecInstanceContext,\n type ColumnHelperFor,\n type ColumnHelperForStrict,\n column,\n voidParamsSchema,\n} from '@prisma-next/framework-components/codec';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { type as arktype } from 'arktype';\nimport {\n SQL_CHAR_CODEC_ID,\n SQL_FLOAT_CODEC_ID,\n SQL_INT_CODEC_ID,\n SQL_TEXT_CODEC_ID,\n SQL_TIMESTAMP_CODEC_ID,\n SQL_VARCHAR_CODEC_ID,\n sqlCharDecode,\n sqlCharEncode,\n sqlCharRenderOutputType,\n sqlFloatDecode,\n sqlFloatEncode,\n sqlIntDecode,\n sqlIntEncode,\n sqlTextDecode,\n sqlTextEncode,\n sqlTimestampDecode,\n sqlTimestampDecodeJson,\n sqlTimestampEncode,\n sqlTimestampEncodeJson,\n sqlTimestampRenderOutputType,\n sqlVarcharDecode,\n sqlVarcharEncode,\n sqlVarcharRenderOutputType,\n} from './sql-codec-helpers';\n\ntype LengthParams = { readonly length?: number };\ntype PrecisionParams = { readonly precision?: number };\n\nconst lengthParamsSchema = arktype({\n 'length?': 'number.integer > 0',\n}) satisfies StandardSchemaV1<LengthParams>;\n\nconst precisionParamsSchema = arktype({\n 'precision?': 'number.integer >= 0 & number.integer <= 6',\n}) satisfies StandardSchemaV1<PrecisionParams>;\n\nexport class SqlTextCodec extends CodecImpl<\n typeof SQL_TEXT_CODEC_ID,\n readonly ['equality', 'order', 'textual'],\n string,\n string\n> {\n async encode(value: string, _ctx: CodecCallContext): Promise<string> {\n return sqlTextEncode(value);\n }\n async decode(wire: string, _ctx: CodecCallContext): Promise<string> {\n return sqlTextDecode(wire);\n }\n encodeJson(value: string): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): string {\n return json as string;\n }\n}\n\nexport class SqlTextDescriptor extends CodecDescriptorImpl<void> {\n override readonly codecId = SQL_TEXT_CODEC_ID;\n override readonly traits = ['equality', 'order', 'textual'] as const;\n override readonly targetTypes = ['text'] as const;\n override readonly paramsSchema: StandardSchemaV1<void> = voidParamsSchema;\n override factory(): (ctx: CodecInstanceContext) => SqlTextCodec {\n return () => new SqlTextCodec(this);\n }\n}\n\nexport const sqlTextDescriptor = new SqlTextDescriptor();\n\nexport const sqlTextColumn = () =>\n column(sqlTextDescriptor.factory(), sqlTextDescriptor.codecId, undefined, 'text');\n\nsqlTextColumn satisfies ColumnHelperFor<SqlTextDescriptor>;\nsqlTextColumn satisfies ColumnHelperForStrict<SqlTextDescriptor>;\n\nexport class SqlIntCodec extends CodecImpl<\n typeof SQL_INT_CODEC_ID,\n readonly ['equality', 'order', 'numeric'],\n number,\n number\n> {\n async encode(value: number, _ctx: CodecCallContext): Promise<number> {\n return sqlIntEncode(value);\n }\n async decode(wire: number, _ctx: CodecCallContext): Promise<number> {\n return sqlIntDecode(wire);\n }\n encodeJson(value: number): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): number {\n return json as number;\n }\n}\n\nexport class SqlIntDescriptor extends CodecDescriptorImpl<void> {\n override readonly codecId = SQL_INT_CODEC_ID;\n override readonly traits = ['equality', 'order', 'numeric'] as const;\n override readonly targetTypes = ['int'] as const;\n override readonly paramsSchema: StandardSchemaV1<void> = voidParamsSchema;\n override factory(): (ctx: CodecInstanceContext) => SqlIntCodec {\n return () => new SqlIntCodec(this);\n }\n}\n\nexport const sqlIntDescriptor = new SqlIntDescriptor();\n\nexport const sqlIntColumn = () =>\n column(sqlIntDescriptor.factory(), sqlIntDescriptor.codecId, undefined, 'int');\n\nsqlIntColumn satisfies ColumnHelperFor<SqlIntDescriptor>;\nsqlIntColumn satisfies ColumnHelperForStrict<SqlIntDescriptor>;\n\nexport class SqlFloatCodec extends CodecImpl<\n typeof SQL_FLOAT_CODEC_ID,\n readonly ['equality', 'order', 'numeric'],\n number,\n number\n> {\n async encode(value: number, _ctx: CodecCallContext): Promise<number> {\n return sqlFloatEncode(value);\n }\n async decode(wire: number, _ctx: CodecCallContext): Promise<number> {\n return sqlFloatDecode(wire);\n }\n encodeJson(value: number): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): number {\n return json as number;\n }\n}\n\nexport class SqlFloatDescriptor extends CodecDescriptorImpl<void> {\n override readonly codecId = SQL_FLOAT_CODEC_ID;\n override readonly traits = ['equality', 'order', 'numeric'] as const;\n override readonly targetTypes = ['float'] as const;\n override readonly paramsSchema: StandardSchemaV1<void> = voidParamsSchema;\n override factory(): (ctx: CodecInstanceContext) => SqlFloatCodec {\n return () => new SqlFloatCodec(this);\n }\n}\n\nexport const sqlFloatDescriptor = new SqlFloatDescriptor();\n\nexport const sqlFloatColumn = () =>\n column(sqlFloatDescriptor.factory(), sqlFloatDescriptor.codecId, undefined, 'float');\n\nsqlFloatColumn satisfies ColumnHelperFor<SqlFloatDescriptor>;\nsqlFloatColumn satisfies ColumnHelperForStrict<SqlFloatDescriptor>;\n\nexport class SqlCharCodec extends CodecImpl<\n typeof SQL_CHAR_CODEC_ID,\n readonly ['equality', 'order', 'textual'],\n string,\n string\n> {\n async encode(value: string, _ctx: CodecCallContext): Promise<string> {\n return sqlCharEncode(value);\n }\n async decode(wire: string, _ctx: CodecCallContext): Promise<string> {\n return sqlCharDecode(wire);\n }\n encodeJson(value: string): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): string {\n return json as string;\n }\n}\n\nexport class SqlCharDescriptor extends CodecDescriptorImpl<LengthParams> {\n override readonly codecId = SQL_CHAR_CODEC_ID;\n override readonly traits = ['equality', 'order', 'textual'] as const;\n override readonly targetTypes = ['char'] as const;\n override readonly paramsSchema: StandardSchemaV1<LengthParams> = lengthParamsSchema;\n override renderOutputType(params: LengthParams): string | undefined {\n return sqlCharRenderOutputType(params);\n }\n override factory(_params: LengthParams): (ctx: CodecInstanceContext) => SqlCharCodec {\n return () => new SqlCharCodec(this);\n }\n}\n\nexport const sqlCharDescriptor = new SqlCharDescriptor();\n\nexport const sqlCharColumn = (params: LengthParams = {}) =>\n column(sqlCharDescriptor.factory(params), sqlCharDescriptor.codecId, params, 'char');\n\nsqlCharColumn satisfies ColumnHelperFor<SqlCharDescriptor>;\nsqlCharColumn satisfies ColumnHelperForStrict<SqlCharDescriptor>;\n\nexport class SqlVarcharCodec extends CodecImpl<\n typeof SQL_VARCHAR_CODEC_ID,\n readonly ['equality', 'order', 'textual'],\n string,\n string\n> {\n async encode(value: string, _ctx: CodecCallContext): Promise<string> {\n return sqlVarcharEncode(value);\n }\n async decode(wire: string, _ctx: CodecCallContext): Promise<string> {\n return sqlVarcharDecode(wire);\n }\n encodeJson(value: string): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): string {\n return json as string;\n }\n}\n\nexport class SqlVarcharDescriptor extends CodecDescriptorImpl<LengthParams> {\n override readonly codecId = SQL_VARCHAR_CODEC_ID;\n override readonly traits = ['equality', 'order', 'textual'] as const;\n override readonly targetTypes = ['varchar'] as const;\n override readonly paramsSchema: StandardSchemaV1<LengthParams> = lengthParamsSchema;\n override renderOutputType(params: LengthParams): string | undefined {\n return sqlVarcharRenderOutputType(params);\n }\n override factory(_params: LengthParams): (ctx: CodecInstanceContext) => SqlVarcharCodec {\n return () => new SqlVarcharCodec(this);\n }\n}\n\nexport const sqlVarcharDescriptor = new SqlVarcharDescriptor();\n\nexport const sqlVarcharColumn = (params: LengthParams = {}) =>\n column(sqlVarcharDescriptor.factory(params), sqlVarcharDescriptor.codecId, params, 'varchar');\n\nsqlVarcharColumn satisfies ColumnHelperFor<SqlVarcharDescriptor>;\nsqlVarcharColumn satisfies ColumnHelperForStrict<SqlVarcharDescriptor>;\n\nexport class SqlTimestampCodec extends CodecImpl<\n typeof SQL_TIMESTAMP_CODEC_ID,\n readonly ['equality', 'order'],\n Date,\n Date\n> {\n async encode(value: Date, _ctx: CodecCallContext): Promise<Date> {\n return sqlTimestampEncode(value);\n }\n async decode(wire: Date, _ctx: CodecCallContext): Promise<Date> {\n return sqlTimestampDecode(wire);\n }\n encodeJson(value: Date): JsonValue {\n return sqlTimestampEncodeJson(value);\n }\n decodeJson(json: JsonValue): Date {\n return sqlTimestampDecodeJson(json);\n }\n}\n\nexport class SqlTimestampDescriptor extends CodecDescriptorImpl<PrecisionParams> {\n override readonly codecId = SQL_TIMESTAMP_CODEC_ID;\n override readonly traits = ['equality', 'order'] as const;\n override readonly targetTypes = ['timestamp'] as const;\n override readonly paramsSchema: StandardSchemaV1<PrecisionParams> = precisionParamsSchema;\n override renderOutputType(params: PrecisionParams): string | undefined {\n return sqlTimestampRenderOutputType(params);\n }\n override factory(_params: PrecisionParams): (ctx: CodecInstanceContext) => SqlTimestampCodec {\n return () => new SqlTimestampCodec(this);\n }\n}\n\nexport const sqlTimestampDescriptor = new SqlTimestampDescriptor();\n\nexport const sqlTimestampColumn = (params: PrecisionParams = {}) =>\n column(\n sqlTimestampDescriptor.factory(params),\n sqlTimestampDescriptor.codecId,\n params,\n 'timestamp',\n );\n\nsqlTimestampColumn satisfies ColumnHelperFor<SqlTimestampDescriptor>;\nsqlTimestampColumn satisfies ColumnHelperForStrict<SqlTimestampDescriptor>;\n","/**\n * Builder-pipeline validator pass: every {@link ParamRef} whose `codecId` resolves to a *parameterized* descriptor must carry `refs: { table, column }` so encode-side dispatch can call `contractCodecs.forColumn(table, column)`. Refs-less parameterized `ParamRef`s are a hard error — the codec-id-keyed `forCodecId` fallback cannot disambiguate per-instance codecs (e.g. `vector(1024)` vs. `vector(1536)`), so the dispatch\n * path must reject them at validation time rather than silently bind to the wrong instance.\n *\n * Non-parameterized codec ids (the `voidParamsSchema` case) are always dispatch-safe via codec id alone, so refs-less ParamRefs for those ids are accepted unchanged.\n *\n * The pass runs post-build / pre-execute — the natural location is the SQL runtime's `lower()` step, between any `beforeCompile` rewrites and `encodeParams`. See AC-5 in the codec-registry-unification spec.\n */\n\nimport { runtimeError } from '@prisma-next/framework-components/runtime';\nimport type { CodecDescriptorRegistry } from '../query-lane-context';\nimport type { AnyQueryAst, ParamRef } from './types';\nimport { collectOrderedParamRefs } from './util';\n\n/**\n * Validate that every parameterized-codec `ParamRef` in `plan` carries `refs`. Throws `RUNTIME.PARAM_REF_REFS_REQUIRED` (a runtime envelope) naming the codec id and the binding label when the invariant is violated. Returns the plan unchanged on success — callers that prefer a side-effecting assertion can ignore the return value.\n *\n * The `registry` is consulted via `descriptorFor(codecId).isParameterized` — `true` whenever the descriptor's `paramsSchema` is not the singleton `voidParamsSchema`.\n */\nexport function validateParamRefRefs(plan: AnyQueryAst, registry: CodecDescriptorRegistry): void {\n for (const ref of collectOrderedParamRefs(plan)) {\n diagnoseRef(ref, registry);\n }\n}\n\nfunction diagnoseRef(ref: ParamRef, registry: CodecDescriptorRegistry): void {\n if (!ref.codecId) return;\n const descriptor = registry.descriptorFor(ref.codecId);\n if (descriptor === undefined) return;\n if (!descriptor.isParameterized) return;\n if (ref.refs) return;\n\n const label = ref.name ?? '<anonymous>';\n throw runtimeError(\n 'RUNTIME.PARAM_REF_REFS_REQUIRED',\n `ParamRef '${label}' for parameterized codec '${ref.codecId}' is missing column refs; column-aware dispatch requires { table, column } at the binding site.`,\n { codecId: ref.codecId, paramName: ref.name },\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ast.mjs","names":["arktype"],"sources":["../../src/ast/sql-codec-helpers.ts","../../src/ast/sql-codecs.ts"],"sourcesContent":["/**\n * Shared encode/decode/render constants and codec id literals for the six SQL base codecs (`sql/char@1`, `sql/varchar@1`, `sql/int@1`, `sql/float@1`, `sql/text@1`, `sql/timestamp@1`).\n *\n * The codec implementations live in `sql-codecs.ts` (TML-2357). This module retains only the conversion helpers + emit-path renderers the codec methods compose with — keeping a single source of truth for non-trivial conversions while the codec methods provide the framework-required `Promise<…>` boundary.\n */\n\nimport type { JsonValue } from '@prisma-next/contract/types';\n\nexport const SQL_CHAR_CODEC_ID = 'sql/char@1' as const;\nexport const SQL_VARCHAR_CODEC_ID = 'sql/varchar@1' as const;\nexport const SQL_INT_CODEC_ID = 'sql/int@1' as const;\nexport const SQL_FLOAT_CODEC_ID = 'sql/float@1' as const;\nexport const SQL_TEXT_CODEC_ID = 'sql/text@1' as const;\nexport const SQL_TIMESTAMP_CODEC_ID = 'sql/timestamp@1' as const;\n\nexport const sqlCharEncode = (value: string): string => value;\nexport const sqlCharDecode = (wire: string): string => wire.trimEnd();\nexport const sqlCharRenderOutputType = (typeParams: { readonly length?: number }) => {\n const length = typeParams.length;\n if (length === undefined) return undefined;\n if (typeof length !== 'number' || !Number.isFinite(length) || !Number.isInteger(length)) {\n throw new Error(\n `renderOutputType: expected integer \"length\" in typeParams for Char, got ${String(length)}`,\n );\n }\n return `Char<${length}>`;\n};\n\nexport const sqlVarcharEncode = (value: string): string => value;\nexport const sqlVarcharDecode = (wire: string): string => wire;\nexport const sqlVarcharRenderOutputType = (typeParams: { readonly length?: number }) => {\n const length = typeParams.length;\n if (length === undefined) return undefined;\n if (typeof length !== 'number' || !Number.isFinite(length) || !Number.isInteger(length)) {\n throw new Error(\n `renderOutputType: expected integer \"length\" in typeParams for Varchar, got ${String(length)}`,\n );\n }\n return `Varchar<${length}>`;\n};\n\nexport const sqlIntEncode = (value: number): number => value;\nexport const sqlIntDecode = (wire: number): number => wire;\n\nexport const sqlFloatEncode = (value: number): number => value;\nexport const sqlFloatDecode = (wire: number): number => wire;\n\nexport const sqlTextEncode = (value: string): string => value;\nexport const sqlTextDecode = (wire: string): string => wire;\n\nexport const sqlTimestampEncode = (value: Date): Date => value;\nexport const sqlTimestampDecode = (wire: Date): Date => wire;\nexport const sqlTimestampEncodeJson = (value: Date): JsonValue => value.toISOString();\nexport const sqlTimestampDecodeJson = (json: JsonValue): Date => {\n if (typeof json !== 'string') {\n throw new Error(`Expected ISO date string for sql/timestamp@1, got ${typeof json}`);\n }\n const date = new Date(json);\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Invalid ISO date string for sql/timestamp@1: ${json}`);\n }\n return date;\n};\nexport const sqlTimestampRenderOutputType = (typeParams: { readonly precision?: number }) => {\n const precision = typeParams.precision;\n if (precision === undefined) {\n return 'Timestamp';\n }\n if (\n typeof precision !== 'number' ||\n !Number.isFinite(precision) ||\n !Number.isInteger(precision)\n ) {\n throw new Error(\n `renderOutputType: expected integer \"precision\" in typeParams for Timestamp, got ${String(precision)}`,\n );\n }\n return `Timestamp<${precision}>`;\n};\n","/**\n * The six SQL base codecs (TML-2357).\n *\n * Each codec ships as three artifacts:\n *\n * 1. A `SqlXCodec` class extending {@link CodecImpl} that wraps the module-level encode/decode constants exported from `sql-codec-helpers.ts` (the single source of truth for runtime behaviour). 2. A `SqlXDescriptor` class extending {@link CodecDescriptorImpl} declaring the codec id, traits, target types, params schema, and (where applicable) the emit-path `renderOutputType`. 3. A per-codec column helper (`sqlXColumn`)\n * that calls `descriptor.factory(...)` directly and packages the result into a {@link ColumnSpec} via the framework {@link column} packager. The helper is tied to its descriptor with `satisfies ColumnHelperFor`.\n *\n * After TML-2357 this file is the canonical source of SQL base codec metadata and runtime behaviour — the legacy `mkCodec` / `defineCodec` carriers retired with the deletion sweep.\n */\n\nimport type { JsonValue } from '@prisma-next/contract/types';\nimport {\n type CodecCallContext,\n CodecDescriptorImpl,\n CodecImpl,\n type CodecInstanceContext,\n type ColumnHelperFor,\n type ColumnHelperForStrict,\n column,\n voidParamsSchema,\n} from '@prisma-next/framework-components/codec';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { type as arktype } from 'arktype';\nimport {\n SQL_CHAR_CODEC_ID,\n SQL_FLOAT_CODEC_ID,\n SQL_INT_CODEC_ID,\n SQL_TEXT_CODEC_ID,\n SQL_TIMESTAMP_CODEC_ID,\n SQL_VARCHAR_CODEC_ID,\n sqlCharDecode,\n sqlCharEncode,\n sqlCharRenderOutputType,\n sqlFloatDecode,\n sqlFloatEncode,\n sqlIntDecode,\n sqlIntEncode,\n sqlTextDecode,\n sqlTextEncode,\n sqlTimestampDecode,\n sqlTimestampDecodeJson,\n sqlTimestampEncode,\n sqlTimestampEncodeJson,\n sqlTimestampRenderOutputType,\n sqlVarcharDecode,\n sqlVarcharEncode,\n sqlVarcharRenderOutputType,\n} from './sql-codec-helpers';\n\ntype LengthParams = { readonly length?: number };\ntype PrecisionParams = { readonly precision?: number };\n\nconst lengthParamsSchema = arktype({\n 'length?': 'number.integer > 0',\n}) satisfies StandardSchemaV1<LengthParams>;\n\nconst precisionParamsSchema = arktype({\n 'precision?': 'number.integer >= 0 & number.integer <= 6',\n}) satisfies StandardSchemaV1<PrecisionParams>;\n\nexport class SqlTextCodec extends CodecImpl<\n typeof SQL_TEXT_CODEC_ID,\n readonly ['equality', 'order', 'textual'],\n string,\n string\n> {\n async encode(value: string, _ctx: CodecCallContext): Promise<string> {\n return sqlTextEncode(value);\n }\n async decode(wire: string, _ctx: CodecCallContext): Promise<string> {\n return sqlTextDecode(wire);\n }\n encodeJson(value: string): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): string {\n return json as string;\n }\n}\n\nexport class SqlTextDescriptor extends CodecDescriptorImpl<void> {\n override readonly codecId = SQL_TEXT_CODEC_ID;\n override readonly traits = ['equality', 'order', 'textual'] as const;\n override readonly targetTypes = ['text'] as const;\n override readonly paramsSchema: StandardSchemaV1<void> = voidParamsSchema;\n override factory(): (ctx: CodecInstanceContext) => SqlTextCodec {\n return () => new SqlTextCodec(this);\n }\n}\n\nexport const sqlTextDescriptor = new SqlTextDescriptor();\n\nexport const sqlTextColumn = () =>\n column(sqlTextDescriptor.factory(), sqlTextDescriptor.codecId, undefined, 'text');\n\nsqlTextColumn satisfies ColumnHelperFor<SqlTextDescriptor>;\nsqlTextColumn satisfies ColumnHelperForStrict<SqlTextDescriptor>;\n\nexport class SqlIntCodec extends CodecImpl<\n typeof SQL_INT_CODEC_ID,\n readonly ['equality', 'order', 'numeric'],\n number,\n number\n> {\n async encode(value: number, _ctx: CodecCallContext): Promise<number> {\n return sqlIntEncode(value);\n }\n async decode(wire: number, _ctx: CodecCallContext): Promise<number> {\n return sqlIntDecode(wire);\n }\n encodeJson(value: number): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): number {\n return json as number;\n }\n}\n\nexport class SqlIntDescriptor extends CodecDescriptorImpl<void> {\n override readonly codecId = SQL_INT_CODEC_ID;\n override readonly traits = ['equality', 'order', 'numeric'] as const;\n override readonly targetTypes = ['int'] as const;\n override readonly paramsSchema: StandardSchemaV1<void> = voidParamsSchema;\n override factory(): (ctx: CodecInstanceContext) => SqlIntCodec {\n return () => new SqlIntCodec(this);\n }\n}\n\nexport const sqlIntDescriptor = new SqlIntDescriptor();\n\nexport const sqlIntColumn = () =>\n column(sqlIntDescriptor.factory(), sqlIntDescriptor.codecId, undefined, 'int');\n\nsqlIntColumn satisfies ColumnHelperFor<SqlIntDescriptor>;\nsqlIntColumn satisfies ColumnHelperForStrict<SqlIntDescriptor>;\n\nexport class SqlFloatCodec extends CodecImpl<\n typeof SQL_FLOAT_CODEC_ID,\n readonly ['equality', 'order', 'numeric'],\n number,\n number\n> {\n async encode(value: number, _ctx: CodecCallContext): Promise<number> {\n return sqlFloatEncode(value);\n }\n async decode(wire: number, _ctx: CodecCallContext): Promise<number> {\n return sqlFloatDecode(wire);\n }\n encodeJson(value: number): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): number {\n return json as number;\n }\n}\n\nexport class SqlFloatDescriptor extends CodecDescriptorImpl<void> {\n override readonly codecId = SQL_FLOAT_CODEC_ID;\n override readonly traits = ['equality', 'order', 'numeric'] as const;\n override readonly targetTypes = ['float'] as const;\n override readonly paramsSchema: StandardSchemaV1<void> = voidParamsSchema;\n override factory(): (ctx: CodecInstanceContext) => SqlFloatCodec {\n return () => new SqlFloatCodec(this);\n }\n}\n\nexport const sqlFloatDescriptor = new SqlFloatDescriptor();\n\nexport const sqlFloatColumn = () =>\n column(sqlFloatDescriptor.factory(), sqlFloatDescriptor.codecId, undefined, 'float');\n\nsqlFloatColumn satisfies ColumnHelperFor<SqlFloatDescriptor>;\nsqlFloatColumn satisfies ColumnHelperForStrict<SqlFloatDescriptor>;\n\nexport class SqlCharCodec extends CodecImpl<\n typeof SQL_CHAR_CODEC_ID,\n readonly ['equality', 'order', 'textual'],\n string,\n string\n> {\n async encode(value: string, _ctx: CodecCallContext): Promise<string> {\n return sqlCharEncode(value);\n }\n async decode(wire: string, _ctx: CodecCallContext): Promise<string> {\n return sqlCharDecode(wire);\n }\n encodeJson(value: string): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): string {\n return json as string;\n }\n}\n\nexport class SqlCharDescriptor extends CodecDescriptorImpl<LengthParams> {\n override readonly codecId = SQL_CHAR_CODEC_ID;\n override readonly traits = ['equality', 'order', 'textual'] as const;\n override readonly targetTypes = ['char'] as const;\n override readonly paramsSchema: StandardSchemaV1<LengthParams> = lengthParamsSchema;\n override renderOutputType(params: LengthParams): string | undefined {\n return sqlCharRenderOutputType(params);\n }\n override factory(_params: LengthParams): (ctx: CodecInstanceContext) => SqlCharCodec {\n return () => new SqlCharCodec(this);\n }\n}\n\nexport const sqlCharDescriptor = new SqlCharDescriptor();\n\nexport const sqlCharColumn = (params: LengthParams = {}) =>\n column(sqlCharDescriptor.factory(params), sqlCharDescriptor.codecId, params, 'char');\n\nsqlCharColumn satisfies ColumnHelperFor<SqlCharDescriptor>;\nsqlCharColumn satisfies ColumnHelperForStrict<SqlCharDescriptor>;\n\nexport class SqlVarcharCodec extends CodecImpl<\n typeof SQL_VARCHAR_CODEC_ID,\n readonly ['equality', 'order', 'textual'],\n string,\n string\n> {\n async encode(value: string, _ctx: CodecCallContext): Promise<string> {\n return sqlVarcharEncode(value);\n }\n async decode(wire: string, _ctx: CodecCallContext): Promise<string> {\n return sqlVarcharDecode(wire);\n }\n encodeJson(value: string): JsonValue {\n return value;\n }\n decodeJson(json: JsonValue): string {\n return json as string;\n }\n}\n\nexport class SqlVarcharDescriptor extends CodecDescriptorImpl<LengthParams> {\n override readonly codecId = SQL_VARCHAR_CODEC_ID;\n override readonly traits = ['equality', 'order', 'textual'] as const;\n override readonly targetTypes = ['varchar'] as const;\n override readonly paramsSchema: StandardSchemaV1<LengthParams> = lengthParamsSchema;\n override renderOutputType(params: LengthParams): string | undefined {\n return sqlVarcharRenderOutputType(params);\n }\n override factory(_params: LengthParams): (ctx: CodecInstanceContext) => SqlVarcharCodec {\n return () => new SqlVarcharCodec(this);\n }\n}\n\nexport const sqlVarcharDescriptor = new SqlVarcharDescriptor();\n\nexport const sqlVarcharColumn = (params: LengthParams = {}) =>\n column(sqlVarcharDescriptor.factory(params), sqlVarcharDescriptor.codecId, params, 'varchar');\n\nsqlVarcharColumn satisfies ColumnHelperFor<SqlVarcharDescriptor>;\nsqlVarcharColumn satisfies ColumnHelperForStrict<SqlVarcharDescriptor>;\n\nexport class SqlTimestampCodec extends CodecImpl<\n typeof SQL_TIMESTAMP_CODEC_ID,\n readonly ['equality', 'order'],\n Date,\n Date\n> {\n async encode(value: Date, _ctx: CodecCallContext): Promise<Date> {\n return sqlTimestampEncode(value);\n }\n async decode(wire: Date, _ctx: CodecCallContext): Promise<Date> {\n return sqlTimestampDecode(wire);\n }\n encodeJson(value: Date): JsonValue {\n return sqlTimestampEncodeJson(value);\n }\n decodeJson(json: JsonValue): Date {\n return sqlTimestampDecodeJson(json);\n }\n}\n\nexport class SqlTimestampDescriptor extends CodecDescriptorImpl<PrecisionParams> {\n override readonly codecId = SQL_TIMESTAMP_CODEC_ID;\n override readonly traits = ['equality', 'order'] as const;\n override readonly targetTypes = ['timestamp'] as const;\n override readonly paramsSchema: StandardSchemaV1<PrecisionParams> = precisionParamsSchema;\n override renderOutputType(params: PrecisionParams): string | undefined {\n return sqlTimestampRenderOutputType(params);\n }\n override factory(_params: PrecisionParams): (ctx: CodecInstanceContext) => SqlTimestampCodec {\n return () => new SqlTimestampCodec(this);\n }\n}\n\nexport const sqlTimestampDescriptor = new SqlTimestampDescriptor();\n\nexport const sqlTimestampColumn = (params: PrecisionParams = {}) =>\n column(\n sqlTimestampDescriptor.factory(params),\n sqlTimestampDescriptor.codecId,\n params,\n 'timestamp',\n );\n\nsqlTimestampColumn satisfies ColumnHelperFor<SqlTimestampDescriptor>;\nsqlTimestampColumn satisfies ColumnHelperForStrict<SqlTimestampDescriptor>;\n"],"mappings":";;;;;AAQA,MAAa,oBAAoB;AACjC,MAAa,uBAAuB;AACpC,MAAa,mBAAmB;AAChC,MAAa,qBAAqB;AAClC,MAAa,oBAAoB;AACjC,MAAa,yBAAyB;AAEtC,MAAa,iBAAiB,UAA0B;AACxD,MAAa,iBAAiB,SAAyB,KAAK,SAAS;AACrE,MAAa,2BAA2B,eAA6C;CACnF,MAAM,SAAS,WAAW;CAC1B,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;CACjC,IAAI,OAAO,WAAW,YAAY,CAAC,OAAO,SAAS,OAAO,IAAI,CAAC,OAAO,UAAU,OAAO,EACrF,MAAM,IAAI,MACR,2EAA2E,OAAO,OAAO,GAC1F;CAEH,OAAO,QAAQ,OAAO;;AAGxB,MAAa,oBAAoB,UAA0B;AAC3D,MAAa,oBAAoB,SAAyB;AAC1D,MAAa,8BAA8B,eAA6C;CACtF,MAAM,SAAS,WAAW;CAC1B,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;CACjC,IAAI,OAAO,WAAW,YAAY,CAAC,OAAO,SAAS,OAAO,IAAI,CAAC,OAAO,UAAU,OAAO,EACrF,MAAM,IAAI,MACR,8EAA8E,OAAO,OAAO,GAC7F;CAEH,OAAO,WAAW,OAAO;;AAG3B,MAAa,gBAAgB,UAA0B;AACvD,MAAa,gBAAgB,SAAyB;AAEtD,MAAa,kBAAkB,UAA0B;AACzD,MAAa,kBAAkB,SAAyB;AAExD,MAAa,iBAAiB,UAA0B;AACxD,MAAa,iBAAiB,SAAyB;AAEvD,MAAa,sBAAsB,UAAsB;AACzD,MAAa,sBAAsB,SAAqB;AACxD,MAAa,0BAA0B,UAA2B,MAAM,aAAa;AACrF,MAAa,0BAA0B,SAA0B;CAC/D,IAAI,OAAO,SAAS,UAClB,MAAM,IAAI,MAAM,qDAAqD,OAAO,OAAO;CAErF,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,IAAI,OAAO,MAAM,KAAK,SAAS,CAAC,EAC9B,MAAM,IAAI,MAAM,gDAAgD,OAAO;CAEzE,OAAO;;AAET,MAAa,gCAAgC,eAAgD;CAC3F,MAAM,YAAY,WAAW;CAC7B,IAAI,cAAc,KAAA,GAChB,OAAO;CAET,IACE,OAAO,cAAc,YACrB,CAAC,OAAO,SAAS,UAAU,IAC3B,CAAC,OAAO,UAAU,UAAU,EAE5B,MAAM,IAAI,MACR,mFAAmF,OAAO,UAAU,GACrG;CAEH,OAAO,aAAa,UAAU;;;;ACxBhC,MAAM,qBAAqBA,KAAQ,EACjC,WAAW,sBACZ,CAAC;AAEF,MAAM,wBAAwBA,KAAQ,EACpC,cAAc,6CACf,CAAC;AAEF,IAAa,eAAb,cAAkC,UAKhC;CACA,MAAM,OAAO,OAAe,MAAyC;EACnE,OAAO,cAAc,MAAM;;CAE7B,MAAM,OAAO,MAAc,MAAyC;EAClE,OAAO,cAAc,KAAK;;CAE5B,WAAW,OAA0B;EACnC,OAAO;;CAET,WAAW,MAAyB;EAClC,OAAO;;;AAIX,IAAa,oBAAb,cAAuC,oBAA0B;CAC/D,UAA4B;CAC5B,SAA2B;EAAC;EAAY;EAAS;EAAU;CAC3D,cAAgC,CAAC,OAAO;CACxC,eAAyD;CACzD,UAAgE;EAC9D,aAAa,IAAI,aAAa,KAAK;;;AAIvC,MAAa,oBAAoB,IAAI,mBAAmB;AAExD,MAAa,sBACX,OAAO,kBAAkB,SAAS,EAAE,kBAAkB,SAAS,KAAA,GAAW,OAAO;AAKnF,IAAa,cAAb,cAAiC,UAK/B;CACA,MAAM,OAAO,OAAe,MAAyC;EACnE,OAAO,aAAa,MAAM;;CAE5B,MAAM,OAAO,MAAc,MAAyC;EAClE,OAAO,aAAa,KAAK;;CAE3B,WAAW,OAA0B;EACnC,OAAO;;CAET,WAAW,MAAyB;EAClC,OAAO;;;AAIX,IAAa,mBAAb,cAAsC,oBAA0B;CAC9D,UAA4B;CAC5B,SAA2B;EAAC;EAAY;EAAS;EAAU;CAC3D,cAAgC,CAAC,MAAM;CACvC,eAAyD;CACzD,UAA+D;EAC7D,aAAa,IAAI,YAAY,KAAK;;;AAItC,MAAa,mBAAmB,IAAI,kBAAkB;AAEtD,MAAa,qBACX,OAAO,iBAAiB,SAAS,EAAE,iBAAiB,SAAS,KAAA,GAAW,MAAM;AAKhF,IAAa,gBAAb,cAAmC,UAKjC;CACA,MAAM,OAAO,OAAe,MAAyC;EACnE,OAAO,eAAe,MAAM;;CAE9B,MAAM,OAAO,MAAc,MAAyC;EAClE,OAAO,eAAe,KAAK;;CAE7B,WAAW,OAA0B;EACnC,OAAO;;CAET,WAAW,MAAyB;EAClC,OAAO;;;AAIX,IAAa,qBAAb,cAAwC,oBAA0B;CAChE,UAA4B;CAC5B,SAA2B;EAAC;EAAY;EAAS;EAAU;CAC3D,cAAgC,CAAC,QAAQ;CACzC,eAAyD;CACzD,UAAiE;EAC/D,aAAa,IAAI,cAAc,KAAK;;;AAIxC,MAAa,qBAAqB,IAAI,oBAAoB;AAE1D,MAAa,uBACX,OAAO,mBAAmB,SAAS,EAAE,mBAAmB,SAAS,KAAA,GAAW,QAAQ;AAKtF,IAAa,eAAb,cAAkC,UAKhC;CACA,MAAM,OAAO,OAAe,MAAyC;EACnE,OAAO,cAAc,MAAM;;CAE7B,MAAM,OAAO,MAAc,MAAyC;EAClE,OAAO,cAAc,KAAK;;CAE5B,WAAW,OAA0B;EACnC,OAAO;;CAET,WAAW,MAAyB;EAClC,OAAO;;;AAIX,IAAa,oBAAb,cAAuC,oBAAkC;CACvE,UAA4B;CAC5B,SAA2B;EAAC;EAAY;EAAS;EAAU;CAC3D,cAAgC,CAAC,OAAO;CACxC,eAAiE;CACjE,iBAA0B,QAA0C;EAClE,OAAO,wBAAwB,OAAO;;CAExC,QAAiB,SAAoE;EACnF,aAAa,IAAI,aAAa,KAAK;;;AAIvC,MAAa,oBAAoB,IAAI,mBAAmB;AAExD,MAAa,iBAAiB,SAAuB,EAAE,KACrD,OAAO,kBAAkB,QAAQ,OAAO,EAAE,kBAAkB,SAAS,QAAQ,OAAO;AAKtF,IAAa,kBAAb,cAAqC,UAKnC;CACA,MAAM,OAAO,OAAe,MAAyC;EACnE,OAAO,iBAAiB,MAAM;;CAEhC,MAAM,OAAO,MAAc,MAAyC;EAClE,OAAO,iBAAiB,KAAK;;CAE/B,WAAW,OAA0B;EACnC,OAAO;;CAET,WAAW,MAAyB;EAClC,OAAO;;;AAIX,IAAa,uBAAb,cAA0C,oBAAkC;CAC1E,UAA4B;CAC5B,SAA2B;EAAC;EAAY;EAAS;EAAU;CAC3D,cAAgC,CAAC,UAAU;CAC3C,eAAiE;CACjE,iBAA0B,QAA0C;EAClE,OAAO,2BAA2B,OAAO;;CAE3C,QAAiB,SAAuE;EACtF,aAAa,IAAI,gBAAgB,KAAK;;;AAI1C,MAAa,uBAAuB,IAAI,sBAAsB;AAE9D,MAAa,oBAAoB,SAAuB,EAAE,KACxD,OAAO,qBAAqB,QAAQ,OAAO,EAAE,qBAAqB,SAAS,QAAQ,UAAU;AAK/F,IAAa,oBAAb,cAAuC,UAKrC;CACA,MAAM,OAAO,OAAa,MAAuC;EAC/D,OAAO,mBAAmB,MAAM;;CAElC,MAAM,OAAO,MAAY,MAAuC;EAC9D,OAAO,mBAAmB,KAAK;;CAEjC,WAAW,OAAwB;EACjC,OAAO,uBAAuB,MAAM;;CAEtC,WAAW,MAAuB;EAChC,OAAO,uBAAuB,KAAK;;;AAIvC,IAAa,yBAAb,cAA4C,oBAAqC;CAC/E,UAA4B;CAC5B,SAA2B,CAAC,YAAY,QAAQ;CAChD,cAAgC,CAAC,YAAY;CAC7C,eAAoE;CACpE,iBAA0B,QAA6C;EACrE,OAAO,6BAA6B,OAAO;;CAE7C,QAAiB,SAA4E;EAC3F,aAAa,IAAI,kBAAkB,KAAK;;;AAI5C,MAAa,yBAAyB,IAAI,wBAAwB;AAElE,MAAa,sBAAsB,SAA0B,EAAE,KAC7D,OACE,uBAAuB,QAAQ,OAAO,EACtC,uBAAuB,SACvB,QACA,YACD"}
@@ -1,5 +1,7 @@
1
- import { t as AnyCodecDescriptor } from "../codec-types-BUfBna4G.mjs";
2
- import { n as CodecDescriptorRegistry } from "../query-lane-context-C2tLZGp4.mjs";
1
+ import { t as AnyCodecDescriptor } from "../codec-types-Cezo7k-i.mjs";
2
+ import { n as CodecDescriptorRegistry } from "../query-lane-context-DHsPbikl.mjs";
3
+ import { CodecRef } from "@prisma-next/framework-components/codec";
4
+ import { SqlStorage } from "@prisma-next/sql-contract/types";
3
5
 
4
6
  //#region src/codec-descriptor-registry.d.ts
5
7
  /**
@@ -12,7 +14,21 @@ import { n as CodecDescriptorRegistry } from "../query-lane-context-C2tLZGp4.mjs
12
14
  * The descriptor map is heterogeneous in `P` — each codec id has its own params shape. The public {@link CodecDescriptorRegistry} interface widens to `CodecDescriptor<unknown>` and consumers narrow per codec id at the call site (the descriptor's `paramsSchema` validates JSON-sourced params before the factory ever sees them, so the runtime narrow is safe). The cast at registration goes through `unknown` because
13
15
  * `CodecDescriptor<P>` is invariant in `P` (the `factory` and `renderOutputType` slots use `P` contravariantly).
14
16
  */
15
- declare function buildCodecDescriptorRegistry(allDescriptors: ReadonlyArray<AnyCodecDescriptor>): CodecDescriptorRegistry;
17
+ declare function buildCodecDescriptorRegistry(allDescriptors: ReadonlyArray<AnyCodecDescriptor>, storage?: SqlStorage): CodecDescriptorRegistry;
16
18
  //#endregion
17
- export { buildCodecDescriptorRegistry };
19
+ //#region src/codec-ref-for-column.d.ts
20
+ /**
21
+ * Derive the canonical {@link CodecRef} for a `(table, column)` pair against a {@link SqlStorage}. This is the build-time path every column-bound `ParamRef` / `ProjectionItem` uses to stamp its `codec` slot before the AST is handed to the runtime — the runtime resolver then materialises a memoised {@link import('@prisma-next/sql-relational-core/ast').Codec} for the same `CodecRef` via `forCodecRef`.
22
+ *
23
+ * Resolution rules over `storage.tables[table].columns[column]`:
24
+ *
25
+ * - `typeRef` column → `{codecId, typeParams}` from `storage.types[typeRef]` (multiple columns sharing the typeRef share one ref → one memoised codec).
26
+ * - inline `typeParams` column → `{codecId, typeParams}` from the column itself.
27
+ * - non-parameterized column → `{codecId}` with `typeParams` undefined.
28
+ *
29
+ * Returns `undefined` when the table or column is unknown, or when a `typeRef` column references a `storage.types` entry that does not exist.
30
+ */
31
+ declare function codecRefForStorageColumn(storage: SqlStorage, tableName: string, columnName: string): CodecRef | undefined;
32
+ //#endregion
33
+ export { buildCodecDescriptorRegistry, codecRefForStorageColumn };
18
34
  //# sourceMappingURL=codec-descriptor-registry.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codec-descriptor-registry.d.mts","names":[],"sources":["../../src/codec-descriptor-registry.ts"],"mappings":";;;;;;AAcA;;;;;;;;iBAAgB,4BAAA,CACd,cAAA,EAAgB,aAAA,CAAc,kBAAA,IAC7B,uBAAA"}
1
+ {"version":3,"file":"codec-descriptor-registry.d.mts","names":[],"sources":["../../src/codec-descriptor-registry.ts","../../src/codec-ref-for-column.ts"],"mappings":";;;;;;;;;AAgBA;;;;;;;iBAAgB,4BAAA,CACd,cAAA,EAAgB,aAAA,CAAc,kBAAA,GAC9B,OAAA,GAAU,UAAA,GACT,uBAAA;;;;;;;AAHH;;;;;;;iBCDgB,wBAAA,CACd,OAAA,EAAS,UAAA,EACT,SAAA,UACA,UAAA,WACC,QAAA"}
@@ -1,3 +1,35 @@
1
+ //#region src/codec-ref-for-column.ts
2
+ /**
3
+ * Derive the canonical {@link CodecRef} for a `(table, column)` pair against a {@link SqlStorage}. This is the build-time path every column-bound `ParamRef` / `ProjectionItem` uses to stamp its `codec` slot before the AST is handed to the runtime — the runtime resolver then materialises a memoised {@link import('@prisma-next/sql-relational-core/ast').Codec} for the same `CodecRef` via `forCodecRef`.
4
+ *
5
+ * Resolution rules over `storage.tables[table].columns[column]`:
6
+ *
7
+ * - `typeRef` column → `{codecId, typeParams}` from `storage.types[typeRef]` (multiple columns sharing the typeRef share one ref → one memoised codec).
8
+ * - inline `typeParams` column → `{codecId, typeParams}` from the column itself.
9
+ * - non-parameterized column → `{codecId}` with `typeParams` undefined.
10
+ *
11
+ * Returns `undefined` when the table or column is unknown, or when a `typeRef` column references a `storage.types` entry that does not exist.
12
+ */
13
+ function codecRefForStorageColumn(storage, tableName, columnName) {
14
+ const tableDef = storage.tables[tableName];
15
+ if (!tableDef) return void 0;
16
+ const columnDef = tableDef.columns[columnName];
17
+ if (!columnDef) return void 0;
18
+ if (columnDef.typeRef !== void 0) {
19
+ const instance = storage.types?.[columnDef.typeRef];
20
+ if (!instance) return void 0;
21
+ return {
22
+ codecId: instance.codecId,
23
+ typeParams: instance.typeParams
24
+ };
25
+ }
26
+ if (columnDef.typeParams !== void 0) return {
27
+ codecId: columnDef.codecId,
28
+ typeParams: columnDef.typeParams
29
+ };
30
+ return { codecId: columnDef.codecId };
31
+ }
32
+ //#endregion
1
33
  //#region src/codec-descriptor-registry.ts
2
34
  /**
3
35
  * Build a {@link CodecDescriptorRegistry} from a flat descriptor list.
@@ -9,7 +41,7 @@
9
41
  * The descriptor map is heterogeneous in `P` — each codec id has its own params shape. The public {@link CodecDescriptorRegistry} interface widens to `CodecDescriptor<unknown>` and consumers narrow per codec id at the call site (the descriptor's `paramsSchema` validates JSON-sourced params before the factory ever sees them, so the runtime narrow is safe). The cast at registration goes through `unknown` because
10
42
  * `CodecDescriptor<P>` is invariant in `P` (the `factory` and `renderOutputType` slots use `P` contravariantly).
11
43
  */
12
- function buildCodecDescriptorRegistry(allDescriptors) {
44
+ function buildCodecDescriptorRegistry(allDescriptors, storage) {
13
45
  const byId = /* @__PURE__ */ new Map();
14
46
  const byTargetType = /* @__PURE__ */ new Map();
15
47
  for (const descriptor of allDescriptors) {
@@ -26,6 +58,10 @@ function buildCodecDescriptorRegistry(allDescriptors) {
26
58
  descriptorFor(codecId) {
27
59
  return byId.get(codecId);
28
60
  },
61
+ codecRefForColumn(table, column) {
62
+ if (!storage) return void 0;
63
+ return codecRefForStorageColumn(storage, table, column);
64
+ },
29
65
  *values() {
30
66
  yield* byId.values();
31
67
  },
@@ -35,6 +71,6 @@ function buildCodecDescriptorRegistry(allDescriptors) {
35
71
  };
36
72
  }
37
73
  //#endregion
38
- export { buildCodecDescriptorRegistry };
74
+ export { buildCodecDescriptorRegistry, codecRefForStorageColumn };
39
75
 
40
76
  //# sourceMappingURL=codec-descriptor-registry.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"codec-descriptor-registry.mjs","names":[],"sources":["../../src/codec-descriptor-registry.ts"],"sourcesContent":["import type { CodecDescriptor } from '@prisma-next/framework-components/codec';\nimport type { AnyCodecDescriptor } from './ast/codec-types';\nimport type { CodecDescriptorRegistry } from './query-lane-context';\n\n/**\n * Build a {@link CodecDescriptorRegistry} from a flat descriptor list.\n *\n * Used by:\n * - Each codec-shipping package's `core/registry.ts` to expose a package-scoped registry as the public consumer surface (replacing raw descriptor-array exports). See ADR 208.\n * - The runtime's `buildExecutionContext` to construct the contract-bound combined registry from every contributor's `codecs:` slot.\n *\n * The descriptor map is heterogeneous in `P` — each codec id has its own params shape. The public {@link CodecDescriptorRegistry} interface widens to `CodecDescriptor<unknown>` and consumers narrow per codec id at the call site (the descriptor's `paramsSchema` validates JSON-sourced params before the factory ever sees them, so the runtime narrow is safe). The cast at registration goes through `unknown` because\n * `CodecDescriptor<P>` is invariant in `P` (the `factory` and `renderOutputType` slots use `P` contravariantly).\n */\nexport function buildCodecDescriptorRegistry(\n allDescriptors: ReadonlyArray<AnyCodecDescriptor>,\n): CodecDescriptorRegistry {\n type AnyDescriptor = CodecDescriptor<unknown>;\n const byId = new Map<string, AnyDescriptor>();\n const byTargetType = new Map<string, Array<AnyDescriptor>>();\n\n for (const descriptor of allDescriptors) {\n if (byId.has(descriptor.codecId)) {\n throw new Error(\n `Duplicate codec descriptor id: '${descriptor.codecId}' — registered twice during registry construction. ` +\n 'Each codecId must be contributed by exactly one component (target / adapter / extension pack).',\n );\n }\n const widened = descriptor as unknown as AnyDescriptor;\n byId.set(descriptor.codecId, widened);\n for (const targetType of descriptor.targetTypes) {\n const list = byTargetType.get(targetType);\n if (list) {\n list.push(widened);\n } else {\n byTargetType.set(targetType, [widened]);\n }\n }\n }\n\n return {\n descriptorFor(codecId: string): AnyDescriptor | undefined {\n return byId.get(codecId);\n },\n *values(): IterableIterator<AnyDescriptor> {\n yield* byId.values();\n },\n byTargetType(targetType: string): readonly AnyDescriptor[] {\n return byTargetType.get(targetType) ?? Object.freeze([]);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAcA,SAAgB,6BACd,gBACyB;CAEzB,MAAM,uBAAO,IAAI,KAA4B;CAC7C,MAAM,+BAAe,IAAI,KAAmC;CAE5D,KAAK,MAAM,cAAc,gBAAgB;EACvC,IAAI,KAAK,IAAI,WAAW,QAAQ,EAC9B,MAAM,IAAI,MACR,mCAAmC,WAAW,QAAQ,mJAEvD;EAEH,MAAM,UAAU;EAChB,KAAK,IAAI,WAAW,SAAS,QAAQ;EACrC,KAAK,MAAM,cAAc,WAAW,aAAa;GAC/C,MAAM,OAAO,aAAa,IAAI,WAAW;GACzC,IAAI,MACF,KAAK,KAAK,QAAQ;QAElB,aAAa,IAAI,YAAY,CAAC,QAAQ,CAAC;;;CAK7C,OAAO;EACL,cAAc,SAA4C;GACxD,OAAO,KAAK,IAAI,QAAQ;;EAE1B,CAAC,SAA0C;GACzC,OAAO,KAAK,QAAQ;;EAEtB,aAAa,YAA8C;GACzD,OAAO,aAAa,IAAI,WAAW,IAAI,OAAO,OAAO,EAAE,CAAC;;EAE3D"}
1
+ {"version":3,"file":"codec-descriptor-registry.mjs","names":[],"sources":["../../src/codec-ref-for-column.ts","../../src/codec-descriptor-registry.ts"],"sourcesContent":["import type { JsonValue } from '@prisma-next/contract/types';\nimport type { CodecRef } from '@prisma-next/framework-components/codec';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\n\n/**\n * Derive the canonical {@link CodecRef} for a `(table, column)` pair against a {@link SqlStorage}. This is the build-time path every column-bound `ParamRef` / `ProjectionItem` uses to stamp its `codec` slot before the AST is handed to the runtime — the runtime resolver then materialises a memoised {@link import('@prisma-next/sql-relational-core/ast').Codec} for the same `CodecRef` via `forCodecRef`.\n *\n * Resolution rules over `storage.tables[table].columns[column]`:\n *\n * - `typeRef` column → `{codecId, typeParams}` from `storage.types[typeRef]` (multiple columns sharing the typeRef share one ref → one memoised codec).\n * - inline `typeParams` column → `{codecId, typeParams}` from the column itself.\n * - non-parameterized column → `{codecId}` with `typeParams` undefined.\n *\n * Returns `undefined` when the table or column is unknown, or when a `typeRef` column references a `storage.types` entry that does not exist.\n */\nexport function codecRefForStorageColumn(\n storage: SqlStorage,\n tableName: string,\n columnName: string,\n): CodecRef | undefined {\n const tableDef = storage.tables[tableName];\n if (!tableDef) return undefined;\n const columnDef = tableDef.columns[columnName];\n if (!columnDef) return undefined;\n if (columnDef.typeRef !== undefined) {\n const instance = storage.types?.[columnDef.typeRef];\n if (!instance) return undefined;\n return { codecId: instance.codecId, typeParams: instance.typeParams as JsonValue };\n }\n if (columnDef.typeParams !== undefined) {\n return { codecId: columnDef.codecId, typeParams: columnDef.typeParams as JsonValue };\n }\n return { codecId: columnDef.codecId };\n}\n","import type { CodecDescriptor, CodecRef } from '@prisma-next/framework-components/codec';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { AnyCodecDescriptor } from './ast/codec-types';\nimport { codecRefForStorageColumn } from './codec-ref-for-column';\nimport type { CodecDescriptorRegistry } from './query-lane-context';\n\n/**\n * Build a {@link CodecDescriptorRegistry} from a flat descriptor list.\n *\n * Used by:\n * - Each codec-shipping package's `core/registry.ts` to expose a package-scoped registry as the public consumer surface (replacing raw descriptor-array exports). See ADR 208.\n * - The runtime's `buildExecutionContext` to construct the contract-bound combined registry from every contributor's `codecs:` slot.\n *\n * The descriptor map is heterogeneous in `P` — each codec id has its own params shape. The public {@link CodecDescriptorRegistry} interface widens to `CodecDescriptor<unknown>` and consumers narrow per codec id at the call site (the descriptor's `paramsSchema` validates JSON-sourced params before the factory ever sees them, so the runtime narrow is safe). The cast at registration goes through `unknown` because\n * `CodecDescriptor<P>` is invariant in `P` (the `factory` and `renderOutputType` slots use `P` contravariantly).\n */\nexport function buildCodecDescriptorRegistry(\n allDescriptors: ReadonlyArray<AnyCodecDescriptor>,\n storage?: SqlStorage,\n): CodecDescriptorRegistry {\n type AnyDescriptor = CodecDescriptor<unknown>;\n const byId = new Map<string, AnyDescriptor>();\n const byTargetType = new Map<string, Array<AnyDescriptor>>();\n\n for (const descriptor of allDescriptors) {\n if (byId.has(descriptor.codecId)) {\n throw new Error(\n `Duplicate codec descriptor id: '${descriptor.codecId}' — registered twice during registry construction. ` +\n 'Each codecId must be contributed by exactly one component (target / adapter / extension pack).',\n );\n }\n const widened = descriptor as unknown as AnyDescriptor;\n byId.set(descriptor.codecId, widened);\n for (const targetType of descriptor.targetTypes) {\n const list = byTargetType.get(targetType);\n if (list) {\n list.push(widened);\n } else {\n byTargetType.set(targetType, [widened]);\n }\n }\n }\n\n return {\n descriptorFor(codecId: string): AnyDescriptor | undefined {\n return byId.get(codecId);\n },\n codecRefForColumn(table: string, column: string): CodecRef | undefined {\n if (!storage) return undefined;\n return codecRefForStorageColumn(storage, table, column);\n },\n *values(): IterableIterator<AnyDescriptor> {\n yield* byId.values();\n },\n byTargetType(targetType: string): readonly AnyDescriptor[] {\n return byTargetType.get(targetType) ?? Object.freeze([]);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;AAeA,SAAgB,yBACd,SACA,WACA,YACsB;CACtB,MAAM,WAAW,QAAQ,OAAO;CAChC,IAAI,CAAC,UAAU,OAAO,KAAA;CACtB,MAAM,YAAY,SAAS,QAAQ;CACnC,IAAI,CAAC,WAAW,OAAO,KAAA;CACvB,IAAI,UAAU,YAAY,KAAA,GAAW;EACnC,MAAM,WAAW,QAAQ,QAAQ,UAAU;EAC3C,IAAI,CAAC,UAAU,OAAO,KAAA;EACtB,OAAO;GAAE,SAAS,SAAS;GAAS,YAAY,SAAS;GAAyB;;CAEpF,IAAI,UAAU,eAAe,KAAA,GAC3B,OAAO;EAAE,SAAS,UAAU;EAAS,YAAY,UAAU;EAAyB;CAEtF,OAAO,EAAE,SAAS,UAAU,SAAS;;;;;;;;;;;;;;AChBvC,SAAgB,6BACd,gBACA,SACyB;CAEzB,MAAM,uBAAO,IAAI,KAA4B;CAC7C,MAAM,+BAAe,IAAI,KAAmC;CAE5D,KAAK,MAAM,cAAc,gBAAgB;EACvC,IAAI,KAAK,IAAI,WAAW,QAAQ,EAC9B,MAAM,IAAI,MACR,mCAAmC,WAAW,QAAQ,mJAEvD;EAEH,MAAM,UAAU;EAChB,KAAK,IAAI,WAAW,SAAS,QAAQ;EACrC,KAAK,MAAM,cAAc,WAAW,aAAa;GAC/C,MAAM,OAAO,aAAa,IAAI,WAAW;GACzC,IAAI,MACF,KAAK,KAAK,QAAQ;QAElB,aAAa,IAAI,YAAY,CAAC,QAAQ,CAAC;;;CAK7C,OAAO;EACL,cAAc,SAA4C;GACxD,OAAO,KAAK,IAAI,QAAQ;;EAE1B,kBAAkB,OAAe,QAAsC;GACrE,IAAI,CAAC,SAAS,OAAO,KAAA;GACrB,OAAO,yBAAyB,SAAS,OAAO,OAAO;;EAEzD,CAAC,SAA0C;GACzC,OAAO,KAAK,QAAQ;;EAEtB,aAAa,YAA8C;GACzD,OAAO,aAAa,IAAI,WAAW,IAAI,OAAO,OAAO,EAAE,CAAC;;EAE3D"}
@@ -1,2 +1,2 @@
1
- import { n as planUnsupported, t as planInvalid } from "../errors-BgNpVAT8.mjs";
1
+ import { n as planUnsupported, t as planInvalid } from "../errors-D2KewtVl.mjs";
2
2
  export { planInvalid, planUnsupported };
@@ -1,4 +1,5 @@
1
- import { o as AnyExpression } from "../types-BZcKgaYA.mjs";
1
+ import { o as CodecRef } from "../codec-types-Cezo7k-i.mjs";
2
+ import { o as AnyExpression } from "../types-juiKe2qf.mjs";
2
3
  import { ParamSpec } from "@prisma-next/operations";
3
4
  import { SqlLoweringSpec } from "@prisma-next/sql-operations";
4
5
  import { QueryOperationReturn } from "@prisma-next/sql-contract/types";
@@ -7,6 +8,10 @@ import { QueryOperationReturn } from "@prisma-next/sql-contract/types";
7
8
  type ScopeField = {
8
9
  codecId: string;
9
10
  nullable: boolean;
11
+ /**
12
+ * Optional {@link CodecRef} derived from contract storage at scope construction time. Builder paths that mint column-bound `ParamRef` / `ProjectionItem` nodes stamp this slot onto the AST so encode/decode dispatch resolves through `contractCodecs.forCodecRef`. Leave `undefined` when the scope was built without contract storage (rare — tests, ad-hoc scopes).
13
+ */
14
+ codec?: CodecRef;
10
15
  };
11
16
  /**
12
17
  * A typed SQL expression. Identity is carried by the `returnType` descriptor (inherited from `QueryOperationReturn` and narrowed to `T`) — distinct `T` makes distinct Expression types structurally. `buildAst()` materialises the underlying AST node.
@@ -46,26 +51,22 @@ type TraitExpression<Traits extends readonly string[], Nullable extends boolean,
46
51
  /**
47
52
  * Resolve a raw value or an Expression into an AST expression node.
48
53
  *
49
- * When `value` is an Expression (duck-typed by its `buildAst` method), the AST it wraps is returned. Otherwise the value is embedded as a ParamRef tagged with `codecId` (if given) and optionally `refs: { table, column }` (if the caller knows the column-bound site).
54
+ * When `value` is an Expression (duck-typed by its `buildAst` method), the AST it wraps is returned. Otherwise the value is embedded as a ParamRef tagged with the caller-supplied {@link CodecRef} (when known). The runtime resolves the ref via `contractCodecs.forCodecRef(codec)`; content-keyed memoisation collapses repeated lookups for the same logical column onto one shared codec.
50
55
  *
51
- * For parameterized codec ids (e.g. `pg/vector@1`), encode-side dispatch requires `refs` to select the per-instance codec — so operation implementations that compare a column to a user-supplied value should derive `refs` from the column-bound side and pass it down. Non-parameterized codec ids (e.g. `pg/int4@1`) tolerate refs-less ParamRefs; the validator pass enforces refs only for parameterized ids.
56
+ * Operation implementations that compare a column-bound expression to a user value derive the column's {@link CodecRef} from the column-bound side (via {@link codecOf}) and forward it here so encode-side dispatch resolves to the per-instance codec for parameterized codec ids (`vector(1024)` vs. `vector(1536)`).
52
57
  */
53
- declare function toExpr(value: unknown, codecId?: string, refs?: {
54
- table: string;
55
- column: string;
56
- }): AnyExpression;
58
+ declare function toExpr(value: unknown, codec?: CodecRef): AnyExpression;
57
59
  /**
58
- * Derive `(table, column)` refs from an expression-like value when it carries column-bound metadata. Returns `undefined` for non-column-bound expressions and for raw scalar values.
60
+ * Derive the {@link CodecRef} carried by an expression-like value.
59
61
  *
60
- * Two sources are consulted, in order: 1. An optional `refs` slot on the `Expression` wrapper (the SQL builder's `ExpressionImpl` records `(table, column)` for top-level fields whose AST is `IdentifierRef` — the AST stays bare to preserve SQL rendering, the metadata lives on the wrapper). 2. The wrapped AST when it's already a `ColumnRef` (the namespaced field-proxy form, or operation impls passing column-bound exprs
61
- * directly).
62
+ * Resolution order:
63
+ * 1. `wrapper.codec` — explicit column-bound {@link CodecRef} stamped at field-proxy time.
64
+ * 2. `wrapper.returnType.codec` — scope-level codec when the scope was built from contract storage.
65
+ * 3. `{ codecId: wrapper.returnType.codecId }` — minimal ref derived from the expression's declared codec id (covers synthetic expressions like `count()` whose returnType has a known codec id but no explicit column binding).
62
66
  *
63
- * Operation implementations call this on the column-bound side of a comparison and forward the refs to {@link toExpr} on the user-value side, so the resulting `ParamRef` carries the table+column required by encode-side `forColumn` dispatch.
67
+ * Returns `undefined` for raw scalar values (non-expression-like).
64
68
  */
65
- declare function refsOf(value: unknown): {
66
- table: string;
67
- column: string;
68
- } | undefined;
69
+ declare function codecOf(value: unknown): CodecRef | undefined;
69
70
  interface BuildOperationSpec<R extends ScopeField> {
70
71
  readonly method: string;
71
72
  /**
@@ -80,5 +81,5 @@ interface BuildOperationSpec<R extends ScopeField> {
80
81
  */
81
82
  declare function buildOperation<R extends ScopeField>(spec: BuildOperationSpec<R>): Expression<R>;
82
83
  //#endregion
83
- export { BuildOperationSpec, CodecExpression, Expression, ScopeField, TraitExpression, buildOperation, refsOf, toExpr };
84
+ export { BuildOperationSpec, CodecExpression, Expression, ScopeField, TraitExpression, buildOperation, codecOf, toExpr };
84
85
  //# sourceMappingURL=expression.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expression.d.mts","names":[],"sources":["../../src/expression.ts"],"mappings":";;;;;;KAMY,UAAA;EAAe,OAAA;EAAiB,QAAA;AAAA;;;;KAKhC,UAAA,WAAqB,UAAA,IAAc,oBAAA;EAAA,SACpC,UAAA,EAAY,CAAA;EACrB,QAAA,IAAY,aAAA;AAAA;AAAA,KAGT,iBAAA,YACQ,MAAA;EAAA,SAA0B,KAAA;AAAA,8DAGzB,EAAA,YAAc,EAAA,CAAG,CAAA;EAAA,SAAsB,MAAA;AAAA,KAC9C,cAAA,mBAAiC,CAAA,IAChC,CAAA,yBAGA,EAAA;AAAA,KAEH,UAAA,MAAgB,CAAA;;;;;;;AAbnB;;KAuBU,eAAA,8DAGC,MAAA;EAAA,SAA0B,KAAA;AAAA,MAEnC,UAAA;EAAa,OAAA,EAAS,OAAA;EAAS,QAAA,EAAU,QAAA;AAAA,MACxC,OAAA,eAAsB,EAAA,GAAK,EAAA,CAAG,OAAA,sBAC/B,UAAA,CAAW,QAAA;;;;;;KAOH,eAAA,wEAGC,MAAA;EAAA,SAA0B,KAAA;AAAA,MACnC,eAAA,CAAgB,iBAAA,CAAkB,EAAA,EAAI,MAAA,GAAS,QAAA,EAAU,EAAA;;;;;;;;iBAS7C,MAAA,CACd,KAAA,WACA,OAAA,WACA,IAAA;EAAS,KAAA;EAAe,MAAA;AAAA,IACvB,aAAA;;;AA3CO;;;;;AAYV;iBAkDgB,MAAA,CAAO,KAAA;EAAmB,KAAA;EAAe,MAAA;AAAA;AAAA,UAoBxC,kBAAA,WAA6B,UAAA;EAAA,SACnC,MAAA;EAjEN;;;EAAA,SAqEM,IAAA,YAAgB,aAAA,KAAkB,aAAA;EAAA,SAClC,OAAA,EAAS,CAAA,GAAI,SAAA;EAAA,SACb,QAAA,EAAU,eAAA;AAAA;;;;iBAML,cAAA,WAAyB,UAAA,CAAA,CAAY,IAAA,EAAM,kBAAA,CAAmB,CAAA,IAAK,UAAA,CAAW,CAAA"}
1
+ {"version":3,"file":"expression.d.mts","names":[],"sources":["../../src/expression.ts"],"mappings":";;;;;;;KAQY,UAAA;EACV,OAAA;EACA,QAAA;EAFoB;;;EAMpB,KAAA,GAAQ,QAAA;AAAA;;;;KAME,UAAA,WAAqB,UAAA,IAAc,oBAAA;EAAA,SACpC,UAAA,EAAY,CAAA;EACrB,QAAA,IAAY,aAAA;AAAA;AAAA,KAGT,iBAAA,YACQ,MAAA;EAAA,SAA0B,KAAA;AAAA,8DAGzB,EAAA,YAAc,EAAA,CAAG,CAAA;EAAA,SAAsB,MAAA;AAAA,KAC9C,cAAA,mBAAiC,CAAA,IAChC,CAAA,yBAGA,EAAA;AAAA,KAEH,UAAA,MAAgB,CAAA;;;;;;;;AAbnB;KAuBU,eAAA,8DAGC,MAAA;EAAA,SAA0B,KAAA;AAAA,MAEnC,UAAA;EAAa,OAAA,EAAS,OAAA;EAAS,QAAA,EAAU,QAAA;AAAA,MACxC,OAAA,eAAsB,EAAA,GAAK,EAAA,CAAG,OAAA,sBAC/B,UAAA,CAAW,QAAA;;;;;;KAOH,eAAA,wEAGC,MAAA;EAAA,SAA0B,KAAA;AAAA,MACnC,eAAA,CAAgB,iBAAA,CAAkB,EAAA,EAAI,MAAA,GAAS,QAAA,EAAU,EAAA;;;;;;;;iBAS7C,MAAA,CAAO,KAAA,WAAgB,KAAA,GAAQ,QAAA,GAAW,aAAA;;;;;;;AAvChD;;;;iBA+DM,OAAA,CAAQ,KAAA,YAAiB,QAAA;AAAA,UAqBxB,kBAAA,WAA6B,UAAA;EAAA,SACnC,MAAA;EAzEgB;;;EAAA,SA6EhB,IAAA,YAAgB,aAAA,KAAkB,aAAA;EAAA,SAClC,OAAA,EAAS,CAAA,GAAI,SAAA;EAAA,SACb,QAAA,EAAU,eAAA;AAAA;;;;iBAML,cAAA,WAAyB,UAAA,CAAA,CAAY,IAAA,EAAM,kBAAA,CAAmB,CAAA,IAAK,UAAA,CAAW,CAAA"}
@@ -1,40 +1,34 @@
1
- import { S as OperationExpr, T as ParamRef } from "../types-CK9ZJ6OU.mjs";
1
+ import { S as OperationExpr, T as ParamRef } from "../types-DRYJSMk1.mjs";
2
+ import { runtimeError } from "@prisma-next/framework-components/runtime";
2
3
  //#region src/expression.ts
3
4
  /**
4
5
  * Resolve a raw value or an Expression into an AST expression node.
5
6
  *
6
- * When `value` is an Expression (duck-typed by its `buildAst` method), the AST it wraps is returned. Otherwise the value is embedded as a ParamRef tagged with `codecId` (if given) and optionally `refs: { table, column }` (if the caller knows the column-bound site).
7
+ * When `value` is an Expression (duck-typed by its `buildAst` method), the AST it wraps is returned. Otherwise the value is embedded as a ParamRef tagged with the caller-supplied {@link CodecRef} (when known). The runtime resolves the ref via `contractCodecs.forCodecRef(codec)`; content-keyed memoisation collapses repeated lookups for the same logical column onto one shared codec.
7
8
  *
8
- * For parameterized codec ids (e.g. `pg/vector@1`), encode-side dispatch requires `refs` to select the per-instance codec — so operation implementations that compare a column to a user-supplied value should derive `refs` from the column-bound side and pass it down. Non-parameterized codec ids (e.g. `pg/int4@1`) tolerate refs-less ParamRefs; the validator pass enforces refs only for parameterized ids.
9
+ * Operation implementations that compare a column-bound expression to a user value derive the column's {@link CodecRef} from the column-bound side (via {@link codecOf}) and forward it here so encode-side dispatch resolves to the per-instance codec for parameterized codec ids (`vector(1024)` vs. `vector(1536)`).
9
10
  */
10
- function toExpr(value, codecId, refs) {
11
+ function toExpr(value, codec) {
11
12
  if (isExpressionLike(value)) return value.buildAst();
12
- if (codecId === void 0 && refs === void 0) return ParamRef.of(value);
13
- return ParamRef.of(value, {
14
- ...codecId !== void 0 ? { codecId } : {},
15
- ...refs !== void 0 ? { refs } : {}
16
- });
13
+ if (codec === void 0) throw runtimeError("RUNTIME.PARAM_REF_CODEC_REQUIRED", `Cannot construct a ParamRef for a ${value === null ? "null" : typeof value} value without an explicit codec. Provide a CodecRef at the call site or use a column-bound builder path.`);
14
+ return ParamRef.of(value, { codec });
17
15
  }
18
16
  /**
19
- * Derive `(table, column)` refs from an expression-like value when it carries column-bound metadata. Returns `undefined` for non-column-bound expressions and for raw scalar values.
17
+ * Derive the {@link CodecRef} carried by an expression-like value.
20
18
  *
21
- * Two sources are consulted, in order: 1. An optional `refs` slot on the `Expression` wrapper (the SQL builder's `ExpressionImpl` records `(table, column)` for top-level fields whose AST is `IdentifierRef` — the AST stays bare to preserve SQL rendering, the metadata lives on the wrapper). 2. The wrapped AST when it's already a `ColumnRef` (the namespaced field-proxy form, or operation impls passing column-bound exprs
22
- * directly).
19
+ * Resolution order:
20
+ * 1. `wrapper.codec` — explicit column-bound {@link CodecRef} stamped at field-proxy time.
21
+ * 2. `wrapper.returnType.codec` — scope-level codec when the scope was built from contract storage.
22
+ * 3. `{ codecId: wrapper.returnType.codecId }` — minimal ref derived from the expression's declared codec id (covers synthetic expressions like `count()` whose returnType has a known codec id but no explicit column binding).
23
23
  *
24
- * Operation implementations call this on the column-bound side of a comparison and forward the refs to {@link toExpr} on the user-value side, so the resulting `ParamRef` carries the table+column required by encode-side `forColumn` dispatch.
24
+ * Returns `undefined` for raw scalar values (non-expression-like).
25
25
  */
26
- function refsOf(value) {
26
+ function codecOf(value) {
27
27
  if (!isExpressionLike(value)) return void 0;
28
- const wrapperRefs = value.refs;
29
- if (wrapperRefs) return {
30
- table: wrapperRefs.table,
31
- column: wrapperRefs.column
32
- };
33
- const ast = value.buildAst();
34
- if (ast.kind === "column-ref") return {
35
- table: ast.table,
36
- column: ast.column
37
- };
28
+ const wrapper = value;
29
+ if (wrapper.codec) return wrapper.codec;
30
+ if (wrapper.returnType?.codec) return wrapper.returnType.codec;
31
+ if (wrapper.returnType?.codecId) return { codecId: wrapper.returnType.codecId };
38
32
  }
39
33
  function isExpressionLike(value) {
40
34
  return typeof value === "object" && value !== null && "buildAst" in value && typeof value.buildAst === "function";
@@ -57,6 +51,6 @@ function buildOperation(spec) {
57
51
  };
58
52
  }
59
53
  //#endregion
60
- export { buildOperation, refsOf, toExpr };
54
+ export { buildOperation, codecOf, toExpr };
61
55
 
62
56
  //# sourceMappingURL=expression.mjs.map