@prisma-next/sql-builder 0.3.0-dev.128 → 0.3.0-dev.162
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/{db-DB_rRT9u.d.mts → db-C7A7Y4tB.d.mts} +45 -15
- package/dist/db-C7A7Y4tB.d.mts.map +1 -0
- package/dist/exports/types.d.mts +2 -2
- package/dist/index.d.mts +1 -1
- package/dist/runtime/index.d.mts +9 -8
- package/dist/runtime/index.d.mts.map +1 -1
- package/dist/runtime/index.mjs +2 -6
- package/dist/runtime/index.mjs.map +1 -1
- package/package.json +14 -20
- package/src/exports/types.ts +1 -1
- package/src/resolve.ts +17 -7
- package/src/runtime/builder-base.ts +2 -2
- package/src/runtime/functions.ts +5 -6
- package/src/runtime/index.ts +1 -0
- package/src/runtime/mutation-impl.ts +18 -6
- package/src/runtime/query-impl.ts +5 -2
- package/src/runtime/sql.ts +5 -4
- package/src/scope.ts +1 -0
- package/src/types/mutation-query.ts +3 -3
- package/src/types/shared.ts +1 -1
- package/src/types/table-proxy.ts +114 -11
- package/dist/db-DB_rRT9u.d.mts.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _prisma_next_sql_relational_core_ast0 from "@prisma-next/sql-relational-core/ast";
|
|
2
2
|
import { AnyFromSource, SelectAst } from "@prisma-next/sql-relational-core/ast";
|
|
3
|
-
import { ExtractCodecTypes, ExtractQueryOperationTypes, QueryOperationTypesBase, StorageTable, StorageTable as StorageTable$1 } from "@prisma-next/sql-contract/types";
|
|
3
|
+
import { ExtractCodecTypes, ExtractFieldInputTypes, ExtractFieldOutputTypes, ExtractQueryOperationTypes, QueryOperationTypesBase, StorageTable, StorageTable as StorageTable$1 } from "@prisma-next/sql-contract/types";
|
|
4
4
|
import { SqlQueryPlan } from "@prisma-next/sql-relational-core/plan";
|
|
5
5
|
|
|
6
6
|
//#region src/scope.d.ts
|
|
@@ -64,6 +64,7 @@ type QueryContext = {
|
|
|
64
64
|
readonly codecTypes: CodecTypesBase;
|
|
65
65
|
readonly capabilities: Record<string, Record<string, boolean>>;
|
|
66
66
|
readonly queryOperationTypes: QueryOperationTypesBase;
|
|
67
|
+
readonly resolvedColumnOutputTypes: Record<string, unknown>;
|
|
67
68
|
};
|
|
68
69
|
//#endregion
|
|
69
70
|
//#region src/expression.d.ts
|
|
@@ -178,9 +179,13 @@ type AggregateOnlyFunctions = {
|
|
|
178
179
|
type AggregateFunctions<QC extends QueryContext> = Functions<QC> & AggregateOnlyFunctions;
|
|
179
180
|
//#endregion
|
|
180
181
|
//#region src/resolve.d.ts
|
|
182
|
+
type ResolveField<F$1 extends ScopeField, CodecTypes extends Record<string, {
|
|
183
|
+
readonly output: unknown;
|
|
184
|
+
}>> = F$1['codecId'] extends keyof CodecTypes ? F$1['nullable'] extends true ? CodecTypes[F$1['codecId']]['output'] | null : CodecTypes[F$1['codecId']]['output'] : unknown;
|
|
185
|
+
type ApplyNullable<T, F$1 extends ScopeField> = F$1['nullable'] extends true ? T | null : T;
|
|
181
186
|
type ResolveRow<Row extends Record<string, ScopeField>, CodecTypes extends Record<string, {
|
|
182
187
|
readonly output: unknown;
|
|
183
|
-
}>> = Expand<{ -readonly [K in keyof Row]:
|
|
188
|
+
}>, PreResolved extends Record<string, unknown> = Record<string, never>> = Expand<{ -readonly [K in keyof Row]: string extends keyof PreResolved ? ResolveField<Row[K], CodecTypes> : K extends keyof PreResolved ? ApplyNullable<NonNullable<PreResolved[K & keyof PreResolved]>, Row[K]> : ResolveField<Row[K], CodecTypes> }>;
|
|
184
189
|
//#endregion
|
|
185
190
|
//#region src/types/mutation-query.d.ts
|
|
186
191
|
type ReturningCapability = {
|
|
@@ -191,22 +196,19 @@ type ReturningCapability = {
|
|
|
191
196
|
type InsertValues<Table extends StorageTable, CT extends Record<string, {
|
|
192
197
|
readonly input: unknown;
|
|
193
198
|
}>> = { [K in keyof Table['columns']]?: Table['columns'][K]['codecId'] extends keyof CT ? CT[Table['columns'][K]['codecId']]['input'] : unknown };
|
|
194
|
-
type UpdateValues<Table extends StorageTable, CT extends Record<string, {
|
|
195
|
-
readonly input: unknown;
|
|
196
|
-
}>> = { [K in keyof Table['columns']]?: Table['columns'][K]['codecId'] extends keyof CT ? CT[Table['columns'][K]['codecId']]['input'] : unknown };
|
|
197
199
|
interface InsertQuery<QC extends QueryContext, AvailableScope extends Scope, RowType extends Record<string, ScopeField>> {
|
|
198
200
|
returning: GatedMethod<QC['capabilities'], ReturningCapability, <Columns extends (keyof AvailableScope['topLevel'] & string)[]>(...columns: Columns) => InsertQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>>;
|
|
199
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>>;
|
|
201
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>;
|
|
200
202
|
}
|
|
201
203
|
interface UpdateQuery<QC extends QueryContext, AvailableScope extends Scope, RowType extends Record<string, ScopeField>> {
|
|
202
204
|
where(expr: ExpressionBuilder<AvailableScope, QC>): UpdateQuery<QC, AvailableScope, RowType>;
|
|
203
205
|
returning: GatedMethod<QC['capabilities'], ReturningCapability, <Columns extends (keyof AvailableScope['topLevel'] & string)[]>(...columns: Columns) => UpdateQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>>;
|
|
204
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>>;
|
|
206
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>;
|
|
205
207
|
}
|
|
206
208
|
interface DeleteQuery<QC extends QueryContext, AvailableScope extends Scope, RowType extends Record<string, ScopeField>> {
|
|
207
209
|
where(expr: ExpressionBuilder<AvailableScope, QC>): DeleteQuery<QC, AvailableScope, RowType>;
|
|
208
210
|
returning: GatedMethod<QC['capabilities'], ReturningCapability, <Columns extends (keyof AvailableScope['topLevel'] & string)[]>(...columns: Columns) => DeleteQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>>;
|
|
209
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>>;
|
|
211
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>;
|
|
210
212
|
}
|
|
211
213
|
//#endregion
|
|
212
214
|
//#region src/types/joined-tables.d.ts
|
|
@@ -288,19 +290,47 @@ interface WithAlias<RowType extends Record<string, ScopeField>> {
|
|
|
288
290
|
as<Alias extends string>(newAlias: Alias): JoinSource<RowType, Alias>;
|
|
289
291
|
}
|
|
290
292
|
interface WithBuild<QC extends QueryContext, RowType extends Record<string, ScopeField>> {
|
|
291
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>>;
|
|
293
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>;
|
|
292
294
|
}
|
|
293
295
|
//#endregion
|
|
294
296
|
//#region src/types/table-proxy.d.ts
|
|
295
|
-
type
|
|
297
|
+
type FindModelForTable<C, TableName$1 extends string> = C extends {
|
|
298
|
+
readonly models: infer Models extends Record<string, {
|
|
299
|
+
readonly storage: {
|
|
300
|
+
readonly table: string;
|
|
301
|
+
};
|
|
302
|
+
}>;
|
|
303
|
+
} ? { [M in keyof Models & string]: Models[M]['storage']['table'] extends TableName$1 ? M : never }[keyof Models & string] : never;
|
|
304
|
+
type FindFieldForColumn<C, ModelName$1 extends string, ColumnName extends string> = C extends {
|
|
305
|
+
readonly models: infer Models extends Record<string, {
|
|
306
|
+
readonly storage: {
|
|
307
|
+
readonly fields: Record<string, {
|
|
308
|
+
readonly column: string;
|
|
309
|
+
}>;
|
|
310
|
+
};
|
|
311
|
+
}>;
|
|
312
|
+
} ? ModelName$1 extends keyof Models ? { [F in keyof Models[ModelName$1]['storage']['fields'] & string]: Models[ModelName$1]['storage']['fields'][F]['column'] extends ColumnName ? F : never }[keyof Models[ModelName$1]['storage']['fields'] & string] : never : never;
|
|
313
|
+
type ResolvedColumnTypes<C, TableName$1 extends string, FieldTypes extends Record<string, Record<string, unknown>>> = string extends keyof FieldTypes ? Record<string, never> : FindModelForTable<C, TableName$1> extends infer ModelName extends string ? ModelName extends keyof FieldTypes ? C extends {
|
|
314
|
+
readonly storage: {
|
|
315
|
+
readonly tables: infer Tables extends Record<string, StorageTable>;
|
|
316
|
+
};
|
|
317
|
+
} ? TableName$1 extends keyof Tables ? { [ColName in keyof Tables[TableName$1]['columns'] & string]: FindFieldForColumn<C, ModelName, ColName> extends infer FieldName extends string ? FieldName extends keyof FieldTypes[ModelName] ? FieldTypes[ModelName][FieldName] : unknown : unknown } : Record<string, never> : Record<string, never> : Record<string, never> : Record<string, never>;
|
|
318
|
+
type ResolvedInsertValues<C, Table extends StorageTable, TableName$1 extends string, CT extends Record<string, {
|
|
319
|
+
readonly input: unknown;
|
|
320
|
+
}>, FieldInputs extends Record<string, Record<string, unknown>>> = string extends keyof FieldInputs ? InsertValues<Table, CT> : FindModelForTable<C, TableName$1> extends infer ModelName extends string ? ModelName extends keyof FieldInputs ? { [K in keyof Table['columns']]?: FindFieldForColumn<C, ModelName, K & string> extends infer FieldName extends string ? FieldName extends keyof FieldInputs[ModelName] ? Table['columns'][K]['nullable'] extends true ? NonNullable<FieldInputs[ModelName][FieldName]> | null : NonNullable<FieldInputs[ModelName][FieldName]> : Table['columns'][K]['codecId'] extends keyof CT ? CT[Table['columns'][K]['codecId']]['input'] : unknown : Table['columns'][K]['codecId'] extends keyof CT ? CT[Table['columns'][K]['codecId']]['input'] : unknown } : InsertValues<Table, CT> : InsertValues<Table, CT>;
|
|
321
|
+
type ResolvedUpdateValues<C, Table extends StorageTable, TableName$1 extends string, CT extends Record<string, {
|
|
322
|
+
readonly input: unknown;
|
|
323
|
+
}>, FieldInputs extends Record<string, Record<string, unknown>>> = ResolvedInsertValues<C, Table, TableName$1, CT, FieldInputs>;
|
|
324
|
+
type ContractToQC<C extends TableProxyContract, Name$1 extends string = string> = {
|
|
296
325
|
readonly codecTypes: ExtractCodecTypes<C>;
|
|
297
326
|
readonly capabilities: C['capabilities'];
|
|
298
327
|
readonly queryOperationTypes: ExtractQueryOperationTypes<C>;
|
|
328
|
+
readonly resolvedColumnOutputTypes: ResolvedColumnTypes<C, Name$1, ExtractFieldOutputTypes<C>>;
|
|
299
329
|
};
|
|
300
|
-
interface TableProxy<C extends TableProxyContract, Name$1 extends string & keyof C['storage']['tables'], Alias extends string = Name$1, AvailableScope extends Scope = DefaultScope<Name$1, C['storage']['tables'][Name$1]>, QC extends QueryContext = ContractToQC<C>> extends JoinSource<StorageTableToScopeTable<C['storage']['tables'][Name$1]>, Alias>, WithSelect<QC, AvailableScope, EmptyRow>, WithJoin<QC, AvailableScope, C['capabilities']> {
|
|
330
|
+
interface TableProxy<C extends TableProxyContract, Name$1 extends string & keyof C['storage']['tables'], Alias extends string = Name$1, AvailableScope extends Scope = DefaultScope<Name$1, C['storage']['tables'][Name$1]>, QC extends QueryContext = ContractToQC<C, Name$1>> extends JoinSource<StorageTableToScopeTable<C['storage']['tables'][Name$1]>, Alias>, WithSelect<QC, AvailableScope, EmptyRow>, WithJoin<QC, AvailableScope, C['capabilities']> {
|
|
301
331
|
as<NewAlias extends string>(newAlias: NewAlias): TableProxy<C, Name$1, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>>;
|
|
302
|
-
insert(values:
|
|
303
|
-
update(set:
|
|
332
|
+
insert(values: ResolvedInsertValues<C, C['storage']['tables'][Name$1], Name$1, QC['codecTypes'], ExtractFieldInputTypes<C>>): InsertQuery<QC, AvailableScope, EmptyRow>;
|
|
333
|
+
update(set: ResolvedUpdateValues<C, C['storage']['tables'][Name$1], Name$1, QC['codecTypes'], ExtractFieldInputTypes<C>>): UpdateQuery<QC, AvailableScope, EmptyRow>;
|
|
304
334
|
delete(): DeleteQuery<QC, AvailableScope, EmptyRow>;
|
|
305
335
|
}
|
|
306
336
|
//#endregion
|
|
@@ -314,5 +344,5 @@ type TableProxyContract = {
|
|
|
314
344
|
};
|
|
315
345
|
type Db<C extends TableProxyContract> = { [Name in string & keyof C['storage']['tables']]: TableProxy<C, Name> };
|
|
316
346
|
//#endregion
|
|
317
|
-
export {
|
|
318
|
-
//# sourceMappingURL=db-
|
|
347
|
+
export { Scope as _, GroupedQuery as a, UpdateQuery as c, Expression as d, FieldProxy as f, QueryContext as g, GatedMethod as h, SelectQuery as i, ResolveRow as l, ExpressionType as m, TableProxyContract as n, DeleteQuery as o, Functions as p, TableProxy as r, InsertQuery as s, Db as t, AggregateFunctions as u, ScopeField as v, Subquery as y };
|
|
348
|
+
//# sourceMappingURL=db-C7A7Y4tB.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-C7A7Y4tB.d.mts","names":[],"sources":["../src/scope.ts","../src/expression.ts","../src/resolve.ts","../src/types/mutation-query.ts","../src/types/joined-tables.ts","../src/types/grouped-query.ts","../src/types/select-query.ts","../src/types/shared.ts","../src/types/table-proxy.ts","../src/types/db.ts"],"sourcesContent":[],"mappings":";;;;;;KAGY,8CAA8C,qBAAqB,WAC3E;KAGC,cAAA,GAAiB;;;AAJtB,CAAA,CAAA;AAA0D,cAKrC,cALqC,EAAA,OAAA,MAAA;AAAqB,cAM1D,cAN0D,EAAA,OAAA,MAAA;AAC3E,cAMiB,cANjB,EAAA,OAAA,MAAA;AAAM,KAQE,MARF,CAAA,CAAA,CAAA,GAAA,QAGL,MAKiC,CALjC,GAKqC,CALvB,CAKyB,CALzB,CAAA,EACnB,GAAqB,OAAA;AACA,KAIT,QAAA,GAAW,MAJ2B,CAAA,KAAA,EAIb,UAJa,CAAA;AAC7B,KAKT,UAAA,GALsC;EAEtC,OAAA,EAAM,MAAA;EAAoB,QAAA,EAAA,OAAA;CAAI;AAAE,KAIhC,UAAA,GAAa,MAJmB,CAAA,MAAA,EAIJ,UAJI,CAAA;AAAC,KAMjC,KAAA,GANiC;EACjC,QAAA,EAMA,UANQ;EAER,UAAA,EAKE,MALQ,CAAA,MAAA,EAKO,UALP,CAAA;AACtB,CAAA;AAEY,KAKA,UALK,CAAA,YAKkB,UALlB,EAAA,cAAA,MAAA,CAAA,GAAA;EACL,UAKA,cAAA,CALA,EAAA;IACiB,QAAA,EAKf,GALe;IAAf,UAAA,EAME,MANF,CAMS,KANT,EAMgB,GANhB,CAAA;EAAM,CAAA;EAGR,iBAAU,EAAA,EAMC,KAND;EAAa,QAAA,EAAA,EAOrB,aAPqB;CAErB;AACS,KAOX,YAPW,CAAA,eAAA,MAAA,EAAA,cAOqC,cAPrC,CAAA,GAAA;EAAO,QAAA,EAQlB,wBARkB,CAQO,KARP,CAAA;EAAd,UAAA,EAAA,QAUN,MAZE,GAYK,wBAZL,CAY8B,KAZ9B,CAAA,EAKW;CACT;AAAa,KAUf,wBAVe,CAAA,UAUoB,cAVpB,CAAA,GAAA,QAGf,MAQE,CARF,CAAA,SAAY,CAAA,GAAA;EAAoC,OAAA,EAS/C,CAT+C,CAAA,SAAA,CAAA,CASlC,CATkC,CAAA,CAAA,SAAA,CAAA;EACvB,QAAA,EASvB,CATuB,CAAA,SAAA,CAAA,CASV,CATU,CAAA,CAAA,UAAA,CAAA;AAAzB,CAAA,EAEF;AAAgC,KAW9B,WAX8B,CAAA,UAWR,KAXQ,EAAA,UAWS,KAXT,CAAA,GAAA;EAAzB,QAAA,EAYL,MAZK,CAab,IAba,CAaR,CAbQ,CAAA,UAAA,CAAA,EAAA,MAaa,CAbb,CAAA,UAAA,CAAA,CAAA,GAa8B,IAb9B,CAamC,CAbnC,CAAA,UAAA,CAAA,EAAA,MAawD,CAbxD,CAAA,UAAA,CAAA,CAAA,CAAA;EAAwB,UAAA,EAe3B,MAf2B,CAepB,CAfoB,CAAA,YAAA,CAAA,GAeF,CAfE,CAAA,YAAA,CAAA,CAAA;AAIzC,CAAA;AAA+C,KAcnC,WAdmC,CAAA,UAcb,KAda,EAAA,eAAA,MAAA,EAAA,eAAA,MAAA,CAAA,GAAA;EACjC,QAAA,EAcF,CAdE,CAAA,UAAA,CAAA;EACD,UAAA,EAcC,MAdD,CAcQ,IAdR,CAca,CAdb,CAAA,YAAA,CAAA,EAc8B,MAd9B,CAAA,GAcwC,MAdxC,CAc+C,MAd/C,EAcuD,CAdvD,CAAA,YAAA,CAAA,CAcuE,MAdvE,CAAA,CAAA,CAAA;CAAa;AACZ,KAgBF,kBAhBE,CAAA,UAgB2B,UAhB3B,CAAA,GAAA,QAAa,MAiBb,CAjBa,GAAA;EAAC,OAAA,EAiBC,CAjBD,CAiBG,CAjBH,CAAA,CAAA,SAAA,CAAA;EAIhB,QAAA,EAAW,IAAA;AAAW,CAAA,EAAiB;AAE1C,KAcG,aAdH,CAAA,UAc2B,KAd3B,CAAA,GAAA;EAAqB,QAAA,EAelB,kBAfkB,CAeC,CAfD,CAAA,UAAA,CAAA,CAAA;EAA1B,UAAA,EAAA,gBAAgD,MAiB5B,CAjB4B,CAAA,YAAA,CAAA,GAiBV,kBAjBU,CAiBS,CAjBT,CAAA,YAAA,CAAA,CAiByB,SAjBzB,CAAA,CAAA,EAAqB;CAA1B;AADnC,KAsBA,QAtBA,CAAA,gBAsByB,MAtBzB,CAAA,MAAA,EAsBwC,UAtBxC,CAAA,CAAA,GAAA;EAGS,CAoBlB,cAAA,CApBkB,EAoBD,OApBC;EAAkB,QAAA,EAAA,EAqBzB,SArByB;EAAzB,YAAA,EAAA,EAsBI,MAtBJ,CAAA,MAAA,EAsBmB,UAtBnB,CAAA;CAAM;AAGR,KAsBA,YAAA,GAtBW;EAAW,SAAA,UAAA,EAuBX,cAvBW;EACtB,SAAA,YAAA,EAuBa,MAvBb,CAAA,MAAA,EAuB4B,MAvB5B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA;EACc,SAAA,mBAAA,EAuBM,uBAvBN;EAAiB,SAAA,yBAAA,EAwBL,MAxBK,CAAA,MAAA,EAAA,OAAA,CAAA;CAAtB;;;KC7CT,qBAAqB;GAC9B,cAAA,GAAiB;cAAH,qCAAA,CAC4C;;ADVjD,KCaA,SDbW,CAAA,MAAA,EAAA,cCaqB,UDbrB,EAAA,cAAA,MAAA,CAAA,GCayD,MDbzD,CCcrB,MDdqB,GAAA,QCcJ,KDduC,GCc/B,KDd+B,EAAqB,CAAA;AAC3E,KCgBQ,UDhBR,CAAA,MAAA,EAAA,kBCkBgB,UDlBhB,EAAA,gBAAA,SAAA,CAAA,MCmB8B,SDnB9B,CAAA,EAAA,CAAA,GCoBA,MDpBA,CCoBO,MDpBP,GCoBgB,IDpBhB,CCoBqB,SDpBrB,ECoBgC,ODpBhC,CAAA,MAAA,CAAA,CAAA,CAAA;AAAM,KCsBE,kBDtBF,CAAA,UCsB+B,MDtB/B,CAAA,MAAA,ECsB8C,UDtB9C,CCsByD,UDtBzD,CAAA,CAAA,CAAA,GAAA,QAGL,MCoBS,CDpBT,GCoBa,CDpBC,CCoBC,CDpBD,CAAA,SCoBY,UDpBH,CAAA,KAAA,WCoB8B,UDpB9B,CAAA,GAAA,CAAA,GAAA,KAAA,EAC5B;AACqB,KCqBT,UDrBsC,CAAA,uBCqBJ,KDrBI,CAAA,GAAA,QAC7B,MCqBP,cDrBoC,CAAA,UAAA,CAAA,GCqBP,UDrBO,CCqBI,cDrBJ,CAAA,UAAA,CAAA,CCqB+B,CDrB/B,CAAA,CAAA,EAElD,GAAY,gBAA0B,MCqBhB,cDrBgB,CAAA,YAAA,CAAA,GAAA,QAAI,MCsB1B,cDtB0B,CAAA,YAAA,CAAA,CCsBG,SDtBH,CAAA,GCsBgB,UDtBhB,CCuBpC,cDvBoC,CAAA,YAAA,CAAA,CCuBP,SDvBO,CAAA,CCuBI,CDvBJ,CAAA,CAAA,EAAE,EAAC;AACjC,KC2BA,iBD3ByB,CAAA,UC4BzB,UD5BiB,EAAA,WC6BhB,MD7BgB,CAAA,MAAA,EAAA;EAEjB,SAAA,KAAU,EAAA,OAAA;AACtB,CAAA,CAAA,CAAA,GC2BI,UD3BQ,CC2BG,CD3BO,CAAA,GAAA,CC2BD,CD3BC,CAAA,SAAkB,CAAA,SAAf,MC2BuB,ED3BjB,GC2BsB,ED3BtB,CC2ByB,CD3BzB,CAAA,SAAA,CAAA,CAAA,CAAA,OAAA,CAAA,GAAA,KAAA,CAAA;AAEnB,KC2BA,gBAAA,GD3BK;EACL,OAAA,EAAA,WAAA;EACiB,QAAA,EAAA,OAAA;CAAf;AAAM,KC2BR,iBD3BQ,CAAA,uBC2BiC,KD3BjC,EAAA,WC2BmD,YD3BnD,CAAA,GAAA,CAAA,MAAA,EC4BV,UD5BU,CC4BC,cD5BD,CAAA,EAAA,GAAA,EC6Bb,SD7Ba,CC6BH,ED7BG,CAAA,EAAA,GC8Bf,UD9Be,CC8BJ,gBD9BI,CAAA;AAGR,KC6BA,gBAAA,GD7BU,KAAA,GAAA,MAAA;AAAa,KC8BvB,YAAA,GD9BuB,OAAA,GAAA,MAAA;AAErB,KC8BF,cAAA,GD9BE;EACS,SAAA,CAAA,EC8BT,gBD9BS;EAAO,KAAA,CAAA,EC+BpB,YD/BoB;CAAd;AAFJ,KCoCA,YDpCA,CAAA,uBCqCa,KDrCb,EAAA,gBCsCM,MDtCN,CAAA,MAAA,ECsCqB,UDtCrB,CAAA,CAAA,GAAA;EAKW,QAAA,ECmCX,MDnCW,CCmCJ,cDnCI,CAAA,UAAA,CAAA,GCmCyB,ODnCzB,CAAA;EACT,UAAA,ECmCA,cDnCA,CAAA,YAAA,CAAA;CAAa;AAG3B,KCmCK,qBDnCmB,CAAA,aAAA,SCoCA,UDpCA,EAAA,EAAA,WCqCX,MDrCW,CAAA,MAAA,EAAA;EAAoC,SAAA,KAAA,EAAA,OAAA;CACvB,CAAA,CAAA,GAAA,QAAzB,MCqCM,IDrCN,GCqCa,iBDrCb,CCqC+B,IDrC/B,CCqCoC,CDrCpC,CAAA,ECqCwC,EDrCxC,CAAA,EAEF;KCqCL,kBDrCqC,CAAA,WCsC7B,uBDtC6B,EAAA,WCuC7B,MDvC6B,CAAA,MAAA,EAAA;EAAzB,SAAA,KAAA,EAAA,OAAA;CAAwB,CAAA,CAAA,GAAA,QAI7B,MCqCE,EDrCF,GAAA,CAAA,GAAA,IAAA,ECsCC,qBDtCuB,CCsCD,EDtCC,CCsCE,CDtCF,CAAA,CAAA,MAAA,CAAA,ECsCc,EDtCd,CAAA,EAAA,GCuC7B,UDvC6B,CCuClB,EDvCkB,CCuCf,CDvCe,CAAA,CAAA,SAAA,CAAA,CAAA,EAAW;AACjC,KCyCF,gBDzCE,CAAA,WCyC0B,MDzC1B,CAAA,MAAA,EAAA;EACD,SAAA,KAAA,EAAA,OAAA;CAAa,CAAA,CAAA,GAAA;EACZ,EAAA,EAAA,CAAA,gBAAA,MAAA,CAAA,CAAA,CAAA,ECyCP,iBDzCO,CAAA;IAAa,OAAA,ECyCS,ODzCT;IAAC,QAAA,EAAA,OAAA;EAIhB,CAAA,ECqCsD,EDrCtD,CAAA,GAAA,IAAA,EAAW,CAAA,ECsChB,iBDtCgB,CAAA;IAAW,OAAA,ECsCE,ODtCF;IAAiB,QAAA,EAAA,OAAA;EAE1C,CAAA,ECoCyD,EDpCzD,CAAA,GAAA,IAAA,EAAA,GCqCF,UDrCE,CCqCS,gBDrCT,CAAA;EAAqB,EAAA,EAAA,CAAA,UCsCb,UDtCa,CAAA,CAAA,CAAA,ECuCvB,iBDvCuB,CCuCL,CDvCK,ECuCF,EDvCE,CAAA,GAAA,IAAA,EAAA,CAAA,ECwCvB,iBDxCuB,CCwCL,CDxCK,ECwCF,EDxCE,CAAA,GAAA,IAAA,EAAA,GCyCvB,UDzCuB,CCyCZ,gBDzCY,CAAA;EAA1B,EAAA,EAAA,CAAA,UC0Ca,UD1Cb,CAAA,CAAA,CAAA,EC2CG,iBD3CH,CC2CqB,CD3CrB,EC2CwB,ED3CxB,CAAA,EAAA,CAAA,EC4CG,iBD5CH,CC4CqB,CD5CrB,EC4CwB,ED5CxB,CAAA,EAAA,GC6CG,UD7CH,CC6Cc,gBD7Cd,CAAA;EAAgD,GAAA,EAAA,CAAA,UC8ClC,UD9CkC,CAAA,CAAA,CAAA,EC+C7C,iBD/C6C,CC+C3B,CD/C2B,EC+CxB,ED/CwB,CAAA,EAAA,CAAA,ECgD7C,iBDhD6C,CCgD3B,CDhD2B,ECgDxB,EDhDwB,CAAA,EAAA,GCiD7C,UDjD6C,CCiDlC,gBDjDkC,CAAA;EAAqB,EAAA,EAAA,CAAA,UCkDxD,UDlDwD,CAAA,CAAA,CAAA,ECmDlE,iBDnDkE,CCmDhD,CDnDgD,ECmD7C,EDnD6C,CAAA,EAAA,CAAA,ECoDlE,iBDpDkE,CCoDhD,CDpDgD,ECoD7C,EDpD6C,CAAA,EAAA,GCqDlE,UDrDkE,CCqDvD,gBDrDuD,CAAA;EAA1B,GAAA,EAAA,CAAA,UCsD7B,UDtD6B,CAAA,CAAA,CAAA,ECuDxC,iBDvDwC,CCuDtB,CDvDsB,ECuDnB,EDvDmB,CAAA,EAAA,CAAA,ECwDxC,iBDxDwC,CCwDtB,CDxDsB,ECwDnB,EDxDmB,CAAA,EAAA,GCyDxC,UDzDwC,CCyD7B,gBDzD6B,CAAA;EADnC,GAAA,EAAA,CAAA,GAAA,IAAA,EC2DK,iBD3DL,CC2DuB,gBD3DvB,EC2DyC,ED3DzC,CAAA,EAAA,EAAA,GC2DmD,UD3DnD,CC2D8D,gBD3D9D,CAAA;EAGS,EAAA,EAAA,CAAA,GAAA,GAAA,ECyDN,iBDzDM,CCyDY,gBDzDZ,ECyD8B,EDzD9B,CAAA,EAAA,EAAA,GCyDwC,UDzDxC,CCyDmD,gBDzDnD,CAAA;EAAkB,MAAA,EAAA,CAAA,QAAA,EC2DlB,QD3DkB,CC2DT,MD3DS,CAAA,MAAA,EC2DM,UD3DN,CAAA,CAAA,EAAA,GC2DuB,UD3DvB,CC2DkC,gBD3DlC,CAAA;EAAzB,SAAA,EAAA,CAAA,QAAA,EC4DU,QD5DV,CC4DmB,MD5DnB,CAAA,MAAA,EC4DkC,UD5DlC,CAAA,CAAA,EAAA,GC4DmD,UD5DnD,CC4D8D,gBD5D9D,CAAA;EAAM,EAAA,EAAA;IAGR,CAAA,gBAAW,MAAA,CAAA,CAAA,IAAA,EC6DX,UD7DW,CAAA;MAAW,OAAA,EC6DA,OD7DA;MACtB,QAAA,EAAA,OAAA;IACc,CAAA,CAAA,EAAA,QAAA,EC4DV,QD5DU,CC4DD,MD5DC,CAAA,MAAA,EAAA;MAAiB,OAAA,EC4DQ,OD5DR;MAAtB,QAAA,EAAA,OAAA;IAAuC,CAAA,CAAA,CAAA,CAAA,EC6DrD,UD7DqD,CC6D1C,gBD7D0C,CAAA;IAAQ,CAAA,gBAAA,MAAA,CAAA,CAAA,IAAA,EC+DxD,UD/DwD,CAAA;MAAgB,OAAA,EC+DlD,OD/DkD;MAA/B,QAAA,EAAA,OAAA;IAAvC,CAAA,CAAA,EAAA,MAAA,ECgEA,KDhEA,CCgEM,iBDhEN,CAAA;MAAM,OAAA,ECgE6B,ODhE7B;MAGR,QAAA,EAAA,OAAkB;IAAW,CAAA,EC6DsC,ED7DtC,CAAA,CAAA,CAAA,EC8DlC,UD9DkC,CC8DvB,gBD9DuB,CAAA;EAC3B,CAAA;EAAe,KAAA,EAAA;IAAE,CAAA,gBAAA,MAAA,CAAA,CAAA,IAAA,ECkEnB,UDlEmB,CAAA;MAAC,OAAA,ECkEE,ODlEF;MAGpB,QAAa,EAAA,OAAA;IAAW,CAAA,CAAA,EAAA,QAAA,ECgEpB,QDhEoB,CCgEX,MDhEW,CAAA,MAAA,EAAA;MACL,OAAA,EC+DoB,OD/DpB;MAAnB,QAAA,EAAA,OAAA;IAEY,CAAA,CAAA,CAAA,CAAA,EC8DjB,UD9DiB,CC8DN,gBD9DM,CAAA;IAAqC,CAAA,gBAAA,MAAA,CAAA,CAAA,IAAA,ECgEjD,UDhEiD,CAAA;MAAgB,OAAA,ECgE3C,ODhE2C;MAAnC,QAAA,EAAA,OAAA;IAAkB,CAAA,CAAA,EAAA,MAAA,ECiE9C,KDjE8C,CCiExC,iBDjEwC,CAAA;MAIhD,OAAQ,EC6D6B,OD7D7B;MAAgC,QAAA,EAAA,OAAA;IAAf,CAAA,EC6D0C,ED7D1C,CAAA,CAAA,CAAA,EC8D9B,UD9D8B,CC8DnB,gBD9DmB,CAAA;EACjB,CAAA;CAAjB;AACW,KCgEF,SDhEE,CAAA,WCgEmB,YDhEnB,CAAA,GCgEmC,gBDhEnC,CCgEoD,EDhEpD,CAAA,YAAA,CAAA,CAAA,GCiEZ,kBDjEY,CCiEO,EDjEP,CAAA,qBAAA,CAAA,ECiEkC,EDjElC,CAAA,YAAA,CAAA,CAAA;AACmB,KCkErB,UAAA,GDlEqB;EAAf,OAAA,EAAA,WAAA;EAAM,QAAA,EAAA,KAAA;AAGxB,CAAA;AACuB,KCgEX,sBAAA,GDhEW;EACiB,KAAA,EAAA,CAAA,IAAA,CAAA,ECgEvB,UDhEuB,CCgEZ,UDhEY,CAAA,EAAA,GCgEI,UDhEJ,CCgEe,UDhEf,CAAA;EAAf,GAAA,EAAA,CAAA,UCiEP,UDjEO,CAAA,CAAA,IAAA,ECkEf,UDlEe,CCkEJ,CDlEI,CAAA,EAAA,GCmElB,UDnEkB,CAAA;IACO,OAAA,ECkEH,CDlEG,CAAA,SAAA,CAAA;IACM,QAAA,EAAA,IAAA;EAAM,CAAA,CAAA;kBCkE1B,kBACR,WAAW,OACd;aAAsB;;EAzIjB,CAAA,CAAA;EAAqB,GAAA,EAAA,CAAA,UA0If,UA1Ie,CAAA,CAAA,IAAA,EA2IvB,UA3IuB,CA2IZ,CA3IY,CAAA,EAAA,GA4I1B,UA5I0B,CAAA;IACb,OAAA,EA2IS,CA3IT,CAAA,SAAA,CAAA;IAAjB,QAAA,EAAA,IAAA;EAAc,CAAA,CAAA;EACyD,GAAA,EAAA,CAAA,UA2IxD,UA3IwD,CAAA,CAAA,IAAA,EA4IhE,UA5IgE,CA4IrD,CA5IqD,CAAA,EAAA,GA6InE,UA7ImE,CAAA;IAG9D,OAAA,EA0IiB,CA1IR,CAAA,SAAA,CAAA;IAAuB,QAAA,EAAA,IAAA;EAC1C,CAAA,CAAA;CAAiB;AAAQ,KA4If,kBA5Ie,CAAA,WA4Ie,YA5If,CAAA,GA4I+B,SA5I/B,CA4IyC,EA5IzC,CAAA,GA4I+C,sBA5I/C;;;KCftB,yBACO,+BACS;;MACjB,6BAA2B,aAC3B,+BACE,WAAW,mCACX,WAAW;KAGZ,6BAA2B,cAAc,+BAA6B,WAAW;KAE1E,uBACE,eAAe,gCACR;EFZT,SAAA,MAAW,EAAA,OAAA;CAAmC,CAAA,EAAA,oBEapC,MFboC,CAAA,MAAA,EAAA,OAAA,CAAA,GEaV,MFbU,CAAA,MAAA,EAAA,KAAA,CAAA,CAAA,GEctD,MFdsD,CAAA,kBAAqB,MEevD,GFfuD,GAAA,MAAA,SAAA,MEe5B,WFf4B,GEgBzE,YFhByE,CEgB5D,GFhB4D,CEgBxD,CFhBwD,CAAA,EEgBpD,UFhBoD,CAAA,GEiBzE,CFjByE,SAAA,MEiBzD,WFjByD,GEkBvE,aFlBuE,CEkBzD,WFlByD,CEkB7C,WFlB6C,CEkBjC,CFlBiC,GAAA,MEkBvB,WFlBuB,CAAA,CAAA,EEkBR,GFlBQ,CEkBJ,CFlBI,CAAA,CAAA,GEmBvE,YFnBuE,CEmB1D,GFnB0D,CEmBtD,CFnBsD,CAAA,EEmBlD,UFnBkD,CAAA,EAC3E,CAAA;;;KGEQ,mBAAA;EHHA,GAAA,EAAA;IAA8C,SAAA,EAAA,IAAA;EAAqB,CAAA;CAC3E;AAAM,KGKE,YHLF,CAAA,cGMM,YHNN,EAAA,WGOG,MHPH,CAAA,MAAA,EAAA;EAGL,SAAA,KAAA,EAAA,OAAc;AACnB,CAAA,CAAA,CAAA,GAAqB,QACA,MGIP,KHJoC,CAAA,SAAA,CAAA,IGIhB,KHJgB,CAAA,SAAA,CAAA,CGIC,CHJD,CAAA,CAAA,SAAA,CAAA,SAAA,MGI6B,EHJ7B,GGK5C,EHL4C,CGKzC,KHLyC,CAAA,SAAA,CAAA,CGKxB,CHLwB,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,OAAA,CAAA,GAAA,OAAA,EAClD;AAGY,UGcK,WHdoB,CAAA,WGexB,YHfgB,EAAA,uBGgBJ,KHhBI,EAAA,gBGiBX,MHjBW,CAAA,MAAA,EGiBI,UHjBJ,CAAA,CAAA,CAAA;EAEjB,SAAA,EGiBC,WHjBS,CGkBlB,EHlBkB,CAAA,cAAA,CAAA,EGmBlB,mBHnBkB,EAAA,CAAA,gBAAA,CAAA,MGoBM,cHpBN,CAAA,UAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,CAAA,GAAA,OAAA,EGqBJ,OHrBI,EAAA,GGsBb,WHtBa,CGsBD,EHtBC,EGsBG,cHtBH,EGsBmB,UHtBnB,CGsB8B,QHtB9B,EGsBwC,cHtBxC,CAAA,UAAA,CAAA,EGsBoE,OHtBpE,CAAA,CAAA,CAAA;EACV,KAAA,EAAA,EGuBD,YHvBW,CGuBE,UHvBgB,CGuBL,OHvBV,EGuBmB,EHvBb,CAAA,YAAA,CAAA,EGuB+B,EHvB/B,CAAA,2BAAA,CAAA,CAAA,CAAA;AAE/B;AACY,UGuBK,WHvBL,CAAA,WGwBC,YHxBD,EAAA,uBGyBa,KHzBb,EAAA,gBG0BM,MH1BN,CAAA,MAAA,EG0BqB,UH1BrB,CAAA,CAAA,CAAA;EACiB,KAAA,CAAA,IAAA,EG2Bf,iBH3Be,CG2BG,cH3BH,EG2BmB,EH3BnB,CAAA,CAAA,EG2ByB,WH3BzB,CG2BqC,EH3BrC,EG2ByC,cH3BzC,EG2ByD,OH3BzD,CAAA;EAAf,SAAA,EG4BD,WH5BC,CG6BV,EH7BU,CAAA,cAAA,CAAA,EG8BV,mBH9BU,EAAA,CAAA,gBAAA,CAAA,MG+Bc,cH/Bd,CAAA,UAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,CAAA,GAAA,OAAA,EGgCI,OHhCJ,EAAA,GGiCL,WHjCK,CGiCO,EHjCP,EGiCW,cHjCX,EGiC2B,UHjC3B,CGiCsC,QHjCtC,EGiCgD,cHjChD,CAAA,UAAA,CAAA,EGiC4E,OHjC5E,CAAA,CAAA,CAAA;EAAM,KAAA,EAAA,EGmCT,YHnCS,CGmCI,UHnCJ,CGmCe,OHnCf,EGmCwB,EHnCxB,CAAA,YAAA,CAAA,EGmC0C,EHnC1C,CAAA,2BAAA,CAAA,CAAA,CAAA;AAGpB;AAAmC,UGmClB,WHnCkB,CAAA,WGoCtB,YHpCsB,EAAA,uBGqCV,KHrCU,EAAA,gBGsCjB,MHtCiB,CAAA,MAAA,EGsCF,UHtCE,CAAA,CAAA,CAAA;EAErB,KAAA,CAAA,IAAA,EGsCA,iBHtCA,CGsCkB,cHtClB,EGsCkC,EHtClC,CAAA,CAAA,EGsCwC,WHtCxC,CGsCoD,EHtCpD,EGsCwD,cHtCxD,EGsCwE,OHtCxE,CAAA;EACS,SAAA,EGsCV,WHtCU,CGuCnB,EHvCmB,CAAA,cAAA,CAAA,EGwCnB,mBHxCmB,EAAA,CAAA,gBAAA,CAAA,MGyCK,cHzCL,CAAA,UAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,CAAA,GAAA,OAAA,EG0CL,OH1CK,EAAA,GG2Cd,WH3Cc,CG2CF,EH3CE,EG2CE,cH3CF,EG2CkB,UH3ClB,CG2C6B,QH3C7B,EG2CuC,cH3CvC,CAAA,UAAA,CAAA,EG2CmE,OH3CnE,CAAA,CAAA,CAAA;EAAO,KAAA,EAAA,EG6CnB,YH7CmB,CG6CN,UH7CM,CG6CK,OH7CL,EG6Cc,EH7Cd,CAAA,YAAA,CAAA,EG6CgC,EH7ChC,CAAA,2BAAA,CAAA,CAAA,CAAA;;;;UIvBb,wBAAwB,qCAAqC,eACpE,WAAW,IAAI,gBAAgB,WACrC,SAAS,IAAI,gBAAgB;;;UCOhB,wBACJ,qCACY,uBACP,eAAe,qBACvB,SAAS,UACf,gBACA,cACA,UAAU,UACV,UAAU,IAAI;6BAEK,gBAAgB,0CAClC,aAAa,IAAI,gBAAgB;yBAIxB,WAAW,aAAa,gBAAgB,gBAC3C,UAAU,QACZ,WAAW,cACf,aAAa,IAAI,gBAAgB;EL3B1B,MAAA,CAAA,IAAA,EAAA,CAAW,MAAA,EK+BT,UL/BS,CK+BE,YL/BF,CK+Be,cL/Bf,EK+B+B,OL/B/B,CAAA,CAAA,EAAA,GAAA,EKgCZ,kBLhCY,CKgCO,ELhCP,CAAA,EAAA,GKiCd,ULjCc,CKiCH,gBLjCG,CAAA,CAAA,EKkClB,YLlCkB,CKkCL,ELlCK,EKkCD,cLlCC,EKkCe,OLlCf,CAAA;EAAmC,OAAA,CAAA,KAAA,EAAA,CAAA,MKqCxC,OLrCwC,GAAA,MKqCxB,cLrCwB,CAAA,UAAA,CAAA,CAAA,GAAA,MAAA,EAAA,OAAA,CAAA,EKsC5C,cLtC4C,CAAA,EKuCrD,YLvCqD,CKuCxC,ELvCwC,EKuCpC,cLvCoC,EKuCpB,OLvCoB,CAAA;EAAqB,OAAA,CAAA,IAAA,EAAA,CAAA,MAAA,EK2CjE,UL3CiE,CK2CtD,YL3CsD,CK2CzC,cL3CyC,EK2CzB,OL3CyB,CAAA,CAAA,EAAA,GAAA,EK4CpE,kBL5CoE,CK4CjD,EL5CiD,CAAA,EAAA,GK6CtE,UL7CsE,CK6C3D,UL7C2D,CAAA,EAAA,OAAA,CAAA,EK8CjE,cL9CiE,CAAA,EK+C1E,YL/C0E,CK+C7D,EL/C6D,EK+CzD,cL/CyD,EK+CzC,OL/CyC,CAAA;EAC3E,UAAA,EKgDU,WLhDV,CKiDA,ELjDA,CAAA,cAAA,CAAA,EAAA;IAAM,QAAA,EAAA;MAGL,UAAc,EAAA,IAAA;IACE,CAAA;EACA,CAAA,EAAA;IACA,CAAA,GAAA,MAAA,EAAA,CAA6B,CAAA,MK+CvB,OL/CuB,GAAA,MK+CP,cL/CO,CAAA,UAAA,CAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,EKgDzC,YLhDyC,CKgD5B,ELhD4B,EKgDxB,cLhDwB,EKgDR,OLhDQ,CAAA;IAEtC,CAAA,IAAM,EAAA,CAAA,MAAA,EKiDA,ULjDA,CKiDW,YLjDX,CKiDwB,cLjDxB,EKiDwC,OLjDxC,CAAA,CAAA,EAAA,GAAA,EKkDH,SLlDG,CKkDO,ELlDP,CAAA,EAAA,GKmDL,ULnDK,CKmDM,ULnDN,CAAA,CAAA,EKoDT,YLpDS,CKoDI,ELpDJ,EKoDQ,cLpDR,EKoDwB,OLpDxB,CAAA;EAAoB,CAAA,CAAA;;;;UMArB,uBACJ,qCACY,uBACP,eAAe,qBACvB,SAAS,UACf,WAAW,IAAI,gBAAgB,UAC/B,gBACA,cACA,UAAU,UACV,UAAU,IAAI;cACJ,kBAAkB,gBAAgB,MAAM,YAAY,IAAI,gBAAgB;ENnB1E,OAAA,CAAA,KAAA,EAAW,CAAA,MMsBL,ONtBK,GAAA,MMsBW,cNtBX,CAAA,UAAA,CAAA,CAAA,GAAA,MAAA,EAAA,OAAA,CAAA,EMuBT,cNvBS,CAAA,EMwBlB,WNxBkB,CMwBN,ENxBM,EMwBF,cNxBE,EMwBc,ONxBd,CAAA;EAAmC,OAAA,CAAA,IAAA,EAAA,CAAA,MAAA,EM4B5C,UN5B4C,CM4BjC,YN5BiC,CM4BpB,cN5BoB,EM4BJ,ON5BI,CAAA,CAAA,EAAA,GAAA,EM6B/C,SN7B+C,CM6BrC,EN7BqC,CAAA,EAAA,GM8BjD,UN9BiD,CM8BtC,UN9BsC,CAAA,EAAA,OAAA,CAAA,EM+B5C,cN/B4C,CAAA,EMgCrD,WNhCqD,CMgCzC,ENhCyC,EMgCrC,cNhCqC,EMgCrB,ONhCqB,CAAA;EAAqB,OAAA,CAAA,GAAA,MAAA,EAAA,CAAA,CAAA,MMmCxD,ONnCwD,GAAA,MMmCxC,cNnCwC,CAAA,UAAA,CAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,EMoC1E,YNpC0E,CMoC7D,ENpC6D,EMoCzD,cNpCyD,EMoCzC,ONpCyC,CAAA;EAC3E,OAAA,CAAA,IAAA,EAAA,CAAA,MAAA,EMuCU,UNvCV,CMuCqB,YNvCrB,CMuCkC,cNvClC,EMuCkD,ONvClD,CAAA,CAAA,EAAA,GAAA,EMwCO,SNxCP,CMwCiB,ENxCjB,CAAA,EAAA,GMyCK,UNzCL,CMyCgB,UNzChB,CAAA,CAAA,EM0CC,YN1CD,CM0Cc,EN1Cd,EM0CkB,cN1ClB,EM0CkC,ON1ClC,CAAA;EAAM,UAAA,EM4CI,WN5CJ,CM6CN,EN7CM,CAAA,cAAA,CAAA,EAAA;IAGL,QAAA,EAAA;MACgB,UAA6B,EAAA,IAAA;IAC7B,CAAA;EACA,CAAA,EAAA;IAET,CAAA,GAAA,MAAM,EAAA,CAAA,CAAA,MMyCS,ONzCT,GAAA,MMyCyB,cNzCzB,CAAA,UAAA,CAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,EM0CT,WN1CS,CM0CG,EN1CH,EM0CO,cN1CP,EM0CuB,ON1CvB,CAAA;IAAoB,CAAA,IAAA,EAAA,CAAA,MAAA,EM6CpB,UN7CoB,CM6CT,YN7CS,CM6CI,cN7CJ,EM6CoB,ON7CpB,CAAA,CAAA,EAAA,GAAA,EM8CvB,SN9CuB,CM8Cb,EN9Ca,CAAA,EAAA,GM+CzB,UN/CyB,CM+Cd,UN/Cc,CAAA,CAAA,EMgD7B,WNhD6B,CMgDjB,ENhDiB,EMgDb,cNhDa,EMgDG,ONhDH,CAAA;EAAI,CAAA,CAAA;;;;AAT9B,UOyBK,cPzBM,CAAA,WOyBoB,YPzBpB,EAAA,oBOyBsD,KPzBtD,CAAA,CAAA;EAAmC,IAAA,CAAA,cO0BrC,UP1BqC,CO0B1B,UP1B0B,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EO2B/C,KP3B+C,CAAA,EO4BrD,WP5BqD,CO4BzC,EP5ByC,EO4BrC,WP5BqC,CO4BzB,WP5ByB,EO4BZ,KP5BY,CAAA,OO4BC,cP5BD,CAAA,CAAA,EO4BmB,QP5BnB,CAAA;;AACtD,UO8Ba,UP9Bb,CAAA,WO+BS,YP/BT,EAAA,uBOgCqB,KPhCrB,EAAA,gBOiCc,MPjCd,CAAA,MAAA,EOiC6B,UPjC7B,CAAA,GOiC2C,QPjC3C,CAAA,CAAA;EAAM,MAAA,CAAA,gBAAA,CAAA,MOmCsB,cPnCtB,CAAA,UAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,CAAA,GAAA,OAAA,EOoCM,OPpCN,CAAA,EOqCL,WPrCK,COqCO,EPrCP,EOqCW,cPrCX,EOqC2B,UPrC3B,COqCsC,OPrCtC,EOqC+C,cPrC/C,CAAA,UAAA,CAAA,EOqC2E,OPrC3E,CAAA,CAAA;EAGL,MAAA,CAAA,cAAc,MAAA,EAAG,cOoCuB,UPpCjB,CAAA,CAAA,KAAA,EOqCjB,KPrCiB,EAAA,IAAA,EAAA,CAAA,MAAA,EOsCT,UPtCS,COsCE,cPtCF,CAAA,EAAA,GAAA,EOsCwB,kBPtCxB,COsC2C,EPtC3C,CAAA,EAAA,GOsCmD,UPtCnD,COsC8D,KPtC9D,CAAA,CAAA,EOuCvB,WPvCuB,COuCX,EPvCW,EOuCP,cPvCO,EOuCS,SPvCT,COuCmB,OPvCnB,EOuC4B,KPvC5B,EOuCmC,KPvCnC,CAAA,CAAA;EACP,MAAA,CAAA,eOwCG,MPxC0B,CAAA,MAAA,EOwCX,UPxCW,COwCA,UPxCA,CAAA,CAAA,CAAA,CAAA,QAAA,EAAA,CAAA,MAAA,EOyC3B,UPzC2B,COyChB,cPzCgB,CAAA,EAAA,GAAA,EOyCM,kBPzCN,COyCyB,EPzCzB,CAAA,EAAA,GOyCiC,MPzCjC,CAAA,EO0C7C,WP1C6C,CO0CjC,EP1CiC,EO0C7B,cP1C6B,EO0Cb,MP1Ca,CO0CN,OP1CM,GO0CI,kBP1CJ,CO0CuB,MP1CvB,CAAA,CAAA,CAAA;AAClD;AACqB,UO2CJ,QP3CiC,CAAA,WO2Cb,YP3Ca,EAAA,uBO2CwB,KP3CxB,EAAA,YAAA,CAAA,CAAA;EAEtC,SAAM,CAAA,cO0CQ,UP1CR,CO0CmB,UP1CnB,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EO2CP,KP3CO,EAAA,EAAA,EO4CV,iBP5CU,CO4CQ,WP5CR,CO4CoB,cP5CpB,EO4CoC,KP5CpC,CAAA,OO4CiD,cP5CjD,CAAA,CAAA,EO4CmE,EP5CnE,CAAA,CAAA,EO6Cb,YP7Ca,CO6CA,EP7CA,EO6CI,WP7CJ,CO6CgB,cP7ChB,EO6CgC,KP7ChC,CAAA,OO6C6C,cP7C7C,CAAA,CAAA,CAAA;EAAoB,aAAA,CAAA,cO+CR,UP/CQ,CO+CG,UP/CH,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EOgD3B,KPhD2B,EAAA,EAAA,EOiD9B,iBPjD8B,COiDZ,WPjDY,COiDA,cPjDA,EOiDgB,KPjDhB,CAAA,OOiD6B,cPjD7B,CAAA,CAAA,EOiD+C,EPjD/C,CAAA,CAAA,EOkDjC,YPlDiC,COkDpB,EPlDoB,EOkDhB,WPlDgB,COkDJ,cPlDI,EOkDY,aPlDZ,COkD0B,KPlD1B,CAAA,OOkDuC,cPlDvC,CAAA,CAAA,CAAA,CAAA;EAAI,cAAA,CAAA,cOoDX,UPpDW,COoDA,UPpDA,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EOqD/B,KPrD+B,EAAA,EAAA,EOsDlC,iBPtDkC,COsDhB,WPtDgB,COsDJ,cPtDI,EOsDY,KPtDZ,CAAA,OOsDyB,cPtDzB,CAAA,CAAA,EOsD2C,EPtD3C,CAAA,CAAA,EOuDrC,YPvDqC,COuDxB,EPvDwB,EOuDpB,WPvDoB,COuDR,aPvDQ,COuDM,cPvDN,CAAA,EOuDuB,KPvDvB,CAAA,OOuDoC,cPvDpC,CAAA,CAAA,CAAA;EAAE,aAAA,CAAA,cOyDd,UPzDc,COyDH,UPzDG,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EO0DjC,KP1DiC,EAAA,EAAA,EO2DpC,iBP3DoC,CO2DlB,WP3DkB,CO2DN,cP3DM,EO2DU,KP3DV,CAAA,OO2DuB,cP3DvB,CAAA,CAAA,EO2DyC,EP3DzC,CAAA,CAAA,EO4DvC,YP5DuC,CO6DxC,EP7DwC,EO8DxC,WP9DwC,CO8D5B,aP9D4B,CO8Dd,cP9Dc,CAAA,EO8DG,aP9DH,CO8DiB,KP9DjB,CAAA,OO8D8B,cP9D9B,CAAA,CAAA,CAAA,CAAA;EAAC,WAAA,EOiE9B,WPjE8B,COkEzC,YPlEyC,EAAA;IACjC,GAAA,EAAA;MAEA,OAAU,EAAA,IAAA;IACV,CAAA;EAEA,CAAA,EAAA,CAAA,cAAK,MAAA,EAAA,mBO8D6B,MP9D7B,CAAA,MAAA,EO8D4C,UP9D5C,CAAA,CAAA,CAAA,KAAA,EO+DJ,KP/DI,EAAA,OAAA,EAAA,CAAA,OAAA,EOgEQ,cPhER,COgEuB,EPhEvB,EOgE2B,cPhE3B,CAAA,EAAA,GOgE+C,QPhE/C,COgEwD,UPhExD,CAAA,EAAA,GOiER,YPjEQ,COkEX,EPlEW,EOmEX,WPnEW,COmEC,cPnED,EAAA;IACL,QAAA,EOkEkC,UPlElC;IACiB,UAAA,EOiEyC,MPjEzC,COiEgD,KPjEhD,EOiEuD,UPjEvD,CAAA;EAAf,CAAA,CAAA,CAAA,CAAA;EAAM,gBAAA,EOqEA,WPrEA,COsEhB,YPtEgB,EAAA;IAGR,GAAA,EAAA;MAAuB,OAAA,EAAA,IAAA;IAErB,CAAA;EACS,CAAA,EAAA,CAAA,cAAA,MAAA,EAAA,mBOkE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EQqFQ,MRrFR,CAAA,CAAA,SQsF1B,URtF0B,CQsFf,wBRtFe,CQsFU,CRtFV,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CQsFiC,MRtFjC,CAAA,CAAA,EQsFyC,KRtFzC,CAAA,EQuFhC,URvFgC,CQuFrB,ERvFqB,EQuFjB,cRvFiB,EQuFD,QRvFC,CAAA,EQwFhC,QRxFgC,CQwFvB,ERxFuB,EQwFnB,cRxFmB,EQwFH,CRxFG,CAAA,cAAA,CAAA,CAAA,CAAA;EAAW,EAAA,CAAA,iBAAA,MAAA,CAAA,CAAA,QAAA,EQ0FjC,QR1FiC,CAAA,EQ2F1C,UR3F0C,CQ2F/B,CR3F+B,EQ2F5B,MR3F4B,EQ2FtB,QR3FsB,EQ2FZ,WR3FY,CQ2FA,cR3FA,EQ2FgB,KR3FhB,EQ2FuB,QR3FvB,CAAA,CAAA;EACjC,MAAA,CAAA,MAAA,EQ6FF,oBR7FE,CQ8FR,CR9FQ,EQ+FR,CR/FQ,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CQ+Fe,MR/Ff,CAAA,EQgGR,MRhGQ,EQiGR,ERjGQ,CAAA,YAAA,CAAA,EQkGR,sBRlGQ,CQkGe,CRlGf,CAAA,CAAA,CAAA,EQoGT,WRpGS,CQoGG,ERpGH,EQoGO,cRpGP,EQoGuB,QRpGvB,CAAA;EACD,MAAA,CAAA,GAAA,EQsGJ,oBRtGI,CQuGP,CRvGO,EQwGP,CRxGO,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CQwGgB,MRxGhB,CAAA,EQyGP,MRzGO,EQ0GP,ER1GO,CAAA,YAAA,CAAA,EQ2GP,sBR3GO,CQ2GgB,CR3GhB,CAAA,CAAA,CAAA,EQ6GR,WR7GQ,CQ6GI,ER7GJ,EQ6GQ,cR7GR,EQ6GwB,QR7GxB,CAAA;EAAa,MAAA,EAAA,EQ+Gd,WR/Gc,CQ+GF,ER/GE,EQ+GE,cR/GF,EQ+GkB,QR/GlB,CAAA;;;;KSvCd,gBAAA,GAAmB,eAAe;KAElC,kBAAA;;qBAC2B,eAAe;ETH1C,CAAA;EAA8C,SAAA,YAAA,ESIjC,gBTJiC;CAAqB;AAC3E,KSMQ,ETNR,CAAA,USMqB,kBTNrB,CAAA,GAAA,WAAM,MAAA,GAAA,MSOgB,CTPhB,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,GSOyC,UTPzC,CSOoD,CTPpD,ESOuD,ITPvD,CAAA,EACA"}
|
package/dist/exports/types.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as
|
|
2
|
-
export { type AggregateFunctions, type Db, type DeleteQuery, type Expression, type Functions, type GatedMethod, type GroupedQuery, type InsertQuery, type QueryContext, type ResolveRow, type Scope, type ScopeField, type SelectQuery, type Subquery, type TableProxy, type UpdateQuery };
|
|
1
|
+
import { _ as Scope, a as GroupedQuery, c as UpdateQuery, d as Expression, g as QueryContext, h as GatedMethod, i as SelectQuery, l as ResolveRow, n as TableProxyContract, o as DeleteQuery, p as Functions, r as TableProxy, s as InsertQuery, t as Db, u as AggregateFunctions, v as ScopeField, y as Subquery } from "../db-C7A7Y4tB.mjs";
|
|
2
|
+
export { type AggregateFunctions, type Db, type DeleteQuery, type Expression, type Functions, type GatedMethod, type GroupedQuery, type InsertQuery, type QueryContext, type ResolveRow, type Scope, type ScopeField, type SelectQuery, type Subquery, type TableProxy, type TableProxyContract, type UpdateQuery };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as
|
|
1
|
+
import { _ as Scope, a as GroupedQuery, c as UpdateQuery, d as Expression, g as QueryContext, h as GatedMethod, i as SelectQuery, l as ResolveRow, o as DeleteQuery, p as Functions, r as TableProxy, s as InsertQuery, t as Db, u as AggregateFunctions, v as ScopeField, y as Subquery } from "./db-C7A7Y4tB.mjs";
|
|
2
2
|
export { type AggregateFunctions, type Db, type DeleteQuery, type Expression, type Functions, type GatedMethod, type GroupedQuery, type InsertQuery, type QueryContext, type ResolveRow, type Scope, type ScopeField, type SelectQuery, type Subquery, type TableProxy, type UpdateQuery };
|
package/dist/runtime/index.d.mts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { _ as
|
|
1
|
+
import { _ as Scope, d as Expression, f as FieldProxy, g as QueryContext, m as ExpressionType, p as Functions, t as Db, u as AggregateFunctions, v as ScopeField } from "../db-C7A7Y4tB.mjs";
|
|
2
2
|
import { AnyExpression } from "@prisma-next/sql-relational-core/ast";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { SqlStorage } from "@prisma-next/sql-contract/types";
|
|
4
|
+
import { SqlOperationEntry } from "@prisma-next/sql-operations";
|
|
5
|
+
import { Contract } from "@prisma-next/contract/types";
|
|
5
6
|
import { ExecutionContext } from "@prisma-next/sql-relational-core/query-lane-context";
|
|
6
7
|
|
|
7
8
|
//#region src/runtime/expression-impl.d.ts
|
|
@@ -21,14 +22,14 @@ declare class ExpressionImpl<T extends ScopeField = ScopeField> implements Expre
|
|
|
21
22
|
declare function createFieldProxy<S extends Scope>(scope: S): FieldProxy<S>;
|
|
22
23
|
//#endregion
|
|
23
24
|
//#region src/runtime/functions.d.ts
|
|
24
|
-
declare function createFunctions<QC extends QueryContext>(queryOperationTypes: Readonly<Record<string,
|
|
25
|
-
declare function createAggregateFunctions<QC extends QueryContext>(queryOperationTypes: Readonly<Record<string,
|
|
25
|
+
declare function createFunctions<QC extends QueryContext>(queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>): Functions<QC>;
|
|
26
|
+
declare function createAggregateFunctions<QC extends QueryContext>(queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>): AggregateFunctions<QC>;
|
|
26
27
|
//#endregion
|
|
27
28
|
//#region src/runtime/sql.d.ts
|
|
28
|
-
interface SqlOptions<C extends
|
|
29
|
+
interface SqlOptions<C extends Contract<SqlStorage>> {
|
|
29
30
|
readonly context: ExecutionContext<C>;
|
|
30
31
|
}
|
|
31
|
-
declare function sql<C extends
|
|
32
|
+
declare function sql<C extends Contract<SqlStorage>>(options: SqlOptions<C>): Db<C>;
|
|
32
33
|
//#endregion
|
|
33
|
-
export { ExpressionImpl, type SqlOptions, createAggregateFunctions, createFieldProxy, createFunctions, sql };
|
|
34
|
+
export { type Db, ExpressionImpl, type SqlOptions, createAggregateFunctions, createFieldProxy, createFunctions, sql };
|
|
34
35
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/runtime/expression-impl.ts","../../src/runtime/field-proxy.ts","../../src/runtime/functions.ts","../../src/runtime/sql.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/runtime/expression-impl.ts","../../src/runtime/field-proxy.ts","../../src/runtime/functions.ts","../../src/runtime/sql.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;cASa,yBAAyB,aAAa,uBAAuB,WAAW;EAAxE,UACO,cAAA,CADO,EACU,CADV;EAAW,iBAAA,GAAA;EAAa,SAAA,KAAA,EAGjC,CAHiC;EAAkC,WAAA,CAAA,GAAA,EAKlE,aALkE,EAAA,KAAA,EAK5C,CAL4C;EAChD,QAAA,CAAA,CAAA,EASvB,aATuB;;;;iBCLrB,2BAA2B,cAAc,IAAI,WAAW;;;iBCsJxD,2BAA2B,mCACpB,SAAS,eAAe,sBAC5C,UAAU;iBAiBG,oCAAoC,mCAC7B,SAAS,eAAe,sBAC5C,mBAAmB;;;UCzKL,qBAAqB,SAAS;oBAC3B,iBAAiB;;iBAGrB,cAAc,SAAS,sBAAsB,WAAW,KAAK,GAAG"}
|
package/dist/runtime/index.mjs
CHANGED
|
@@ -127,13 +127,9 @@ function createExtensionFunction(name, entry) {
|
|
|
127
127
|
const restArgs = resolvedArgs.slice(1);
|
|
128
128
|
return new ExpressionImpl(new OperationExpr({
|
|
129
129
|
method: name,
|
|
130
|
-
forTypeId: entry.args[0]?.codecId ?? "unknown",
|
|
131
130
|
self,
|
|
132
131
|
args: restArgs.length > 0 ? restArgs : void 0,
|
|
133
|
-
returns:
|
|
134
|
-
kind: "typeId",
|
|
135
|
-
type: entry.returns.codecId
|
|
136
|
-
},
|
|
132
|
+
returns: entry.returns,
|
|
137
133
|
lowering: entry.lowering
|
|
138
134
|
}), entry.returns);
|
|
139
135
|
};
|
|
@@ -754,7 +750,7 @@ function sql(options) {
|
|
|
754
750
|
capabilities: context.contract.capabilities,
|
|
755
751
|
queryOperationTypes: context.queryOperations.entries(),
|
|
756
752
|
target: context.contract.target ?? "unknown",
|
|
757
|
-
storageHash: context.contract.storageHash ?? "unknown",
|
|
753
|
+
storageHash: context.contract.storage.storageHash ?? "unknown",
|
|
758
754
|
applyMutationDefaults: (options$1) => context.applyMutationDefaults(options$1)
|
|
759
755
|
};
|
|
760
756
|
return new Proxy({}, { get(_target, prop) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["BOOL_FIELD: BooleanCodecType","projectionTypes: Record<string, string>","codecs: Record<string, string>","uniqueRefs: import('@prisma-next/sql-relational-core/ast').ParamRef[]","meta: PlanMeta","fields: ScopeTable","topLevel: ScopeTable","result: ScopeTable","namespaces: Record<string, ScopeTable>","projections: ProjectionItem[]","newRowFields: Record<string, ScopeField>","combined","#state","#buildLateral","#addLateralJoin","#addJoin","subqueryRowFields: ScopeTable","params: Record<string, ParamRef>","#tableName","#table","#scope","#values","#returningColumns","#rowFields","newRowFields: Record<string, ScopeField>","#setValues","#whereCallbacks","#tableName","#table","#fromSource","#scope","#toJoined","ctx: BuilderContext","options"],"sources":["../../src/runtime/expression-impl.ts","../../src/runtime/field-proxy.ts","../../src/runtime/functions.ts","../../src/runtime/builder-base.ts","../../src/runtime/query-impl.ts","../../src/runtime/joined-tables-impl.ts","../../src/runtime/mutation-impl.ts","../../src/runtime/table-proxy-impl.ts","../../src/runtime/sql.ts"],"sourcesContent":["import type { AnyExpression as AstExpression } from '@prisma-next/sql-relational-core/ast';\nimport type { Expression } from '../expression';\n// biome-ignore lint/correctness/noUnusedImports: used in `declare` property\nimport type { ExpressionType, ScopeField } from '../scope';\n\n/**\n * Runtime wrapper around a relational-core AST expression node.\n * Carries ScopeField metadata (codecId, nullable) for plan generation.\n */\nexport class ExpressionImpl<T extends ScopeField = ScopeField> implements Expression<T> {\n declare readonly [ExpressionType]: T;\n private readonly ast: AstExpression;\n readonly field: T;\n\n constructor(ast: AstExpression, field: T) {\n this.ast = ast;\n this.field = field;\n }\n\n buildAst(): AstExpression {\n return this.ast;\n }\n}\n","import { ColumnRef, IdentifierRef } from '@prisma-next/sql-relational-core/ast';\nimport type { FieldProxy } from '../expression';\nimport type { Scope, ScopeTable } from '../scope';\nimport { ExpressionImpl } from './expression-impl';\n\nexport function createFieldProxy<S extends Scope>(scope: S): FieldProxy<S> {\n return new Proxy({} as FieldProxy<S>, {\n get(_target, prop: string) {\n if (Object.hasOwn(scope.topLevel, prop)) {\n const topField = scope.topLevel[prop];\n if (topField) return new ExpressionImpl(IdentifierRef.of(prop), topField);\n }\n\n if (Object.hasOwn(scope.namespaces, prop)) {\n const nsFields = scope.namespaces[prop];\n if (nsFields) return createNamespaceProxy(prop, nsFields);\n }\n\n return undefined;\n },\n });\n}\n\nfunction createNamespaceProxy(\n namespaceName: string,\n fields: ScopeTable,\n): Record<string, ExpressionImpl> {\n return new Proxy({} as Record<string, ExpressionImpl>, {\n get(_target, prop: string) {\n if (Object.hasOwn(fields, prop)) {\n const field = fields[prop];\n if (field) return new ExpressionImpl(ColumnRef.of(namespaceName, prop), field);\n }\n return undefined;\n },\n });\n}\n","import {\n AggregateExpr,\n AndExpr,\n type AnyExpression as AstExpression,\n BinaryExpr,\n type BinaryOp,\n ExistsExpr,\n ListExpression,\n LiteralExpr,\n NullCheckExpr,\n OperationExpr,\n OrExpr,\n ParamRef,\n SubqueryExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { QueryOperationEntry } from '@prisma-next/sql-relational-core/query-operations';\nimport type {\n AggregateFunctions,\n AggregateOnlyFunctions,\n BooleanCodecType,\n BuiltinFunctions,\n Expression,\n ExpressionOrValue,\n Functions,\n} from '../expression';\nimport type { QueryContext, ScopeField, Subquery } from '../scope';\nimport { ExpressionImpl } from './expression-impl';\n\ntype CodecTypes = Record<string, { readonly input: unknown }>;\ntype ExprOrVal<T extends ScopeField = ScopeField> = ExpressionOrValue<T, CodecTypes>;\n\nconst BOOL_FIELD: BooleanCodecType = { codecId: 'pg/bool@1', nullable: false };\n\nfunction resolve(value: ExprOrVal): AstExpression {\n if (value instanceof ExpressionImpl) return value.buildAst();\n return ParamRef.of(value);\n}\n\nfunction resolveToAst(value: ExprOrVal): AstExpression {\n if (value instanceof ExpressionImpl) return value.buildAst();\n return new LiteralExpr(value);\n}\n\nfunction boolExpr(astNode: AstExpression): ExpressionImpl<BooleanCodecType> {\n return new ExpressionImpl(astNode, BOOL_FIELD);\n}\n\nfunction eq(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {\n if (b === null) return boolExpr(NullCheckExpr.isNull(resolve(a)));\n if (a === null) return boolExpr(NullCheckExpr.isNull(resolve(b)));\n return boolExpr(new BinaryExpr('eq', resolve(a), resolve(b)));\n}\n\nfunction ne(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {\n if (b === null) return boolExpr(NullCheckExpr.isNotNull(resolve(a)));\n if (a === null) return boolExpr(NullCheckExpr.isNotNull(resolve(b)));\n return boolExpr(new BinaryExpr('neq', resolve(a), resolve(b)));\n}\n\nfunction comparison(a: ExprOrVal, b: ExprOrVal, op: BinaryOp): ExpressionImpl<BooleanCodecType> {\n return boolExpr(new BinaryExpr(op, resolve(a), resolve(b)));\n}\n\nfunction inOrNotIn(\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n op: 'in' | 'notIn',\n): ExpressionImpl<BooleanCodecType> {\n const left = expr.buildAst();\n const binaryFn = op === 'in' ? BinaryExpr.in : BinaryExpr.notIn;\n\n if (Array.isArray(valuesOrSubquery)) {\n const refs = valuesOrSubquery.map((v) => resolve(v));\n return boolExpr(binaryFn(left, ListExpression.of(refs)));\n }\n return boolExpr(binaryFn(left, SubqueryExpr.of(valuesOrSubquery.buildAst())));\n}\n\nfunction numericAgg(\n fn: 'sum' | 'avg' | 'min' | 'max',\n expr: Expression<ScopeField>,\n): ExpressionImpl<{ codecId: string; nullable: true }> {\n return new ExpressionImpl(AggregateExpr[fn](expr.buildAst()), {\n codecId: (expr as ExpressionImpl).field.codecId,\n nullable: true as const,\n });\n}\n\nfunction createBuiltinFunctions() {\n return {\n eq: (a: ExprOrVal, b: ExprOrVal) => eq(a, b),\n ne: (a: ExprOrVal, b: ExprOrVal) => ne(a, b),\n gt: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'gt'),\n gte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'gte'),\n lt: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lt'),\n lte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lte'),\n and: (...exprs: ExprOrVal<BooleanCodecType>[]) => boolExpr(AndExpr.of(exprs.map(resolveToAst))),\n or: (...exprs: ExprOrVal<BooleanCodecType>[]) => boolExpr(OrExpr.of(exprs.map(resolveToAst))),\n exists: (subquery: Subquery<Record<string, ScopeField>>) =>\n boolExpr(ExistsExpr.exists(subquery.buildAst())),\n notExists: (subquery: Subquery<Record<string, ScopeField>>) =>\n boolExpr(ExistsExpr.notExists(subquery.buildAst())),\n in: (\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n ) => inOrNotIn(expr, valuesOrSubquery, 'in'),\n notIn: (\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n ) => inOrNotIn(expr, valuesOrSubquery, 'notIn'),\n } satisfies BuiltinFunctions<CodecTypes>;\n}\n\nfunction createAggregateOnlyFunctions() {\n return {\n count: (expr?: Expression<ScopeField>) => {\n const astExpr = expr ? expr.buildAst() : undefined;\n return new ExpressionImpl(AggregateExpr.count(astExpr), {\n codecId: 'pg/int8@1',\n nullable: false,\n });\n },\n sum: (expr: Expression<ScopeField>) => numericAgg('sum', expr),\n avg: (expr: Expression<ScopeField>) => numericAgg('avg', expr),\n min: (expr: Expression<ScopeField>) => numericAgg('min', expr),\n max: (expr: Expression<ScopeField>) => numericAgg('max', expr),\n } satisfies AggregateOnlyFunctions;\n}\n\nfunction createExtensionFunction(\n name: string,\n entry: QueryOperationEntry,\n): (...args: ExprOrVal[]) => ExpressionImpl {\n return (...args: ExprOrVal[]) => {\n const resolvedArgs = args.map((arg, i) => {\n if (arg instanceof ExpressionImpl) return arg.buildAst();\n const codecId = entry.args[i]?.codecId;\n return ParamRef.of(arg, codecId ? { codecId } : undefined);\n });\n const self = resolvedArgs[0] as AstExpression;\n const restArgs = resolvedArgs.slice(1);\n\n return new ExpressionImpl(\n new OperationExpr({\n method: name,\n forTypeId: entry.args[0]?.codecId ?? 'unknown',\n self,\n args: restArgs.length > 0 ? restArgs : undefined,\n returns: { kind: 'typeId', type: entry.returns.codecId },\n lowering: entry.lowering,\n }),\n entry.returns,\n );\n };\n}\n\nexport function createFunctions<QC extends QueryContext>(\n queryOperationTypes: Readonly<Record<string, QueryOperationEntry>>,\n): Functions<QC> {\n const builtins = createBuiltinFunctions();\n\n return new Proxy({} as Functions<QC>, {\n get(_target, prop: string) {\n const builtin = (builtins as Record<string, unknown>)[prop];\n if (builtin) return builtin;\n\n const extOp = queryOperationTypes[prop];\n if (extOp) {\n return createExtensionFunction(prop, extOp);\n }\n return undefined;\n },\n });\n}\n\nexport function createAggregateFunctions<QC extends QueryContext>(\n queryOperationTypes: Readonly<Record<string, QueryOperationEntry>>,\n): AggregateFunctions<QC> {\n const baseFns = createFunctions<QC>(queryOperationTypes);\n const aggregates = createAggregateOnlyFunctions();\n\n return new Proxy({} as AggregateFunctions<QC>, {\n get(_target, prop: string) {\n const agg = (aggregates as Record<string, unknown>)[prop];\n if (agg) return agg;\n\n return (baseFns as Record<string, unknown>)[prop];\n },\n });\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { StorageTable } from '@prisma-next/sql-contract/types';\nimport {\n AndExpr,\n type AnyExpression as AstExpression,\n IdentifierRef,\n OrderByItem,\n ProjectionItem,\n SelectAst,\n type TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n AppliedMutationDefault,\n MutationDefaultsOptions,\n} from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { QueryOperationEntry } from '@prisma-next/sql-relational-core/query-operations';\nimport type {\n AggregateFunctions,\n Expression,\n FieldProxy,\n OrderByOptions,\n OrderByScope,\n} from '../expression';\nimport type {\n GatedMethod,\n MergeScopes,\n NullableScope,\n QueryContext,\n Scope,\n ScopeField,\n ScopeTable,\n} from '../scope';\nimport type { ExpressionImpl } from './expression-impl';\nimport { createFieldProxy } from './field-proxy';\nimport { createAggregateFunctions, createFunctions } from './functions';\n\nexport type ExprCallback = (fields: FieldProxy<Scope>, fns: unknown) => Expression<ScopeField>;\n\nexport class BuilderBase<Capabilities = unknown> {\n protected readonly ctx: BuilderContext;\n\n constructor(ctx: BuilderContext) {\n this.ctx = ctx;\n }\n\n protected _gate<Req extends Record<string, Record<string, boolean>>, Args extends unknown[], R>(\n required: Req,\n methodName: string,\n method: (...args: Args) => R,\n ): GatedMethod<Capabilities, Req, (...args: Args) => R> {\n return ((...args: Args): R => {\n assertCapability(this.ctx, required, methodName);\n return method(...args);\n }) as GatedMethod<Capabilities, Req, (...args: Args) => R>;\n }\n}\n\nexport interface BuilderState {\n readonly from: TableSource;\n readonly joins: readonly import('@prisma-next/sql-relational-core/ast').JoinAst[];\n readonly projections: readonly ProjectionItem[];\n readonly where: readonly AstExpression[];\n readonly orderBy: readonly OrderByItem[];\n readonly groupBy: readonly AstExpression[];\n readonly having: AstExpression | undefined;\n readonly limit: number | undefined;\n readonly offset: number | undefined;\n readonly distinct: true | undefined;\n readonly distinctOn: readonly AstExpression[] | undefined;\n readonly scope: Scope;\n readonly rowFields: Record<string, ScopeField>;\n}\n\nexport interface BuilderContext {\n readonly capabilities: Record<string, Record<string, boolean>>;\n readonly queryOperationTypes: Readonly<Record<string, QueryOperationEntry>>;\n readonly target: string;\n readonly storageHash: string;\n readonly applyMutationDefaults: (\n options: MutationDefaultsOptions,\n ) => ReadonlyArray<AppliedMutationDefault>;\n}\n\nexport function emptyState(from: TableSource, scope: Scope): BuilderState {\n return {\n from,\n joins: [],\n projections: [],\n where: [],\n orderBy: [],\n groupBy: [],\n having: undefined,\n limit: undefined,\n offset: undefined,\n distinct: undefined,\n distinctOn: undefined,\n scope,\n rowFields: {},\n };\n}\n\nexport function cloneState(state: BuilderState, overrides: Partial<BuilderState>): BuilderState {\n return { ...state, ...overrides };\n}\n\nexport function combineWhereExprs(exprs: readonly AstExpression[]): AstExpression | undefined {\n if (exprs.length === 0) return undefined;\n if (exprs.length === 1) return exprs[0];\n return AndExpr.of(exprs);\n}\n\nexport function buildSelectAst(state: BuilderState): SelectAst {\n const where = combineWhereExprs(state.where);\n return new SelectAst({\n from: state.from,\n joins: state.joins.length > 0 ? state.joins : undefined,\n projection: state.projections,\n where,\n orderBy: state.orderBy.length > 0 ? state.orderBy : undefined,\n distinct: state.distinct,\n distinctOn: state.distinctOn && state.distinctOn.length > 0 ? state.distinctOn : undefined,\n groupBy: state.groupBy.length > 0 ? state.groupBy : undefined,\n having: state.having,\n limit: state.limit,\n offset: state.offset,\n selectAllIntent: undefined,\n });\n}\n\nexport function buildQueryPlan<Row = unknown>(\n ast: import('@prisma-next/sql-relational-core/ast').AnyQueryAst,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): SqlQueryPlan<Row> {\n const projectionTypes: Record<string, string> = {};\n const codecs: Record<string, string> = {};\n for (const [alias, field] of Object.entries(rowFields)) {\n projectionTypes[alias] = field.codecId;\n codecs[alias] = field.codecId;\n }\n\n const paramRefs = ast.collectParamRefs();\n const seen = new Set<import('@prisma-next/sql-relational-core/ast').ParamRef>();\n const uniqueRefs: import('@prisma-next/sql-relational-core/ast').ParamRef[] = [];\n for (const ref of paramRefs) {\n if (!seen.has(ref)) {\n seen.add(ref);\n uniqueRefs.push(ref);\n }\n }\n const paramValues = uniqueRefs.map((r) => r.value);\n const paramDescriptors = uniqueRefs.map((ref, i) => ({\n index: i + 1,\n source: 'dsl' as const,\n ...(ref.codecId ? { codecId: ref.codecId } : {}),\n }));\n\n for (const [i, ref] of uniqueRefs.entries()) {\n if (ref.codecId) codecs[`$${i + 1}`] = ref.codecId;\n }\n\n const hasProjectionTypes = Object.keys(projectionTypes).length > 0;\n const hasCodecs = Object.keys(codecs).length > 0;\n\n const meta: PlanMeta = Object.freeze({\n target: ctx.target,\n storageHash: ctx.storageHash,\n lane: 'dsl',\n paramDescriptors,\n ...(hasProjectionTypes ? { projectionTypes } : {}),\n ...(hasCodecs ? { annotations: Object.freeze({ codecs: Object.freeze(codecs) }) } : {}),\n });\n\n return Object.freeze({ ast, params: paramValues, meta });\n}\n\nexport function buildPlan<Row = unknown>(\n state: BuilderState,\n ctx: BuilderContext,\n): SqlQueryPlan<Row> {\n return buildQueryPlan<Row>(buildSelectAst(state), state.rowFields, ctx);\n}\n\nexport function tableToScope(name: string, table: StorageTable): Scope {\n const fields: ScopeTable = {};\n for (const [colName, col] of Object.entries(table.columns)) {\n fields[colName] = { codecId: col.codecId, nullable: col.nullable };\n }\n return { topLevel: { ...fields }, namespaces: { [name]: fields } };\n}\n\nexport function mergeScopes<A extends Scope, B extends Scope>(a: A, b: B): MergeScopes<A, B> {\n const topLevel: ScopeTable = {};\n for (const [k, v] of Object.entries(a.topLevel)) {\n if (!(k in b.topLevel)) topLevel[k] = v;\n }\n for (const [k, v] of Object.entries(b.topLevel)) {\n if (!(k in a.topLevel)) topLevel[k] = v;\n }\n return {\n topLevel,\n namespaces: { ...a.namespaces, ...b.namespaces },\n } as MergeScopes<A, B>;\n}\n\nexport function nullableScope<S extends Scope>(scope: S): NullableScope<S> {\n const mkNullable = (tbl: ScopeTable): ScopeTable => {\n const result: ScopeTable = {};\n for (const [k, v] of Object.entries(tbl)) {\n result[k] = { codecId: v.codecId, nullable: true };\n }\n return result;\n };\n const namespaces: Record<string, ScopeTable> = {};\n for (const [k, v] of Object.entries(scope.namespaces)) {\n namespaces[k] = mkNullable(v);\n }\n return { topLevel: mkNullable(scope.topLevel), namespaces } as NullableScope<S>;\n}\n\nexport function orderByScopeOf<S extends Scope, R extends Record<string, ScopeField>>(\n scope: S,\n rowFields: R,\n): OrderByScope<S, R> {\n return {\n topLevel: { ...scope.topLevel, ...rowFields },\n namespaces: scope.namespaces,\n };\n}\n\nexport function assertCapability(\n ctx: BuilderContext,\n required: Record<string, Record<string, boolean>>,\n methodName: string,\n): void {\n for (const [ns, keys] of Object.entries(required)) {\n for (const key of Object.keys(keys)) {\n if (!ctx.capabilities[ns]?.[key]) {\n throw new Error(`${methodName}() requires capability ${ns}.${key}`);\n }\n }\n }\n}\n\nexport function resolveSelectArgs(\n args: unknown[],\n scope: Scope,\n ctx: BuilderContext,\n): { projections: ProjectionItem[]; newRowFields: Record<string, ScopeField> } {\n const projections: ProjectionItem[] = [];\n const newRowFields: Record<string, ScopeField> = {};\n\n if (args.length === 0) return { projections, newRowFields };\n\n if (typeof args[0] === 'string' && (args.length === 1 || typeof args[1] !== 'function')) {\n for (const colName of args as string[]) {\n const field = scope.topLevel[colName];\n if (!field) throw new Error(`Column \"${colName}\" not found in scope`);\n projections.push(ProjectionItem.of(colName, IdentifierRef.of(colName)));\n newRowFields[colName] = field;\n }\n return { projections, newRowFields };\n }\n\n if (typeof args[0] === 'string' && typeof args[1] === 'function') {\n const alias = args[0] as string;\n const exprFn = args[1] as (\n f: FieldProxy<Scope>,\n fns: AggregateFunctions<QueryContext>,\n ) => Expression<ScopeField>;\n const fns = createAggregateFunctions(ctx.queryOperationTypes);\n const result = exprFn(createFieldProxy(scope), fns);\n projections.push(ProjectionItem.of(alias, result.buildAst()));\n newRowFields[alias] = (result as ExpressionImpl).field;\n return { projections, newRowFields };\n }\n\n if (typeof args[0] === 'function') {\n const callbackFn = args[0] as (\n f: FieldProxy<Scope>,\n fns: AggregateFunctions<QueryContext>,\n ) => Record<string, Expression<ScopeField>>;\n const fns = createAggregateFunctions(ctx.queryOperationTypes);\n const record = callbackFn(createFieldProxy(scope), fns);\n for (const [key, expr] of Object.entries(record)) {\n projections.push(ProjectionItem.of(key, expr.buildAst()));\n newRowFields[key] = (expr as ExpressionImpl).field;\n }\n return { projections, newRowFields };\n }\n\n throw new Error('Invalid .select() arguments');\n}\n\nexport function resolveOrderBy(\n arg: unknown,\n options: OrderByOptions | undefined,\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n useAggregateFns: boolean,\n): OrderByItem {\n const dir = options?.direction ?? 'asc';\n\n if (typeof arg === 'string') {\n const combined = orderByScopeOf(scope, rowFields);\n if (!(arg in combined.topLevel))\n throw new Error(`Column \"${arg}\" not found in scope for orderBy`);\n const expr = IdentifierRef.of(arg);\n return dir === 'asc' ? OrderByItem.asc(expr) : OrderByItem.desc(expr);\n }\n\n if (typeof arg === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = useAggregateFns\n ? createAggregateFunctions(ctx.queryOperationTypes)\n : createFunctions(ctx.queryOperationTypes);\n const result = (arg as ExprCallback)(createFieldProxy(combined), fns);\n return dir === 'asc' ? OrderByItem.asc(result.buildAst()) : OrderByItem.desc(result.buildAst());\n }\n\n throw new Error('Invalid orderBy argument');\n}\n\nexport function resolveGroupBy(\n args: unknown[],\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): AstExpression[] {\n if (typeof args[0] === 'string') {\n const combined = orderByScopeOf(scope, rowFields);\n return (args as string[]).map((colName) => {\n if (!(colName in combined.topLevel))\n throw new Error(`Column \"${colName}\" not found in scope for groupBy`);\n return IdentifierRef.of(colName);\n });\n }\n\n if (typeof args[0] === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = createFunctions(ctx.queryOperationTypes);\n const result = (args[0] as ExprCallback)(createFieldProxy(combined), fns);\n return [result.buildAst()];\n }\n\n throw new Error('Invalid groupBy arguments');\n}\n\nexport function resolveDistinctOn(\n args: unknown[],\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): AstExpression[] {\n if (args.length === 1 && typeof args[0] === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = createFunctions(ctx.queryOperationTypes);\n const result = (args[0] as ExprCallback)(createFieldProxy(combined), fns);\n return [result.buildAst()];\n }\n const combined = orderByScopeOf(scope, rowFields);\n return (args as string[]).map((colName) => {\n if (!(colName in combined.topLevel))\n throw new Error(`Column \"${colName}\" not found in scope for distinctOn`);\n return IdentifierRef.of(colName);\n });\n}\n","import { DerivedTableSource, type SelectAst } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n AggregateFunctions,\n BooleanCodecType,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n Functions,\n OrderByOptions,\n OrderByScope,\n WithField,\n WithFields,\n} from '../expression';\nimport type { ResolveRow } from '../resolve';\nimport type {\n Expand,\n JoinOuterScope,\n JoinSource,\n QueryContext,\n Scope,\n ScopeField,\n // biome-ignore lint/correctness/noUnusedImports: used in `declare` property\n SubqueryMarker,\n} from '../scope';\nimport type { GroupedQuery } from '../types/grouped-query';\nimport type { SelectQuery } from '../types/select-query';\nimport {\n BuilderBase,\n type BuilderContext,\n type BuilderState,\n buildPlan,\n buildSelectAst,\n cloneState,\n orderByScopeOf,\n resolveDistinctOn,\n resolveGroupBy,\n resolveOrderBy,\n resolveSelectArgs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createAggregateFunctions, createFunctions } from './functions';\n\nabstract class QueryBase<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n> extends BuilderBase<QC['capabilities']> {\n protected readonly state: BuilderState;\n\n constructor(state: BuilderState, ctx: BuilderContext) {\n super(ctx);\n this.state = state;\n }\n\n protected abstract clone(state: BuilderState): this;\n\n distinctOn = this._gate(\n { postgres: { distinctOn: true } },\n 'distinctOn',\n (...args: unknown[]) => {\n const exprs = resolveDistinctOn(args, this.state.scope, this.state.rowFields, this.ctx);\n return this.clone(\n cloneState(this.state, {\n distinctOn: [...(this.state.distinctOn ?? []), ...exprs],\n }),\n );\n },\n );\n\n limit(count: number): this {\n return this.clone(cloneState(this.state, { limit: count }));\n }\n\n offset(count: number): this {\n return this.clone(cloneState(this.state, { offset: count }));\n }\n\n distinct(): this {\n return this.clone(cloneState(this.state, { distinct: true }));\n }\n\n groupBy(\n ...fields: ((keyof RowType | keyof AvailableScope['topLevel']) & string)[]\n ): GroupedQuery<QC, AvailableScope, RowType>;\n groupBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: Functions<QC>,\n ) => Expression<ScopeField>,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n groupBy(...args: unknown[]): unknown {\n const exprs = resolveGroupBy(args, this.state.scope, this.state.rowFields, this.ctx);\n return new GroupedQueryImpl<QC, AvailableScope, RowType>(\n cloneState(this.state, { groupBy: [...this.state.groupBy, ...exprs] }),\n this.ctx,\n );\n }\n\n as<Alias extends string>(alias: Alias): JoinSource<RowType, Alias> {\n const ast = buildSelectAst(this.state);\n const derivedSource = DerivedTableSource.as(alias, ast);\n const scope = {\n topLevel: this.state.rowFields as RowType,\n namespaces: { [alias]: this.state.rowFields } as Record<Alias, RowType>,\n };\n return {\n getJoinOuterScope: () => scope,\n buildAst: () => derivedSource,\n\n // `as unknown` is necessary, because JoinOuterScope is a phantom type-only property that does not exist at runtime\n } satisfies Omit<JoinSource<RowType, Alias>, typeof JoinOuterScope> as unknown as JoinSource<\n RowType,\n Alias\n >;\n }\n\n getRowFields(): Record<string, ScopeField> {\n return this.state.rowFields;\n }\n\n buildAst(): SelectAst {\n return buildSelectAst(this.state);\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>> {\n return buildPlan<ResolveRow<RowType, QC['codecTypes']>>(this.state, this.ctx);\n }\n}\n\nexport class SelectQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends QueryBase<QC, AvailableScope, RowType>\n implements SelectQuery<QC, AvailableScope, RowType>\n{\n declare readonly [SubqueryMarker]: RowType;\n\n protected clone(state: BuilderState): this {\n return new SelectQueryImpl<QC, AvailableScope, RowType>(state, this.ctx) as this;\n }\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<RowType, AvailableScope['topLevel'], Columns>>;\n select<Alias extends string, Field extends ScopeField>(\n alias: Alias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<RowType, Field, Alias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<RowType & ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n const { projections, newRowFields } = resolveSelectArgs(args, this.state.scope, this.ctx);\n return new SelectQueryImpl(\n cloneState(this.state, {\n projections: [...this.state.projections, ...projections],\n rowFields: { ...this.state.rowFields, ...newRowFields },\n }),\n this.ctx,\n );\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): SelectQuery<QC, AvailableScope, RowType> {\n const fieldProxy = createFieldProxy(this.state.scope);\n const fns = createFunctions<QC>(this.ctx.queryOperationTypes);\n const result = (expr as ExpressionBuilder<Scope, QueryContext>)(fieldProxy, fns as never);\n return new SelectQueryImpl(\n cloneState(this.state, {\n where: [...this.state.where, result.buildAst()],\n }),\n this.ctx,\n );\n }\n\n orderBy(\n field: (keyof RowType | keyof AvailableScope['topLevel']) & string,\n options?: OrderByOptions,\n ): SelectQuery<QC, AvailableScope, RowType>;\n orderBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: Functions<QC>,\n ) => Expression<ScopeField>,\n options?: OrderByOptions,\n ): SelectQuery<QC, AvailableScope, RowType>;\n orderBy(arg: unknown, options?: OrderByOptions): unknown {\n const item = resolveOrderBy(\n arg,\n options,\n this.state.scope,\n this.state.rowFields,\n this.ctx,\n false,\n );\n return this.clone(cloneState(this.state, { orderBy: [...this.state.orderBy, item] }));\n }\n}\n\nexport class GroupedQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends QueryBase<QC, AvailableScope, RowType>\n implements GroupedQuery<QC, AvailableScope, RowType>\n{\n declare readonly [SubqueryMarker]: RowType;\n\n protected clone(state: BuilderState): this {\n return new GroupedQueryImpl<QC, AvailableScope, RowType>(state, this.ctx) as this;\n }\n\n having(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: AggregateFunctions<QC>,\n ) => Expression<BooleanCodecType>,\n ): GroupedQuery<QC, AvailableScope, RowType> {\n const combined = orderByScopeOf(\n this.state.scope as AvailableScope,\n this.state.rowFields as RowType,\n );\n const fns = createAggregateFunctions(this.ctx.queryOperationTypes);\n const result = expr(createFieldProxy(combined), fns);\n return new GroupedQueryImpl(cloneState(this.state, { having: result.buildAst() }), this.ctx);\n }\n\n orderBy(\n field: (keyof RowType | keyof AvailableScope['topLevel']) & string,\n options?: OrderByOptions,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n orderBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: AggregateFunctions<QC>,\n ) => Expression<ScopeField>,\n options?: OrderByOptions,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n orderBy(arg: unknown, options?: OrderByOptions): unknown {\n const item = resolveOrderBy(\n arg,\n options,\n this.state.scope,\n this.state.rowFields,\n this.ctx,\n true,\n );\n return this.clone(cloneState(this.state, { orderBy: [...this.state.orderBy, item] }));\n }\n}\n","import {\n AndExpr,\n DerivedTableSource,\n JoinAst,\n type TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AggregateFunctions,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n WithField,\n WithFields,\n} from '../expression';\nimport type {\n EmptyRow,\n Expand,\n JoinOuterScope,\n JoinSource,\n MergeScopes,\n NullableScope,\n QueryContext,\n Scope,\n ScopeField,\n ScopeTable,\n Subquery,\n} from '../scope';\nimport type { JoinedTables } from '../types/joined-tables';\nimport type { SelectQuery } from '../types/select-query';\nimport type { LateralBuilder } from '../types/shared';\nimport {\n BuilderBase,\n type BuilderContext,\n type BuilderState,\n cloneState,\n emptyState,\n mergeScopes,\n nullableScope,\n resolveSelectArgs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createFunctions } from './functions';\nimport { SelectQueryImpl } from './query-impl';\n\nexport class JoinedTablesImpl<QC extends QueryContext, AvailableScope extends Scope>\n extends BuilderBase<QC['capabilities']>\n implements JoinedTables<QC, AvailableScope>\n{\n readonly #state: BuilderState;\n\n constructor(state: BuilderState, ctx: BuilderContext) {\n super(ctx);\n this.#state = state;\n }\n\n lateralJoin = this._gate(\n { sql: { lateral: true } },\n 'lateralJoin',\n <Alias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: Alias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<AvailableScope, { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> }>\n > => {\n const { derivedSource, lateralScope } = this.#buildLateral(alias, builder);\n const resultScope = mergeScopes(\n this.#state.scope as AvailableScope,\n lateralScope as { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> },\n );\n return this.#addLateralJoin('inner', resultScope, derivedSource);\n },\n ) as JoinedTables<QC, AvailableScope>['lateralJoin'];\n\n outerLateralJoin = this._gate(\n { sql: { lateral: true } },\n 'outerLateralJoin',\n <Alias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: Alias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<\n AvailableScope,\n NullableScope<{ topLevel: LateralRow; namespaces: Record<Alias, LateralRow> }>\n >\n > => {\n const { derivedSource, lateralScope } = this.#buildLateral(alias, builder);\n const resultScope = mergeScopes(\n this.#state.scope as AvailableScope,\n nullableScope(\n lateralScope as { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> },\n ),\n );\n return this.#addLateralJoin('left', resultScope, derivedSource);\n },\n ) as JoinedTables<QC, AvailableScope>['outerLateralJoin'];\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>;\n select<Alias extends string, Field extends ScopeField>(\n alias: Alias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<EmptyRow, Field, Alias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n const { projections, newRowFields } = resolveSelectArgs(args, this.#state.scope, this.ctx);\n return new SelectQueryImpl<QC, AvailableScope>(\n cloneState(this.#state, {\n projections: [...this.#state.projections, ...projections],\n rowFields: { ...this.#state.rowFields, ...newRowFields },\n }),\n this.ctx,\n );\n }\n\n innerJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>> {\n const targetScope = mergeScopes(\n this.#state.scope as AvailableScope,\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n );\n return this.#addJoin(other, 'inner', targetScope, on);\n }\n\n outerLeftJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, NullableScope<Other[typeof JoinOuterScope]>>> {\n const targetScope = mergeScopes(\n this.#state.scope as AvailableScope,\n nullableScope(other.getJoinOuterScope() as Other[typeof JoinOuterScope]),\n );\n return this.#addJoin(other, 'left', targetScope, on);\n }\n\n outerRightJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<NullableScope<AvailableScope>, Other[typeof JoinOuterScope]>> {\n const targetScope = mergeScopes(\n nullableScope(this.#state.scope as AvailableScope),\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n );\n return this.#addJoin(other, 'right', targetScope, on);\n }\n\n outerFullJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<\n QC,\n MergeScopes<NullableScope<AvailableScope>, NullableScope<Other[typeof JoinOuterScope]>>\n > {\n const targetScope = mergeScopes(\n nullableScope(this.#state.scope as AvailableScope),\n nullableScope(other.getJoinOuterScope() as Other[typeof JoinOuterScope]),\n );\n return this.#addJoin(other, 'full', targetScope, on);\n }\n\n #addJoin<Other extends JoinSource<ScopeTable, string | never>, ResultScope extends Scope>(\n other: Other,\n joinType: 'inner' | 'left' | 'right' | 'full',\n resultScope: ResultScope,\n onExpr: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, ResultScope> {\n const fieldProxy = createFieldProxy(\n mergeScopes(\n this.#state.scope as AvailableScope,\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n ),\n ) as FieldProxy<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>>;\n const fns = createFunctions<QC>(this.ctx.queryOperationTypes);\n const onResult = onExpr(fieldProxy, fns);\n const joinAst = new JoinAst(joinType, other.buildAst(), onResult.buildAst());\n\n return new JoinedTablesImpl(\n cloneState(this.#state, {\n joins: [...this.#state.joins, joinAst],\n scope: resultScope,\n }),\n this.ctx,\n );\n }\n\n #buildLateral(\n alias: string,\n builderFn: (\n lateral: LateralBuilder<QC, AvailableScope>,\n ) => Subquery<Record<string, ScopeField>>,\n ) {\n const lateralBuilder: LateralBuilder<QC, AvailableScope> = {\n from: (other) => {\n const otherScope = other.getJoinOuterScope();\n const parentMerged = mergeScopes(this.#state.scope, otherScope);\n return new SelectQueryImpl(\n emptyState(other.buildAst() as TableSource, parentMerged),\n this.ctx,\n ) as unknown as SelectQuery<QC, AvailableScope, EmptyRow>;\n },\n };\n\n const subquery = builderFn(lateralBuilder);\n const subqueryAst = subquery.buildAst();\n const derivedSource = DerivedTableSource.as(alias, subqueryAst);\n const subqueryRowFields: ScopeTable = subquery.getRowFields();\n const lateralScope: Scope = {\n topLevel: subqueryRowFields,\n namespaces: { [alias]: subqueryRowFields },\n };\n\n return { derivedSource, lateralScope };\n }\n\n #addLateralJoin<ResultScope extends Scope>(\n joinType: 'inner' | 'left',\n resultScope: ResultScope,\n derivedSource: DerivedTableSource,\n ): JoinedTables<QC, ResultScope> {\n const onExpr = AndExpr.of([]);\n const joinAst = new JoinAst(joinType, derivedSource, onExpr, true);\n\n return new JoinedTablesImpl(\n cloneState(this.#state, {\n joins: [...this.#state.joins, joinAst],\n scope: resultScope,\n }),\n this.ctx,\n );\n }\n}\n","import type { StorageTable } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression as AstExpression,\n ColumnRef,\n DeleteAst,\n InsertAst,\n ParamRef,\n TableSource,\n UpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { MutationDefaultsOp } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { ExpressionBuilder } from '../expression';\nimport type { ResolveRow } from '../resolve';\nimport type { QueryContext, Scope, ScopeField } from '../scope';\nimport type {\n DeleteQuery,\n InsertQuery,\n ReturningCapability,\n UpdateQuery,\n} from '../types/mutation-query';\nimport {\n BuilderBase,\n type BuilderContext,\n buildQueryPlan,\n combineWhereExprs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createFunctions } from './functions';\n\ntype WhereCallback = ExpressionBuilder<Scope, QueryContext>;\n\nfunction buildParamValues(\n values: Record<string, unknown>,\n table: StorageTable,\n tableName: string,\n op: MutationDefaultsOp,\n ctx: BuilderContext,\n): Record<string, ParamRef> {\n const params: Record<string, ParamRef> = {};\n for (const [col, value] of Object.entries(values)) {\n const column = table.columns[col];\n params[col] = ParamRef.of(value, column ? { codecId: column.codecId } : undefined);\n }\n for (const def of ctx.applyMutationDefaults({ op, table: tableName, values })) {\n const column = table.columns[def.column];\n params[def.column] = ParamRef.of(def.value, column ? { codecId: column.codecId } : undefined);\n }\n return params;\n}\n\nfunction buildReturningColumnRefs(tableName: string, columns: string[]): ColumnRef[] {\n return columns.map((col) => ColumnRef.of(tableName, col));\n}\n\nfunction evaluateWhere(\n whereCallback: WhereCallback,\n scope: Scope,\n queryOperationTypes: BuilderContext['queryOperationTypes'],\n): AstExpression {\n const fieldProxy = createFieldProxy(scope);\n const fns = createFunctions(queryOperationTypes);\n const result = whereCallback(fieldProxy, fns as never);\n return result.buildAst();\n}\n\nexport class InsertQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements InsertQuery<QC, AvailableScope, RowType>\n{\n readonly #tableName: string;\n readonly #table: StorageTable;\n readonly #scope: Scope;\n readonly #values: Record<string, unknown>;\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n\n constructor(\n tableName: string,\n table: StorageTable,\n scope: Scope,\n values: Record<string, unknown>,\n ctx: BuilderContext,\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n ) {\n super(ctx);\n this.#tableName = tableName;\n this.#table = table;\n this.#scope = scope;\n this.#values = values;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n }\n\n returning = this._gate<ReturningCapability, string[], InsertQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new InsertQueryImpl(\n this.#tableName,\n this.#table,\n this.#scope,\n this.#values,\n this.ctx,\n columns,\n newRowFields,\n ) as unknown as InsertQuery<QC, AvailableScope, never>;\n },\n );\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>> {\n const paramValues = buildParamValues(\n this.#values,\n this.#table,\n this.#tableName,\n 'create',\n this.ctx,\n );\n\n let ast = InsertAst.into(TableSource.named(this.#tableName)).withValues(paramValues);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes']>>(ast, this.#rowFields, this.ctx);\n }\n}\n\nexport class UpdateQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements UpdateQuery<QC, AvailableScope, RowType>\n{\n readonly #tableName: string;\n readonly #table: StorageTable;\n readonly #scope: Scope;\n readonly #setValues: Record<string, unknown>;\n readonly #whereCallbacks: readonly WhereCallback[];\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n\n constructor(\n tableName: string,\n table: StorageTable,\n scope: Scope,\n setValues: Record<string, unknown>,\n ctx: BuilderContext,\n whereCallbacks: readonly WhereCallback[] = [],\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n ) {\n super(ctx);\n this.#tableName = tableName;\n this.#table = table;\n this.#scope = scope;\n this.#setValues = setValues;\n this.#whereCallbacks = whereCallbacks;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): UpdateQuery<QC, AvailableScope, RowType> {\n return new UpdateQueryImpl(\n this.#tableName,\n this.#table,\n this.#scope,\n this.#setValues,\n this.ctx,\n [...this.#whereCallbacks, expr as unknown as WhereCallback],\n this.#returningColumns,\n this.#rowFields,\n );\n }\n\n returning = this._gate<ReturningCapability, string[], UpdateQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new UpdateQueryImpl(\n this.#tableName,\n this.#table,\n this.#scope,\n this.#setValues,\n this.ctx,\n this.#whereCallbacks,\n columns,\n newRowFields,\n ) as unknown as UpdateQuery<QC, AvailableScope, never>;\n },\n );\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>> {\n const setParams = buildParamValues(\n this.#setValues,\n this.#table,\n this.#tableName,\n 'update',\n this.ctx,\n );\n\n const whereExpr = combineWhereExprs(\n this.#whereCallbacks.map((cb) =>\n evaluateWhere(cb, this.#scope, this.ctx.queryOperationTypes),\n ),\n );\n\n let ast = UpdateAst.table(TableSource.named(this.#tableName))\n .withSet(setParams)\n .withWhere(whereExpr);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes']>>(ast, this.#rowFields, this.ctx);\n }\n}\n\nexport class DeleteQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements DeleteQuery<QC, AvailableScope, RowType>\n{\n readonly #tableName: string;\n readonly #scope: Scope;\n readonly #whereCallbacks: readonly WhereCallback[];\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n\n constructor(\n tableName: string,\n scope: Scope,\n ctx: BuilderContext,\n whereCallbacks: readonly WhereCallback[] = [],\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n ) {\n super(ctx);\n this.#tableName = tableName;\n this.#scope = scope;\n this.#whereCallbacks = whereCallbacks;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): DeleteQuery<QC, AvailableScope, RowType> {\n return new DeleteQueryImpl(\n this.#tableName,\n this.#scope,\n this.ctx,\n [...this.#whereCallbacks, expr as unknown as WhereCallback],\n this.#returningColumns,\n this.#rowFields,\n );\n }\n\n returning = this._gate<ReturningCapability, string[], DeleteQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new DeleteQueryImpl(\n this.#tableName,\n this.#scope,\n this.ctx,\n this.#whereCallbacks,\n columns,\n newRowFields,\n ) as unknown as DeleteQuery<QC, AvailableScope, never>;\n },\n );\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>> {\n const whereExpr = combineWhereExprs(\n this.#whereCallbacks.map((cb) =>\n evaluateWhere(cb, this.#scope, this.ctx.queryOperationTypes),\n ),\n );\n\n let ast = DeleteAst.from(TableSource.named(this.#tableName)).withWhere(whereExpr);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes']>>(ast, this.#rowFields, this.ctx);\n }\n}\n","import type { StorageTable } from '@prisma-next/sql-contract/types';\nimport { type AnyFromSource, TableSource } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AggregateFunctions,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n WithField,\n WithFields,\n} from '../expression';\nimport type {\n EmptyRow,\n Expand,\n JoinOuterScope,\n JoinSource,\n MergeScopes,\n NullableScope,\n QueryContext,\n RebindScope,\n Scope,\n ScopeField,\n ScopeTable,\n StorageTableToScopeTable,\n Subquery,\n} from '../scope';\nimport type { TableProxyContract } from '../types/db';\nimport type { JoinedTables } from '../types/joined-tables';\nimport type { DeleteQuery, InsertQuery, UpdateQuery } from '../types/mutation-query';\nimport type { SelectQuery } from '../types/select-query';\nimport type { LateralBuilder } from '../types/shared';\nimport type { TableProxy } from '../types/table-proxy';\nimport { BuilderBase, type BuilderContext, emptyState, tableToScope } from './builder-base';\nimport { JoinedTablesImpl } from './joined-tables-impl';\nimport { DeleteQueryImpl, InsertQueryImpl, UpdateQueryImpl } from './mutation-impl';\nimport { SelectQueryImpl } from './query-impl';\n\nexport class TableProxyImpl<\n C extends TableProxyContract,\n Name extends string & keyof C['storage']['tables'],\n Alias extends string,\n AvailableScope extends Scope,\n QC extends QueryContext,\n >\n extends BuilderBase<C['capabilities']>\n implements TableProxy<C, Name, Alias, AvailableScope, QC>\n{\n declare readonly [JoinOuterScope]: JoinSource<\n StorageTableToScopeTable<C['storage']['tables'][Name]>,\n Alias\n >[typeof JoinOuterScope];\n\n readonly #tableName: string;\n readonly #table: StorageTable;\n readonly #fromSource: TableSource;\n readonly #scope: Scope;\n\n constructor(tableName: string, table: StorageTable, alias: string, ctx: BuilderContext) {\n super(ctx);\n this.#tableName = tableName;\n this.#table = table;\n this.#scope = tableToScope(alias, table);\n this.#fromSource = TableSource.named(tableName, alias !== tableName ? alias : undefined);\n }\n\n lateralJoin = this._gate(\n { sql: { lateral: true } },\n 'lateralJoin',\n <LAlias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: LAlias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<AvailableScope, { topLevel: LateralRow; namespaces: Record<LAlias, LateralRow> }>\n > => {\n return this.#toJoined().lateralJoin(alias, builder);\n },\n ) as TableProxy<C, Name, Alias, AvailableScope, QC>['lateralJoin'];\n\n outerLateralJoin = this._gate(\n { sql: { lateral: true } },\n 'outerLateralJoin',\n <LAlias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: LAlias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<\n AvailableScope,\n NullableScope<{ topLevel: LateralRow; namespaces: Record<LAlias, LateralRow> }>\n >\n > => {\n return this.#toJoined().outerLateralJoin(alias, builder);\n },\n ) as TableProxy<C, Name, Alias, AvailableScope, QC>['outerLateralJoin'];\n\n getJoinOuterScope(): Scope {\n return this.#scope;\n }\n\n buildAst(): AnyFromSource {\n return this.#fromSource;\n }\n\n as<NewAlias extends string>(\n newAlias: NewAlias,\n ): TableProxy<C, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>> {\n return new TableProxyImpl(this.#tableName, this.#table, newAlias, this.ctx);\n }\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>;\n select<LAlias extends string, Field extends ScopeField>(\n alias: LAlias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<EmptyRow, Field, LAlias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n return new SelectQueryImpl(emptyState(this.#fromSource, this.#scope), this.ctx).select(\n ...(args as string[]),\n );\n }\n\n innerJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>> {\n return this.#toJoined().innerJoin(other, on);\n }\n\n outerLeftJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, NullableScope<Other[typeof JoinOuterScope]>>> {\n return this.#toJoined().outerLeftJoin(other, on);\n }\n\n outerRightJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<NullableScope<AvailableScope>, Other[typeof JoinOuterScope]>> {\n return this.#toJoined().outerRightJoin(other, on);\n }\n\n outerFullJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<\n QC,\n MergeScopes<NullableScope<AvailableScope>, NullableScope<Other[typeof JoinOuterScope]>>\n > {\n return this.#toJoined().outerFullJoin(other, on);\n }\n\n insert(values: Record<string, unknown>): InsertQuery<QC, AvailableScope, EmptyRow> {\n return new InsertQueryImpl(this.#tableName, this.#table, this.#scope, values, this.ctx);\n }\n\n update(set: Record<string, unknown>): UpdateQuery<QC, AvailableScope, EmptyRow> {\n return new UpdateQueryImpl(this.#tableName, this.#table, this.#scope, set, this.ctx);\n }\n\n delete(): DeleteQuery<QC, AvailableScope, EmptyRow> {\n return new DeleteQueryImpl(this.#tableName, this.#scope, this.ctx);\n }\n\n #toJoined(): JoinedTables<QC, AvailableScope> {\n return new JoinedTablesImpl(emptyState(this.#fromSource, this.#scope), this.ctx);\n }\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { Db } from '../types/db';\nimport type { BuilderContext } from './builder-base';\nimport { TableProxyImpl } from './table-proxy-impl';\n\nexport interface SqlOptions<C extends SqlContract<SqlStorage>> {\n readonly context: ExecutionContext<C>;\n}\n\nexport function sql<C extends SqlContract<SqlStorage>>(options: SqlOptions<C>): Db<C> {\n const { context } = options;\n const ctx: BuilderContext = {\n capabilities: context.contract.capabilities,\n queryOperationTypes: context.queryOperations.entries(),\n target: context.contract.target ?? 'unknown',\n storageHash: context.contract.storageHash ?? 'unknown',\n applyMutationDefaults: (options) => context.applyMutationDefaults(options),\n };\n\n return new Proxy({} as Db<C>, {\n get(_target, prop: string) {\n const tables = context.contract.storage.tables;\n const table = Object.hasOwn(tables, prop) ? tables[prop] : undefined;\n if (table) {\n return new TableProxyImpl(prop, table, prop, ctx);\n }\n return undefined;\n },\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["BOOL_FIELD: BooleanCodecType","projectionTypes: Record<string, string>","codecs: Record<string, string>","uniqueRefs: import('@prisma-next/sql-relational-core/ast').ParamRef[]","meta: PlanMeta","fields: ScopeTable","topLevel: ScopeTable","result: ScopeTable","namespaces: Record<string, ScopeTable>","projections: ProjectionItem[]","newRowFields: Record<string, ScopeField>","combined","#state","#buildLateral","#addLateralJoin","#addJoin","subqueryRowFields: ScopeTable","params: Record<string, ParamRef>","#tableName","#table","#scope","#values","#returningColumns","#rowFields","newRowFields: Record<string, ScopeField>","#setValues","#whereCallbacks","#tableName","#table","#fromSource","#scope","#toJoined","ctx: BuilderContext","options"],"sources":["../../src/runtime/expression-impl.ts","../../src/runtime/field-proxy.ts","../../src/runtime/functions.ts","../../src/runtime/builder-base.ts","../../src/runtime/query-impl.ts","../../src/runtime/joined-tables-impl.ts","../../src/runtime/mutation-impl.ts","../../src/runtime/table-proxy-impl.ts","../../src/runtime/sql.ts"],"sourcesContent":["import type { AnyExpression as AstExpression } from '@prisma-next/sql-relational-core/ast';\nimport type { Expression } from '../expression';\n// biome-ignore lint/correctness/noUnusedImports: used in `declare` property\nimport type { ExpressionType, ScopeField } from '../scope';\n\n/**\n * Runtime wrapper around a relational-core AST expression node.\n * Carries ScopeField metadata (codecId, nullable) for plan generation.\n */\nexport class ExpressionImpl<T extends ScopeField = ScopeField> implements Expression<T> {\n declare readonly [ExpressionType]: T;\n private readonly ast: AstExpression;\n readonly field: T;\n\n constructor(ast: AstExpression, field: T) {\n this.ast = ast;\n this.field = field;\n }\n\n buildAst(): AstExpression {\n return this.ast;\n }\n}\n","import { ColumnRef, IdentifierRef } from '@prisma-next/sql-relational-core/ast';\nimport type { FieldProxy } from '../expression';\nimport type { Scope, ScopeTable } from '../scope';\nimport { ExpressionImpl } from './expression-impl';\n\nexport function createFieldProxy<S extends Scope>(scope: S): FieldProxy<S> {\n return new Proxy({} as FieldProxy<S>, {\n get(_target, prop: string) {\n if (Object.hasOwn(scope.topLevel, prop)) {\n const topField = scope.topLevel[prop];\n if (topField) return new ExpressionImpl(IdentifierRef.of(prop), topField);\n }\n\n if (Object.hasOwn(scope.namespaces, prop)) {\n const nsFields = scope.namespaces[prop];\n if (nsFields) return createNamespaceProxy(prop, nsFields);\n }\n\n return undefined;\n },\n });\n}\n\nfunction createNamespaceProxy(\n namespaceName: string,\n fields: ScopeTable,\n): Record<string, ExpressionImpl> {\n return new Proxy({} as Record<string, ExpressionImpl>, {\n get(_target, prop: string) {\n if (Object.hasOwn(fields, prop)) {\n const field = fields[prop];\n if (field) return new ExpressionImpl(ColumnRef.of(namespaceName, prop), field);\n }\n return undefined;\n },\n });\n}\n","import type { SqlOperationEntry } from '@prisma-next/sql-operations';\nimport {\n AggregateExpr,\n AndExpr,\n type AnyExpression as AstExpression,\n BinaryExpr,\n type BinaryOp,\n ExistsExpr,\n ListExpression,\n LiteralExpr,\n NullCheckExpr,\n OperationExpr,\n OrExpr,\n ParamRef,\n SubqueryExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AggregateFunctions,\n AggregateOnlyFunctions,\n BooleanCodecType,\n BuiltinFunctions,\n Expression,\n ExpressionOrValue,\n Functions,\n} from '../expression';\nimport type { QueryContext, ScopeField, Subquery } from '../scope';\nimport { ExpressionImpl } from './expression-impl';\n\ntype CodecTypes = Record<string, { readonly input: unknown }>;\ntype ExprOrVal<T extends ScopeField = ScopeField> = ExpressionOrValue<T, CodecTypes>;\n\nconst BOOL_FIELD: BooleanCodecType = { codecId: 'pg/bool@1', nullable: false };\n\nfunction resolve(value: ExprOrVal): AstExpression {\n if (value instanceof ExpressionImpl) return value.buildAst();\n return ParamRef.of(value);\n}\n\nfunction resolveToAst(value: ExprOrVal): AstExpression {\n if (value instanceof ExpressionImpl) return value.buildAst();\n return new LiteralExpr(value);\n}\n\nfunction boolExpr(astNode: AstExpression): ExpressionImpl<BooleanCodecType> {\n return new ExpressionImpl(astNode, BOOL_FIELD);\n}\n\nfunction eq(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {\n if (b === null) return boolExpr(NullCheckExpr.isNull(resolve(a)));\n if (a === null) return boolExpr(NullCheckExpr.isNull(resolve(b)));\n return boolExpr(new BinaryExpr('eq', resolve(a), resolve(b)));\n}\n\nfunction ne(a: ExprOrVal, b: ExprOrVal): ExpressionImpl<BooleanCodecType> {\n if (b === null) return boolExpr(NullCheckExpr.isNotNull(resolve(a)));\n if (a === null) return boolExpr(NullCheckExpr.isNotNull(resolve(b)));\n return boolExpr(new BinaryExpr('neq', resolve(a), resolve(b)));\n}\n\nfunction comparison(a: ExprOrVal, b: ExprOrVal, op: BinaryOp): ExpressionImpl<BooleanCodecType> {\n return boolExpr(new BinaryExpr(op, resolve(a), resolve(b)));\n}\n\nfunction inOrNotIn(\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n op: 'in' | 'notIn',\n): ExpressionImpl<BooleanCodecType> {\n const left = expr.buildAst();\n const binaryFn = op === 'in' ? BinaryExpr.in : BinaryExpr.notIn;\n\n if (Array.isArray(valuesOrSubquery)) {\n const refs = valuesOrSubquery.map((v) => resolve(v));\n return boolExpr(binaryFn(left, ListExpression.of(refs)));\n }\n return boolExpr(binaryFn(left, SubqueryExpr.of(valuesOrSubquery.buildAst())));\n}\n\nfunction numericAgg(\n fn: 'sum' | 'avg' | 'min' | 'max',\n expr: Expression<ScopeField>,\n): ExpressionImpl<{ codecId: string; nullable: true }> {\n return new ExpressionImpl(AggregateExpr[fn](expr.buildAst()), {\n codecId: (expr as ExpressionImpl).field.codecId,\n nullable: true as const,\n });\n}\n\nfunction createBuiltinFunctions() {\n return {\n eq: (a: ExprOrVal, b: ExprOrVal) => eq(a, b),\n ne: (a: ExprOrVal, b: ExprOrVal) => ne(a, b),\n gt: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'gt'),\n gte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'gte'),\n lt: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lt'),\n lte: (a: ExprOrVal, b: ExprOrVal) => comparison(a, b, 'lte'),\n and: (...exprs: ExprOrVal<BooleanCodecType>[]) => boolExpr(AndExpr.of(exprs.map(resolveToAst))),\n or: (...exprs: ExprOrVal<BooleanCodecType>[]) => boolExpr(OrExpr.of(exprs.map(resolveToAst))),\n exists: (subquery: Subquery<Record<string, ScopeField>>) =>\n boolExpr(ExistsExpr.exists(subquery.buildAst())),\n notExists: (subquery: Subquery<Record<string, ScopeField>>) =>\n boolExpr(ExistsExpr.notExists(subquery.buildAst())),\n in: (\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n ) => inOrNotIn(expr, valuesOrSubquery, 'in'),\n notIn: (\n expr: Expression<ScopeField>,\n valuesOrSubquery: Subquery<Record<string, ScopeField>> | ExprOrVal[],\n ) => inOrNotIn(expr, valuesOrSubquery, 'notIn'),\n } satisfies BuiltinFunctions<CodecTypes>;\n}\n\nfunction createAggregateOnlyFunctions() {\n return {\n count: (expr?: Expression<ScopeField>) => {\n const astExpr = expr ? expr.buildAst() : undefined;\n return new ExpressionImpl(AggregateExpr.count(astExpr), {\n codecId: 'pg/int8@1',\n nullable: false,\n });\n },\n sum: (expr: Expression<ScopeField>) => numericAgg('sum', expr),\n avg: (expr: Expression<ScopeField>) => numericAgg('avg', expr),\n min: (expr: Expression<ScopeField>) => numericAgg('min', expr),\n max: (expr: Expression<ScopeField>) => numericAgg('max', expr),\n } satisfies AggregateOnlyFunctions;\n}\n\nfunction createExtensionFunction(\n name: string,\n entry: SqlOperationEntry,\n): (...args: ExprOrVal[]) => ExpressionImpl {\n return (...args: ExprOrVal[]) => {\n const resolvedArgs = args.map((arg, i) => {\n if (arg instanceof ExpressionImpl) return arg.buildAst();\n const codecId = entry.args[i]?.codecId;\n return ParamRef.of(arg, codecId ? { codecId } : undefined);\n });\n const self = resolvedArgs[0] as AstExpression;\n const restArgs = resolvedArgs.slice(1);\n\n return new ExpressionImpl(\n new OperationExpr({\n method: name,\n self,\n args: restArgs.length > 0 ? restArgs : undefined,\n returns: entry.returns,\n lowering: entry.lowering,\n }),\n entry.returns,\n );\n };\n}\n\nexport function createFunctions<QC extends QueryContext>(\n queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>,\n): Functions<QC> {\n const builtins = createBuiltinFunctions();\n\n return new Proxy({} as Functions<QC>, {\n get(_target, prop: string) {\n const builtin = (builtins as Record<string, unknown>)[prop];\n if (builtin) return builtin;\n\n const extOp = queryOperationTypes[prop];\n if (extOp) {\n return createExtensionFunction(prop, extOp);\n }\n return undefined;\n },\n });\n}\n\nexport function createAggregateFunctions<QC extends QueryContext>(\n queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>,\n): AggregateFunctions<QC> {\n const baseFns = createFunctions<QC>(queryOperationTypes);\n const aggregates = createAggregateOnlyFunctions();\n\n return new Proxy({} as AggregateFunctions<QC>, {\n get(_target, prop: string) {\n const agg = (aggregates as Record<string, unknown>)[prop];\n if (agg) return agg;\n\n return (baseFns as Record<string, unknown>)[prop];\n },\n });\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { StorageTable } from '@prisma-next/sql-contract/types';\nimport type { SqlOperationEntry } from '@prisma-next/sql-operations';\nimport {\n AndExpr,\n type AnyExpression as AstExpression,\n IdentifierRef,\n OrderByItem,\n ProjectionItem,\n SelectAst,\n type TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n AppliedMutationDefault,\n MutationDefaultsOptions,\n} from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AggregateFunctions,\n Expression,\n FieldProxy,\n OrderByOptions,\n OrderByScope,\n} from '../expression';\nimport type {\n GatedMethod,\n MergeScopes,\n NullableScope,\n QueryContext,\n Scope,\n ScopeField,\n ScopeTable,\n} from '../scope';\nimport type { ExpressionImpl } from './expression-impl';\nimport { createFieldProxy } from './field-proxy';\nimport { createAggregateFunctions, createFunctions } from './functions';\n\nexport type ExprCallback = (fields: FieldProxy<Scope>, fns: unknown) => Expression<ScopeField>;\n\nexport class BuilderBase<Capabilities = unknown> {\n protected readonly ctx: BuilderContext;\n\n constructor(ctx: BuilderContext) {\n this.ctx = ctx;\n }\n\n protected _gate<Req extends Record<string, Record<string, boolean>>, Args extends unknown[], R>(\n required: Req,\n methodName: string,\n method: (...args: Args) => R,\n ): GatedMethod<Capabilities, Req, (...args: Args) => R> {\n return ((...args: Args): R => {\n assertCapability(this.ctx, required, methodName);\n return method(...args);\n }) as GatedMethod<Capabilities, Req, (...args: Args) => R>;\n }\n}\n\nexport interface BuilderState {\n readonly from: TableSource;\n readonly joins: readonly import('@prisma-next/sql-relational-core/ast').JoinAst[];\n readonly projections: readonly ProjectionItem[];\n readonly where: readonly AstExpression[];\n readonly orderBy: readonly OrderByItem[];\n readonly groupBy: readonly AstExpression[];\n readonly having: AstExpression | undefined;\n readonly limit: number | undefined;\n readonly offset: number | undefined;\n readonly distinct: true | undefined;\n readonly distinctOn: readonly AstExpression[] | undefined;\n readonly scope: Scope;\n readonly rowFields: Record<string, ScopeField>;\n}\n\nexport interface BuilderContext {\n readonly capabilities: Record<string, Record<string, boolean>>;\n readonly queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>;\n readonly target: string;\n readonly storageHash: string;\n readonly applyMutationDefaults: (\n options: MutationDefaultsOptions,\n ) => ReadonlyArray<AppliedMutationDefault>;\n}\n\nexport function emptyState(from: TableSource, scope: Scope): BuilderState {\n return {\n from,\n joins: [],\n projections: [],\n where: [],\n orderBy: [],\n groupBy: [],\n having: undefined,\n limit: undefined,\n offset: undefined,\n distinct: undefined,\n distinctOn: undefined,\n scope,\n rowFields: {},\n };\n}\n\nexport function cloneState(state: BuilderState, overrides: Partial<BuilderState>): BuilderState {\n return { ...state, ...overrides };\n}\n\nexport function combineWhereExprs(exprs: readonly AstExpression[]): AstExpression | undefined {\n if (exprs.length === 0) return undefined;\n if (exprs.length === 1) return exprs[0];\n return AndExpr.of(exprs);\n}\n\nexport function buildSelectAst(state: BuilderState): SelectAst {\n const where = combineWhereExprs(state.where);\n return new SelectAst({\n from: state.from,\n joins: state.joins.length > 0 ? state.joins : undefined,\n projection: state.projections,\n where,\n orderBy: state.orderBy.length > 0 ? state.orderBy : undefined,\n distinct: state.distinct,\n distinctOn: state.distinctOn && state.distinctOn.length > 0 ? state.distinctOn : undefined,\n groupBy: state.groupBy.length > 0 ? state.groupBy : undefined,\n having: state.having,\n limit: state.limit,\n offset: state.offset,\n selectAllIntent: undefined,\n });\n}\n\nexport function buildQueryPlan<Row = unknown>(\n ast: import('@prisma-next/sql-relational-core/ast').AnyQueryAst,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): SqlQueryPlan<Row> {\n const projectionTypes: Record<string, string> = {};\n const codecs: Record<string, string> = {};\n for (const [alias, field] of Object.entries(rowFields)) {\n projectionTypes[alias] = field.codecId;\n codecs[alias] = field.codecId;\n }\n\n const paramRefs = ast.collectParamRefs();\n const seen = new Set<import('@prisma-next/sql-relational-core/ast').ParamRef>();\n const uniqueRefs: import('@prisma-next/sql-relational-core/ast').ParamRef[] = [];\n for (const ref of paramRefs) {\n if (!seen.has(ref)) {\n seen.add(ref);\n uniqueRefs.push(ref);\n }\n }\n const paramValues = uniqueRefs.map((r) => r.value);\n const paramDescriptors = uniqueRefs.map((ref, i) => ({\n index: i + 1,\n source: 'dsl' as const,\n ...(ref.codecId ? { codecId: ref.codecId } : {}),\n }));\n\n for (const [i, ref] of uniqueRefs.entries()) {\n if (ref.codecId) codecs[`$${i + 1}`] = ref.codecId;\n }\n\n const hasProjectionTypes = Object.keys(projectionTypes).length > 0;\n const hasCodecs = Object.keys(codecs).length > 0;\n\n const meta: PlanMeta = Object.freeze({\n target: ctx.target,\n storageHash: ctx.storageHash,\n lane: 'dsl',\n paramDescriptors,\n ...(hasProjectionTypes ? { projectionTypes } : {}),\n ...(hasCodecs ? { annotations: Object.freeze({ codecs: Object.freeze(codecs) }) } : {}),\n });\n\n return Object.freeze({ ast, params: paramValues, meta });\n}\n\nexport function buildPlan<Row = unknown>(\n state: BuilderState,\n ctx: BuilderContext,\n): SqlQueryPlan<Row> {\n return buildQueryPlan<Row>(buildSelectAst(state), state.rowFields, ctx);\n}\n\nexport function tableToScope(name: string, table: StorageTable): Scope {\n const fields: ScopeTable = {};\n for (const [colName, col] of Object.entries(table.columns)) {\n fields[colName] = { codecId: col.codecId, nullable: col.nullable };\n }\n return { topLevel: { ...fields }, namespaces: { [name]: fields } };\n}\n\nexport function mergeScopes<A extends Scope, B extends Scope>(a: A, b: B): MergeScopes<A, B> {\n const topLevel: ScopeTable = {};\n for (const [k, v] of Object.entries(a.topLevel)) {\n if (!(k in b.topLevel)) topLevel[k] = v;\n }\n for (const [k, v] of Object.entries(b.topLevel)) {\n if (!(k in a.topLevel)) topLevel[k] = v;\n }\n return {\n topLevel,\n namespaces: { ...a.namespaces, ...b.namespaces },\n } as MergeScopes<A, B>;\n}\n\nexport function nullableScope<S extends Scope>(scope: S): NullableScope<S> {\n const mkNullable = (tbl: ScopeTable): ScopeTable => {\n const result: ScopeTable = {};\n for (const [k, v] of Object.entries(tbl)) {\n result[k] = { codecId: v.codecId, nullable: true };\n }\n return result;\n };\n const namespaces: Record<string, ScopeTable> = {};\n for (const [k, v] of Object.entries(scope.namespaces)) {\n namespaces[k] = mkNullable(v);\n }\n return { topLevel: mkNullable(scope.topLevel), namespaces } as NullableScope<S>;\n}\n\nexport function orderByScopeOf<S extends Scope, R extends Record<string, ScopeField>>(\n scope: S,\n rowFields: R,\n): OrderByScope<S, R> {\n return {\n topLevel: { ...scope.topLevel, ...rowFields },\n namespaces: scope.namespaces,\n };\n}\n\nexport function assertCapability(\n ctx: BuilderContext,\n required: Record<string, Record<string, boolean>>,\n methodName: string,\n): void {\n for (const [ns, keys] of Object.entries(required)) {\n for (const key of Object.keys(keys)) {\n if (!ctx.capabilities[ns]?.[key]) {\n throw new Error(`${methodName}() requires capability ${ns}.${key}`);\n }\n }\n }\n}\n\nexport function resolveSelectArgs(\n args: unknown[],\n scope: Scope,\n ctx: BuilderContext,\n): { projections: ProjectionItem[]; newRowFields: Record<string, ScopeField> } {\n const projections: ProjectionItem[] = [];\n const newRowFields: Record<string, ScopeField> = {};\n\n if (args.length === 0) return { projections, newRowFields };\n\n if (typeof args[0] === 'string' && (args.length === 1 || typeof args[1] !== 'function')) {\n for (const colName of args as string[]) {\n const field = scope.topLevel[colName];\n if (!field) throw new Error(`Column \"${colName}\" not found in scope`);\n projections.push(ProjectionItem.of(colName, IdentifierRef.of(colName)));\n newRowFields[colName] = field;\n }\n return { projections, newRowFields };\n }\n\n if (typeof args[0] === 'string' && typeof args[1] === 'function') {\n const alias = args[0] as string;\n const exprFn = args[1] as (\n f: FieldProxy<Scope>,\n fns: AggregateFunctions<QueryContext>,\n ) => Expression<ScopeField>;\n const fns = createAggregateFunctions(ctx.queryOperationTypes);\n const result = exprFn(createFieldProxy(scope), fns);\n projections.push(ProjectionItem.of(alias, result.buildAst()));\n newRowFields[alias] = (result as ExpressionImpl).field;\n return { projections, newRowFields };\n }\n\n if (typeof args[0] === 'function') {\n const callbackFn = args[0] as (\n f: FieldProxy<Scope>,\n fns: AggregateFunctions<QueryContext>,\n ) => Record<string, Expression<ScopeField>>;\n const fns = createAggregateFunctions(ctx.queryOperationTypes);\n const record = callbackFn(createFieldProxy(scope), fns);\n for (const [key, expr] of Object.entries(record)) {\n projections.push(ProjectionItem.of(key, expr.buildAst()));\n newRowFields[key] = (expr as ExpressionImpl).field;\n }\n return { projections, newRowFields };\n }\n\n throw new Error('Invalid .select() arguments');\n}\n\nexport function resolveOrderBy(\n arg: unknown,\n options: OrderByOptions | undefined,\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n useAggregateFns: boolean,\n): OrderByItem {\n const dir = options?.direction ?? 'asc';\n\n if (typeof arg === 'string') {\n const combined = orderByScopeOf(scope, rowFields);\n if (!(arg in combined.topLevel))\n throw new Error(`Column \"${arg}\" not found in scope for orderBy`);\n const expr = IdentifierRef.of(arg);\n return dir === 'asc' ? OrderByItem.asc(expr) : OrderByItem.desc(expr);\n }\n\n if (typeof arg === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = useAggregateFns\n ? createAggregateFunctions(ctx.queryOperationTypes)\n : createFunctions(ctx.queryOperationTypes);\n const result = (arg as ExprCallback)(createFieldProxy(combined), fns);\n return dir === 'asc' ? OrderByItem.asc(result.buildAst()) : OrderByItem.desc(result.buildAst());\n }\n\n throw new Error('Invalid orderBy argument');\n}\n\nexport function resolveGroupBy(\n args: unknown[],\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): AstExpression[] {\n if (typeof args[0] === 'string') {\n const combined = orderByScopeOf(scope, rowFields);\n return (args as string[]).map((colName) => {\n if (!(colName in combined.topLevel))\n throw new Error(`Column \"${colName}\" not found in scope for groupBy`);\n return IdentifierRef.of(colName);\n });\n }\n\n if (typeof args[0] === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = createFunctions(ctx.queryOperationTypes);\n const result = (args[0] as ExprCallback)(createFieldProxy(combined), fns);\n return [result.buildAst()];\n }\n\n throw new Error('Invalid groupBy arguments');\n}\n\nexport function resolveDistinctOn(\n args: unknown[],\n scope: Scope,\n rowFields: Record<string, ScopeField>,\n ctx: BuilderContext,\n): AstExpression[] {\n if (args.length === 1 && typeof args[0] === 'function') {\n const combined = orderByScopeOf(scope, rowFields);\n const fns = createFunctions(ctx.queryOperationTypes);\n const result = (args[0] as ExprCallback)(createFieldProxy(combined), fns);\n return [result.buildAst()];\n }\n const combined = orderByScopeOf(scope, rowFields);\n return (args as string[]).map((colName) => {\n if (!(colName in combined.topLevel))\n throw new Error(`Column \"${colName}\" not found in scope for distinctOn`);\n return IdentifierRef.of(colName);\n });\n}\n","import { DerivedTableSource, type SelectAst } from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n AggregateFunctions,\n BooleanCodecType,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n Functions,\n OrderByOptions,\n OrderByScope,\n WithField,\n WithFields,\n} from '../expression';\nimport type { ResolveRow } from '../resolve';\nimport type {\n Expand,\n JoinOuterScope,\n JoinSource,\n QueryContext,\n Scope,\n ScopeField,\n // biome-ignore lint/correctness/noUnusedImports: used in `declare` property\n SubqueryMarker,\n} from '../scope';\nimport type { GroupedQuery } from '../types/grouped-query';\nimport type { SelectQuery } from '../types/select-query';\nimport {\n BuilderBase,\n type BuilderContext,\n type BuilderState,\n buildPlan,\n buildSelectAst,\n cloneState,\n orderByScopeOf,\n resolveDistinctOn,\n resolveGroupBy,\n resolveOrderBy,\n resolveSelectArgs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createAggregateFunctions, createFunctions } from './functions';\n\nabstract class QueryBase<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n> extends BuilderBase<QC['capabilities']> {\n protected readonly state: BuilderState;\n\n constructor(state: BuilderState, ctx: BuilderContext) {\n super(ctx);\n this.state = state;\n }\n\n protected abstract clone(state: BuilderState): this;\n\n distinctOn = this._gate(\n { postgres: { distinctOn: true } },\n 'distinctOn',\n (...args: unknown[]) => {\n const exprs = resolveDistinctOn(args, this.state.scope, this.state.rowFields, this.ctx);\n return this.clone(\n cloneState(this.state, {\n distinctOn: [...(this.state.distinctOn ?? []), ...exprs],\n }),\n );\n },\n );\n\n limit(count: number): this {\n return this.clone(cloneState(this.state, { limit: count }));\n }\n\n offset(count: number): this {\n return this.clone(cloneState(this.state, { offset: count }));\n }\n\n distinct(): this {\n return this.clone(cloneState(this.state, { distinct: true }));\n }\n\n groupBy(\n ...fields: ((keyof RowType | keyof AvailableScope['topLevel']) & string)[]\n ): GroupedQuery<QC, AvailableScope, RowType>;\n groupBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: Functions<QC>,\n ) => Expression<ScopeField>,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n groupBy(...args: unknown[]): unknown {\n const exprs = resolveGroupBy(args, this.state.scope, this.state.rowFields, this.ctx);\n return new GroupedQueryImpl<QC, AvailableScope, RowType>(\n cloneState(this.state, { groupBy: [...this.state.groupBy, ...exprs] }),\n this.ctx,\n );\n }\n\n as<Alias extends string>(alias: Alias): JoinSource<RowType, Alias> {\n const ast = buildSelectAst(this.state);\n const derivedSource = DerivedTableSource.as(alias, ast);\n const scope = {\n topLevel: this.state.rowFields as RowType,\n namespaces: { [alias]: this.state.rowFields } as Record<Alias, RowType>,\n };\n return {\n getJoinOuterScope: () => scope,\n buildAst: () => derivedSource,\n\n // `as unknown` is necessary, because JoinOuterScope is a phantom type-only property that does not exist at runtime\n } satisfies Omit<JoinSource<RowType, Alias>, typeof JoinOuterScope> as unknown as JoinSource<\n RowType,\n Alias\n >;\n }\n\n getRowFields(): Record<string, ScopeField> {\n return this.state.rowFields;\n }\n\n buildAst(): SelectAst {\n return buildSelectAst(this.state);\n }\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n return buildPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n this.state,\n this.ctx,\n );\n }\n}\n\nexport class SelectQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends QueryBase<QC, AvailableScope, RowType>\n implements SelectQuery<QC, AvailableScope, RowType>\n{\n declare readonly [SubqueryMarker]: RowType;\n\n protected clone(state: BuilderState): this {\n return new SelectQueryImpl<QC, AvailableScope, RowType>(state, this.ctx) as this;\n }\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<RowType, AvailableScope['topLevel'], Columns>>;\n select<Alias extends string, Field extends ScopeField>(\n alias: Alias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<RowType, Field, Alias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<RowType & ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n const { projections, newRowFields } = resolveSelectArgs(args, this.state.scope, this.ctx);\n return new SelectQueryImpl(\n cloneState(this.state, {\n projections: [...this.state.projections, ...projections],\n rowFields: { ...this.state.rowFields, ...newRowFields },\n }),\n this.ctx,\n );\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): SelectQuery<QC, AvailableScope, RowType> {\n const fieldProxy = createFieldProxy(this.state.scope);\n const fns = createFunctions<QC>(this.ctx.queryOperationTypes);\n const result = (expr as ExpressionBuilder<Scope, QueryContext>)(fieldProxy, fns as never);\n return new SelectQueryImpl(\n cloneState(this.state, {\n where: [...this.state.where, result.buildAst()],\n }),\n this.ctx,\n );\n }\n\n orderBy(\n field: (keyof RowType | keyof AvailableScope['topLevel']) & string,\n options?: OrderByOptions,\n ): SelectQuery<QC, AvailableScope, RowType>;\n orderBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: Functions<QC>,\n ) => Expression<ScopeField>,\n options?: OrderByOptions,\n ): SelectQuery<QC, AvailableScope, RowType>;\n orderBy(arg: unknown, options?: OrderByOptions): unknown {\n const item = resolveOrderBy(\n arg,\n options,\n this.state.scope,\n this.state.rowFields,\n this.ctx,\n false,\n );\n return this.clone(cloneState(this.state, { orderBy: [...this.state.orderBy, item] }));\n }\n}\n\nexport class GroupedQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends QueryBase<QC, AvailableScope, RowType>\n implements GroupedQuery<QC, AvailableScope, RowType>\n{\n declare readonly [SubqueryMarker]: RowType;\n\n protected clone(state: BuilderState): this {\n return new GroupedQueryImpl<QC, AvailableScope, RowType>(state, this.ctx) as this;\n }\n\n having(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: AggregateFunctions<QC>,\n ) => Expression<BooleanCodecType>,\n ): GroupedQuery<QC, AvailableScope, RowType> {\n const combined = orderByScopeOf(\n this.state.scope as AvailableScope,\n this.state.rowFields as RowType,\n );\n const fns = createAggregateFunctions(this.ctx.queryOperationTypes);\n const result = expr(createFieldProxy(combined), fns);\n return new GroupedQueryImpl(cloneState(this.state, { having: result.buildAst() }), this.ctx);\n }\n\n orderBy(\n field: (keyof RowType | keyof AvailableScope['topLevel']) & string,\n options?: OrderByOptions,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n orderBy(\n expr: (\n fields: FieldProxy<OrderByScope<AvailableScope, RowType>>,\n fns: AggregateFunctions<QC>,\n ) => Expression<ScopeField>,\n options?: OrderByOptions,\n ): GroupedQuery<QC, AvailableScope, RowType>;\n orderBy(arg: unknown, options?: OrderByOptions): unknown {\n const item = resolveOrderBy(\n arg,\n options,\n this.state.scope,\n this.state.rowFields,\n this.ctx,\n true,\n );\n return this.clone(cloneState(this.state, { orderBy: [...this.state.orderBy, item] }));\n }\n}\n","import {\n AndExpr,\n DerivedTableSource,\n JoinAst,\n type TableSource,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AggregateFunctions,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n WithField,\n WithFields,\n} from '../expression';\nimport type {\n EmptyRow,\n Expand,\n JoinOuterScope,\n JoinSource,\n MergeScopes,\n NullableScope,\n QueryContext,\n Scope,\n ScopeField,\n ScopeTable,\n Subquery,\n} from '../scope';\nimport type { JoinedTables } from '../types/joined-tables';\nimport type { SelectQuery } from '../types/select-query';\nimport type { LateralBuilder } from '../types/shared';\nimport {\n BuilderBase,\n type BuilderContext,\n type BuilderState,\n cloneState,\n emptyState,\n mergeScopes,\n nullableScope,\n resolveSelectArgs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createFunctions } from './functions';\nimport { SelectQueryImpl } from './query-impl';\n\nexport class JoinedTablesImpl<QC extends QueryContext, AvailableScope extends Scope>\n extends BuilderBase<QC['capabilities']>\n implements JoinedTables<QC, AvailableScope>\n{\n readonly #state: BuilderState;\n\n constructor(state: BuilderState, ctx: BuilderContext) {\n super(ctx);\n this.#state = state;\n }\n\n lateralJoin = this._gate(\n { sql: { lateral: true } },\n 'lateralJoin',\n <Alias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: Alias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<AvailableScope, { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> }>\n > => {\n const { derivedSource, lateralScope } = this.#buildLateral(alias, builder);\n const resultScope = mergeScopes(\n this.#state.scope as AvailableScope,\n lateralScope as { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> },\n );\n return this.#addLateralJoin('inner', resultScope, derivedSource);\n },\n ) as JoinedTables<QC, AvailableScope>['lateralJoin'];\n\n outerLateralJoin = this._gate(\n { sql: { lateral: true } },\n 'outerLateralJoin',\n <Alias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: Alias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<\n AvailableScope,\n NullableScope<{ topLevel: LateralRow; namespaces: Record<Alias, LateralRow> }>\n >\n > => {\n const { derivedSource, lateralScope } = this.#buildLateral(alias, builder);\n const resultScope = mergeScopes(\n this.#state.scope as AvailableScope,\n nullableScope(\n lateralScope as { topLevel: LateralRow; namespaces: Record<Alias, LateralRow> },\n ),\n );\n return this.#addLateralJoin('left', resultScope, derivedSource);\n },\n ) as JoinedTables<QC, AvailableScope>['outerLateralJoin'];\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>;\n select<Alias extends string, Field extends ScopeField>(\n alias: Alias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<EmptyRow, Field, Alias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n const { projections, newRowFields } = resolveSelectArgs(args, this.#state.scope, this.ctx);\n return new SelectQueryImpl<QC, AvailableScope>(\n cloneState(this.#state, {\n projections: [...this.#state.projections, ...projections],\n rowFields: { ...this.#state.rowFields, ...newRowFields },\n }),\n this.ctx,\n );\n }\n\n innerJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>> {\n const targetScope = mergeScopes(\n this.#state.scope as AvailableScope,\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n );\n return this.#addJoin(other, 'inner', targetScope, on);\n }\n\n outerLeftJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, NullableScope<Other[typeof JoinOuterScope]>>> {\n const targetScope = mergeScopes(\n this.#state.scope as AvailableScope,\n nullableScope(other.getJoinOuterScope() as Other[typeof JoinOuterScope]),\n );\n return this.#addJoin(other, 'left', targetScope, on);\n }\n\n outerRightJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<NullableScope<AvailableScope>, Other[typeof JoinOuterScope]>> {\n const targetScope = mergeScopes(\n nullableScope(this.#state.scope as AvailableScope),\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n );\n return this.#addJoin(other, 'right', targetScope, on);\n }\n\n outerFullJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<\n QC,\n MergeScopes<NullableScope<AvailableScope>, NullableScope<Other[typeof JoinOuterScope]>>\n > {\n const targetScope = mergeScopes(\n nullableScope(this.#state.scope as AvailableScope),\n nullableScope(other.getJoinOuterScope() as Other[typeof JoinOuterScope]),\n );\n return this.#addJoin(other, 'full', targetScope, on);\n }\n\n #addJoin<Other extends JoinSource<ScopeTable, string | never>, ResultScope extends Scope>(\n other: Other,\n joinType: 'inner' | 'left' | 'right' | 'full',\n resultScope: ResultScope,\n onExpr: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, ResultScope> {\n const fieldProxy = createFieldProxy(\n mergeScopes(\n this.#state.scope as AvailableScope,\n other.getJoinOuterScope() as Other[typeof JoinOuterScope],\n ),\n ) as FieldProxy<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>>;\n const fns = createFunctions<QC>(this.ctx.queryOperationTypes);\n const onResult = onExpr(fieldProxy, fns);\n const joinAst = new JoinAst(joinType, other.buildAst(), onResult.buildAst());\n\n return new JoinedTablesImpl(\n cloneState(this.#state, {\n joins: [...this.#state.joins, joinAst],\n scope: resultScope,\n }),\n this.ctx,\n );\n }\n\n #buildLateral(\n alias: string,\n builderFn: (\n lateral: LateralBuilder<QC, AvailableScope>,\n ) => Subquery<Record<string, ScopeField>>,\n ) {\n const lateralBuilder: LateralBuilder<QC, AvailableScope> = {\n from: (other) => {\n const otherScope = other.getJoinOuterScope();\n const parentMerged = mergeScopes(this.#state.scope, otherScope);\n return new SelectQueryImpl(\n emptyState(other.buildAst() as TableSource, parentMerged),\n this.ctx,\n ) as unknown as SelectQuery<QC, AvailableScope, EmptyRow>;\n },\n };\n\n const subquery = builderFn(lateralBuilder);\n const subqueryAst = subquery.buildAst();\n const derivedSource = DerivedTableSource.as(alias, subqueryAst);\n const subqueryRowFields: ScopeTable = subquery.getRowFields();\n const lateralScope: Scope = {\n topLevel: subqueryRowFields,\n namespaces: { [alias]: subqueryRowFields },\n };\n\n return { derivedSource, lateralScope };\n }\n\n #addLateralJoin<ResultScope extends Scope>(\n joinType: 'inner' | 'left',\n resultScope: ResultScope,\n derivedSource: DerivedTableSource,\n ): JoinedTables<QC, ResultScope> {\n const onExpr = AndExpr.of([]);\n const joinAst = new JoinAst(joinType, derivedSource, onExpr, true);\n\n return new JoinedTablesImpl(\n cloneState(this.#state, {\n joins: [...this.#state.joins, joinAst],\n scope: resultScope,\n }),\n this.ctx,\n );\n }\n}\n","import type { StorageTable } from '@prisma-next/sql-contract/types';\nimport {\n type AnyExpression as AstExpression,\n ColumnRef,\n DeleteAst,\n InsertAst,\n ParamRef,\n TableSource,\n UpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { MutationDefaultsOp } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { ExpressionBuilder } from '../expression';\nimport type { ResolveRow } from '../resolve';\nimport type { QueryContext, Scope, ScopeField } from '../scope';\nimport type {\n DeleteQuery,\n InsertQuery,\n ReturningCapability,\n UpdateQuery,\n} from '../types/mutation-query';\nimport {\n BuilderBase,\n type BuilderContext,\n buildQueryPlan,\n combineWhereExprs,\n} from './builder-base';\nimport { createFieldProxy } from './field-proxy';\nimport { createFunctions } from './functions';\n\ntype WhereCallback = ExpressionBuilder<Scope, QueryContext>;\n\nfunction buildParamValues(\n values: Record<string, unknown>,\n table: StorageTable,\n tableName: string,\n op: MutationDefaultsOp,\n ctx: BuilderContext,\n): Record<string, ParamRef> {\n const params: Record<string, ParamRef> = {};\n for (const [col, value] of Object.entries(values)) {\n const column = table.columns[col];\n params[col] = ParamRef.of(value, column ? { codecId: column.codecId } : undefined);\n }\n for (const def of ctx.applyMutationDefaults({ op, table: tableName, values })) {\n const column = table.columns[def.column];\n params[def.column] = ParamRef.of(def.value, column ? { codecId: column.codecId } : undefined);\n }\n return params;\n}\n\nfunction buildReturningColumnRefs(tableName: string, columns: string[]): ColumnRef[] {\n return columns.map((col) => ColumnRef.of(tableName, col));\n}\n\nfunction evaluateWhere(\n whereCallback: WhereCallback,\n scope: Scope,\n queryOperationTypes: BuilderContext['queryOperationTypes'],\n): AstExpression {\n const fieldProxy = createFieldProxy(scope);\n const fns = createFunctions(queryOperationTypes);\n const result = whereCallback(fieldProxy, fns as never);\n return result.buildAst();\n}\n\nexport class InsertQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements InsertQuery<QC, AvailableScope, RowType>\n{\n readonly #tableName: string;\n readonly #table: StorageTable;\n readonly #scope: Scope;\n readonly #values: Record<string, unknown>;\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n\n constructor(\n tableName: string,\n table: StorageTable,\n scope: Scope,\n values: Record<string, unknown>,\n ctx: BuilderContext,\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n ) {\n super(ctx);\n this.#tableName = tableName;\n this.#table = table;\n this.#scope = scope;\n this.#values = values;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n }\n\n returning = this._gate<ReturningCapability, string[], InsertQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new InsertQueryImpl(\n this.#tableName,\n this.#table,\n this.#scope,\n this.#values,\n this.ctx,\n columns,\n newRowFields,\n ) as unknown as InsertQuery<QC, AvailableScope, never>;\n },\n );\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n const paramValues = buildParamValues(\n this.#values,\n this.#table,\n this.#tableName,\n 'create',\n this.ctx,\n );\n\n let ast = InsertAst.into(TableSource.named(this.#tableName)).withValues(paramValues);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n ast,\n this.#rowFields,\n this.ctx,\n );\n }\n}\n\nexport class UpdateQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements UpdateQuery<QC, AvailableScope, RowType>\n{\n readonly #tableName: string;\n readonly #table: StorageTable;\n readonly #scope: Scope;\n readonly #setValues: Record<string, unknown>;\n readonly #whereCallbacks: readonly WhereCallback[];\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n\n constructor(\n tableName: string,\n table: StorageTable,\n scope: Scope,\n setValues: Record<string, unknown>,\n ctx: BuilderContext,\n whereCallbacks: readonly WhereCallback[] = [],\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n ) {\n super(ctx);\n this.#tableName = tableName;\n this.#table = table;\n this.#scope = scope;\n this.#setValues = setValues;\n this.#whereCallbacks = whereCallbacks;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): UpdateQuery<QC, AvailableScope, RowType> {\n return new UpdateQueryImpl(\n this.#tableName,\n this.#table,\n this.#scope,\n this.#setValues,\n this.ctx,\n [...this.#whereCallbacks, expr as unknown as WhereCallback],\n this.#returningColumns,\n this.#rowFields,\n );\n }\n\n returning = this._gate<ReturningCapability, string[], UpdateQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new UpdateQueryImpl(\n this.#tableName,\n this.#table,\n this.#scope,\n this.#setValues,\n this.ctx,\n this.#whereCallbacks,\n columns,\n newRowFields,\n ) as unknown as UpdateQuery<QC, AvailableScope, never>;\n },\n );\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n const setParams = buildParamValues(\n this.#setValues,\n this.#table,\n this.#tableName,\n 'update',\n this.ctx,\n );\n\n const whereExpr = combineWhereExprs(\n this.#whereCallbacks.map((cb) =>\n evaluateWhere(cb, this.#scope, this.ctx.queryOperationTypes),\n ),\n );\n\n let ast = UpdateAst.table(TableSource.named(this.#tableName))\n .withSet(setParams)\n .withWhere(whereExpr);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n ast,\n this.#rowFields,\n this.ctx,\n );\n }\n}\n\nexport class DeleteQueryImpl<\n QC extends QueryContext = QueryContext,\n AvailableScope extends Scope = Scope,\n RowType extends Record<string, ScopeField> = Record<string, ScopeField>,\n >\n extends BuilderBase<QC['capabilities']>\n implements DeleteQuery<QC, AvailableScope, RowType>\n{\n readonly #tableName: string;\n readonly #scope: Scope;\n readonly #whereCallbacks: readonly WhereCallback[];\n readonly #returningColumns: string[];\n readonly #rowFields: Record<string, ScopeField>;\n\n constructor(\n tableName: string,\n scope: Scope,\n ctx: BuilderContext,\n whereCallbacks: readonly WhereCallback[] = [],\n returningColumns: string[] = [],\n rowFields: Record<string, ScopeField> = {},\n ) {\n super(ctx);\n this.#tableName = tableName;\n this.#scope = scope;\n this.#whereCallbacks = whereCallbacks;\n this.#returningColumns = returningColumns;\n this.#rowFields = rowFields;\n }\n\n where(expr: ExpressionBuilder<AvailableScope, QC>): DeleteQuery<QC, AvailableScope, RowType> {\n return new DeleteQueryImpl(\n this.#tableName,\n this.#scope,\n this.ctx,\n [...this.#whereCallbacks, expr as unknown as WhereCallback],\n this.#returningColumns,\n this.#rowFields,\n );\n }\n\n returning = this._gate<ReturningCapability, string[], DeleteQuery<QC, AvailableScope, never>>(\n { sql: { returning: true } },\n 'returning',\n (...columns: string[]) => {\n const newRowFields: Record<string, ScopeField> = {};\n for (const col of columns) {\n const field = this.#scope.topLevel[col];\n if (!field) throw new Error(`Column \"${col}\" not found in scope`);\n newRowFields[col] = field;\n }\n return new DeleteQueryImpl(\n this.#tableName,\n this.#scope,\n this.ctx,\n this.#whereCallbacks,\n columns,\n newRowFields,\n ) as unknown as DeleteQuery<QC, AvailableScope, never>;\n },\n );\n\n build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {\n const whereExpr = combineWhereExprs(\n this.#whereCallbacks.map((cb) =>\n evaluateWhere(cb, this.#scope, this.ctx.queryOperationTypes),\n ),\n );\n\n let ast = DeleteAst.from(TableSource.named(this.#tableName)).withWhere(whereExpr);\n\n if (this.#returningColumns.length > 0) {\n ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));\n }\n\n return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(\n ast,\n this.#rowFields,\n this.ctx,\n );\n }\n}\n","import type { StorageTable } from '@prisma-next/sql-contract/types';\nimport { type AnyFromSource, TableSource } from '@prisma-next/sql-relational-core/ast';\nimport type {\n AggregateFunctions,\n Expression,\n ExpressionBuilder,\n ExtractScopeFields,\n FieldProxy,\n WithField,\n WithFields,\n} from '../expression';\nimport type {\n EmptyRow,\n Expand,\n JoinOuterScope,\n JoinSource,\n MergeScopes,\n NullableScope,\n QueryContext,\n RebindScope,\n Scope,\n ScopeField,\n ScopeTable,\n StorageTableToScopeTable,\n Subquery,\n} from '../scope';\nimport type { TableProxyContract } from '../types/db';\nimport type { JoinedTables } from '../types/joined-tables';\nimport type { DeleteQuery, InsertQuery, UpdateQuery } from '../types/mutation-query';\nimport type { SelectQuery } from '../types/select-query';\nimport type { LateralBuilder } from '../types/shared';\nimport type { TableProxy } from '../types/table-proxy';\nimport { BuilderBase, type BuilderContext, emptyState, tableToScope } from './builder-base';\nimport { JoinedTablesImpl } from './joined-tables-impl';\nimport { DeleteQueryImpl, InsertQueryImpl, UpdateQueryImpl } from './mutation-impl';\nimport { SelectQueryImpl } from './query-impl';\n\nexport class TableProxyImpl<\n C extends TableProxyContract,\n Name extends string & keyof C['storage']['tables'],\n Alias extends string,\n AvailableScope extends Scope,\n QC extends QueryContext,\n >\n extends BuilderBase<C['capabilities']>\n implements TableProxy<C, Name, Alias, AvailableScope, QC>\n{\n declare readonly [JoinOuterScope]: JoinSource<\n StorageTableToScopeTable<C['storage']['tables'][Name]>,\n Alias\n >[typeof JoinOuterScope];\n\n readonly #tableName: string;\n readonly #table: StorageTable;\n readonly #fromSource: TableSource;\n readonly #scope: Scope;\n\n constructor(tableName: string, table: StorageTable, alias: string, ctx: BuilderContext) {\n super(ctx);\n this.#tableName = tableName;\n this.#table = table;\n this.#scope = tableToScope(alias, table);\n this.#fromSource = TableSource.named(tableName, alias !== tableName ? alias : undefined);\n }\n\n lateralJoin = this._gate(\n { sql: { lateral: true } },\n 'lateralJoin',\n <LAlias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: LAlias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<AvailableScope, { topLevel: LateralRow; namespaces: Record<LAlias, LateralRow> }>\n > => {\n return this.#toJoined().lateralJoin(alias, builder);\n },\n ) as TableProxy<C, Name, Alias, AvailableScope, QC>['lateralJoin'];\n\n outerLateralJoin = this._gate(\n { sql: { lateral: true } },\n 'outerLateralJoin',\n <LAlias extends string, LateralRow extends Record<string, ScopeField>>(\n alias: LAlias,\n builder: (lateral: LateralBuilder<QC, AvailableScope>) => Subquery<LateralRow>,\n ): JoinedTables<\n QC,\n MergeScopes<\n AvailableScope,\n NullableScope<{ topLevel: LateralRow; namespaces: Record<LAlias, LateralRow> }>\n >\n > => {\n return this.#toJoined().outerLateralJoin(alias, builder);\n },\n ) as TableProxy<C, Name, Alias, AvailableScope, QC>['outerLateralJoin'];\n\n getJoinOuterScope(): Scope {\n return this.#scope;\n }\n\n buildAst(): AnyFromSource {\n return this.#fromSource;\n }\n\n as<NewAlias extends string>(\n newAlias: NewAlias,\n ): TableProxy<C, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>> {\n return new TableProxyImpl(this.#tableName, this.#table, newAlias, this.ctx);\n }\n\n select<Columns extends (keyof AvailableScope['topLevel'] & string)[]>(\n ...columns: Columns\n ): SelectQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>;\n select<LAlias extends string, Field extends ScopeField>(\n alias: LAlias,\n expr: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Expression<Field>,\n ): SelectQuery<QC, AvailableScope, WithField<EmptyRow, Field, LAlias>>;\n select<Result extends Record<string, Expression<ScopeField>>>(\n callback: (fields: FieldProxy<AvailableScope>, fns: AggregateFunctions<QC>) => Result,\n ): SelectQuery<QC, AvailableScope, Expand<ExtractScopeFields<Result>>>;\n select(...args: unknown[]): unknown {\n return new SelectQueryImpl(emptyState(this.#fromSource, this.#scope), this.ctx).select(\n ...(args as string[]),\n );\n }\n\n innerJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>> {\n return this.#toJoined().innerJoin(other, on);\n }\n\n outerLeftJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<AvailableScope, NullableScope<Other[typeof JoinOuterScope]>>> {\n return this.#toJoined().outerLeftJoin(other, on);\n }\n\n outerRightJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<QC, MergeScopes<NullableScope<AvailableScope>, Other[typeof JoinOuterScope]>> {\n return this.#toJoined().outerRightJoin(other, on);\n }\n\n outerFullJoin<Other extends JoinSource<ScopeTable, string | never>>(\n other: Other,\n on: ExpressionBuilder<MergeScopes<AvailableScope, Other[typeof JoinOuterScope]>, QC>,\n ): JoinedTables<\n QC,\n MergeScopes<NullableScope<AvailableScope>, NullableScope<Other[typeof JoinOuterScope]>>\n > {\n return this.#toJoined().outerFullJoin(other, on);\n }\n\n insert(values: Record<string, unknown>): InsertQuery<QC, AvailableScope, EmptyRow> {\n return new InsertQueryImpl(this.#tableName, this.#table, this.#scope, values, this.ctx);\n }\n\n update(set: Record<string, unknown>): UpdateQuery<QC, AvailableScope, EmptyRow> {\n return new UpdateQueryImpl(this.#tableName, this.#table, this.#scope, set, this.ctx);\n }\n\n delete(): DeleteQuery<QC, AvailableScope, EmptyRow> {\n return new DeleteQueryImpl(this.#tableName, this.#scope, this.ctx);\n }\n\n #toJoined(): JoinedTables<QC, AvailableScope> {\n return new JoinedTablesImpl(emptyState(this.#fromSource, this.#scope), this.ctx);\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type { Db } from '../types/db';\nimport type { BuilderContext } from './builder-base';\nimport { TableProxyImpl } from './table-proxy-impl';\n\nexport interface SqlOptions<C extends Contract<SqlStorage>> {\n readonly context: ExecutionContext<C>;\n}\n\nexport function sql<C extends Contract<SqlStorage>>(options: SqlOptions<C>): Db<C> {\n const { context } = options;\n const ctx: BuilderContext = {\n capabilities: context.contract.capabilities,\n queryOperationTypes: context.queryOperations.entries(),\n target: context.contract.target ?? 'unknown',\n storageHash: context.contract.storage.storageHash ?? 'unknown',\n applyMutationDefaults: (options) => context.applyMutationDefaults(options),\n };\n\n return new Proxy({} as Db<C>, {\n get(_target, prop: string) {\n const tables = context.contract.storage.tables;\n const table = Object.hasOwn(tables, prop) ? tables[prop] : undefined;\n if (table) {\n return new TableProxyImpl(prop, table, prop, ctx);\n }\n return undefined;\n },\n });\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,33 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/sql-builder",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
3
|
+
"version": "0.3.0-dev.162",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "SQL builder lane for Prisma Next",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@prisma-next/
|
|
8
|
+
"@prisma-next/framework-components": "0.3.0-dev.162",
|
|
9
|
+
"@prisma-next/sql-operations": "0.3.0-dev.162",
|
|
10
|
+
"@prisma-next/sql-relational-core": "0.3.0-dev.162"
|
|
9
11
|
},
|
|
10
12
|
"devDependencies": {
|
|
11
|
-
"@prisma-next/ids": "^0.0.1",
|
|
12
|
-
"@types/pg": "8.16.0",
|
|
13
|
-
"pg": "8.16.3",
|
|
14
13
|
"tsdown": "0.18.4",
|
|
15
14
|
"typescript": "5.9.3",
|
|
16
15
|
"vitest": "4.0.17",
|
|
17
|
-
"@prisma-next/adapter-postgres": "0.3.0-dev.
|
|
18
|
-
"@prisma-next/contract": "0.3.0-dev.
|
|
19
|
-
"@prisma-next/
|
|
20
|
-
"@prisma-next/
|
|
21
|
-
"@prisma-next/
|
|
22
|
-
"@prisma-next/
|
|
23
|
-
"@prisma-next/family-sql": "0.3.0-dev.128",
|
|
24
|
-
"@prisma-next/sql-contract-ts": "0.3.0-dev.128",
|
|
25
|
-
"@prisma-next/sql-runtime": "0.3.0-dev.128",
|
|
26
|
-
"@prisma-next/target-postgres": "0.3.0-dev.128",
|
|
16
|
+
"@prisma-next/adapter-postgres": "0.3.0-dev.162",
|
|
17
|
+
"@prisma-next/contract": "0.3.0-dev.162",
|
|
18
|
+
"@prisma-next/extension-pgvector": "0.3.0-dev.162",
|
|
19
|
+
"@prisma-next/ids": "0.3.0-dev.162",
|
|
20
|
+
"@prisma-next/sql-contract": "0.3.0-dev.162",
|
|
21
|
+
"@prisma-next/sql-contract-ts": "0.3.0-dev.162",
|
|
27
22
|
"@prisma-next/test-utils": "0.0.1",
|
|
28
|
-
"@prisma-next/
|
|
29
|
-
"@prisma-next/
|
|
30
|
-
"@prisma-next/
|
|
23
|
+
"@prisma-next/utils": "0.3.0-dev.162",
|
|
24
|
+
"@prisma-next/tsconfig": "0.0.0",
|
|
25
|
+
"@prisma-next/tsdown": "0.0.0"
|
|
31
26
|
},
|
|
32
27
|
"files": [
|
|
33
28
|
"dist",
|
|
@@ -52,8 +47,7 @@
|
|
|
52
47
|
},
|
|
53
48
|
"scripts": {
|
|
54
49
|
"build": "tsdown",
|
|
55
|
-
"
|
|
56
|
-
"emit": "node ../../../1-framework/3-tooling/cli/dist/cli.js contract emit --config test/fixtures/prisma-next.config.ts",
|
|
50
|
+
"emit": "cd ../../../../test/integration && node ../../packages/1-framework/3-tooling/cli/dist/cli.js contract emit --config test/sql-builder/fixtures/prisma-next.config.ts && cp test/sql-builder/fixtures/generated/contract.json test/sql-builder/fixtures/generated/contract.d.ts ../../packages/2-sql/4-lanes/sql-builder/test/fixtures/generated/",
|
|
57
51
|
"emit:check": "pnpm emit && git diff --exit-code test/fixtures/generated/",
|
|
58
52
|
"test": "vitest run --passWithNoTests",
|
|
59
53
|
"~test:coverage": "vitest run --coverage --passWithNoTests",
|
package/src/exports/types.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type { AggregateFunctions, Expression, Functions } from '../expression';
|
|
2
2
|
export type { ResolveRow } from '../resolve';
|
|
3
3
|
export type { GatedMethod, QueryContext, Scope, ScopeField, Subquery } from '../scope';
|
|
4
|
-
export type { Db } from '../types/db';
|
|
4
|
+
export type { Db, TableProxyContract } from '../types/db';
|
|
5
5
|
export type { GroupedQuery } from '../types/grouped-query';
|
|
6
6
|
export type { DeleteQuery, InsertQuery, UpdateQuery } from '../types/mutation-query';
|
|
7
7
|
export type { SelectQuery } from '../types/select-query';
|
package/src/resolve.ts
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import type { Expand, ScopeField } from './scope';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
type ResolveField<
|
|
4
|
+
F extends ScopeField,
|
|
5
|
+
CodecTypes extends Record<string, { readonly output: unknown }>,
|
|
6
|
+
> = F['codecId'] extends keyof CodecTypes
|
|
7
|
+
? F['nullable'] extends true
|
|
8
|
+
? CodecTypes[F['codecId']]['output'] | null
|
|
9
|
+
: CodecTypes[F['codecId']]['output']
|
|
10
|
+
: unknown;
|
|
11
|
+
|
|
12
|
+
type ApplyNullable<T, F extends ScopeField> = F['nullable'] extends true ? T | null : T;
|
|
13
|
+
|
|
5
14
|
export type ResolveRow<
|
|
6
15
|
Row extends Record<string, ScopeField>,
|
|
7
16
|
CodecTypes extends Record<string, { readonly output: unknown }>,
|
|
17
|
+
PreResolved extends Record<string, unknown> = Record<string, never>,
|
|
8
18
|
> = Expand<{
|
|
9
|
-
-readonly [K in keyof Row]:
|
|
10
|
-
? Row[K]
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
19
|
+
-readonly [K in keyof Row]: string extends keyof PreResolved
|
|
20
|
+
? ResolveField<Row[K], CodecTypes>
|
|
21
|
+
: K extends keyof PreResolved
|
|
22
|
+
? ApplyNullable<NonNullable<PreResolved[K & keyof PreResolved]>, Row[K]>
|
|
23
|
+
: ResolveField<Row[K], CodecTypes>;
|
|
14
24
|
}>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { PlanMeta } from '@prisma-next/contract/types';
|
|
2
2
|
import type { StorageTable } from '@prisma-next/sql-contract/types';
|
|
3
|
+
import type { SqlOperationEntry } from '@prisma-next/sql-operations';
|
|
3
4
|
import {
|
|
4
5
|
AndExpr,
|
|
5
6
|
type AnyExpression as AstExpression,
|
|
@@ -14,7 +15,6 @@ import type {
|
|
|
14
15
|
AppliedMutationDefault,
|
|
15
16
|
MutationDefaultsOptions,
|
|
16
17
|
} from '@prisma-next/sql-relational-core/query-lane-context';
|
|
17
|
-
import type { QueryOperationEntry } from '@prisma-next/sql-relational-core/query-operations';
|
|
18
18
|
import type {
|
|
19
19
|
AggregateFunctions,
|
|
20
20
|
Expression,
|
|
@@ -74,7 +74,7 @@ export interface BuilderState {
|
|
|
74
74
|
|
|
75
75
|
export interface BuilderContext {
|
|
76
76
|
readonly capabilities: Record<string, Record<string, boolean>>;
|
|
77
|
-
readonly queryOperationTypes: Readonly<Record<string,
|
|
77
|
+
readonly queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>;
|
|
78
78
|
readonly target: string;
|
|
79
79
|
readonly storageHash: string;
|
|
80
80
|
readonly applyMutationDefaults: (
|
package/src/runtime/functions.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SqlOperationEntry } from '@prisma-next/sql-operations';
|
|
1
2
|
import {
|
|
2
3
|
AggregateExpr,
|
|
3
4
|
AndExpr,
|
|
@@ -13,7 +14,6 @@ import {
|
|
|
13
14
|
ParamRef,
|
|
14
15
|
SubqueryExpr,
|
|
15
16
|
} from '@prisma-next/sql-relational-core/ast';
|
|
16
|
-
import type { QueryOperationEntry } from '@prisma-next/sql-relational-core/query-operations';
|
|
17
17
|
import type {
|
|
18
18
|
AggregateFunctions,
|
|
19
19
|
AggregateOnlyFunctions,
|
|
@@ -129,7 +129,7 @@ function createAggregateOnlyFunctions() {
|
|
|
129
129
|
|
|
130
130
|
function createExtensionFunction(
|
|
131
131
|
name: string,
|
|
132
|
-
entry:
|
|
132
|
+
entry: SqlOperationEntry,
|
|
133
133
|
): (...args: ExprOrVal[]) => ExpressionImpl {
|
|
134
134
|
return (...args: ExprOrVal[]) => {
|
|
135
135
|
const resolvedArgs = args.map((arg, i) => {
|
|
@@ -143,10 +143,9 @@ function createExtensionFunction(
|
|
|
143
143
|
return new ExpressionImpl(
|
|
144
144
|
new OperationExpr({
|
|
145
145
|
method: name,
|
|
146
|
-
forTypeId: entry.args[0]?.codecId ?? 'unknown',
|
|
147
146
|
self,
|
|
148
147
|
args: restArgs.length > 0 ? restArgs : undefined,
|
|
149
|
-
returns:
|
|
148
|
+
returns: entry.returns,
|
|
150
149
|
lowering: entry.lowering,
|
|
151
150
|
}),
|
|
152
151
|
entry.returns,
|
|
@@ -155,7 +154,7 @@ function createExtensionFunction(
|
|
|
155
154
|
}
|
|
156
155
|
|
|
157
156
|
export function createFunctions<QC extends QueryContext>(
|
|
158
|
-
queryOperationTypes: Readonly<Record<string,
|
|
157
|
+
queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>,
|
|
159
158
|
): Functions<QC> {
|
|
160
159
|
const builtins = createBuiltinFunctions();
|
|
161
160
|
|
|
@@ -174,7 +173,7 @@ export function createFunctions<QC extends QueryContext>(
|
|
|
174
173
|
}
|
|
175
174
|
|
|
176
175
|
export function createAggregateFunctions<QC extends QueryContext>(
|
|
177
|
-
queryOperationTypes: Readonly<Record<string,
|
|
176
|
+
queryOperationTypes: Readonly<Record<string, SqlOperationEntry>>,
|
|
178
177
|
): AggregateFunctions<QC> {
|
|
179
178
|
const baseFns = createFunctions<QC>(queryOperationTypes);
|
|
180
179
|
const aggregates = createAggregateOnlyFunctions();
|
package/src/runtime/index.ts
CHANGED
|
@@ -119,7 +119,7 @@ export class InsertQueryImpl<
|
|
|
119
119
|
},
|
|
120
120
|
);
|
|
121
121
|
|
|
122
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>> {
|
|
122
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {
|
|
123
123
|
const paramValues = buildParamValues(
|
|
124
124
|
this.#values,
|
|
125
125
|
this.#table,
|
|
@@ -134,7 +134,11 @@ export class InsertQueryImpl<
|
|
|
134
134
|
ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
return buildQueryPlan<ResolveRow<RowType, QC['codecTypes']>>(
|
|
137
|
+
return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(
|
|
138
|
+
ast,
|
|
139
|
+
this.#rowFields,
|
|
140
|
+
this.ctx,
|
|
141
|
+
);
|
|
138
142
|
}
|
|
139
143
|
}
|
|
140
144
|
|
|
@@ -210,7 +214,7 @@ export class UpdateQueryImpl<
|
|
|
210
214
|
},
|
|
211
215
|
);
|
|
212
216
|
|
|
213
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>> {
|
|
217
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {
|
|
214
218
|
const setParams = buildParamValues(
|
|
215
219
|
this.#setValues,
|
|
216
220
|
this.#table,
|
|
@@ -233,7 +237,11 @@ export class UpdateQueryImpl<
|
|
|
233
237
|
ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));
|
|
234
238
|
}
|
|
235
239
|
|
|
236
|
-
return buildQueryPlan<ResolveRow<RowType, QC['codecTypes']>>(
|
|
240
|
+
return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(
|
|
241
|
+
ast,
|
|
242
|
+
this.#rowFields,
|
|
243
|
+
this.ctx,
|
|
244
|
+
);
|
|
237
245
|
}
|
|
238
246
|
}
|
|
239
247
|
|
|
@@ -299,7 +307,7 @@ export class DeleteQueryImpl<
|
|
|
299
307
|
},
|
|
300
308
|
);
|
|
301
309
|
|
|
302
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>> {
|
|
310
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {
|
|
303
311
|
const whereExpr = combineWhereExprs(
|
|
304
312
|
this.#whereCallbacks.map((cb) =>
|
|
305
313
|
evaluateWhere(cb, this.#scope, this.ctx.queryOperationTypes),
|
|
@@ -312,6 +320,10 @@ export class DeleteQueryImpl<
|
|
|
312
320
|
ast = ast.withReturning(buildReturningColumnRefs(this.#tableName, this.#returningColumns));
|
|
313
321
|
}
|
|
314
322
|
|
|
315
|
-
return buildQueryPlan<ResolveRow<RowType, QC['codecTypes']>>(
|
|
323
|
+
return buildQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(
|
|
324
|
+
ast,
|
|
325
|
+
this.#rowFields,
|
|
326
|
+
this.ctx,
|
|
327
|
+
);
|
|
316
328
|
}
|
|
317
329
|
}
|
|
@@ -124,8 +124,11 @@ abstract class QueryBase<
|
|
|
124
124
|
return buildSelectAst(this.state);
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>> {
|
|
128
|
-
return buildPlan<ResolveRow<RowType, QC['codecTypes']>>(
|
|
127
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>> {
|
|
128
|
+
return buildPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>(
|
|
129
|
+
this.state,
|
|
130
|
+
this.ctx,
|
|
131
|
+
);
|
|
129
132
|
}
|
|
130
133
|
}
|
|
131
134
|
|
package/src/runtime/sql.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Contract } from '@prisma-next/contract/types';
|
|
2
|
+
import type { SqlStorage } from '@prisma-next/sql-contract/types';
|
|
2
3
|
import type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';
|
|
3
4
|
import type { Db } from '../types/db';
|
|
4
5
|
import type { BuilderContext } from './builder-base';
|
|
5
6
|
import { TableProxyImpl } from './table-proxy-impl';
|
|
6
7
|
|
|
7
|
-
export interface SqlOptions<C extends
|
|
8
|
+
export interface SqlOptions<C extends Contract<SqlStorage>> {
|
|
8
9
|
readonly context: ExecutionContext<C>;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
export function sql<C extends
|
|
12
|
+
export function sql<C extends Contract<SqlStorage>>(options: SqlOptions<C>): Db<C> {
|
|
12
13
|
const { context } = options;
|
|
13
14
|
const ctx: BuilderContext = {
|
|
14
15
|
capabilities: context.contract.capabilities,
|
|
15
16
|
queryOperationTypes: context.queryOperations.entries(),
|
|
16
17
|
target: context.contract.target ?? 'unknown',
|
|
17
|
-
storageHash: context.contract.storageHash ?? 'unknown',
|
|
18
|
+
storageHash: context.contract.storage.storageHash ?? 'unknown',
|
|
18
19
|
applyMutationDefaults: (options) => context.applyMutationDefaults(options),
|
|
19
20
|
};
|
|
20
21
|
|
package/src/scope.ts
CHANGED
|
@@ -78,6 +78,7 @@ export type QueryContext = {
|
|
|
78
78
|
readonly codecTypes: CodecTypesBase;
|
|
79
79
|
readonly capabilities: Record<string, Record<string, boolean>>;
|
|
80
80
|
readonly queryOperationTypes: QueryOperationTypesBase;
|
|
81
|
+
readonly resolvedColumnOutputTypes: Record<string, unknown>;
|
|
81
82
|
};
|
|
82
83
|
|
|
83
84
|
export type { CodecTypesBase, StorageTable };
|
|
@@ -37,7 +37,7 @@ export interface InsertQuery<
|
|
|
37
37
|
...columns: Columns
|
|
38
38
|
) => InsertQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>
|
|
39
39
|
>;
|
|
40
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>>;
|
|
40
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export interface UpdateQuery<
|
|
@@ -53,7 +53,7 @@ export interface UpdateQuery<
|
|
|
53
53
|
...columns: Columns
|
|
54
54
|
) => UpdateQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>
|
|
55
55
|
>;
|
|
56
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>>;
|
|
56
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
export interface DeleteQuery<
|
|
@@ -69,5 +69,5 @@ export interface DeleteQuery<
|
|
|
69
69
|
...columns: Columns
|
|
70
70
|
) => DeleteQuery<QC, AvailableScope, WithFields<EmptyRow, AvailableScope['topLevel'], Columns>>
|
|
71
71
|
>;
|
|
72
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>>;
|
|
72
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>;
|
|
73
73
|
}
|
package/src/types/shared.ts
CHANGED
|
@@ -117,5 +117,5 @@ export interface WithAlias<RowType extends Record<string, ScopeField>> {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
export interface WithBuild<QC extends QueryContext, RowType extends Record<string, ScopeField>> {
|
|
120
|
-
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes']>>;
|
|
120
|
+
build(): SqlQueryPlan<ResolveRow<RowType, QC['codecTypes'], QC['resolvedColumnOutputTypes']>>;
|
|
121
121
|
}
|
package/src/types/table-proxy.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
ExtractCodecTypes,
|
|
3
|
+
ExtractFieldInputTypes,
|
|
4
|
+
ExtractFieldOutputTypes,
|
|
3
5
|
ExtractQueryOperationTypes,
|
|
6
|
+
StorageTable,
|
|
4
7
|
} from '@prisma-next/sql-contract/types';
|
|
5
8
|
import type {
|
|
6
9
|
DefaultScope,
|
|
@@ -12,19 +15,107 @@ import type {
|
|
|
12
15
|
StorageTableToScopeTable,
|
|
13
16
|
} from '../scope';
|
|
14
17
|
import type { TableProxyContract } from './db';
|
|
15
|
-
import type {
|
|
16
|
-
DeleteQuery,
|
|
17
|
-
InsertQuery,
|
|
18
|
-
InsertValues,
|
|
19
|
-
UpdateQuery,
|
|
20
|
-
UpdateValues,
|
|
21
|
-
} from './mutation-query';
|
|
18
|
+
import type { DeleteQuery, InsertQuery, InsertValues, UpdateQuery } from './mutation-query';
|
|
22
19
|
import type { WithJoin, WithSelect } from './shared';
|
|
23
20
|
|
|
24
|
-
type
|
|
21
|
+
type FindModelForTable<C, TableName extends string> = C extends {
|
|
22
|
+
readonly models: infer Models extends Record<
|
|
23
|
+
string,
|
|
24
|
+
{ readonly storage: { readonly table: string } }
|
|
25
|
+
>;
|
|
26
|
+
}
|
|
27
|
+
? {
|
|
28
|
+
[M in keyof Models & string]: Models[M]['storage']['table'] extends TableName ? M : never;
|
|
29
|
+
}[keyof Models & string]
|
|
30
|
+
: never;
|
|
31
|
+
|
|
32
|
+
type FindFieldForColumn<C, ModelName extends string, ColumnName extends string> = C extends {
|
|
33
|
+
readonly models: infer Models extends Record<
|
|
34
|
+
string,
|
|
35
|
+
{ readonly storage: { readonly fields: Record<string, { readonly column: string }> } }
|
|
36
|
+
>;
|
|
37
|
+
}
|
|
38
|
+
? ModelName extends keyof Models
|
|
39
|
+
? {
|
|
40
|
+
[F in keyof Models[ModelName]['storage']['fields'] &
|
|
41
|
+
string]: Models[ModelName]['storage']['fields'][F]['column'] extends ColumnName
|
|
42
|
+
? F
|
|
43
|
+
: never;
|
|
44
|
+
}[keyof Models[ModelName]['storage']['fields'] & string]
|
|
45
|
+
: never
|
|
46
|
+
: never;
|
|
47
|
+
|
|
48
|
+
type ResolvedColumnTypes<
|
|
49
|
+
C,
|
|
50
|
+
TableName extends string,
|
|
51
|
+
FieldTypes extends Record<string, Record<string, unknown>>,
|
|
52
|
+
> = string extends keyof FieldTypes
|
|
53
|
+
? Record<string, never>
|
|
54
|
+
: FindModelForTable<C, TableName> extends infer ModelName extends string
|
|
55
|
+
? ModelName extends keyof FieldTypes
|
|
56
|
+
? C extends {
|
|
57
|
+
readonly storage: { readonly tables: infer Tables extends Record<string, StorageTable> };
|
|
58
|
+
}
|
|
59
|
+
? TableName extends keyof Tables
|
|
60
|
+
? {
|
|
61
|
+
[ColName in keyof Tables[TableName]['columns'] & string]: FindFieldForColumn<
|
|
62
|
+
C,
|
|
63
|
+
ModelName,
|
|
64
|
+
ColName
|
|
65
|
+
> extends infer FieldName extends string
|
|
66
|
+
? FieldName extends keyof FieldTypes[ModelName]
|
|
67
|
+
? FieldTypes[ModelName][FieldName]
|
|
68
|
+
: unknown
|
|
69
|
+
: unknown;
|
|
70
|
+
}
|
|
71
|
+
: Record<string, never>
|
|
72
|
+
: Record<string, never>
|
|
73
|
+
: Record<string, never>
|
|
74
|
+
: Record<string, never>;
|
|
75
|
+
|
|
76
|
+
type ResolvedInsertValues<
|
|
77
|
+
C,
|
|
78
|
+
Table extends StorageTable,
|
|
79
|
+
TableName extends string,
|
|
80
|
+
CT extends Record<string, { readonly input: unknown }>,
|
|
81
|
+
FieldInputs extends Record<string, Record<string, unknown>>,
|
|
82
|
+
> = string extends keyof FieldInputs
|
|
83
|
+
? InsertValues<Table, CT>
|
|
84
|
+
: FindModelForTable<C, TableName> extends infer ModelName extends string
|
|
85
|
+
? ModelName extends keyof FieldInputs
|
|
86
|
+
? {
|
|
87
|
+
[K in keyof Table['columns']]?: FindFieldForColumn<
|
|
88
|
+
C,
|
|
89
|
+
ModelName,
|
|
90
|
+
K & string
|
|
91
|
+
> extends infer FieldName extends string
|
|
92
|
+
? FieldName extends keyof FieldInputs[ModelName]
|
|
93
|
+
? Table['columns'][K]['nullable'] extends true
|
|
94
|
+
? NonNullable<FieldInputs[ModelName][FieldName]> | null
|
|
95
|
+
: NonNullable<FieldInputs[ModelName][FieldName]>
|
|
96
|
+
: Table['columns'][K]['codecId'] extends keyof CT
|
|
97
|
+
? CT[Table['columns'][K]['codecId']]['input']
|
|
98
|
+
: unknown
|
|
99
|
+
: Table['columns'][K]['codecId'] extends keyof CT
|
|
100
|
+
? CT[Table['columns'][K]['codecId']]['input']
|
|
101
|
+
: unknown;
|
|
102
|
+
}
|
|
103
|
+
: InsertValues<Table, CT>
|
|
104
|
+
: InsertValues<Table, CT>;
|
|
105
|
+
|
|
106
|
+
type ResolvedUpdateValues<
|
|
107
|
+
C,
|
|
108
|
+
Table extends StorageTable,
|
|
109
|
+
TableName extends string,
|
|
110
|
+
CT extends Record<string, { readonly input: unknown }>,
|
|
111
|
+
FieldInputs extends Record<string, Record<string, unknown>>,
|
|
112
|
+
> = ResolvedInsertValues<C, Table, TableName, CT, FieldInputs>;
|
|
113
|
+
|
|
114
|
+
type ContractToQC<C extends TableProxyContract, Name extends string = string> = {
|
|
25
115
|
readonly codecTypes: ExtractCodecTypes<C>;
|
|
26
116
|
readonly capabilities: C['capabilities'];
|
|
27
117
|
readonly queryOperationTypes: ExtractQueryOperationTypes<C>;
|
|
118
|
+
readonly resolvedColumnOutputTypes: ResolvedColumnTypes<C, Name, ExtractFieldOutputTypes<C>>;
|
|
28
119
|
};
|
|
29
120
|
|
|
30
121
|
export interface TableProxy<
|
|
@@ -32,7 +123,7 @@ export interface TableProxy<
|
|
|
32
123
|
Name extends string & keyof C['storage']['tables'],
|
|
33
124
|
Alias extends string = Name,
|
|
34
125
|
AvailableScope extends Scope = DefaultScope<Name, C['storage']['tables'][Name]>,
|
|
35
|
-
QC extends QueryContext = ContractToQC<C>,
|
|
126
|
+
QC extends QueryContext = ContractToQC<C, Name>,
|
|
36
127
|
> extends JoinSource<StorageTableToScopeTable<C['storage']['tables'][Name]>, Alias>,
|
|
37
128
|
WithSelect<QC, AvailableScope, EmptyRow>,
|
|
38
129
|
WithJoin<QC, AvailableScope, C['capabilities']> {
|
|
@@ -41,11 +132,23 @@ export interface TableProxy<
|
|
|
41
132
|
): TableProxy<C, Name, NewAlias, RebindScope<AvailableScope, Alias, NewAlias>>;
|
|
42
133
|
|
|
43
134
|
insert(
|
|
44
|
-
values:
|
|
135
|
+
values: ResolvedInsertValues<
|
|
136
|
+
C,
|
|
137
|
+
C['storage']['tables'][Name],
|
|
138
|
+
Name,
|
|
139
|
+
QC['codecTypes'],
|
|
140
|
+
ExtractFieldInputTypes<C>
|
|
141
|
+
>,
|
|
45
142
|
): InsertQuery<QC, AvailableScope, EmptyRow>;
|
|
46
143
|
|
|
47
144
|
update(
|
|
48
|
-
set:
|
|
145
|
+
set: ResolvedUpdateValues<
|
|
146
|
+
C,
|
|
147
|
+
C['storage']['tables'][Name],
|
|
148
|
+
Name,
|
|
149
|
+
QC['codecTypes'],
|
|
150
|
+
ExtractFieldInputTypes<C>
|
|
151
|
+
>,
|
|
49
152
|
): UpdateQuery<QC, AvailableScope, EmptyRow>;
|
|
50
153
|
|
|
51
154
|
delete(): DeleteQuery<QC, AvailableScope, EmptyRow>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db-DB_rRT9u.d.mts","names":[],"sources":["../src/scope.ts","../src/expression.ts","../src/resolve.ts","../src/types/mutation-query.ts","../src/types/joined-tables.ts","../src/types/grouped-query.ts","../src/types/select-query.ts","../src/types/shared.ts","../src/types/table-proxy.ts","../src/types/db.ts"],"sourcesContent":[],"mappings":"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AAA,CAAA,IAAA,EAAA,CAAA,MAAA,EM4B5C,UN5B4C,CM4BjC,YN5BiC,CM4BpB,cN5BoB,EM4BJ,ON5BI,CAAA,CAAA,EAAA,GAAA,EM6B/C,SN7B+C,CM6BrC,EN7BqC,CAAA,EAAA,GM8BjD,UN9BiD,CM8BtC,UN9BsC,CAAA,EAAA,OAAA,CAAA,EM+B5C,cN/B4C,CAAA,EMgCrD,WNhCqD,CMgCzC,ENhCyC,EMgCrC,cNhCqC,EMgCrB,ONhCqB,CAAA;EAAqB,OAAA,CAAA,GAAA,MAAA,EAAA,CAAA,CAAA,MMmCxD,ONnCwD,GAAA,MMmCxC,cNnCwC,CAAA,UAAA,CAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,EMoC1E,YNpC0E,CMoC7D,ENpC6D,EMoCzD,cNpCyD,EMoCzC,ONpCyC,CAAA;EAC3E,OAAA,CAAA,IAAA,EAAA,CAAA,MAAA,EMuCU,UNvCV,CMuCqB,YNvCrB,CMuCkC,cNvClC,EMuCkD,ONvClD,CAAA,CAAA,EAAA,GAAA,EMwCO,SNxCP,CMwCiB,ENxCjB,CAAA,EAAA,GMyCK,UNzCL,CMyCgB,UNzChB,CAAA,CAAA,EM0CC,YN1CD,CM0Cc,EN1Cd,EM0CkB,cN1ClB,EM0CkC,ON1ClC,CAAA;EAAM,UAAA,EM4CI,WN5CJ,CM6CN,EN7CM,CAAA,cAAA,CAAA,EAAA;IAGL,QAAA,EAAA;MACgB,UAA6B,EAAA,IAAA;IAC7B,CAAA;EACA,CAAA,EAAA;IAET,CAAA,GAAA,MAAM,EAAA,CAAA,CAAA,MMyCS,ONzCT,GAAA,MMyCyB,cNzCzB,CAAA,UAAA,CAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,EM0CT,WN1CS,CM0CG,EN1CH,EM0CO,cN1CP,EM0CuB,ON1CvB,CAAA;IAAoB,CAAA,IAAA,EAAA,CAAA,MAAA,EM6CpB,UN7CoB,CM6CT,YN7CS,CM6CI,cN7CJ,EM6CoB,ON7CpB,CAAA,CAAA,EAAA,GAAA,EM8CvB,SN9CuB,CM8Cb,EN9Ca,CAAA,EAAA,GM+CzB,UN/CyB,CM+Cd,UN/Cc,CAAA,CAAA,EMgD7B,WNhD6B,CMgDjB,ENhDiB,EMgDb,cNhDa,EMgDG,ONhDH,CAAA;EAAI,CAAA,CAAA;;;;AAT9B,UOyBK,cPzBM,CAAA,WOyBoB,YPzBpB,EAAA,oBOyBsD,KPzBtD,CAAA,CAAA;EAAmC,IAAA,CAAA,cO0BrC,UP1BqC,CO0B1B,UP1B0B,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EO2B/C,KP3B+C,CAAA,EO4BrD,WP5BqD,CO4BzC,EP5ByC,EO4BrC,WP5BqC,CO4BzB,WP5ByB,EO4BZ,KP5BY,CAAA,OO4BC,cP5BD,CAAA,CAAA,EO4BmB,QP5BnB,CAAA;;AACtD,UO8Ba,UP9Bb,CAAA,WO+BS,YP/BT,EAAA,uBOgCqB,KPhCrB,EAAA,gBOiCc,MPjCd,CAAA,MAAA,EOiC6B,UPjC7B,CAAA,GOiC2C,QPjC3C,CAAA,CAAA;EAAM,MAAA,CAAA,gBAAA,CAAA,MOmCsB,cPnCtB,CAAA,UAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,CAAA,GAAA,OAAA,EOoCM,OPpCN,CAAA,EOqCL,WPrCK,COqCO,EPrCP,EOqCW,cPrCX,EOqC2B,UPrC3B,COqCsC,OPrCtC,EOqC+C,cPrC/C,CAAA,UAAA,CAAA,EOqC2E,OPrC3E,CAAA,CAAA;EAGL,MAAA,CAAA,cAAc,MAAA,EAAG,cOoCuB,UPpCjB,CAAA,CAAA,KAAA,EOqCjB,KPrCiB,EAAA,IAAA,EAAA,CAAA,MAAA,EOsCT,UPtCS,COsCE,cPtCF,CAAA,EAAA,GAAA,EOsCwB,kBPtCxB,COsC2C,EPtC3C,CAAA,EAAA,GOsCmD,UPtCnD,COsC8D,KPtC9D,CAAA,CAAA,EOuCvB,WPvCuB,COuCX,EPvCW,EOuCP,cPvCO,EOuCS,SPvCT,COuCmB,OPvCnB,EOuC4B,KPvC5B,EOuCmC,KPvCnC,CAAA,CAAA;EACP,MAAA,CAAA,eOwCG,MPxC0B,CAAA,MAAA,EOwCX,UPxCW,COwCA,UPxCA,CAAA,CAAA,CAAA,CAAA,QAAA,EAAA,CAAA,MAAA,EOyC3B,UPzC2B,COyChB,cPzCgB,CAAA,EAAA,GAAA,EOyCM,kBPzCN,COyCyB,EPzCzB,CAAA,EAAA,GOyCiC,MPzCjC,CAAA,EO0C7C,WP1C6C,CO0CjC,EP1CiC,EO0C7B,cP1C6B,EO0Cb,MP1Ca,CO0CN,OP1CM,GO0CI,kBP1CJ,CO0CuB,MP1CvB,CAAA,CAAA,CAAA;AAClD;AACqB,UO2CJ,QP3CiC,CAAA,WO2Cb,YP3Ca,EAAA,uBO2CwB,KP3CxB,EAAA,YAAA,CAAA,CAAA;EAEtC,SAAM,CAAA,cO0CQ,UP1CR,CO0CmB,UP1CnB,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EO2CP,KP3CO,EAAA,EAAA,EO4CV,iBP5CU,CO4CQ,WP5CR,CO4CoB,cP5CpB,EO4CoC,KP5CpC,CAAA,OO4CiD,cP5CjD,CAAA,CAAA,EO4CmE,EP5CnE,CAAA,CAAA,EO6Cb,YP7Ca,CO6CA,EP7CA,EO6CI,WP7CJ,CO6CgB,cP7ChB,EO6CgC,KP7ChC,CAAA,OO6C6C,cP7C7C,CAAA,CAAA,CAAA;EAAoB,aAAA,CAAA,cO+CR,UP/CQ,CO+CG,UP/CH,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EOgD3B,KPhD2B,EAAA,EAAA,EOiD9B,iBPjD8B,COiDZ,WPjDY,COiDA,cPjDA,EOiDgB,KPjDhB,CAAA,OOiD6B,cPjD7B,CAAA,CAAA,EOiD+C,EPjD/C,CAAA,CAAA,EOkDjC,YPlDiC,COkDpB,EPlDoB,EOkDhB,WPlDgB,COkDJ,cPlDI,EOkDY,aPlDZ,COkD0B,KPlD1B,CAAA,OOkDuC,cPlDvC,CAAA,CAAA,CAAA,CAAA;EAAI,cAAA,CAAA,cOoDX,UPpDW,COoDA,UPpDA,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EOqD/B,KPrD+B,EAAA,EAAA,EOsDlC,iBPtDkC,COsDhB,WPtDgB,COsDJ,cPtDI,EOsDY,KPtDZ,CAAA,OOsDyB,cPtDzB,CAAA,CAAA,EOsD2C,EPtD3C,CAAA,CAAA,EOuDrC,YPvDqC,COuDxB,EPvDwB,EOuDpB,WPvDoB,COuDR,aPvDQ,COuDM,cPvDN,CAAA,EOuDuB,KPvDvB,CAAA,OOuDoC,cPvDpC,CAAA,CAAA,CAAA;EAAE,aAAA,CAAA,cOyDd,UPzDc,COyDH,UPzDG,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,CAAA,KAAA,EO0DjC,KP1DiC,EAAA,EAAA,EO2DpC,iBP3DoC,CO2DlB,WP3DkB,CO2DN,cP3DM,EO2DU,KP3DV,CAAA,OO2DuB,cP3DvB,CAAA,CAAA,EO2DyC,EP3DzC,CAAA,CAAA,EO4DvC,YP5DuC,CO6DxC,EP7DwC,EO8DxC,WP9DwC,CO8D5B,aP9D4B,CO8Dd,cP9Dc,CAAA,EO8DG,aP9DH,CO8DiB,KP9DjB,CAAA,OO8D8B,cP9D9B,CAAA,CAAA,CAAA,CAAA;EAAC,WAAA,EOiE9B,WPjE8B,COkEzC,YPlEyC,EAAA;IACjC,GAAA,EAAA;MAEA,OAAU,EAAA,IAAA;IACV,CAAA;EAEA,CAAA,EAAA,CAAA,cAAK,MAAA,EAAA,mBO8D6B,MP9D7B,CAAA,MAAA,EO8D4C,UP9D5C,CAAA,CAAA,CAAA,KAAA,EO+DJ,KP/DI,EAAA,OAAA,EAAA,CAAA,OAAA,EOgEQ,cPhER,COgEuB,EPhEvB,EOgE2B,cPhE3B,CAAA,EAAA,GOgE+C,QPhE/C,COgEwD,UPhExD,CAAA,EAAA,GOiER,YPjEQ,COkEX,EPlEW,EOmEX,WPnEW,COmEC,cPnED,EAAA;IACL,QAAA,EOkEkC,UPlElC;IACiB,UAAA,EOiEyC,MPjEzC,COiEgD,KPjEhD,EOiEuD,UPjEvD,CAAA;EAAf,CAAA,CAAA,CAAA,CAAA;EAAM,gBAAA,EOqEA,WPrEA,COsEhB,YPtEgB,EAAA;IAGR,GAAA,EAAA;MAAuB,OAAA,EAAA,IAAA;IAErB,CAAA;EACS,CAAA,EAAA,CAAA,cAAA,MAAA,EAAA,mBOkEuB,MPlEvB,CAAA,MAAA,EOkEsC,UPlEtC,CAAA,CAAA,CAAA,KAAA,EOmEV,KPnEU,EAAA,OAAA,EAAA,CAAA,OAAA,EOoEE,cPpEF,COoEiB,EPpEjB,EOoEqB,cPpErB,CAAA,EAAA,GOoEyC,QPpEzC,COoEkD,UPpElD,CAAA,EAAA,GOqEd,YPrEc,COsEjB,EPtEiB,EOuEjB,WPvEiB,COwEf,cPxEe,EOyEf,aPzEe,CAAA;IAAO,QAAA,EOyEI,UPzEJ;IAAd,UAAA,EOyE0C,MPzE1C,COyEiD,KPzEjD,EOyEwD,UPzExD,CAAA;EAFJ,CAAA,CAAA,CAAA,CAAA,CAAA;;AAME,UO2EG,cAAA,CP3EH;EAAa,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAGf,MAAA,CAAA,KAAA,EAAA,MAAY,CAAA,EAAA,IAAA;;AACa,UO4EpB,YAAA,CP5EoB;EAAzB,QAAA,EAAA,EAAA,IAAA;;AAE8B,UO8EzB,SP9EyB,CAAA,gBO8EC,MP9ED,CAAA,MAAA,EO8EgB,UP9EhB,CAAA,CAAA,CAAA;EAAzB,EAAA,CAAA,cAAA,MAAA,CAAA,CAAA,QAAA,EO+EoB,KP/EpB,CAAA,EO+E4B,UP/E5B,CO+EuC,OP/EvC,EO+EgD,KP/EhD,CAAA;;AAIL,UO8EK,SP9EL,CAAA,WO8E0B,YP9EF,EAAA,gBO8EgC,MP9EhC,CAAA,MAAA,EO8E+C,UP9E/C,CAAA,CAAA,CAAA;EAAW,KAAA,EAAA,EO+EpC,YP/EoC,CO+EvB,UP/EuB,CO+EZ,OP/EY,EO+EH,EP/EG,CAAA,YAAA,CAAA,CAAA,CAAA;;;;KQjB1C,uBAAuB;ERpBhB,SAAA,UAAW,EQqBA,iBRrBA,CQqBkB,CRrBlB,CAAA;EAAmC,SAAA,YAAA,EQsBjC,CRtBiC,CAAA,cAAA,CAAA;EAAqB,SAAA,mBAAA,EQuB/C,0BRvB+C,CQuBpB,CRvBoB,CAAA;CAC3E;AAAM,UQyBO,URzBP,CAAA,UQ0BE,kBR1BF,EAAA,eAAA,MAAA,GAAA,MQ2BoB,CR3BpB,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,EAAA,cAAA,MAAA,GQ4Be,MR5Bf,EAAA,uBQ6Be,KR7Bf,GQ6BuB,YR7BvB,CQ6BoC,MR7BpC,EQ6B0C,CR7B1C,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CQ6BiE,MR7BjE,CAAA,CAAA,EAAA,WQ8BG,YR9BH,GQ8BkB,YR9BlB,CQ8B+B,CR9B/B,CAAA,CAAA,SQ+BA,UR/BA,CQ+BW,wBR/BX,CQ+BoC,CR/BpC,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CQ+B2D,MR/B3D,CAAA,CAAA,EQ+BmE,KR/BnE,CAAA,EQgCN,URhCM,CQgCK,ERhCL,EQgCS,cRhCT,EQgCyB,QRhCzB,CAAA,EQiCN,QRjCM,CQiCG,ERjCH,EQiCO,cRjCP,EQiCuB,CRjCvB,CAAA,cAAA,CAAA,CAAA,CAAA;EAGL,EAAA,CAAA,iBAAc,MAAA,CAAA,CAAA,QAAS,EQgCd,QRhCc,CAAA,EQiCvB,URjCuB,CQiCZ,CRjCY,EQiCT,MRjCS,EQiCH,QRjCG,EQiCO,WRjCP,CQiCmB,cRjCnB,EQiCmC,KRjCnC,EQiC0C,QRjC1C,CAAA,CAAA;EACP,MAAA,CAAA,MAAA,EQmCT,YRnCsC,CQmCzB,CRnCyB,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CQmCF,MRnCE,CAAA,EQmCK,ERnCL,CAAA,YAAA,CAAA,CAAA,CAAA,EQoC7C,WRpC6C,CQoCjC,ERpCiC,EQoC7B,cRpC6B,EQoCb,QRpCa,CAAA;EAC7B,MAAA,CAAA,GAAA,EQsCZ,YRtCyC,CQsC5B,CRtC4B,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CQsCL,MRtCK,CAAA,EQsCE,ERtCF,CAAA,YAAA,CAAA,CAAA,CAAA,EQuC7C,WRvC6C,CQuCjC,ERvCiC,EQuC7B,cRvC6B,EQuCb,QRvCa,CAAA;EAC7B,MAAA,EAAA,EQwCT,WRxCsC,CQwC1B,ERxC0B,EQwCtB,cRxCsB,EQwCN,QRxCM,CAAA;AAElD;;;KSTY,gBAAA,GAAmB,eAAe;KAElC,kBAAA;;qBAC2B,eAAe;ETH1C,CAAA;EAA8C,SAAA,YAAA,ESIjC,gBTJiC;CAAqB;AAC3E,KSMQ,ETNR,CAAA,USMqB,kBTNrB,CAAA,GAAA,WAAM,MAAA,GAAA,MSOgB,CTPhB,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,GSOyC,UTPzC,CSOoD,CTPpD,ESOuD,ITPvD,CAAA,EACA"}
|