@prisma-next/sql-relational-core 0.14.0-dev.4 → 0.14.0-dev.40
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.
- package/dist/{ddl-types-BVO002FS.d.mts → ddl-types-Cd4p4EbE.d.mts} +21 -3
- package/dist/{ddl-types-BVO002FS.d.mts.map → ddl-types-Cd4p4EbE.d.mts.map} +1 -1
- package/dist/{ddl-types-DAox2c8w.mjs → ddl-types-DFKQr_qQ.mjs} +21 -2
- package/dist/{ddl-types-DAox2c8w.mjs.map → ddl-types-DFKQr_qQ.mjs.map} +1 -1
- package/dist/exports/ast.d.mts +2 -2
- package/dist/exports/ast.mjs +3 -3
- package/dist/exports/codec-descriptor-registry.d.mts.map +1 -1
- package/dist/exports/codec-descriptor-registry.mjs +15 -4
- package/dist/exports/codec-descriptor-registry.mjs.map +1 -1
- package/dist/exports/contract-free.d.mts +3 -2
- package/dist/exports/contract-free.d.mts.map +1 -1
- package/dist/exports/contract-free.mjs +9 -3
- package/dist/exports/contract-free.mjs.map +1 -1
- package/dist/exports/expression.d.mts +27 -1
- package/dist/exports/expression.d.mts.map +1 -1
- package/dist/exports/expression.mjs +1 -1
- package/dist/exports/expression.mjs.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +3 -3
- package/dist/{types-lJUc6cY-.mjs → types-CaGVAsoT.mjs} +7 -3
- package/dist/types-CaGVAsoT.mjs.map +1 -0
- package/package.json +11 -11
- package/src/ast/ddl-types.ts +26 -1
- package/src/ast/types.ts +3 -3
- package/src/codec-ref-for-column.ts +11 -2
- package/src/contract-free/column.ts +5 -0
- package/src/exports/contract-free.ts +1 -0
- package/src/expression.ts +29 -1
- package/dist/types-lJUc6cY-.mjs.map +0 -1
|
@@ -124,7 +124,25 @@ declare class UniqueConstraint {
|
|
|
124
124
|
readonly name?: string;
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
|
-
|
|
127
|
+
/**
|
|
128
|
+
* A table-level CHECK constraint carrying a raw SQL predicate expression. Used
|
|
129
|
+
* for checks that are not enum value-set restrictions — e.g. the element-non-null
|
|
130
|
+
* constraint on a scalar-array column (`array_position(col, NULL) IS NULL`).
|
|
131
|
+
* The `expression` is emitted verbatim, so callers must supply safe,
|
|
132
|
+
* pre-validated SQL.
|
|
133
|
+
*
|
|
134
|
+
* Frozen on construction — immutable after creation.
|
|
135
|
+
*/
|
|
136
|
+
declare class CheckExpressionConstraint {
|
|
137
|
+
readonly kind: "check-expression";
|
|
138
|
+
readonly name: string;
|
|
139
|
+
readonly expression: string;
|
|
140
|
+
constructor(options: {
|
|
141
|
+
readonly name: string;
|
|
142
|
+
readonly expression: string;
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
type DdlTableConstraint = PrimaryKeyConstraint | ForeignKeyConstraint | UniqueConstraint | CheckExpressionConstraint;
|
|
128
146
|
//#endregion
|
|
129
|
-
export {
|
|
130
|
-
//# sourceMappingURL=ddl-types-
|
|
147
|
+
export { DdlColumnDefaultVisitor as a, DdlTableConstraint as c, LiteralColumnDefault as d, PrimaryKeyConstraint as f, DdlColumnDefault as i, ForeignKeyConstraint as l, isDdlNode as m, CheckExpressionConstraint as n, DdlColumnRenderContext as o, UniqueConstraint as p, DdlColumn as r, DdlNode as s, AnyDdlColumnDefault as t, FunctionColumnDefault as u };
|
|
148
|
+
//# sourceMappingURL=ddl-types-Cd4p4EbE.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ddl-types-
|
|
1
|
+
{"version":3,"file":"ddl-types-Cd4p4EbE.d.mts","names":[],"sources":["../src/ast/ddl-types.ts"],"mappings":";;;;;;;;AAeA;;;;AACqB;AAGrB;;UAJiB,sBAAA;EAAA,SACN,UAAU;AAAA;AAAA,UAGJ,uBAAA;EACf,OAAA,CAAQ,IAAA,EAAM,oBAAA,EAAsB,GAAA,EAAK,sBAAA,GAAyB,CAAA;EAClE,QAAA,CAAS,IAAA,EAAM,qBAAA,EAAuB,GAAA,EAAK,sBAAA,GAAyB,CAAA;AAAA;AAAA,uBAGhD,gBAAA;EAAA,kBACF,IAAA;EAAA,SACT,MAAA,IAAU,OAAA,EAAS,uBAAA,CAAwB,CAAA,GAAI,GAAA,EAAK,sBAAA,GAAyB,CAAA;EAAA,UAE5E,MAAA;AAAA;AAAA,cAKC,oBAAA,SAA6B,gBAAA;EAAA,SAC/B,IAAA;EAAA,SACA,KAAA,EAAO,8BAAA;cAEJ,KAAA,EAAO,8BAAA;EASV,MAAA,IAAU,OAAA,EAAS,uBAAA,CAAwB,CAAA,GAAI,GAAA,EAAK,sBAAA,GAAyB,CAAA;AAAA;AAAA,cAK3E,qBAAA,SAA8B,gBAAA;EAAA,SAChC,IAAA;EAAA,SACA,UAAA;cAEG,UAAA;EAMH,MAAA,IAAU,OAAA,EAAS,uBAAA,CAAwB,CAAA,GAAI,GAAA,EAAK,sBAAA,GAAyB,CAAA;AAAA;AAAA,KAK5E,mBAAA,GAAsB,oBAAA,GAAuB,qBAAqB;AAAA,cAEjE,SAAA;EAAA,SACF,IAAA;EAAA,SACA,IAAA;EAAA,SACA,OAAA;EAAA,SACA,UAAA;EAAA,SACA,OAAA,GAAU,mBAAA;EA/CoE;EAAA,SAiD9E,QAAA,GAAW,QAAA;cAER,OAAA;IAAA,SACD,IAAA;IAAA,SACA,IAAA;IAAA,SACA,OAAA;IAAA,SACA,UAAA;IAAA,SACA,OAAA,GAAU,mBAAA;IAAA,SACV,QAAA,GAAW,QAAA;EAAA;AAAA;AAAA,uBAYF,OAAA;EAAA,kBACF,IAAA;EApEF;AAKlB;;;;;EAuEE,SAAA;EAAA,UAIU,MAAA;EAIV,gBAAA,IAAoB,WAAW;AAAA;AAAA,iBAKjB,SAAA,CAAU,KAAA,YAAiB,KAAA,IAAS,OAAO;;;;;;;;cAoB9C,oBAAA;EAAA,SACF,IAAA;EAAA,SACA,OAAA,EAAS,aAAa;EAAA,SACtB,IAAA;cAEG,OAAA;IAAA,SAAoB,OAAA;IAAA,SAAqC,IAAA;EAAA;AAAA;;;AAhGkB;AAKzF;;;;cAyGa,oBAAA;EAAA,SACF,IAAA;EAAA,SACA,OAAA,EAAS,aAAA;EAAA,SACT,QAAA;EAAA,SACA,UAAA,EAAY,aAAA;EAAA,SACZ,QAAA,EAAU,iBAAA;EAAA,SACV,QAAA,EAAU,iBAAA;EAAA,SACV,IAAA;cAEG,OAAA;IAAA,SACD,OAAA;IAAA,SACA,QAAA;IAAA,SACA,UAAA;IAAA,SACA,QAAA,GAAW,iBAAA;IAAA,SACX,QAAA,GAAW,iBAAA;IAAA,SACX,IAAA;EAAA;AAAA;;;;AA9G4E;AAKzF;;;cA4Ha,gBAAA;EAAA,SACF,IAAA;EAAA,SACA,OAAA,EAAS,aAAa;EAAA,SACtB,IAAA;cAEG,OAAA;IAAA,SAAoB,OAAA;IAAA,SAAqC,IAAA;EAAA;AAAA;;;;;;;;;;cAgB1D,yBAAA;EAAA,SACF,IAAA;EAAA,SACA,IAAA;EAAA,SACA,UAAA;cAEG,OAAA;IAAA,SAAoB,IAAA;IAAA,SAAuB,UAAA;EAAA;AAAA;AAAA,KAO7C,kBAAA,GACR,oBAAA,GACA,oBAAA,GACA,gBAAA,GACA,yBAAA"}
|
|
@@ -127,7 +127,26 @@ var UniqueConstraint = class {
|
|
|
127
127
|
Object.freeze(this);
|
|
128
128
|
}
|
|
129
129
|
};
|
|
130
|
+
/**
|
|
131
|
+
* A table-level CHECK constraint carrying a raw SQL predicate expression. Used
|
|
132
|
+
* for checks that are not enum value-set restrictions — e.g. the element-non-null
|
|
133
|
+
* constraint on a scalar-array column (`array_position(col, NULL) IS NULL`).
|
|
134
|
+
* The `expression` is emitted verbatim, so callers must supply safe,
|
|
135
|
+
* pre-validated SQL.
|
|
136
|
+
*
|
|
137
|
+
* Frozen on construction — immutable after creation.
|
|
138
|
+
*/
|
|
139
|
+
var CheckExpressionConstraint = class {
|
|
140
|
+
kind = "check-expression";
|
|
141
|
+
name;
|
|
142
|
+
expression;
|
|
143
|
+
constructor(options) {
|
|
144
|
+
this.name = options.name;
|
|
145
|
+
this.expression = options.expression;
|
|
146
|
+
Object.freeze(this);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
130
149
|
//#endregion
|
|
131
|
-
export {
|
|
150
|
+
export { ForeignKeyConstraint as a, PrimaryKeyConstraint as c, DdlNode as i, UniqueConstraint as l, DdlColumn as n, FunctionColumnDefault as o, DdlColumnDefault as r, LiteralColumnDefault as s, CheckExpressionConstraint as t, isDdlNode as u };
|
|
132
151
|
|
|
133
|
-
//# sourceMappingURL=ddl-types-
|
|
152
|
+
//# sourceMappingURL=ddl-types-DFKQr_qQ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ddl-types-
|
|
1
|
+
{"version":3,"file":"ddl-types-DFKQr_qQ.mjs","names":[],"sources":["../src/ast/ddl-types.ts"],"sourcesContent":["import type { ColumnDefaultLiteralInputValue } from '@prisma-next/contract/types';\nimport { isColumnDefaultLiteralInputValue } from '@prisma-next/contract/types';\nimport type { ReferentialAction } from '@prisma-next/sql-contract/types';\nimport type { CodecRef } from './codec-types';\nimport type { AnyParamRef } from './types';\n\n/**\n * Render-time context the column-default visitor needs to make dialect\n * decisions that depend on the parent column. Today only the parent\n * column's native type (`\"jsonb\"`, `\"text\"`, …) — the Postgres renderer\n * uses it to decide whether to emit a `::jsonb` / `::json` cast on JSON\n * literal defaults so the emitted DDL matches the column type without\n * relying on Postgres's implicit text → jsonb cast at default-evaluation\n * time. Additional fields can join without re-shaping the interface.\n */\nexport interface DdlColumnRenderContext {\n readonly nativeType: string;\n}\n\nexport interface DdlColumnDefaultVisitor<R> {\n literal(node: LiteralColumnDefault, ctx: DdlColumnRenderContext): R;\n function(node: FunctionColumnDefault, ctx: DdlColumnRenderContext): R;\n}\n\nexport abstract class DdlColumnDefault {\n abstract readonly kind: string;\n abstract accept<R>(visitor: DdlColumnDefaultVisitor<R>, ctx: DdlColumnRenderContext): R;\n\n protected freeze(): void {\n Object.freeze(this);\n }\n}\n\nexport class LiteralColumnDefault extends DdlColumnDefault {\n readonly kind = 'literal' as const;\n readonly value: ColumnDefaultLiteralInputValue;\n\n constructor(value: ColumnDefaultLiteralInputValue) {\n super();\n if (!isColumnDefaultLiteralInputValue(value)) {\n throw new Error('Invalid column default literal value');\n }\n this.value = value;\n this.freeze();\n }\n\n override accept<R>(visitor: DdlColumnDefaultVisitor<R>, ctx: DdlColumnRenderContext): R {\n return visitor.literal(this, ctx);\n }\n}\n\nexport class FunctionColumnDefault extends DdlColumnDefault {\n readonly kind = 'function' as const;\n readonly expression: string;\n\n constructor(expression: string) {\n super();\n this.expression = expression;\n this.freeze();\n }\n\n override accept<R>(visitor: DdlColumnDefaultVisitor<R>, ctx: DdlColumnRenderContext): R {\n return visitor.function(this, ctx);\n }\n}\n\nexport type AnyDdlColumnDefault = LiteralColumnDefault | FunctionColumnDefault;\n\nexport class DdlColumn {\n readonly name: string;\n readonly type: string;\n readonly notNull?: boolean | undefined;\n readonly primaryKey?: boolean | undefined;\n readonly default?: AnyDdlColumnDefault | undefined;\n /** Codec identity for this column. When present, the DDL walker resolves the codec via `codecLookup.get(codecRef.codecId)` and calls `codec.encode(default.value, {})` to obtain the wire value before inlining the literal default into the DDL string. When absent, literal defaults follow RawSqlLiteral wire-scalar semantics (string / number / boolean / bigint / null / Uint8Array / Date inlined directly). */\n readonly codecRef?: CodecRef | undefined;\n\n constructor(options: {\n readonly name: string;\n readonly type: string;\n readonly notNull?: boolean;\n readonly primaryKey?: boolean;\n readonly default?: AnyDdlColumnDefault;\n readonly codecRef?: CodecRef;\n }) {\n this.name = options.name;\n this.type = options.type;\n this.notNull = options.notNull;\n this.primaryKey = options.primaryKey;\n this.default = options.default;\n this.codecRef = options.codecRef;\n Object.freeze(this);\n }\n}\n\nexport abstract class DdlNode {\n abstract readonly kind: string;\n\n /**\n * Structural brand: every DDL node answers `true`. Lets {@link isDdlNode}\n * recognise any `DdlNode` subclass — including target-contributed kinds —\n * without a central kind registry that subclasses would have to register\n * into.\n */\n isDdlNode(): true {\n return true;\n }\n\n protected freeze(): void {\n Object.freeze(this);\n }\n\n collectParamRefs(): AnyParamRef[] {\n return [];\n }\n}\n\nexport function isDdlNode(value: unknown): value is DdlNode {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'isDdlNode' in value &&\n typeof value.isDdlNode === 'function'\n );\n}\n\n// ---------------------------------------------------------------------------\n// Table-level constraint nodes\n// ---------------------------------------------------------------------------\n\n/**\n * A composite (or single-column) PRIMARY KEY constraint on a `CreateTable`\n * node. When `name` is set, the adapter renders `CONSTRAINT <name> PRIMARY KEY\n * (…)`; otherwise it renders an anonymous `PRIMARY KEY (…)`.\n *\n * Frozen on construction — immutable after creation.\n */\nexport class PrimaryKeyConstraint {\n readonly kind = 'primary-key' as const;\n readonly columns: ReadonlyArray<string>;\n readonly name: string | undefined;\n\n constructor(options: { readonly columns: readonly string[]; readonly name?: string }) {\n this.columns = Object.freeze([...options.columns]);\n this.name = options.name;\n Object.freeze(this);\n }\n}\n\n/**\n * A FOREIGN KEY constraint on a `CreateTable` node. `onDelete` and `onUpdate`\n * use the same `ReferentialAction` vocabulary already used by the migration\n * planner and the contract IR — no parallel string enum.\n *\n * Frozen on construction — immutable after creation.\n */\nexport class ForeignKeyConstraint {\n readonly kind = 'foreign-key' as const;\n readonly columns: ReadonlyArray<string>;\n readonly refTable: string;\n readonly refColumns: ReadonlyArray<string>;\n readonly onDelete: ReferentialAction | undefined;\n readonly onUpdate: ReferentialAction | undefined;\n readonly name: string | undefined;\n\n constructor(options: {\n readonly columns: readonly string[];\n readonly refTable: string;\n readonly refColumns: readonly string[];\n readonly onDelete?: ReferentialAction;\n readonly onUpdate?: ReferentialAction;\n readonly name?: string;\n }) {\n this.columns = Object.freeze([...options.columns]);\n this.refTable = options.refTable;\n this.refColumns = Object.freeze([...options.refColumns]);\n this.onDelete = options.onDelete;\n this.onUpdate = options.onUpdate;\n this.name = options.name;\n Object.freeze(this);\n }\n}\n\n/**\n * A table-level UNIQUE constraint on a `CreateTable` node. When `name` is\n * set, the adapter renders `CONSTRAINT <name> UNIQUE (…)`; otherwise it\n * renders an anonymous `UNIQUE (…)`.\n *\n * Frozen on construction — immutable after creation.\n */\nexport class UniqueConstraint {\n readonly kind = 'unique' as const;\n readonly columns: ReadonlyArray<string>;\n readonly name: string | undefined;\n\n constructor(options: { readonly columns: readonly string[]; readonly name?: string }) {\n this.columns = Object.freeze([...options.columns]);\n this.name = options.name;\n Object.freeze(this);\n }\n}\n\n/**\n * A table-level CHECK constraint carrying a raw SQL predicate expression. Used\n * for checks that are not enum value-set restrictions — e.g. the element-non-null\n * constraint on a scalar-array column (`array_position(col, NULL) IS NULL`).\n * The `expression` is emitted verbatim, so callers must supply safe,\n * pre-validated SQL.\n *\n * Frozen on construction — immutable after creation.\n */\nexport class CheckExpressionConstraint {\n readonly kind = 'check-expression' as const;\n readonly name: string;\n readonly expression: string;\n\n constructor(options: { readonly name: string; readonly expression: string }) {\n this.name = options.name;\n this.expression = options.expression;\n Object.freeze(this);\n }\n}\n\nexport type DdlTableConstraint =\n | PrimaryKeyConstraint\n | ForeignKeyConstraint\n | UniqueConstraint\n | CheckExpressionConstraint;\n"],"mappings":";;AAwBA,IAAsB,mBAAtB,MAAuC;CAIrC,SAAyB;EACvB,OAAO,OAAO,IAAI;CACpB;AACF;AAEA,IAAa,uBAAb,cAA0C,iBAAiB;CACzD,OAAgB;CAChB;CAEA,YAAY,OAAuC;EACjD,MAAM;EACN,IAAI,CAAC,iCAAiC,KAAK,GACzC,MAAM,IAAI,MAAM,sCAAsC;EAExD,KAAK,QAAQ;EACb,KAAK,OAAO;CACd;CAEA,OAAmB,SAAqC,KAAgC;EACtF,OAAO,QAAQ,QAAQ,MAAM,GAAG;CAClC;AACF;AAEA,IAAa,wBAAb,cAA2C,iBAAiB;CAC1D,OAAgB;CAChB;CAEA,YAAY,YAAoB;EAC9B,MAAM;EACN,KAAK,aAAa;EAClB,KAAK,OAAO;CACd;CAEA,OAAmB,SAAqC,KAAgC;EACtF,OAAO,QAAQ,SAAS,MAAM,GAAG;CACnC;AACF;AAIA,IAAa,YAAb,MAAuB;CACrB;CACA;CACA;CACA;CACA;;CAEA;CAEA,YAAY,SAOT;EACD,KAAK,OAAO,QAAQ;EACpB,KAAK,OAAO,QAAQ;EACpB,KAAK,UAAU,QAAQ;EACvB,KAAK,aAAa,QAAQ;EAC1B,KAAK,UAAU,QAAQ;EACvB,KAAK,WAAW,QAAQ;EACxB,OAAO,OAAO,IAAI;CACpB;AACF;AAEA,IAAsB,UAAtB,MAA8B;;;;;;;CAS5B,YAAkB;EAChB,OAAO;CACT;CAEA,SAAyB;EACvB,OAAO,OAAO,IAAI;CACpB;CAEA,mBAAkC;EAChC,OAAO,CAAC;CACV;AACF;AAEA,SAAgB,UAAU,OAAkC;CAC1D,OACE,OAAO,UAAU,YACjB,UAAU,QACV,eAAe,SACf,OAAO,MAAM,cAAc;AAE/B;;;;;;;;AAaA,IAAa,uBAAb,MAAkC;CAChC,OAAgB;CAChB;CACA;CAEA,YAAY,SAA0E;EACpF,KAAK,UAAU,OAAO,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;EACjD,KAAK,OAAO,QAAQ;EACpB,OAAO,OAAO,IAAI;CACpB;AACF;;;;;;;;AASA,IAAa,uBAAb,MAAkC;CAChC,OAAgB;CAChB;CACA;CACA;CACA;CACA;CACA;CAEA,YAAY,SAOT;EACD,KAAK,UAAU,OAAO,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;EACjD,KAAK,WAAW,QAAQ;EACxB,KAAK,aAAa,OAAO,OAAO,CAAC,GAAG,QAAQ,UAAU,CAAC;EACvD,KAAK,WAAW,QAAQ;EACxB,KAAK,WAAW,QAAQ;EACxB,KAAK,OAAO,QAAQ;EACpB,OAAO,OAAO,IAAI;CACpB;AACF;;;;;;;;AASA,IAAa,mBAAb,MAA8B;CAC5B,OAAgB;CAChB;CACA;CAEA,YAAY,SAA0E;EACpF,KAAK,UAAU,OAAO,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;EACjD,KAAK,OAAO,QAAQ;EACpB,OAAO,OAAO,IAAI;CACpB;AACF;;;;;;;;;;AAWA,IAAa,4BAAb,MAAuC;CACrC,OAAgB;CAChB;CACA;CAEA,YAAY,SAAiE;EAC3E,KAAK,OAAO,QAAQ;EACpB,KAAK,aAAa,QAAQ;EAC1B,OAAO,OAAO,IAAI;CACpB;AACF"}
|
package/dist/exports/ast.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
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-DFLA6Hmj.mjs";
|
|
2
2
|
import { $ as RawExpr, A as IdentifierRef, B as ListExpression, C as EqColJoinOn, D as ExpressionRewriter, E as ExpressionFolder, F as JoinOnExpr, G as NullCheckExpr, H as LoweredParam, I as JsonArrayAggExpr, J as OrderByItem, K as OperationExpr, L as JsonObjectEntry, M as InsertOnConflict, N as InsertValue, O as ExpressionSource, P as JoinAst, Q as ProjectionItem, R as JsonObjectExpr, S as DoUpdateSetConflictAction, T as ExprVisitor, U as LoweredStatement, V as LiteralExpr, W as NotExpr, X as PreparedParamRef, Y as ParamRef, Z as ProjectionExpr, _ as DefaultValueExpr, a as AndExpr, at as TableRef, b as Direction, c as AnyInsertOnConflictAction, ct as UpdateAst, d as AnyParamRef, dt as WindowFuncExpr, et as RawSqlExpr, f as AnyQueryAst, ft as isQueryAst, g as ColumnRef, h as BinaryOp, ht as whereExprKinds, i as AggregateOpFn, it as SubqueryExpr, j as InsertAst, k as FunctionSource, l as AnyInsertValue, lt as WhereArg, m as BinaryExpr, mt as queryAstKinds, n as AggregateExpr, nt as SelectAst, o as AnyExpression, ot as TableSource, p as AstRewriter, pt as isWhereExpr, q as OrExpr, r as AggregateFn, rt as SelectAstOptions, s as AnyFromSource, st as ToWhereExpr, t as AggregateCountFn, tt as RawSqlLiteral, u as AnyOperationArg, ut as WindowFn, v as DeleteAst, w as ExistsExpr, x as DoNothingConflictAction, y as DerivedTableSource, z as LimitOffsetValue } from "../types-DQrmgP8Y.mjs";
|
|
3
|
-
import { a as
|
|
3
|
+
import { a as DdlColumnDefaultVisitor, c as DdlTableConstraint, d as LiteralColumnDefault, f as PrimaryKeyConstraint, i as DdlColumnDefault, l as ForeignKeyConstraint, m as isDdlNode, n as CheckExpressionConstraint, o as DdlColumnRenderContext, p as UniqueConstraint, r as DdlColumn, s as DdlNode, t as AnyDdlColumnDefault, u as FunctionColumnDefault } from "../ddl-types-Cd4p4EbE.mjs";
|
|
4
4
|
import { ContractMarkerRecord, JsonValue } from "@prisma-next/contract/types";
|
|
5
5
|
import { CodecCallContext as CodecCallContext$1, CodecDescriptorImpl, CodecImpl, CodecInstanceContext } from "@prisma-next/framework-components/codec";
|
|
6
6
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
@@ -270,5 +270,5 @@ declare function compact<T extends Record<string, unknown>>(o: T): T;
|
|
|
270
270
|
*/
|
|
271
271
|
declare function collectOrderedParamRefs(ast: AnyQueryAst): ReadonlyArray<AnyParamRef>;
|
|
272
272
|
//#endregion
|
|
273
|
-
export { Adapter, AdapterProfile, AdapterTarget, AggregateCountFn, AggregateExpr, AggregateFn, AggregateOpFn, AndExpr, AnyCodecDescriptor, AnyDdlColumnDefault, AnyExpression, AnyFromSource, AnyInsertOnConflictAction, AnyInsertValue, AnyOperationArg, AnyParamRef, AnyQueryAst, AstRewriter, BinaryExpr, BinaryOp, Codec, type CodecCallContext, type CodecDescriptor, CodecMeta, type CodecRef, type CodecTrait, ColumnRef, ContractCodecRegistry, DdlColumn, DdlColumnDefault, DdlColumnDefaultVisitor, DdlColumnRenderContext, DdlNode, DdlTableConstraint, DefaultValueExpr, DeleteAst, DerivedTableSource, DescriptorCodecId, DescriptorCodecInput, DescriptorCodecTraits, Direction, DoNothingConflictAction, DoUpdateSetConflictAction, EqColJoinOn, ExistsExpr, ExprVisitor, ExpressionFolder, ExpressionRewriter, ExpressionSource, ExtractCodecTypes, ForeignKeyConstraint, FunctionColumnDefault, FunctionSource, IdentifierRef, InsertAst, InsertOnConflict, InsertValue, JoinAst, JoinOnExpr, JsonArrayAggExpr, JsonObjectEntry, JsonObjectExpr, LimitOffsetValue, ListExpression, LiteralColumnDefault, LiteralExpr, LoweredParam, LoweredStatement, Lowerer, LowererContext, MarkerReadResult, NotExpr, NullCheckExpr, OperationExpr, OrExpr, OrderByItem, ParamRef, PreparedExecuteRequest, PreparedParamRef, PrimaryKeyConstraint, ProjectionExpr, ProjectionItem, RawExpr, RawSqlExpr, RawSqlLiteral, 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, UniqueConstraint, UpdateAst, WhereArg, WindowFn, WindowFuncExpr, collectOrderedParamRefs, compact, isDdlNode, 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 };
|
|
273
|
+
export { Adapter, AdapterProfile, AdapterTarget, AggregateCountFn, AggregateExpr, AggregateFn, AggregateOpFn, AndExpr, AnyCodecDescriptor, AnyDdlColumnDefault, AnyExpression, AnyFromSource, AnyInsertOnConflictAction, AnyInsertValue, AnyOperationArg, AnyParamRef, AnyQueryAst, AstRewriter, BinaryExpr, BinaryOp, CheckExpressionConstraint, Codec, type CodecCallContext, type CodecDescriptor, CodecMeta, type CodecRef, type CodecTrait, ColumnRef, ContractCodecRegistry, DdlColumn, DdlColumnDefault, DdlColumnDefaultVisitor, DdlColumnRenderContext, DdlNode, DdlTableConstraint, DefaultValueExpr, DeleteAst, DerivedTableSource, DescriptorCodecId, DescriptorCodecInput, DescriptorCodecTraits, Direction, DoNothingConflictAction, DoUpdateSetConflictAction, EqColJoinOn, ExistsExpr, ExprVisitor, ExpressionFolder, ExpressionRewriter, ExpressionSource, ExtractCodecTypes, ForeignKeyConstraint, FunctionColumnDefault, FunctionSource, IdentifierRef, InsertAst, InsertOnConflict, InsertValue, JoinAst, JoinOnExpr, JsonArrayAggExpr, JsonObjectEntry, JsonObjectExpr, LimitOffsetValue, ListExpression, LiteralColumnDefault, LiteralExpr, LoweredParam, LoweredStatement, Lowerer, LowererContext, MarkerReadResult, NotExpr, NullCheckExpr, OperationExpr, OrExpr, OrderByItem, ParamRef, PreparedExecuteRequest, PreparedParamRef, PrimaryKeyConstraint, ProjectionExpr, ProjectionItem, RawExpr, RawSqlExpr, RawSqlLiteral, 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, UniqueConstraint, UpdateAst, WhereArg, WindowFn, WindowFuncExpr, collectOrderedParamRefs, compact, isDdlNode, 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 };
|
|
274
274
|
//# sourceMappingURL=ast.d.mts.map
|
package/dist/exports/ast.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { A as RawSqlExpr, C as OperationExpr, D as PreparedParamRef, E as ParamRef, F as WindowFuncExpr, I as isQueryAst, L as isWhereExpr, M as SubqueryExpr, N as TableSource, O as ProjectionItem, P as UpdateAst, R as queryAstKinds, S as NullCheckExpr, T as OrderByItem, _ as JsonArrayAggExpr, a as DefaultValueExpr, b as LiteralExpr, c as DoNothingConflictAction, d as ExistsExpr, f as FunctionSource, g as JoinAst, h as InsertOnConflict, i as ColumnRef, j as SelectAst, k as RawExpr, l as DoUpdateSetConflictAction, m as InsertAst, n as AndExpr, o as DeleteAst, p as IdentifierRef, r as BinaryExpr, s as DerivedTableSource, t as AggregateExpr, u as EqColJoinOn, v as JsonObjectExpr, w as OrExpr, x as NotExpr, y as ListExpression, z as whereExprKinds } from "../types-
|
|
1
|
+
import { a as ForeignKeyConstraint, c as PrimaryKeyConstraint, i as DdlNode, l as UniqueConstraint, n as DdlColumn, o as FunctionColumnDefault, r as DdlColumnDefault, s as LiteralColumnDefault, t as CheckExpressionConstraint, u as isDdlNode } from "../ddl-types-DFKQr_qQ.mjs";
|
|
2
|
+
import { A as RawSqlExpr, C as OperationExpr, D as PreparedParamRef, E as ParamRef, F as WindowFuncExpr, I as isQueryAst, L as isWhereExpr, M as SubqueryExpr, N as TableSource, O as ProjectionItem, P as UpdateAst, R as queryAstKinds, S as NullCheckExpr, T as OrderByItem, _ as JsonArrayAggExpr, a as DefaultValueExpr, b as LiteralExpr, c as DoNothingConflictAction, d as ExistsExpr, f as FunctionSource, g as JoinAst, h as InsertOnConflict, i as ColumnRef, j as SelectAst, k as RawExpr, l as DoUpdateSetConflictAction, m as InsertAst, n as AndExpr, o as DeleteAst, p as IdentifierRef, r as BinaryExpr, s as DerivedTableSource, t as AggregateExpr, u as EqColJoinOn, v as JsonObjectExpr, w as OrExpr, x as NotExpr, y as ListExpression, z as whereExprKinds } from "../types-CaGVAsoT.mjs";
|
|
3
3
|
import { n as compact, t as collectOrderedParamRefs } from "../util-DQQgv2j1.mjs";
|
|
4
4
|
import { CodecDescriptorImpl, CodecImpl, column, voidParamsSchema } from "@prisma-next/framework-components/codec";
|
|
5
5
|
import { type } from "arktype";
|
|
@@ -231,6 +231,6 @@ var SqlTimestampDescriptor = class extends CodecDescriptorImpl {
|
|
|
231
231
|
const sqlTimestampDescriptor = new SqlTimestampDescriptor();
|
|
232
232
|
const sqlTimestampColumn = (params = {}) => column(sqlTimestampDescriptor.factory(params), sqlTimestampDescriptor.codecId, params, "timestamp");
|
|
233
233
|
//#endregion
|
|
234
|
-
export { AggregateExpr, AndExpr, BinaryExpr, ColumnRef, DdlColumn, DdlColumnDefault, DdlNode, DefaultValueExpr, DeleteAst, DerivedTableSource, DoNothingConflictAction, DoUpdateSetConflictAction, EqColJoinOn, ExistsExpr, ForeignKeyConstraint, FunctionColumnDefault, FunctionSource, IdentifierRef, InsertAst, InsertOnConflict, JoinAst, JsonArrayAggExpr, JsonObjectExpr, ListExpression, LiteralColumnDefault, LiteralExpr, NotExpr, NullCheckExpr, OperationExpr, OrExpr, OrderByItem, ParamRef, PreparedParamRef, PrimaryKeyConstraint, ProjectionItem, RawExpr, 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, UniqueConstraint, UpdateAst, WindowFuncExpr, collectOrderedParamRefs, compact, isDdlNode, 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 };
|
|
234
|
+
export { AggregateExpr, AndExpr, BinaryExpr, CheckExpressionConstraint, ColumnRef, DdlColumn, DdlColumnDefault, DdlNode, DefaultValueExpr, DeleteAst, DerivedTableSource, DoNothingConflictAction, DoUpdateSetConflictAction, EqColJoinOn, ExistsExpr, ForeignKeyConstraint, FunctionColumnDefault, FunctionSource, IdentifierRef, InsertAst, InsertOnConflict, JoinAst, JsonArrayAggExpr, JsonObjectExpr, ListExpression, LiteralColumnDefault, LiteralExpr, NotExpr, NullCheckExpr, OperationExpr, OrExpr, OrderByItem, ParamRef, PreparedParamRef, PrimaryKeyConstraint, ProjectionItem, RawExpr, 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, UniqueConstraint, UpdateAst, WindowFuncExpr, collectOrderedParamRefs, compact, isDdlNode, 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 };
|
|
235
235
|
|
|
236
236
|
//# sourceMappingURL=ast.mjs.map
|
|
@@ -1 +1 @@
|
|
|
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;;;;;;;;;;;
|
|
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;;;;;;;;;;;iBCKgB,wBAAA,CACd,OAAA,EAAS,UAAA,EACT,WAAA,UACA,SAAA,UACA,UAAA,WACC,QAAQ"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveStorageTable } from "@prisma-next/sql-contract/resolve-storage-table";
|
|
2
2
|
import { isStorageTypeInstance } from "@prisma-next/sql-contract/types";
|
|
3
|
+
import { blindCast } from "@prisma-next/utils/casts";
|
|
3
4
|
//#region src/codec-ref-for-column.ts
|
|
4
5
|
/**
|
|
5
6
|
* 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`.
|
|
@@ -33,11 +34,21 @@ function codecRefForStorageColumn(storage, namespaceId, tableName, columnName) {
|
|
|
33
34
|
}
|
|
34
35
|
return;
|
|
35
36
|
}
|
|
36
|
-
if (columnDef.typeParams !== void 0 && Object.keys(columnDef.typeParams).length > 0)
|
|
37
|
+
if (columnDef.typeParams !== void 0 && Object.keys(columnDef.typeParams).length > 0) {
|
|
38
|
+
const typeParams = blindCast(columnDef.typeParams);
|
|
39
|
+
return columnDef.many ? {
|
|
40
|
+
codecId: columnDef.codecId,
|
|
41
|
+
typeParams,
|
|
42
|
+
many: true
|
|
43
|
+
} : {
|
|
44
|
+
codecId: columnDef.codecId,
|
|
45
|
+
typeParams
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return columnDef.many ? {
|
|
37
49
|
codecId: columnDef.codecId,
|
|
38
|
-
|
|
39
|
-
};
|
|
40
|
-
return { codecId: columnDef.codecId };
|
|
50
|
+
many: true
|
|
51
|
+
} : { codecId: columnDef.codecId };
|
|
41
52
|
}
|
|
42
53
|
//#endregion
|
|
43
54
|
//#region src/codec-descriptor-registry.ts
|
|
@@ -1 +1 @@
|
|
|
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 { resolveStorageTable } from '@prisma-next/sql-contract/resolve-storage-table';\nimport { isStorageTypeInstance, 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 namespace `entries.table[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 *\n * `namespaceId` leads the coordinate args and is always supplied: every\n * model/table sits in an explicit namespace, so the table is resolved strictly\n * within that namespace (see {@link resolveStorageTable}).\n */\nexport function codecRefForStorageColumn(\n storage: SqlStorage,\n namespaceId: string,\n tableName: string,\n columnName: string,\n): CodecRef | undefined {\n const resolved = resolveStorageTable(storage, tableName, namespaceId);\n if (resolved === undefined) return undefined;\n const tableDef = resolved.table;\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 if (isStorageTypeInstance(instance)) {\n const instanceParams = instance.typeParams;\n const hasParamKeys = instanceParams !== undefined && Object.keys(instanceParams).length > 0;\n return hasParamKeys\n ? { codecId: instance.codecId, typeParams: instanceParams as JsonValue }\n : { codecId: instance.codecId };\n }\n return undefined;\n }\n if (columnDef.typeParams !== undefined && Object.keys(columnDef.typeParams).length > 0) {\n return { codecId: columnDef.codecId, typeParams: columnDef.typeParams
|
|
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 { resolveStorageTable } from '@prisma-next/sql-contract/resolve-storage-table';\nimport { isStorageTypeInstance, type SqlStorage } from '@prisma-next/sql-contract/types';\nimport { blindCast } from '@prisma-next/utils/casts';\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 namespace `entries.table[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 *\n * `namespaceId` leads the coordinate args and is always supplied: every\n * model/table sits in an explicit namespace, so the table is resolved strictly\n * within that namespace (see {@link resolveStorageTable}).\n */\nexport function codecRefForStorageColumn(\n storage: SqlStorage,\n namespaceId: string,\n tableName: string,\n columnName: string,\n): CodecRef | undefined {\n const resolved = resolveStorageTable(storage, tableName, namespaceId);\n if (resolved === undefined) return undefined;\n const tableDef = resolved.table;\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 if (isStorageTypeInstance(instance)) {\n const instanceParams = instance.typeParams;\n const hasParamKeys = instanceParams !== undefined && Object.keys(instanceParams).length > 0;\n return hasParamKeys\n ? { codecId: instance.codecId, typeParams: instanceParams as JsonValue }\n : { codecId: instance.codecId };\n }\n return undefined;\n }\n if (columnDef.typeParams !== undefined && Object.keys(columnDef.typeParams).length > 0) {\n const typeParams = blindCast<\n JsonValue,\n 'column typeParams is a validated contract record; its values are JSON-serialisable'\n >(columnDef.typeParams);\n return columnDef.many\n ? { codecId: columnDef.codecId, typeParams, many: true }\n : { codecId: columnDef.codecId, typeParams };\n }\n return columnDef.many\n ? { codecId: columnDef.codecId, many: true }\n : { 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(namespaceId: string, table: string, column: string): CodecRef | undefined {\n if (!storage) return undefined;\n return codecRefForStorageColumn(storage, namespaceId, 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":";;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,yBACd,SACA,aACA,WACA,YACsB;CACtB,MAAM,WAAW,oBAAoB,SAAS,WAAW,WAAW;CACpE,IAAI,aAAa,KAAA,GAAW,OAAO,KAAA;CAEnC,MAAM,YADW,SAAS,MACC,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,IAAI,sBAAsB,QAAQ,GAAG;GACnC,MAAM,iBAAiB,SAAS;GAEhC,OADqB,mBAAmB,KAAA,KAAa,OAAO,KAAK,cAAc,CAAC,CAAC,SAAS,IAEtF;IAAE,SAAS,SAAS;IAAS,YAAY;GAA4B,IACrE,EAAE,SAAS,SAAS,QAAQ;EAClC;EACA;CACF;CACA,IAAI,UAAU,eAAe,KAAA,KAAa,OAAO,KAAK,UAAU,UAAU,CAAC,CAAC,SAAS,GAAG;EACtF,MAAM,aAAa,UAGjB,UAAU,UAAU;EACtB,OAAO,UAAU,OACb;GAAE,SAAS,UAAU;GAAS;GAAY,MAAM;EAAK,IACrD;GAAE,SAAS,UAAU;GAAS;EAAW;CAC/C;CACA,OAAO,UAAU,OACb;EAAE,SAAS,UAAU;EAAS,MAAM;CAAK,IACzC,EAAE,SAAS,UAAU,QAAQ;AACnC;;;;;;;;;;;;;ACxCA,SAAgB,6BACd,gBACA,SACyB;CAEzB,MAAM,uBAAO,IAAI,IAA2B;CAC5C,MAAM,+BAAe,IAAI,IAAkC;CAE3D,KAAK,MAAM,cAAc,gBAAgB;EACvC,IAAI,KAAK,IAAI,WAAW,OAAO,GAC7B,MAAM,IAAI,MACR,mCAAmC,WAAW,QAAQ,kJAExD;EAEF,MAAM,UAAU;EAChB,KAAK,IAAI,WAAW,SAAS,OAAO;EACpC,KAAK,MAAM,cAAc,WAAW,aAAa;GAC/C,MAAM,OAAO,aAAa,IAAI,UAAU;GACxC,IAAI,MACF,KAAK,KAAK,OAAO;QAEjB,aAAa,IAAI,YAAY,CAAC,OAAO,CAAC;EAE1C;CACF;CAEA,OAAO;EACL,cAAc,SAA4C;GACxD,OAAO,KAAK,IAAI,OAAO;EACzB;EACA,kBAAkB,aAAqB,OAAe,QAAsC;GAC1F,IAAI,CAAC,SAAS,OAAO,KAAA;GACrB,OAAO,yBAAyB,SAAS,aAAa,OAAO,MAAM;EACrE;EACA,CAAC,SAA0C;GACzC,OAAO,KAAK,OAAO;EACrB;EACA,aAAa,YAA8C;GACzD,OAAO,aAAa,IAAI,UAAU,KAAK,OAAO,OAAO,CAAC,CAAC;EACzD;CACF;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { o as CodecRef } from "../codec-types-DFLA6Hmj.mjs";
|
|
2
2
|
import { J as OrderByItem, P as JoinAst, Q as ProjectionItem, ct as UpdateAst, g as ColumnRef, j as InsertAst, nt as SelectAst, o as AnyExpression, ot as TableSource, s as AnyFromSource } from "../types-DQrmgP8Y.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { d as LiteralColumnDefault, f as PrimaryKeyConstraint, l as ForeignKeyConstraint, n as CheckExpressionConstraint, p as UniqueConstraint, r as DdlColumn, t as AnyDdlColumnDefault, u as FunctionColumnDefault } from "../ddl-types-Cd4p4EbE.mjs";
|
|
4
4
|
import { ColumnDefaultLiteralInputValue } from "@prisma-next/contract/types";
|
|
5
5
|
import { ReferentialAction } from "@prisma-next/sql-contract/types";
|
|
6
6
|
import { ParamSpec } from "@prisma-next/operations";
|
|
@@ -26,6 +26,7 @@ declare function foreignKey(columns: readonly string[], refTable: string, refCol
|
|
|
26
26
|
declare function unique(columns: readonly string[], options?: {
|
|
27
27
|
readonly name?: string;
|
|
28
28
|
}): UniqueConstraint;
|
|
29
|
+
declare function checkExpression(name: string, expression: string): CheckExpressionConstraint;
|
|
29
30
|
//#endregion
|
|
30
31
|
//#region src/contract-free/table.d.ts
|
|
31
32
|
interface ColumnDescriptor {
|
|
@@ -214,5 +215,5 @@ declare class CfSelectQuery {
|
|
|
214
215
|
*/
|
|
215
216
|
declare function table<Schema extends ColumnSchema>(source: TableSource, schema: Schema): TableHandle<Schema>;
|
|
216
217
|
//#endregion
|
|
217
|
-
export { CfConflictClause, CfExpr, CfExprSelectQuery, type CfFnOptions, CfInsertQuery, CfSelectQuery, CfUpdateQuery, CfUpsertBuilder, CfUpsertQuery, type ColumnDescriptor, type ColumnProxy, type ColumnSchema, type DdlColumnOptions, type ExcludedProxy, type TableHandle, type TableInsertRow, type TableSetValues, cfExpr, cfTable, col, exprSelect, fn, foreignKey, lit, primaryKey, table, unique };
|
|
218
|
+
export { CfConflictClause, CfExpr, CfExprSelectQuery, type CfFnOptions, CfInsertQuery, CfSelectQuery, CfUpdateQuery, CfUpsertBuilder, CfUpsertQuery, type ColumnDescriptor, type ColumnProxy, type ColumnSchema, type DdlColumnOptions, type ExcludedProxy, type TableHandle, type TableInsertRow, type TableSetValues, cfExpr, cfTable, checkExpression, col, exprSelect, fn, foreignKey, lit, primaryKey, table, unique };
|
|
218
219
|
//# sourceMappingURL=contract-free.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-free.d.mts","names":[],"sources":["../../src/contract-free/column.ts","../../src/contract-free/table.ts"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"contract-free.d.mts","names":[],"sources":["../../src/contract-free/column.ts","../../src/contract-free/table.ts"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { C as OperationExpr, E as ParamRef, N as TableSource, O as ProjectionItem, P as UpdateAst, S as NullCheckExpr, T as OrderByItem, b as LiteralExpr, d as ExistsExpr, g as JoinAst, h as InsertOnConflict, i as ColumnRef, j as SelectAst, k as RawExpr, m as InsertAst, n as AndExpr, p as IdentifierRef, r as BinaryExpr, t as AggregateExpr, w as OrExpr } from "../types-
|
|
1
|
+
import { a as ForeignKeyConstraint, c as PrimaryKeyConstraint, l as UniqueConstraint, n as DdlColumn, o as FunctionColumnDefault, s as LiteralColumnDefault, t as CheckExpressionConstraint } from "../ddl-types-DFKQr_qQ.mjs";
|
|
2
|
+
import { C as OperationExpr, E as ParamRef, N as TableSource, O as ProjectionItem, P as UpdateAst, S as NullCheckExpr, T as OrderByItem, b as LiteralExpr, d as ExistsExpr, g as JoinAst, h as InsertOnConflict, i as ColumnRef, j as SelectAst, k as RawExpr, m as InsertAst, n as AndExpr, p as IdentifierRef, r as BinaryExpr, t as AggregateExpr, w as OrExpr } from "../types-CaGVAsoT.mjs";
|
|
3
3
|
import { blindCast } from "@prisma-next/utils/casts";
|
|
4
4
|
//#region src/contract-free/column.ts
|
|
5
5
|
function lit(value) {
|
|
@@ -35,6 +35,12 @@ function unique(columns, options) {
|
|
|
35
35
|
...options
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
+
function checkExpression(name, expression) {
|
|
39
|
+
return new CheckExpressionConstraint({
|
|
40
|
+
name,
|
|
41
|
+
expression
|
|
42
|
+
});
|
|
43
|
+
}
|
|
38
44
|
//#endregion
|
|
39
45
|
//#region src/contract-free/table.ts
|
|
40
46
|
/**
|
|
@@ -383,6 +389,6 @@ function buildSetMap(schema, values) {
|
|
|
383
389
|
return set;
|
|
384
390
|
}
|
|
385
391
|
//#endregion
|
|
386
|
-
export { CfConflictClause, CfExpr, CfExprSelectQuery, CfInsertQuery, CfSelectQuery, CfUpdateQuery, CfUpsertBuilder, CfUpsertQuery, cfExpr, cfTable, col, exprSelect, fn, foreignKey, lit, primaryKey, table, unique };
|
|
392
|
+
export { CfConflictClause, CfExpr, CfExprSelectQuery, CfInsertQuery, CfSelectQuery, CfUpdateQuery, CfUpsertBuilder, CfUpsertQuery, cfExpr, cfTable, checkExpression, col, exprSelect, fn, foreignKey, lit, primaryKey, table, unique };
|
|
387
393
|
|
|
388
394
|
//# sourceMappingURL=contract-free.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-free.mjs","names":[],"sources":["../../src/contract-free/column.ts","../../src/contract-free/table.ts"],"sourcesContent":["import type { ColumnDefaultLiteralInputValue } from '@prisma-next/contract/types';\nimport type { ReferentialAction } from '@prisma-next/sql-contract/types';\nimport type { CodecRef } from '../ast/codec-types';\nimport type { AnyDdlColumnDefault } from '../ast/ddl-types';\nimport {\n DdlColumn,\n ForeignKeyConstraint,\n FunctionColumnDefault,\n LiteralColumnDefault,\n PrimaryKeyConstraint,\n UniqueConstraint,\n} from '../ast/ddl-types';\n\nexport interface DdlColumnOptions {\n readonly notNull?: boolean;\n readonly primaryKey?: boolean;\n readonly default?: AnyDdlColumnDefault;\n readonly codecRef?: CodecRef;\n}\n\nexport function lit(value: ColumnDefaultLiteralInputValue): LiteralColumnDefault {\n return new LiteralColumnDefault(value);\n}\n\nexport function fn(expression: string): FunctionColumnDefault {\n return new FunctionColumnDefault(expression);\n}\n\nexport function col(name: string, type: string, options?: DdlColumnOptions): DdlColumn {\n return new DdlColumn({ name, type, ...options });\n}\n\nexport function primaryKey(\n columns: readonly string[],\n options?: { readonly name?: string },\n): PrimaryKeyConstraint {\n return new PrimaryKeyConstraint({ columns, ...options });\n}\n\nexport function foreignKey(\n columns: readonly string[],\n refTable: string,\n refColumns: readonly string[],\n options?: {\n readonly name?: string;\n readonly onDelete?: ReferentialAction;\n readonly onUpdate?: ReferentialAction;\n },\n): ForeignKeyConstraint {\n return new ForeignKeyConstraint({ columns, refTable, refColumns, ...options });\n}\n\nexport function unique(\n columns: readonly string[],\n options?: { readonly name?: string },\n): UniqueConstraint {\n return new UniqueConstraint({ columns, ...options });\n}\n","import type { ParamSpec } from '@prisma-next/operations';\nimport { blindCast } from '@prisma-next/utils/casts';\nimport {\n AggregateExpr,\n AndExpr,\n type AnyExpression,\n type AnyFromSource,\n BinaryExpr,\n ColumnRef,\n ExistsExpr,\n IdentifierRef,\n InsertAst,\n InsertOnConflict,\n type InsertValue,\n JoinAst,\n LiteralExpr,\n NullCheckExpr,\n OperationExpr,\n OrderByItem,\n OrExpr,\n ParamRef,\n ProjectionItem,\n RawExpr,\n SelectAst,\n TableSource,\n UpdateAst,\n} from '../ast/types';\n\nexport interface ColumnDescriptor {\n readonly codecId: string;\n readonly nullable: boolean;\n}\n\nexport type ColumnSchema = Record<string, ColumnDescriptor>;\n\n/**\n * A composable WHERE / ON expression. Wraps an `AnyExpression` and exposes\n * fluent boolean combinators, mirroring the spirit of `sql-builder`'s\n * `Expression` interface without the contract-bound type machinery.\n */\nexport class CfExpr {\n constructor(readonly ast: AnyExpression) {}\n\n and(other: CfExpr): CfExpr {\n return new CfExpr(AndExpr.of([this.ast, other.ast]));\n }\n\n or(other: CfExpr): CfExpr {\n return new CfExpr(OrExpr.of([this.ast, other.ast]));\n }\n\n not(): CfExpr {\n return new CfExpr(this.ast.not());\n }\n\n isNull(): CfExpr {\n return new CfExpr(NullCheckExpr.isNull(this.ast));\n }\n\n isNotNull(): CfExpr {\n return new CfExpr(NullCheckExpr.isNotNull(this.ast));\n }\n\n eqLit(value: number | string | boolean): CfExpr {\n return new CfExpr(BinaryExpr.eq(this.ast, LiteralExpr.of(value)));\n }\n\n gtLit(value: number | string | boolean): CfExpr {\n return new CfExpr(BinaryExpr.gt(this.ast, LiteralExpr.of(value)));\n }\n\n eqParam(value: unknown, codecId: string): CfExpr {\n return new CfExpr(BinaryExpr.eq(this.ast, ParamRef.of(value, { codec: { codecId } })));\n }\n\n eqExpr(other: CfExpr): CfExpr {\n return new CfExpr(BinaryExpr.eq(this.ast, other.ast));\n }\n}\n\nexport interface CfFnOptions {\n readonly method: string;\n readonly template: string;\n readonly self: CfExpr;\n readonly args?: ReadonlyArray<CfExpr>;\n readonly returns: ParamSpec;\n}\n\nexport const cfExpr = {\n countStar(): CfExpr {\n return new CfExpr(AggregateExpr.count());\n },\n lit(value: number | string | boolean): CfExpr {\n return new CfExpr(LiteralExpr.of(value));\n },\n identifierRef(name: string): CfExpr {\n return new CfExpr(IdentifierRef.of(name));\n },\n param(value: unknown, codecId: string): CfExpr {\n return new CfExpr(ParamRef.of(value, { codec: { codecId } }));\n },\n /**\n * Catalog function call lowered via a `'function'`-strategy template\n * (e.g. `to_regclass({{self}})`). Owns the `OperationExpr` assembly so\n * target packages only supply vocabulary: template, codec'd operands,\n * and return spec.\n */\n fn(options: CfFnOptions): CfExpr {\n return new CfExpr(\n new OperationExpr({\n method: options.method,\n self: options.self.ast,\n args: options.args?.map((arg) => arg.ast),\n returns: options.returns,\n lowering: {\n targetFamily: 'sql',\n strategy: 'function',\n template: options.template,\n },\n }),\n );\n },\n columnRef(qualifier: string, name: string): CfExpr {\n return new CfExpr(ColumnRef.of(qualifier, name));\n },\n allOf(exprs: ReadonlyArray<CfExpr>): CfExpr {\n return new CfExpr(AndExpr.of(exprs.map((expr) => expr.ast)));\n },\n /**\n * Opaque DB-side SQL expression (e.g. `current_schema()`) carried as a\n * `RawExpr`. For zero-operand catalog functions where a `'function'`\n * lowering template has nothing to substitute.\n */\n raw(sql: string, returns: ParamSpec): CfExpr {\n return new CfExpr(new RawExpr({ parts: [sql], returns }));\n },\n exists(query: CfExprSelectQuery): CfExpr {\n return new CfExpr(ExistsExpr.exists(query.build()));\n },\n notExists(query: CfExprSelectQuery): CfExpr {\n return new CfExpr(ExistsExpr.notExists(query.build()));\n },\n};\n\n/** Aliased table source for catalog queries (no namespace coordinate). */\nexport function cfTable(name: string, alias?: string): TableSource {\n return TableSource.named(name, alias);\n}\n\nexport class CfExprSelectQuery {\n constructor(\n private readonly src: AnyFromSource | undefined,\n private readonly projectionItems: ReadonlyArray<ProjectionItem>,\n private readonly whereExpr: CfExpr | undefined,\n private readonly joinItems: ReadonlyArray<JoinAst> = [],\n private readonly limitValue: number | undefined = undefined,\n ) {}\n\n from(source: AnyFromSource): CfExprSelectQuery {\n return new CfExprSelectQuery(\n source,\n this.projectionItems,\n this.whereExpr,\n this.joinItems,\n this.limitValue,\n );\n }\n\n join(source: AnyFromSource, on: CfExpr): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n this.projectionItems,\n this.whereExpr,\n [...this.joinItems, JoinAst.inner(source, on.ast)],\n this.limitValue,\n );\n }\n\n leftJoin(source: AnyFromSource, on: CfExpr): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n this.projectionItems,\n this.whereExpr,\n [...this.joinItems, JoinAst.left(source, on.ast)],\n this.limitValue,\n );\n }\n\n project(alias: string, expr: CfExpr): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n [...this.projectionItems, ProjectionItem.of(alias, expr.ast)],\n this.whereExpr,\n this.joinItems,\n this.limitValue,\n );\n }\n\n where(expr: CfExpr): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n this.projectionItems,\n expr,\n this.joinItems,\n this.limitValue,\n );\n }\n\n limit(value: number): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n this.projectionItems,\n this.whereExpr,\n this.joinItems,\n value,\n );\n }\n\n build(): SelectAst {\n if (this.joinItems.length > 0 && this.src === undefined) {\n throw new Error('CfExprSelectQuery: cannot add a JOIN without a FROM clause');\n }\n const base =\n this.src !== undefined\n ? SelectAst.from(this.src).withProjection(this.projectionItems)\n : SelectAst.noFrom().withProjection(this.projectionItems);\n const withJoins = this.joinItems.length > 0 ? base.withJoins(this.joinItems) : base;\n const withWhere =\n this.whereExpr !== undefined ? withJoins.withWhere(this.whereExpr.ast) : withJoins;\n return this.limitValue !== undefined ? withWhere.withLimit(this.limitValue) : withWhere;\n }\n}\n\nexport function exprSelect(): CfExprSelectQuery {\n return new CfExprSelectQuery(undefined, [], undefined);\n}\n\n/**\n * Per-column authoring handle exposed as a keyed property on a {@link TableHandle}.\n * Carries codec metadata baked at declaration time so no codec ID, table name, or\n * column name needs to be repeated at the call site.\n */\nexport interface ColumnProxy {\n readonly codecId: string;\n readonly nullable: boolean;\n readonly columnName: string;\n readonly tableName: string;\n eq(value: unknown): CfExpr;\n neq(value: unknown): CfExpr;\n isNull(): CfExpr;\n isNotNull(): CfExpr;\n toRef(): ColumnRef;\n toProjectionItem(alias?: string): ProjectionItem;\n}\n\n/**\n * Object passed to the {@link CfConflictClause.doUpdate} callback. Each key\n * resolves to a `ColumnRef` for the corresponding `excluded.<column>`, so the\n * upsert conflict-update branch can copy proposed values without re-binding\n * parameters.\n */\nexport type ExcludedProxy<Schema extends ColumnSchema> = {\n readonly [K in keyof Schema]: ColumnRef;\n};\n\nexport type TableInsertRow<Schema extends ColumnSchema> = {\n readonly [K in keyof Schema]: unknown;\n};\n\nexport type TableSetValues<Schema extends ColumnSchema> = {\n readonly [K in keyof Schema]?: unknown;\n};\n\n/**\n * Fluent authoring handle for a fixed control-plane table. Column proxies are\n * exposed as keyed properties so `handle.columnName.eq(value)` composes without\n * threading codec IDs, table names, or column refs at the call site.\n */\nexport type TableHandle<Schema extends ColumnSchema> = {\n readonly source: TableSource;\n insert(row: TableInsertRow<Schema>): CfInsertQuery<Schema>;\n upsert(row: TableInsertRow<Schema>): CfUpsertBuilder<Schema>;\n update(): CfUpdateQuery<Schema>;\n select(...columns: ReadonlyArray<ColumnProxy>): CfSelectQuery;\n} & {\n readonly [K in keyof Schema]: ColumnProxy;\n};\n\nexport class CfInsertQuery<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly rowValues: TableInsertRow<Schema>,\n private readonly returningItems: ReadonlyArray<ProjectionItem> | undefined = undefined,\n ) {}\n\n returning(...columns: ReadonlyArray<ColumnProxy>): CfInsertQuery<Schema> {\n return new CfInsertQuery(\n this.src,\n this.schema,\n this.rowValues,\n columns.map((col) => col.toProjectionItem()),\n );\n }\n\n build(): InsertAst {\n const row = buildInsertRow(this.schema, this.rowValues);\n const ast = InsertAst.into(this.src).withRows([row]);\n return this.returningItems ? ast.withReturning(this.returningItems) : ast;\n }\n}\n\nexport class CfUpsertBuilder<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly rowValues: TableInsertRow<Schema>,\n ) {}\n\n onConflict(...columns: ReadonlyArray<ColumnProxy>): CfConflictClause<Schema> {\n return new CfConflictClause(this.src, this.schema, this.rowValues, [...columns]);\n }\n}\n\nexport class CfConflictClause<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly rowValues: TableInsertRow<Schema>,\n private readonly conflictCols: ReadonlyArray<ColumnProxy>,\n ) {}\n\n doUpdate(\n setOrCallback:\n | TableSetValues<Schema>\n | ((excluded: ExcludedProxy<Schema>) => TableSetValues<Schema>),\n ): CfUpsertQuery<Schema> {\n const set =\n typeof setOrCallback === 'function'\n ? setOrCallback(buildExcludedProxy(this.schema))\n : setOrCallback;\n return new CfUpsertQuery(this.src, this.schema, this.rowValues, this.conflictCols, set);\n }\n\n doNothing(): CfUpsertQuery<Schema> {\n return new CfUpsertQuery(this.src, this.schema, this.rowValues, this.conflictCols, undefined);\n }\n}\n\nexport class CfUpsertQuery<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly rowValues: TableInsertRow<Schema>,\n private readonly conflictCols: ReadonlyArray<ColumnProxy>,\n private readonly updateSet: TableSetValues<Schema> | undefined,\n ) {}\n\n build(): InsertAst {\n const row = buildInsertRow(this.schema, this.rowValues);\n const conflictRefs = this.conflictCols.map((col) => col.toRef());\n const onConflict =\n this.updateSet === undefined\n ? InsertOnConflict.on(conflictRefs).doNothing()\n : InsertOnConflict.on(conflictRefs).doUpdateSet(buildSetMap(this.schema, this.updateSet));\n return InsertAst.into(this.src).withRows([row]).withOnConflict(onConflict);\n }\n}\n\nexport class CfUpdateQuery<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly setValues: TableSetValues<Schema> | undefined = undefined,\n private readonly whereExpr: CfExpr | undefined = undefined,\n private readonly returningItems: ReadonlyArray<ProjectionItem> | undefined = undefined,\n ) {}\n\n set(values: TableSetValues<Schema>): CfUpdateQuery<Schema> {\n return new CfUpdateQuery(this.src, this.schema, values, this.whereExpr, this.returningItems);\n }\n\n where(expr: CfExpr): CfUpdateQuery<Schema> {\n return new CfUpdateQuery(this.src, this.schema, this.setValues, expr, this.returningItems);\n }\n\n returning(...columns: ReadonlyArray<ColumnProxy>): CfUpdateQuery<Schema> {\n return new CfUpdateQuery(\n this.src,\n this.schema,\n this.setValues,\n this.whereExpr,\n columns.map((col) => col.toProjectionItem()),\n );\n }\n\n build(): UpdateAst {\n const set = buildSetMap(this.schema, this.setValues);\n const base = UpdateAst.table(this.src).withSet(set);\n const withWhere = this.whereExpr ? base.withWhere(this.whereExpr.ast) : base;\n return this.returningItems ? withWhere.withReturning(this.returningItems) : withWhere;\n }\n}\n\nexport class CfSelectQuery {\n constructor(\n private readonly src: TableSource,\n private readonly projectionItems: ReadonlyArray<ProjectionItem>,\n private readonly whereExpr: CfExpr | undefined = undefined,\n private readonly orderByItems: ReadonlyArray<OrderByItem> = [],\n ) {}\n\n where(expr: CfExpr): CfSelectQuery {\n return new CfSelectQuery(this.src, this.projectionItems, expr, this.orderByItems);\n }\n\n orderBy(column: ColumnProxy, dir: 'asc' | 'desc' = 'asc'): CfSelectQuery {\n const item = dir === 'asc' ? OrderByItem.asc(column.toRef()) : OrderByItem.desc(column.toRef());\n return new CfSelectQuery(this.src, this.projectionItems, this.whereExpr, [\n ...this.orderByItems,\n item,\n ]);\n }\n\n build(): SelectAst {\n const base = SelectAst.from(this.src).withProjection(this.projectionItems);\n const withWhere = this.whereExpr ? base.withWhere(this.whereExpr.ast) : base;\n return this.orderByItems.length > 0 ? withWhere.withOrderBy(this.orderByItems) : withWhere;\n }\n}\n\n/**\n * Declare a control-plane table once, binding column codecs at declaration time.\n * Returns a `TableHandle` whose column properties compose expressions directly\n * without per-call-site codec or column-name threading.\n *\n * ```ts\n * const marker = pgTable({ name: 'marker', schema: 'prisma_contract' }, {\n * space: text(),\n * core_hash: text(),\n * updated_at: timestamptz(),\n * });\n *\n * const query = marker.update()\n * .set({ core_hash: newHash, updated_at: NOW })\n * .where(marker.space.eq(space).and(marker.core_hash.eq(expectedFrom)))\n * .returning(marker.space)\n * .build();\n * ```\n */\nexport function table<Schema extends ColumnSchema>(\n source: TableSource,\n schema: Schema,\n): TableHandle<Schema> {\n const proxies: Record<string, ColumnProxy> = {};\n for (const [col, desc] of Object.entries(schema)) {\n proxies[col] = makeColumnProxy(source.alias ?? source.name, col, desc);\n }\n\n const handle = {\n ...proxies,\n source,\n insert: (row: TableInsertRow<Schema>) => new CfInsertQuery(source, schema, row),\n upsert: (row: TableInsertRow<Schema>) => new CfUpsertBuilder(source, schema, row),\n update: () => new CfUpdateQuery(source, schema),\n select: (...cols: ReadonlyArray<ColumnProxy>) =>\n new CfSelectQuery(\n source,\n cols.map((col) => col.toProjectionItem()),\n ),\n };\n\n return blindCast<\n TableHandle<Schema>,\n 'Column proxies are dynamically built from Schema keys — TypeScript cannot verify the per-key ColumnProxy constraint at the spread call site. Construction is correct by construction: every key maps to makeColumnProxy(source.name, key, schema[key]).'\n >(handle);\n}\n\nfunction makeColumnProxy(\n tableName: string,\n columnName: string,\n desc: ColumnDescriptor,\n): ColumnProxy {\n const ref = ColumnRef.of(tableName, columnName);\n return {\n codecId: desc.codecId,\n nullable: desc.nullable,\n columnName,\n tableName,\n eq: (value) =>\n value === null\n ? new CfExpr(NullCheckExpr.isNull(ref))\n : new CfExpr(BinaryExpr.eq(ref, toSetExpression(value, desc))),\n neq: (value) =>\n value === null\n ? new CfExpr(NullCheckExpr.isNotNull(ref))\n : new CfExpr(BinaryExpr.neq(ref, toSetExpression(value, desc))),\n isNull: () => new CfExpr(NullCheckExpr.isNull(ref)),\n isNotNull: () => new CfExpr(NullCheckExpr.isNotNull(ref)),\n toRef: () => ref,\n toProjectionItem: (alias = columnName) =>\n ProjectionItem.of(alias, ref, { codecId: desc.codecId }),\n };\n}\n\nfunction buildExcludedProxy<Schema extends ColumnSchema>(schema: Schema): ExcludedProxy<Schema> {\n return blindCast<\n ExcludedProxy<Schema>,\n 'Object.fromEntries cannot preserve per-key ColumnRef types — correct by construction: every key maps to ColumnRef.of(\"excluded\", key).'\n >(Object.fromEntries(Object.keys(schema).map((col) => [col, ColumnRef.of('excluded', col)])));\n}\n\nfunction isExpressionSource(value: unknown): value is { toExpr(): AnyExpression } {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'toExpr' in value &&\n typeof value.toExpr === 'function'\n );\n}\n\nfunction toInsertValue(value: unknown, desc: ColumnDescriptor): InsertValue {\n if (isExpressionSource(value)) {\n const expr = value.toExpr();\n if (\n expr.kind === 'column-ref' ||\n expr.kind === 'param-ref' ||\n expr.kind === 'prepared-param-ref' ||\n expr.kind === 'raw-expr'\n ) {\n return expr;\n }\n }\n return ParamRef.of(value, { codec: { codecId: desc.codecId } });\n}\n\nfunction toSetExpression(value: unknown, desc: ColumnDescriptor): AnyExpression {\n if (isExpressionSource(value)) {\n return value.toExpr();\n }\n return ParamRef.of(value, { codec: { codecId: desc.codecId } });\n}\n\nfunction buildInsertRow<Schema extends ColumnSchema>(\n schema: Schema,\n values: TableInsertRow<Schema>,\n): Record<string, InsertValue> {\n const row: Record<string, InsertValue> = {};\n const rawValues = blindCast<\n Record<string, unknown>,\n 'TableInsertRow<Schema> maps Schema keys to unknown; indexing by the same string keys is correct by construction'\n >(values);\n for (const [col, desc] of Object.entries(schema)) {\n row[col] = toInsertValue(rawValues[col], desc);\n }\n return row;\n}\n\nfunction buildSetMap<Schema extends ColumnSchema>(\n schema: Schema,\n values: TableSetValues<Schema> | undefined,\n): Record<string, AnyExpression> {\n if (values === undefined) return {};\n const set: Record<string, AnyExpression> = {};\n const rawSchema = blindCast<\n Record<string, ColumnDescriptor>,\n 'Schema extends ColumnSchema = Record<string, ColumnDescriptor>; runtime key access is correct by construction'\n >(schema);\n const rawValues = blindCast<\n Record<string, unknown>,\n 'TableSetValues<Schema> maps Schema keys to unknown; iterating with Object.entries is correct by construction'\n >(values);\n for (const [col, value] of Object.entries(rawValues)) {\n const desc = rawSchema[col];\n if (desc !== undefined) {\n set[col] = toSetExpression(value, desc);\n }\n }\n return set;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"contract-free.mjs","names":[],"sources":["../../src/contract-free/column.ts","../../src/contract-free/table.ts"],"sourcesContent":["import type { ColumnDefaultLiteralInputValue } from '@prisma-next/contract/types';\nimport type { ReferentialAction } from '@prisma-next/sql-contract/types';\nimport type { CodecRef } from '../ast/codec-types';\nimport type { AnyDdlColumnDefault } from '../ast/ddl-types';\nimport {\n CheckExpressionConstraint,\n DdlColumn,\n ForeignKeyConstraint,\n FunctionColumnDefault,\n LiteralColumnDefault,\n PrimaryKeyConstraint,\n UniqueConstraint,\n} from '../ast/ddl-types';\n\nexport interface DdlColumnOptions {\n readonly notNull?: boolean;\n readonly primaryKey?: boolean;\n readonly default?: AnyDdlColumnDefault;\n readonly codecRef?: CodecRef;\n}\n\nexport function lit(value: ColumnDefaultLiteralInputValue): LiteralColumnDefault {\n return new LiteralColumnDefault(value);\n}\n\nexport function fn(expression: string): FunctionColumnDefault {\n return new FunctionColumnDefault(expression);\n}\n\nexport function col(name: string, type: string, options?: DdlColumnOptions): DdlColumn {\n return new DdlColumn({ name, type, ...options });\n}\n\nexport function primaryKey(\n columns: readonly string[],\n options?: { readonly name?: string },\n): PrimaryKeyConstraint {\n return new PrimaryKeyConstraint({ columns, ...options });\n}\n\nexport function foreignKey(\n columns: readonly string[],\n refTable: string,\n refColumns: readonly string[],\n options?: {\n readonly name?: string;\n readonly onDelete?: ReferentialAction;\n readonly onUpdate?: ReferentialAction;\n },\n): ForeignKeyConstraint {\n return new ForeignKeyConstraint({ columns, refTable, refColumns, ...options });\n}\n\nexport function unique(\n columns: readonly string[],\n options?: { readonly name?: string },\n): UniqueConstraint {\n return new UniqueConstraint({ columns, ...options });\n}\n\nexport function checkExpression(name: string, expression: string): CheckExpressionConstraint {\n return new CheckExpressionConstraint({ name, expression });\n}\n","import type { ParamSpec } from '@prisma-next/operations';\nimport { blindCast } from '@prisma-next/utils/casts';\nimport {\n AggregateExpr,\n AndExpr,\n type AnyExpression,\n type AnyFromSource,\n BinaryExpr,\n ColumnRef,\n ExistsExpr,\n IdentifierRef,\n InsertAst,\n InsertOnConflict,\n type InsertValue,\n JoinAst,\n LiteralExpr,\n NullCheckExpr,\n OperationExpr,\n OrderByItem,\n OrExpr,\n ParamRef,\n ProjectionItem,\n RawExpr,\n SelectAst,\n TableSource,\n UpdateAst,\n} from '../ast/types';\n\nexport interface ColumnDescriptor {\n readonly codecId: string;\n readonly nullable: boolean;\n}\n\nexport type ColumnSchema = Record<string, ColumnDescriptor>;\n\n/**\n * A composable WHERE / ON expression. Wraps an `AnyExpression` and exposes\n * fluent boolean combinators, mirroring the spirit of `sql-builder`'s\n * `Expression` interface without the contract-bound type machinery.\n */\nexport class CfExpr {\n constructor(readonly ast: AnyExpression) {}\n\n and(other: CfExpr): CfExpr {\n return new CfExpr(AndExpr.of([this.ast, other.ast]));\n }\n\n or(other: CfExpr): CfExpr {\n return new CfExpr(OrExpr.of([this.ast, other.ast]));\n }\n\n not(): CfExpr {\n return new CfExpr(this.ast.not());\n }\n\n isNull(): CfExpr {\n return new CfExpr(NullCheckExpr.isNull(this.ast));\n }\n\n isNotNull(): CfExpr {\n return new CfExpr(NullCheckExpr.isNotNull(this.ast));\n }\n\n eqLit(value: number | string | boolean): CfExpr {\n return new CfExpr(BinaryExpr.eq(this.ast, LiteralExpr.of(value)));\n }\n\n gtLit(value: number | string | boolean): CfExpr {\n return new CfExpr(BinaryExpr.gt(this.ast, LiteralExpr.of(value)));\n }\n\n eqParam(value: unknown, codecId: string): CfExpr {\n return new CfExpr(BinaryExpr.eq(this.ast, ParamRef.of(value, { codec: { codecId } })));\n }\n\n eqExpr(other: CfExpr): CfExpr {\n return new CfExpr(BinaryExpr.eq(this.ast, other.ast));\n }\n}\n\nexport interface CfFnOptions {\n readonly method: string;\n readonly template: string;\n readonly self: CfExpr;\n readonly args?: ReadonlyArray<CfExpr>;\n readonly returns: ParamSpec;\n}\n\nexport const cfExpr = {\n countStar(): CfExpr {\n return new CfExpr(AggregateExpr.count());\n },\n lit(value: number | string | boolean): CfExpr {\n return new CfExpr(LiteralExpr.of(value));\n },\n identifierRef(name: string): CfExpr {\n return new CfExpr(IdentifierRef.of(name));\n },\n param(value: unknown, codecId: string): CfExpr {\n return new CfExpr(ParamRef.of(value, { codec: { codecId } }));\n },\n /**\n * Catalog function call lowered via a `'function'`-strategy template\n * (e.g. `to_regclass({{self}})`). Owns the `OperationExpr` assembly so\n * target packages only supply vocabulary: template, codec'd operands,\n * and return spec.\n */\n fn(options: CfFnOptions): CfExpr {\n return new CfExpr(\n new OperationExpr({\n method: options.method,\n self: options.self.ast,\n args: options.args?.map((arg) => arg.ast),\n returns: options.returns,\n lowering: {\n targetFamily: 'sql',\n strategy: 'function',\n template: options.template,\n },\n }),\n );\n },\n columnRef(qualifier: string, name: string): CfExpr {\n return new CfExpr(ColumnRef.of(qualifier, name));\n },\n allOf(exprs: ReadonlyArray<CfExpr>): CfExpr {\n return new CfExpr(AndExpr.of(exprs.map((expr) => expr.ast)));\n },\n /**\n * Opaque DB-side SQL expression (e.g. `current_schema()`) carried as a\n * `RawExpr`. For zero-operand catalog functions where a `'function'`\n * lowering template has nothing to substitute.\n */\n raw(sql: string, returns: ParamSpec): CfExpr {\n return new CfExpr(new RawExpr({ parts: [sql], returns }));\n },\n exists(query: CfExprSelectQuery): CfExpr {\n return new CfExpr(ExistsExpr.exists(query.build()));\n },\n notExists(query: CfExprSelectQuery): CfExpr {\n return new CfExpr(ExistsExpr.notExists(query.build()));\n },\n};\n\n/** Aliased table source for catalog queries (no namespace coordinate). */\nexport function cfTable(name: string, alias?: string): TableSource {\n return TableSource.named(name, alias);\n}\n\nexport class CfExprSelectQuery {\n constructor(\n private readonly src: AnyFromSource | undefined,\n private readonly projectionItems: ReadonlyArray<ProjectionItem>,\n private readonly whereExpr: CfExpr | undefined,\n private readonly joinItems: ReadonlyArray<JoinAst> = [],\n private readonly limitValue: number | undefined = undefined,\n ) {}\n\n from(source: AnyFromSource): CfExprSelectQuery {\n return new CfExprSelectQuery(\n source,\n this.projectionItems,\n this.whereExpr,\n this.joinItems,\n this.limitValue,\n );\n }\n\n join(source: AnyFromSource, on: CfExpr): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n this.projectionItems,\n this.whereExpr,\n [...this.joinItems, JoinAst.inner(source, on.ast)],\n this.limitValue,\n );\n }\n\n leftJoin(source: AnyFromSource, on: CfExpr): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n this.projectionItems,\n this.whereExpr,\n [...this.joinItems, JoinAst.left(source, on.ast)],\n this.limitValue,\n );\n }\n\n project(alias: string, expr: CfExpr): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n [...this.projectionItems, ProjectionItem.of(alias, expr.ast)],\n this.whereExpr,\n this.joinItems,\n this.limitValue,\n );\n }\n\n where(expr: CfExpr): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n this.projectionItems,\n expr,\n this.joinItems,\n this.limitValue,\n );\n }\n\n limit(value: number): CfExprSelectQuery {\n return new CfExprSelectQuery(\n this.src,\n this.projectionItems,\n this.whereExpr,\n this.joinItems,\n value,\n );\n }\n\n build(): SelectAst {\n if (this.joinItems.length > 0 && this.src === undefined) {\n throw new Error('CfExprSelectQuery: cannot add a JOIN without a FROM clause');\n }\n const base =\n this.src !== undefined\n ? SelectAst.from(this.src).withProjection(this.projectionItems)\n : SelectAst.noFrom().withProjection(this.projectionItems);\n const withJoins = this.joinItems.length > 0 ? base.withJoins(this.joinItems) : base;\n const withWhere =\n this.whereExpr !== undefined ? withJoins.withWhere(this.whereExpr.ast) : withJoins;\n return this.limitValue !== undefined ? withWhere.withLimit(this.limitValue) : withWhere;\n }\n}\n\nexport function exprSelect(): CfExprSelectQuery {\n return new CfExprSelectQuery(undefined, [], undefined);\n}\n\n/**\n * Per-column authoring handle exposed as a keyed property on a {@link TableHandle}.\n * Carries codec metadata baked at declaration time so no codec ID, table name, or\n * column name needs to be repeated at the call site.\n */\nexport interface ColumnProxy {\n readonly codecId: string;\n readonly nullable: boolean;\n readonly columnName: string;\n readonly tableName: string;\n eq(value: unknown): CfExpr;\n neq(value: unknown): CfExpr;\n isNull(): CfExpr;\n isNotNull(): CfExpr;\n toRef(): ColumnRef;\n toProjectionItem(alias?: string): ProjectionItem;\n}\n\n/**\n * Object passed to the {@link CfConflictClause.doUpdate} callback. Each key\n * resolves to a `ColumnRef` for the corresponding `excluded.<column>`, so the\n * upsert conflict-update branch can copy proposed values without re-binding\n * parameters.\n */\nexport type ExcludedProxy<Schema extends ColumnSchema> = {\n readonly [K in keyof Schema]: ColumnRef;\n};\n\nexport type TableInsertRow<Schema extends ColumnSchema> = {\n readonly [K in keyof Schema]: unknown;\n};\n\nexport type TableSetValues<Schema extends ColumnSchema> = {\n readonly [K in keyof Schema]?: unknown;\n};\n\n/**\n * Fluent authoring handle for a fixed control-plane table. Column proxies are\n * exposed as keyed properties so `handle.columnName.eq(value)` composes without\n * threading codec IDs, table names, or column refs at the call site.\n */\nexport type TableHandle<Schema extends ColumnSchema> = {\n readonly source: TableSource;\n insert(row: TableInsertRow<Schema>): CfInsertQuery<Schema>;\n upsert(row: TableInsertRow<Schema>): CfUpsertBuilder<Schema>;\n update(): CfUpdateQuery<Schema>;\n select(...columns: ReadonlyArray<ColumnProxy>): CfSelectQuery;\n} & {\n readonly [K in keyof Schema]: ColumnProxy;\n};\n\nexport class CfInsertQuery<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly rowValues: TableInsertRow<Schema>,\n private readonly returningItems: ReadonlyArray<ProjectionItem> | undefined = undefined,\n ) {}\n\n returning(...columns: ReadonlyArray<ColumnProxy>): CfInsertQuery<Schema> {\n return new CfInsertQuery(\n this.src,\n this.schema,\n this.rowValues,\n columns.map((col) => col.toProjectionItem()),\n );\n }\n\n build(): InsertAst {\n const row = buildInsertRow(this.schema, this.rowValues);\n const ast = InsertAst.into(this.src).withRows([row]);\n return this.returningItems ? ast.withReturning(this.returningItems) : ast;\n }\n}\n\nexport class CfUpsertBuilder<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly rowValues: TableInsertRow<Schema>,\n ) {}\n\n onConflict(...columns: ReadonlyArray<ColumnProxy>): CfConflictClause<Schema> {\n return new CfConflictClause(this.src, this.schema, this.rowValues, [...columns]);\n }\n}\n\nexport class CfConflictClause<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly rowValues: TableInsertRow<Schema>,\n private readonly conflictCols: ReadonlyArray<ColumnProxy>,\n ) {}\n\n doUpdate(\n setOrCallback:\n | TableSetValues<Schema>\n | ((excluded: ExcludedProxy<Schema>) => TableSetValues<Schema>),\n ): CfUpsertQuery<Schema> {\n const set =\n typeof setOrCallback === 'function'\n ? setOrCallback(buildExcludedProxy(this.schema))\n : setOrCallback;\n return new CfUpsertQuery(this.src, this.schema, this.rowValues, this.conflictCols, set);\n }\n\n doNothing(): CfUpsertQuery<Schema> {\n return new CfUpsertQuery(this.src, this.schema, this.rowValues, this.conflictCols, undefined);\n }\n}\n\nexport class CfUpsertQuery<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly rowValues: TableInsertRow<Schema>,\n private readonly conflictCols: ReadonlyArray<ColumnProxy>,\n private readonly updateSet: TableSetValues<Schema> | undefined,\n ) {}\n\n build(): InsertAst {\n const row = buildInsertRow(this.schema, this.rowValues);\n const conflictRefs = this.conflictCols.map((col) => col.toRef());\n const onConflict =\n this.updateSet === undefined\n ? InsertOnConflict.on(conflictRefs).doNothing()\n : InsertOnConflict.on(conflictRefs).doUpdateSet(buildSetMap(this.schema, this.updateSet));\n return InsertAst.into(this.src).withRows([row]).withOnConflict(onConflict);\n }\n}\n\nexport class CfUpdateQuery<Schema extends ColumnSchema> {\n constructor(\n private readonly src: TableSource,\n private readonly schema: Schema,\n private readonly setValues: TableSetValues<Schema> | undefined = undefined,\n private readonly whereExpr: CfExpr | undefined = undefined,\n private readonly returningItems: ReadonlyArray<ProjectionItem> | undefined = undefined,\n ) {}\n\n set(values: TableSetValues<Schema>): CfUpdateQuery<Schema> {\n return new CfUpdateQuery(this.src, this.schema, values, this.whereExpr, this.returningItems);\n }\n\n where(expr: CfExpr): CfUpdateQuery<Schema> {\n return new CfUpdateQuery(this.src, this.schema, this.setValues, expr, this.returningItems);\n }\n\n returning(...columns: ReadonlyArray<ColumnProxy>): CfUpdateQuery<Schema> {\n return new CfUpdateQuery(\n this.src,\n this.schema,\n this.setValues,\n this.whereExpr,\n columns.map((col) => col.toProjectionItem()),\n );\n }\n\n build(): UpdateAst {\n const set = buildSetMap(this.schema, this.setValues);\n const base = UpdateAst.table(this.src).withSet(set);\n const withWhere = this.whereExpr ? base.withWhere(this.whereExpr.ast) : base;\n return this.returningItems ? withWhere.withReturning(this.returningItems) : withWhere;\n }\n}\n\nexport class CfSelectQuery {\n constructor(\n private readonly src: TableSource,\n private readonly projectionItems: ReadonlyArray<ProjectionItem>,\n private readonly whereExpr: CfExpr | undefined = undefined,\n private readonly orderByItems: ReadonlyArray<OrderByItem> = [],\n ) {}\n\n where(expr: CfExpr): CfSelectQuery {\n return new CfSelectQuery(this.src, this.projectionItems, expr, this.orderByItems);\n }\n\n orderBy(column: ColumnProxy, dir: 'asc' | 'desc' = 'asc'): CfSelectQuery {\n const item = dir === 'asc' ? OrderByItem.asc(column.toRef()) : OrderByItem.desc(column.toRef());\n return new CfSelectQuery(this.src, this.projectionItems, this.whereExpr, [\n ...this.orderByItems,\n item,\n ]);\n }\n\n build(): SelectAst {\n const base = SelectAst.from(this.src).withProjection(this.projectionItems);\n const withWhere = this.whereExpr ? base.withWhere(this.whereExpr.ast) : base;\n return this.orderByItems.length > 0 ? withWhere.withOrderBy(this.orderByItems) : withWhere;\n }\n}\n\n/**\n * Declare a control-plane table once, binding column codecs at declaration time.\n * Returns a `TableHandle` whose column properties compose expressions directly\n * without per-call-site codec or column-name threading.\n *\n * ```ts\n * const marker = pgTable({ name: 'marker', schema: 'prisma_contract' }, {\n * space: text(),\n * core_hash: text(),\n * updated_at: timestamptz(),\n * });\n *\n * const query = marker.update()\n * .set({ core_hash: newHash, updated_at: NOW })\n * .where(marker.space.eq(space).and(marker.core_hash.eq(expectedFrom)))\n * .returning(marker.space)\n * .build();\n * ```\n */\nexport function table<Schema extends ColumnSchema>(\n source: TableSource,\n schema: Schema,\n): TableHandle<Schema> {\n const proxies: Record<string, ColumnProxy> = {};\n for (const [col, desc] of Object.entries(schema)) {\n proxies[col] = makeColumnProxy(source.alias ?? source.name, col, desc);\n }\n\n const handle = {\n ...proxies,\n source,\n insert: (row: TableInsertRow<Schema>) => new CfInsertQuery(source, schema, row),\n upsert: (row: TableInsertRow<Schema>) => new CfUpsertBuilder(source, schema, row),\n update: () => new CfUpdateQuery(source, schema),\n select: (...cols: ReadonlyArray<ColumnProxy>) =>\n new CfSelectQuery(\n source,\n cols.map((col) => col.toProjectionItem()),\n ),\n };\n\n return blindCast<\n TableHandle<Schema>,\n 'Column proxies are dynamically built from Schema keys — TypeScript cannot verify the per-key ColumnProxy constraint at the spread call site. Construction is correct by construction: every key maps to makeColumnProxy(source.name, key, schema[key]).'\n >(handle);\n}\n\nfunction makeColumnProxy(\n tableName: string,\n columnName: string,\n desc: ColumnDescriptor,\n): ColumnProxy {\n const ref = ColumnRef.of(tableName, columnName);\n return {\n codecId: desc.codecId,\n nullable: desc.nullable,\n columnName,\n tableName,\n eq: (value) =>\n value === null\n ? new CfExpr(NullCheckExpr.isNull(ref))\n : new CfExpr(BinaryExpr.eq(ref, toSetExpression(value, desc))),\n neq: (value) =>\n value === null\n ? new CfExpr(NullCheckExpr.isNotNull(ref))\n : new CfExpr(BinaryExpr.neq(ref, toSetExpression(value, desc))),\n isNull: () => new CfExpr(NullCheckExpr.isNull(ref)),\n isNotNull: () => new CfExpr(NullCheckExpr.isNotNull(ref)),\n toRef: () => ref,\n toProjectionItem: (alias = columnName) =>\n ProjectionItem.of(alias, ref, { codecId: desc.codecId }),\n };\n}\n\nfunction buildExcludedProxy<Schema extends ColumnSchema>(schema: Schema): ExcludedProxy<Schema> {\n return blindCast<\n ExcludedProxy<Schema>,\n 'Object.fromEntries cannot preserve per-key ColumnRef types — correct by construction: every key maps to ColumnRef.of(\"excluded\", key).'\n >(Object.fromEntries(Object.keys(schema).map((col) => [col, ColumnRef.of('excluded', col)])));\n}\n\nfunction isExpressionSource(value: unknown): value is { toExpr(): AnyExpression } {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'toExpr' in value &&\n typeof value.toExpr === 'function'\n );\n}\n\nfunction toInsertValue(value: unknown, desc: ColumnDescriptor): InsertValue {\n if (isExpressionSource(value)) {\n const expr = value.toExpr();\n if (\n expr.kind === 'column-ref' ||\n expr.kind === 'param-ref' ||\n expr.kind === 'prepared-param-ref' ||\n expr.kind === 'raw-expr'\n ) {\n return expr;\n }\n }\n return ParamRef.of(value, { codec: { codecId: desc.codecId } });\n}\n\nfunction toSetExpression(value: unknown, desc: ColumnDescriptor): AnyExpression {\n if (isExpressionSource(value)) {\n return value.toExpr();\n }\n return ParamRef.of(value, { codec: { codecId: desc.codecId } });\n}\n\nfunction buildInsertRow<Schema extends ColumnSchema>(\n schema: Schema,\n values: TableInsertRow<Schema>,\n): Record<string, InsertValue> {\n const row: Record<string, InsertValue> = {};\n const rawValues = blindCast<\n Record<string, unknown>,\n 'TableInsertRow<Schema> maps Schema keys to unknown; indexing by the same string keys is correct by construction'\n >(values);\n for (const [col, desc] of Object.entries(schema)) {\n row[col] = toInsertValue(rawValues[col], desc);\n }\n return row;\n}\n\nfunction buildSetMap<Schema extends ColumnSchema>(\n schema: Schema,\n values: TableSetValues<Schema> | undefined,\n): Record<string, AnyExpression> {\n if (values === undefined) return {};\n const set: Record<string, AnyExpression> = {};\n const rawSchema = blindCast<\n Record<string, ColumnDescriptor>,\n 'Schema extends ColumnSchema = Record<string, ColumnDescriptor>; runtime key access is correct by construction'\n >(schema);\n const rawValues = blindCast<\n Record<string, unknown>,\n 'TableSetValues<Schema> maps Schema keys to unknown; iterating with Object.entries is correct by construction'\n >(values);\n for (const [col, value] of Object.entries(rawValues)) {\n const desc = rawSchema[col];\n if (desc !== undefined) {\n set[col] = toSetExpression(value, desc);\n }\n }\n return set;\n}\n"],"mappings":"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"}
|
|
@@ -8,6 +8,14 @@ import { SqlLoweringSpec } from "@prisma-next/sql-operations";
|
|
|
8
8
|
type ScopeField = {
|
|
9
9
|
codecId: string;
|
|
10
10
|
nullable: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Marks a list-typed (scalar-array) field. When `true`, the field is an
|
|
13
|
+
* array of `codecId`-typed elements; list operations target it and the
|
|
14
|
+
* element type is `codecId`. Absent/`false` for scalar fields. Carried so
|
|
15
|
+
* `X` and `X[]` stay distinct at the type level (a list expression is not
|
|
16
|
+
* assignable to a scalar `CodecExpression` slot).
|
|
17
|
+
*/
|
|
18
|
+
many?: boolean;
|
|
11
19
|
/**
|
|
12
20
|
* 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
21
|
*/
|
|
@@ -44,13 +52,31 @@ type CodecValue<CodecId extends string, Nullable extends boolean, CT extends Rec
|
|
|
44
52
|
* - An `Expression` whose codec matches exactly
|
|
45
53
|
* - A raw JS value of the codec's `input` type
|
|
46
54
|
* - `null` when `Nullable` is true
|
|
55
|
+
*
|
|
56
|
+
* `many?: never` makes this a *scalar* slot: a list expression (whose
|
|
57
|
+
* `returnType` carries `many: true`) is rejected here, while scalar
|
|
58
|
+
* expressions — which carry no `many` key at all — pass unchanged. The
|
|
59
|
+
* discriminant lives on this operand slot, so scalar expression and scope
|
|
60
|
+
* types never have to spell out `many: false`.
|
|
47
61
|
*/
|
|
48
62
|
type CodecExpression<CodecId extends string, Nullable extends boolean, CT extends Record<string, {
|
|
49
63
|
readonly input: unknown;
|
|
50
64
|
}>> = Expression<{
|
|
51
65
|
codecId: CodecId;
|
|
52
66
|
nullable: Nullable;
|
|
67
|
+
many?: never;
|
|
53
68
|
}> | CodecValue<CodecId, Nullable, CT>;
|
|
69
|
+
/**
|
|
70
|
+
* A list-typed expression: an {@link Expression} whose element codec is
|
|
71
|
+
* `CodecId` and whose `returnType` carries `many: true`. The element identity
|
|
72
|
+
* is the codec id, so list operations stay generic over the element type while
|
|
73
|
+
* tying any element argument back to this list's `CodecId`.
|
|
74
|
+
*/
|
|
75
|
+
type ScalarListExpression<CodecId extends string, Nullable extends boolean> = Expression<{
|
|
76
|
+
codecId: CodecId;
|
|
77
|
+
nullable: Nullable;
|
|
78
|
+
many: true;
|
|
79
|
+
}>;
|
|
54
80
|
/**
|
|
55
81
|
* An expression or literal value targeting any codec whose trait set contains all the required traits.
|
|
56
82
|
*
|
|
@@ -136,5 +162,5 @@ type RawSqlInterpolation = Expression<ScopeField> | ParamRef | RawSqlLiteral;
|
|
|
136
162
|
*/
|
|
137
163
|
declare function createRawSql(adapter: RawCodecInferer): RawSqlTag;
|
|
138
164
|
//#endregion
|
|
139
|
-
export { BuildOperationSpec, CodecExpression, CodecTypesBase, CodecValue, Expression, RawCodecInferer, RawSqlBuilder, RawSqlTag, ScopeField, TraitExpression, buildOperation, codecOf, createRawSql, param, toExpr };
|
|
165
|
+
export { BuildOperationSpec, CodecExpression, CodecTypesBase, CodecValue, Expression, RawCodecInferer, RawSqlBuilder, RawSqlTag, ScalarListExpression, ScopeField, TraitExpression, buildOperation, codecOf, createRawSql, param, toExpr };
|
|
140
166
|
//# sourceMappingURL=expression.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.d.mts","names":[],"sources":["../../src/expression.ts"],"mappings":";;;;;;;KAQY,UAAA;EACV,OAAA;EACA,QAAA
|
|
1
|
+
{"version":3,"file":"expression.d.mts","names":[],"sources":["../../src/expression.ts"],"mappings":";;;;;;;KAQY,UAAA;EACV,OAAA;EACA,QAAA;;;;;;;;EAQA,IAAA;EAIgB;AAGlB;;EAHE,KAAA,GAAQ,QAAQ;AAAA;AAAA,KAGN,cAAA,GAAiB,MAAM;EAAA,SAAoB,KAAA;EAAA,SAAyB,MAAA;AAAA;AAAM;AAKtF;;AALsF,KAK1E,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,CAAC;;;;AAdK;KAoBf,UAAA,8DAGC,MAAA;EAAA,SAA0B,KAAA;AAAA,OAClC,OAAA,eAAsB,EAAA,GAAK,EAAA,CAAG,OAAA,sBAA6B,UAAA,CAAW,QAAA;;;;;;;;;;;;;;;KAgB/D,eAAA,8DAGC,MAAA;EAAA,SAA0B,KAAA;AAAA,MAEnC,UAAA;EAAa,OAAA,EAAS,OAAA;EAAS,QAAA,EAAU,QAAA;EAAU,IAAA;AAAA,KACnD,UAAA,CAAW,OAAA,EAAS,QAAA,EAAU,EAAA;;;;;AAlCxB;AAAA;KA0CE,oBAAA,qDAAyE,UAAA;EACnF,OAAA,EAAS,OAAA;EACT,QAAA,EAAU,QAAA;EACV,IAAA;AAAA;;;;;;KAQU,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;;;;iBAiBvD,KAAA,IAAS,KAAA,EAAO,CAAA,EAAG,IAAA;EAAQ,OAAA;AAAA,IAAoB,QAAQ;;AAvEY;AAgBnF;;;;;;;;iBAqEgB,OAAA,CAAQ,KAAA,YAAiB,QAAQ;AAAA,UAqBhC,kBAAA,WAA6B,UAAA;EAAA,SACnC,MAAA;EArFG;;;EAAA,SAyFH,IAAA,YAAgB,aAAA,KAAkB,aAAA;EAAA,SAClC,OAAA,EAAS,CAAA,GAAI,SAAA;EAAA,SACb,QAAA,EAAU,eAAA;AAAA;;;;iBAML,cAAA,WAAyB,UAAA,EAAY,IAAA,EAAM,kBAAA,CAAmB,CAAA,IAAK,UAAA,CAAW,CAAA;;;;;;;;AAjG1D;AAQpC;;;;UAoHiB,eAAA;EACf,UAAA,CAAW,KAAA,EAAO,aAAa;AAAA;;UAIhB,aAAA;EACf,OAAA,mBAA0B,IAAA,EAAM,CAAA,GAAI,UAAA;IAAa,OAAA,EAAS,CAAA;IAAG,QAAA;EAAA;EAC7D,OAAA,8CAAqD,IAAA;IAAA,SAC1C,OAAA,EAAS,CAAA;IAAA,SACT,QAAA,GAAW,CAAA;EAAA,IAClB,UAAA;IAAa,OAAA,EAAS,CAAA;IAAG,QAAA,EAAU,CAAA;EAAA;AAAA;;KAI7B,SAAA,IACV,OAAA,EAAS,oBAAA,KACN,MAAA,EAAQ,mBAAA,OACR,aAAA;AAAA,KAEA,mBAAA,GAAsB,UAAA,CAAW,UAAA,IAAc,QAAA,GAAW,aAAA;;;;;;iBAkC/C,YAAA,CAAa,OAAA,EAAS,eAAA,GAAkB,SAAS"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as OperationExpr, E as ParamRef, k as RawExpr } from "../types-
|
|
1
|
+
import { C as OperationExpr, E as ParamRef, k as RawExpr } from "../types-CaGVAsoT.mjs";
|
|
2
2
|
import { runtimeError } from "@prisma-next/framework-components/runtime";
|
|
3
3
|
//#region src/expression.ts
|
|
4
4
|
/**
|