@prisma-next/sql-lane 0.1.0-dev.2 → 0.1.0-dev.20

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.
@@ -1,14 +1,7 @@
1
1
  // src/raw.ts
2
2
  import { planInvalid } from "@prisma-next/plan";
3
- var POSTGRES_TARGET = "postgres";
4
3
  var RAW_OPTIONS_SENTINEL = Symbol("rawOptions");
5
4
  function createRawFactory(contract) {
6
- if (contract.target !== POSTGRES_TARGET) {
7
- throw planInvalid("Raw lane currently supports only postgres target", {
8
- expectedTarget: POSTGRES_TARGET,
9
- actualTarget: contract.target
10
- });
11
- }
12
5
  const factory = ((first, ...rest) => {
13
6
  if (isTemplateInvocation(first)) {
14
7
  const { values, options: options2 } = splitTemplateValues(rest);
@@ -94,8 +87,8 @@ function buildRawPlan(args) {
94
87
  function buildRawMeta(args) {
95
88
  const { contract, paramDescriptors, options } = args;
96
89
  const meta = {
97
- target: POSTGRES_TARGET,
98
- ...contract.targetFamily ? { targetFamily: contract.targetFamily } : {},
90
+ target: contract.target,
91
+ targetFamily: contract.targetFamily,
99
92
  coreHash: contract.coreHash,
100
93
  ...contract.profileHash !== void 0 ? { profileHash: contract.profileHash } : {},
101
94
  lane: "raw",
@@ -203,7 +196,7 @@ function errorIncludeRequiresCapabilities(target) {
203
196
  [
204
197
  "docs/Architecture Overview.md",
205
198
  "docs/reference/extensions-glossary.md",
206
- "packages/targets/postgres-adapter/README.md"
199
+ "packages/3-targets/6-adapters/postgres/README.md"
207
200
  ]
208
201
  );
209
202
  }
@@ -218,7 +211,7 @@ function errorIncludeCapabilitiesNotTrue(target, values) {
218
211
  [
219
212
  "docs/Architecture Overview.md",
220
213
  "docs/reference/extensions-glossary.md",
221
- "packages/targets/postgres-adapter/README.md"
214
+ "packages/3-targets/6-adapters/postgres/README.md"
222
215
  ]
223
216
  );
224
217
  }
@@ -242,9 +235,6 @@ function errorMissingColumnForAlias(alias, index) {
242
235
  function errorMissingAlias(index) {
243
236
  throw planInvalid2(`Missing alias at index ${index}`);
244
237
  }
245
- function errorInvalidColumnForAlias(alias, index) {
246
- throw planInvalid2(`Invalid column for alias ${alias} at index ${index}`);
247
- }
248
238
  function errorFromMustBeCalled() {
249
239
  throw planInvalid2("from() must be called before building a query");
250
240
  }
@@ -284,7 +274,7 @@ function errorReturningRequiresCapability(target) {
284
274
  [
285
275
  "docs/Architecture Overview.md",
286
276
  "docs/reference/extensions-glossary.md",
287
- "packages/targets/postgres-adapter/README.md"
277
+ "packages/3-targets/6-adapters/postgres/README.md"
288
278
  ]
289
279
  );
290
280
  }
@@ -299,7 +289,7 @@ function errorReturningCapabilityNotTrue(target, value) {
299
289
  [
300
290
  "docs/Architecture Overview.md",
301
291
  "docs/reference/extensions-glossary.md",
302
- "packages/targets/postgres-adapter/README.md"
292
+ "packages/3-targets/6-adapters/postgres/README.md"
303
293
  ]
304
294
  );
305
295
  }
@@ -345,47 +335,21 @@ function checkReturningCapability(contract) {
345
335
 
346
336
  // src/sql/plan.ts
347
337
  import { compact } from "@prisma-next/sql-relational-core/ast";
338
+ import {
339
+ collectColumnRefs,
340
+ getColumnInfo,
341
+ getOperationExpr,
342
+ isColumnBuilder,
343
+ isOperationExpr
344
+ } from "@prisma-next/sql-relational-core/utils/guards";
348
345
 
349
- // src/utils/guards.ts
350
- function extractBaseColumnRef(expr) {
351
- if (expr.kind === "col") {
352
- return expr;
353
- }
354
- return extractBaseColumnRef(expr.self);
355
- }
356
- function collectColumnRefs(expr) {
357
- if (expr.kind === "col") {
358
- return [expr];
359
- }
360
- if (expr.kind === "operation") {
361
- const refs = collectColumnRefs(expr.self);
362
- for (const arg of expr.args) {
363
- refs.push(...collectColumnRefs(arg));
364
- }
365
- return refs;
366
- }
367
- return [];
368
- }
369
- function isOperationExpr(expr) {
370
- return typeof expr === "object" && expr !== null && "kind" in expr && expr.kind === "operation";
371
- }
372
- function getColumnInfo(expr) {
373
- if (isOperationExpr(expr)) {
374
- const baseCol = extractBaseColumnRef(expr);
375
- return { table: baseCol.table, column: baseCol.column };
376
- }
377
- const colBuilder = expr;
378
- return { table: colBuilder.table, column: colBuilder.column };
379
- }
380
- function isColumnBuilder(value) {
381
- return typeof value === "object" && value !== null && "kind" in value && value.kind === "column";
382
- }
383
- function getOperationExpr(builder) {
384
- if (isOperationExpr(builder)) {
385
- return builder;
346
+ // src/utils/assertions.ts
347
+ import { planInvalid as planInvalid3 } from "@prisma-next/plan";
348
+ function assertColumnBuilder(col, context) {
349
+ if (typeof col === "object" && col !== null && "table" in col && "column" in col && typeof col.table === "string" && typeof col.column === "string") {
350
+ return col;
386
351
  }
387
- const builderWithExpr = builder;
388
- return builderWithExpr._operationExpr;
352
+ throw planInvalid3(`ColumnBuilder missing table/column in ${context}`);
389
353
  }
390
354
 
391
355
  // src/sql/plan.ts
@@ -393,7 +357,10 @@ function buildMeta(args) {
393
357
  const refsColumns = /* @__PURE__ */ new Map();
394
358
  const refsTables = /* @__PURE__ */ new Set([args.table.name]);
395
359
  for (const column of args.projection.columns) {
396
- const operationExpr = column._operationExpr;
360
+ if (!column) {
361
+ continue;
362
+ }
363
+ const operationExpr = getOperationExpr(column);
397
364
  if (operationExpr) {
398
365
  const allRefs = collectColumnRefs(operationExpr);
399
366
  for (const ref of allRefs) {
@@ -403,20 +370,17 @@ function buildMeta(args) {
403
370
  });
404
371
  }
405
372
  } else {
406
- const col = column;
407
- if (col.table && col.column) {
408
- refsColumns.set(`${col.table}.${col.column}`, {
409
- table: col.table,
410
- column: col.column
411
- });
412
- }
373
+ refsColumns.set(`${column.table}.${column.column}`, {
374
+ table: column.table,
375
+ column: column.column
376
+ });
413
377
  }
414
378
  }
415
379
  if (args.joins) {
416
380
  for (const join of args.joins) {
417
381
  refsTables.add(join.table.name);
418
- const onLeft = join.on.left;
419
- const onRight = join.on.right;
382
+ const onLeft = assertColumnBuilder(join.on.left, "join ON left");
383
+ const onRight = assertColumnBuilder(join.on.right, "join ON right");
420
384
  refsColumns.set(`${onLeft.table}.${onLeft.column}`, {
421
385
  table: onLeft.table,
422
386
  column: onLeft.column
@@ -430,26 +394,22 @@ function buildMeta(args) {
430
394
  if (args.includes) {
431
395
  for (const include of args.includes) {
432
396
  refsTables.add(include.table.name);
433
- const onLeft = include.on.left;
434
- const onRight = include.on.right;
435
- if (onLeft.table && onLeft.column && onRight.table && onRight.column) {
436
- refsColumns.set(`${onLeft.table}.${onLeft.column}`, {
437
- table: onLeft.table,
438
- column: onLeft.column
439
- });
440
- refsColumns.set(`${onRight.table}.${onRight.column}`, {
441
- table: onRight.table,
442
- column: onRight.column
443
- });
444
- }
397
+ const leftCol = assertColumnBuilder(include.on.left, "include ON left");
398
+ const rightCol = assertColumnBuilder(include.on.right, "include ON right");
399
+ refsColumns.set(`${leftCol.table}.${leftCol.column}`, {
400
+ table: leftCol.table,
401
+ column: leftCol.column
402
+ });
403
+ refsColumns.set(`${rightCol.table}.${rightCol.column}`, {
404
+ table: rightCol.table,
405
+ column: rightCol.column
406
+ });
445
407
  for (const column of include.childProjection.columns) {
446
- const col = column;
447
- if (col.table && col.column) {
448
- refsColumns.set(`${col.table}.${col.column}`, {
449
- table: col.table,
450
- column: col.column
451
- });
452
- }
408
+ const col = assertColumnBuilder(column, "include child projection column");
409
+ refsColumns.set(`${col.table}.${col.column}`, {
410
+ table: col.table,
411
+ column: col.column
412
+ });
453
413
  }
454
414
  if (include.childWhere) {
455
415
  const colInfo = getColumnInfo(include.childWhere.left);
@@ -457,6 +417,14 @@ function buildMeta(args) {
457
417
  table: colInfo.table,
458
418
  column: colInfo.column
459
419
  });
420
+ const childWhereRight = include.childWhere.right;
421
+ if (isColumnBuilder(childWhereRight)) {
422
+ const rightColInfo = getColumnInfo(childWhereRight);
423
+ refsColumns.set(`${rightColInfo.table}.${rightColInfo.column}`, {
424
+ table: rightColInfo.table,
425
+ column: rightColInfo.column
426
+ });
427
+ }
460
428
  }
461
429
  if (include.childOrderBy) {
462
430
  const orderBy = include.childOrderBy;
@@ -472,9 +440,8 @@ function buildMeta(args) {
472
440
  }
473
441
  if (args.where) {
474
442
  const whereLeft = args.where.left;
475
- const operationExpr = whereLeft._operationExpr;
476
- if (operationExpr) {
477
- const allRefs = collectColumnRefs(operationExpr);
443
+ if (isOperationExpr(whereLeft)) {
444
+ const allRefs = collectColumnRefs(whereLeft);
478
445
  for (const ref of allRefs) {
479
446
  refsColumns.set(`${ref.table}.${ref.column}`, {
480
447
  table: ref.table,
@@ -482,14 +449,31 @@ function buildMeta(args) {
482
449
  });
483
450
  }
484
451
  } else {
485
- const colBuilder = whereLeft;
486
- if (colBuilder.table && colBuilder.column) {
452
+ const operationExpr = whereLeft._operationExpr;
453
+ if (operationExpr) {
454
+ const allRefs = collectColumnRefs(operationExpr);
455
+ for (const ref of allRefs) {
456
+ refsColumns.set(`${ref.table}.${ref.column}`, {
457
+ table: ref.table,
458
+ column: ref.column
459
+ });
460
+ }
461
+ } else {
462
+ const colBuilder = assertColumnBuilder(whereLeft, "where clause must be a ColumnBuilder");
487
463
  refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {
488
464
  table: colBuilder.table,
489
465
  column: colBuilder.column
490
466
  });
491
467
  }
492
468
  }
469
+ const whereRight = args.where.right;
470
+ if (isColumnBuilder(whereRight)) {
471
+ const colInfo = getColumnInfo(whereRight);
472
+ refsColumns.set(`${colInfo.table}.${colInfo.column}`, {
473
+ table: colInfo.table,
474
+ column: colInfo.column
475
+ });
476
+ }
493
477
  }
494
478
  if (args.orderBy) {
495
479
  const orderBy = args.orderBy;
@@ -504,13 +488,10 @@ function buildMeta(args) {
504
488
  });
505
489
  }
506
490
  } else {
507
- const colBuilder = orderByExpr;
508
- if (colBuilder.table && colBuilder.column) {
509
- refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {
510
- table: colBuilder.table,
511
- column: colBuilder.column
512
- });
513
- }
491
+ refsColumns.set(`${orderByExpr.table}.${orderByExpr.column}`, {
492
+ table: orderByExpr.table,
493
+ column: orderByExpr.column
494
+ });
514
495
  }
515
496
  }
516
497
  }
@@ -524,15 +505,11 @@ function buildMeta(args) {
524
505
  if (!column) {
525
506
  errorMissingColumnForAlias(alias, index);
526
507
  }
527
- const col = column;
528
- if (!col.table || !col.column) {
529
- return [alias, `include:${alias}`];
530
- }
531
- const operationExpr = col._operationExpr;
508
+ const operationExpr = getOperationExpr(column);
532
509
  if (operationExpr) {
533
510
  return [alias, `operation:${operationExpr.method}`];
534
511
  }
535
- return [alias, `${col.table}.${col.column}`];
512
+ return [alias, `${column.table}.${column.column}`];
536
513
  })
537
514
  );
538
515
  const projectionTypes = {};
@@ -614,21 +591,22 @@ import {
614
591
  createColumnRef,
615
592
  createParamRef
616
593
  } from "@prisma-next/sql-relational-core/ast";
594
+ import {
595
+ getColumnInfo as getColumnInfo2,
596
+ getOperationExpr as getOperationExpr2,
597
+ isColumnBuilder as isColumnBuilder2,
598
+ isParamPlaceholder
599
+ } from "@prisma-next/sql-relational-core/utils/guards";
617
600
  function buildWhereExpr(contract, where, paramsMap, descriptors, values) {
618
- const placeholder = where.right;
619
- const paramName = placeholder.name;
620
- if (!Object.hasOwn(paramsMap, paramName)) {
621
- errorMissingParameter(paramName);
622
- }
623
- const value = paramsMap[paramName];
624
- const index = values.push(value);
625
601
  let leftExpr;
626
602
  let codecId;
627
- const operationExpr = getOperationExpr(where.left);
603
+ let rightExpr;
604
+ let paramName;
605
+ const operationExpr = getOperationExpr2(where.left);
628
606
  if (operationExpr) {
629
607
  leftExpr = operationExpr;
630
- } else if (isColumnBuilder(where.left)) {
631
- const { table, column } = getColumnInfo(where.left);
608
+ } else if (isColumnBuilder2(where.left)) {
609
+ const { table, column } = getColumnInfo2(where.left);
632
610
  const contractTable = contract.storage.tables[table];
633
611
  if (!contractTable) {
634
612
  errorUnknownTable(table);
@@ -637,22 +615,52 @@ function buildWhereExpr(contract, where, paramsMap, descriptors, values) {
637
615
  if (!columnMeta) {
638
616
  errorUnknownColumn(column, table);
639
617
  }
640
- descriptors.push({
641
- name: paramName,
642
- source: "dsl",
643
- refs: { table, column },
644
- nullable: columnMeta.nullable,
645
- codecId: columnMeta.codecId,
646
- nativeType: columnMeta.nativeType
647
- });
648
618
  codecId = columnMeta.codecId;
649
619
  leftExpr = createColumnRef(table, column);
650
620
  } else {
651
621
  errorFailedToBuildWhereClause();
652
622
  }
653
- const rightParam = createParamRef(index, paramName);
623
+ if (isParamPlaceholder(where.right)) {
624
+ const placeholder = where.right;
625
+ paramName = placeholder.name;
626
+ if (!Object.hasOwn(paramsMap, paramName)) {
627
+ errorMissingParameter(paramName);
628
+ }
629
+ const value = paramsMap[paramName];
630
+ const index = values.push(value);
631
+ if (isColumnBuilder2(where.left)) {
632
+ const { table, column } = getColumnInfo2(where.left);
633
+ const contractTable = contract.storage.tables[table];
634
+ const columnMeta = contractTable?.columns[column];
635
+ if (columnMeta) {
636
+ descriptors.push({
637
+ name: paramName,
638
+ source: "dsl",
639
+ refs: { table, column },
640
+ nullable: columnMeta.nullable,
641
+ codecId: columnMeta.codecId,
642
+ nativeType: columnMeta.nativeType
643
+ });
644
+ }
645
+ }
646
+ rightExpr = createParamRef(index, paramName);
647
+ } else if (isColumnBuilder2(where.right)) {
648
+ const { table, column } = getColumnInfo2(where.right);
649
+ const contractTable = contract.storage.tables[table];
650
+ if (!contractTable) {
651
+ errorUnknownTable(table);
652
+ }
653
+ const columnMeta = contractTable.columns[column];
654
+ if (!columnMeta) {
655
+ errorUnknownColumn(column, table);
656
+ }
657
+ rightExpr = createColumnRef(table, column);
658
+ paramName = "";
659
+ } else {
660
+ errorFailedToBuildWhereClause();
661
+ }
654
662
  return {
655
- expr: createBinaryExpr(where.op, leftExpr, rightParam),
663
+ expr: createBinaryExpr(where.op, leftExpr, rightExpr),
656
664
  codecId,
657
665
  paramName
658
666
  };
@@ -1003,6 +1011,7 @@ import {
1003
1011
  createSelectAst,
1004
1012
  createTableRef as createTableRef4
1005
1013
  } from "@prisma-next/sql-relational-core/ast";
1014
+ import { getOperationExpr as getOperationExpr3 } from "@prisma-next/sql-relational-core/utils/guards";
1006
1015
 
1007
1016
  // src/sql/include-builder.ts
1008
1017
  import {
@@ -1011,8 +1020,13 @@ import {
1011
1020
  createOrderByItem,
1012
1021
  createTableRef as createTableRef2
1013
1022
  } from "@prisma-next/sql-relational-core/ast";
1023
+ import {
1024
+ extractBaseColumnRef,
1025
+ isOperationExpr as isOperationExpr2
1026
+ } from "@prisma-next/sql-relational-core/utils/guards";
1014
1027
 
1015
1028
  // src/sql/projection.ts
1029
+ import { isColumnBuilder as isColumnBuilder3 } from "@prisma-next/sql-relational-core/utils/guards";
1016
1030
  function generateAlias(path) {
1017
1031
  if (path.length === 0) {
1018
1032
  errorAliasPathEmpty();
@@ -1044,7 +1058,7 @@ function flattenProjection(projection, tracker, currentPath = []) {
1044
1058
  const columns = [];
1045
1059
  for (const [key, value] of Object.entries(projection)) {
1046
1060
  const path = [...currentPath, key];
1047
- if (isColumnBuilder(value)) {
1061
+ if (isColumnBuilder3(value)) {
1048
1062
  const alias = tracker.register(path);
1049
1063
  aliases.push(alias);
1050
1064
  columns.push(value);
@@ -1069,13 +1083,8 @@ function buildProjectionState(_table, projection, includes) {
1069
1083
  errorIncludeAliasNotFound(key);
1070
1084
  }
1071
1085
  aliases.push(key);
1072
- columns.push({
1073
- kind: "column",
1074
- table: matchingInclude.table.name,
1075
- column: "",
1076
- columnMeta: { nativeType: "jsonb", codecId: "core/json@1", nullable: true }
1077
- });
1078
- } else if (isColumnBuilder(value)) {
1086
+ columns.push(null);
1087
+ } else if (isColumnBuilder3(value)) {
1079
1088
  const alias = tracker.register([key]);
1080
1089
  aliases.push(alias);
1081
1090
  columns.push(value);
@@ -1203,7 +1212,7 @@ function buildIncludeAst(include, contract, paramsMap, paramDescriptors, paramVa
1203
1212
  const orderBy = include.childOrderBy;
1204
1213
  const orderExpr = orderBy.expr;
1205
1214
  const expr = (() => {
1206
- if (isOperationExpr(orderExpr)) {
1215
+ if (isOperationExpr2(orderExpr)) {
1207
1216
  const baseCol = extractBaseColumnRef(orderExpr);
1208
1217
  return createColumnRef3(baseCol.table, baseCol.column);
1209
1218
  }
@@ -1242,10 +1251,9 @@ function buildIncludeAst(include, contract, paramsMap, paramDescriptors, paramVa
1242
1251
  if (!column || !alias) {
1243
1252
  errorMissingColumnForAlias(alias ?? "unknown", idx);
1244
1253
  }
1245
- const col = column;
1246
1254
  return {
1247
1255
  alias,
1248
- expr: createColumnRef3(col.table, col.column)
1256
+ expr: createColumnRef3(column.table, column.column)
1249
1257
  };
1250
1258
  })
1251
1259
  }
@@ -1433,7 +1441,8 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
1433
1441
  const orderByClause = this.state.orderBy ? (() => {
1434
1442
  const orderBy = this.state.orderBy;
1435
1443
  const orderExpr = orderBy.expr;
1436
- const expr = isOperationExpr(orderExpr) ? orderExpr : (() => {
1444
+ const operationExpr = getOperationExpr3(orderExpr);
1445
+ const expr = operationExpr ? operationExpr : (() => {
1437
1446
  const colBuilder = orderExpr;
1438
1447
  return createColumnRef5(colBuilder.table, colBuilder.column);
1439
1448
  })();
@@ -1450,9 +1459,6 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
1450
1459
  errorMissingAlias(i);
1451
1460
  }
1452
1461
  const column = projection.columns[i];
1453
- if (!column) {
1454
- errorMissingColumnForAlias(alias, i);
1455
- }
1456
1462
  const matchingInclude = this.state.includes?.find((inc) => inc.alias === alias);
1457
1463
  if (matchingInclude) {
1458
1464
  projectEntries.push({
@@ -1460,6 +1466,9 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
1460
1466
  expr: { kind: "includeRef", alias }
1461
1467
  });
1462
1468
  } else {
1469
+ if (!column) {
1470
+ errorMissingColumnForAlias(alias, i);
1471
+ }
1463
1472
  const operationExpr = column._operationExpr;
1464
1473
  if (operationExpr) {
1465
1474
  projectEntries.push({
@@ -1468,14 +1477,10 @@ var SelectBuilderImpl = class _SelectBuilderImpl {
1468
1477
  });
1469
1478
  } else {
1470
1479
  const col = column;
1471
- const tableName = col.table;
1472
- const columnName = col.column;
1473
- if (!tableName || !columnName) {
1474
- errorInvalidColumnForAlias(alias, i);
1475
- }
1480
+ assertColumnBuilder(col, "projection column");
1476
1481
  projectEntries.push({
1477
1482
  alias,
1478
- expr: createColumnRef5(tableName, columnName)
1483
+ expr: createColumnRef5(col.table, col.column)
1479
1484
  });
1480
1485
  }
1481
1486
  }
@@ -1561,4 +1566,4 @@ export {
1561
1566
  createJoinOnBuilder2 as createJoinOnBuilder,
1562
1567
  sql
1563
1568
  };
1564
- //# sourceMappingURL=chunk-LKYBFSHM.js.map
1569
+ //# sourceMappingURL=chunk-WA646VY6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/raw.ts","../src/sql/builder.ts","../src/sql/mutation-builder.ts","../src/utils/errors.ts","../src/utils/capabilities.ts","../src/sql/plan.ts","../src/utils/assertions.ts","../src/sql/predicate-builder.ts","../src/sql/select-builder.ts","../src/sql/include-builder.ts","../src/sql/projection.ts","../src/sql/join-builder.ts"],"sourcesContent":["import type {\n ExecutionPlan,\n ParamDescriptor,\n PlanMeta,\n PlanRefs,\n} from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n RawFactory,\n RawFunctionOptions,\n RawTemplateFactory,\n RawTemplateOptions,\n} from '@prisma-next/sql-relational-core/types';\n\nconst RAW_OPTIONS_SENTINEL = Symbol('rawOptions');\n\ntype TemplateInvocation = {\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n};\n\ninterface RawPlanBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nexport function createRawFactory(contract: SqlContract<SqlStorage>): RawFactory {\n const factory = ((first: TemplateStringsArray | string, ...rest: unknown[]) => {\n if (isTemplateInvocation(first)) {\n const { values, options } = splitTemplateValues(rest);\n const compiled = compileTemplateToPositional(first, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n ...(options ? { options } : {}),\n });\n }\n\n const text = first;\n const [options] = rest as [RawFunctionOptions | undefined];\n\n if (!options) {\n throw planInvalid('Function form requires params option');\n }\n\n if (!Array.isArray(options.params)) {\n throw planInvalid('Function form params must be an array');\n }\n\n const paramDescriptors = buildSequentialDescriptors(options.params.length);\n\n return buildRawPlan({\n contract,\n sql: text,\n params: options.params,\n paramDescriptors,\n options,\n });\n }) as RawFactory;\n\n factory.with = (options: RawTemplateOptions) => {\n return ((strings: TemplateStringsArray, ...values: readonly unknown[]) => {\n const compiled = compileTemplateToPositional(strings, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n options,\n });\n }) as RawTemplateFactory;\n };\n\n return factory;\n}\n\nfunction compileTemplateToPositional(\n strings: TemplateStringsArray,\n values: readonly unknown[],\n): TemplateInvocation {\n let sql = '';\n const params: unknown[] = [];\n const paramDescriptors: ParamDescriptor[] = [];\n\n strings.forEach((part, index) => {\n sql += part;\n\n if (index < values.length) {\n const value = values[index];\n const placeholderIndex = params.push(value);\n sql += `$${placeholderIndex}`;\n paramDescriptors.push({\n index: placeholderIndex,\n name: `p${placeholderIndex}`,\n source: 'raw',\n });\n }\n });\n\n return {\n sql,\n params,\n paramDescriptors,\n };\n}\n\nfunction buildRawPlan(args: RawPlanBuildArgs): ExecutionPlan {\n const params = Array.from(args.params);\n const descriptors = args.paramDescriptors.map((descriptor) =>\n Object.freeze({ ...descriptor, source: 'raw' as const }),\n );\n\n const meta = buildRawMeta({\n contract: args.contract,\n paramDescriptors: descriptors,\n ...(args.options ? { options: args.options } : {}),\n });\n\n return Object.freeze({\n sql: args.sql,\n params: Object.freeze(params),\n meta,\n });\n}\n\ninterface RawMetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nfunction buildRawMeta(args: RawMetaBuildArgs): PlanMeta {\n const { contract, paramDescriptors, options } = args;\n\n const meta: PlanMeta = {\n target: contract.target,\n targetFamily: contract.targetFamily,\n coreHash: contract.coreHash,\n ...(contract.profileHash !== undefined ? { profileHash: contract.profileHash } : {}),\n lane: 'raw',\n paramDescriptors: Object.freeze([...paramDescriptors]),\n ...(options?.annotations ? { annotations: Object.freeze({ ...options.annotations }) } : {}),\n ...(options?.refs ? { refs: freezeRefs(options.refs) } : {}),\n ...(options?.projection ? { projection: Object.freeze([...options.projection]) } : {}),\n };\n\n return Object.freeze(meta);\n}\n\nfunction freezeRefs(refs: PlanRefs): PlanRefs {\n return Object.freeze({\n ...(refs.tables ? { tables: Object.freeze([...refs.tables]) } : {}),\n ...(refs.columns\n ? {\n columns: Object.freeze(\n refs.columns.map((col: { table: string; column: string }) => Object.freeze({ ...col })),\n ),\n }\n : {}),\n ...(refs.indexes\n ? {\n indexes: Object.freeze(\n refs.indexes.map(\n (index: { table: string; columns: ReadonlyArray<string>; name?: string }) =>\n Object.freeze({\n ...index,\n columns: Object.freeze([...index.columns]),\n }),\n ),\n ),\n }\n : {}),\n });\n}\n\nfunction buildSequentialDescriptors(count: number): ReadonlyArray<ParamDescriptor> {\n return Array.from({ length: count }, (_, idx) =>\n Object.freeze({\n index: idx + 1,\n name: `p${idx + 1}`,\n source: 'raw' as const,\n }),\n );\n}\n\nfunction isTemplateInvocation(value: unknown): value is TemplateStringsArray {\n return Array.isArray(value) && Object.hasOwn(value, 'raw');\n}\n\ninterface RawTemplateOptionsSentinel {\n readonly [RAW_OPTIONS_SENTINEL]: true;\n readonly value: RawTemplateOptions;\n}\n\nexport function rawOptions(options: RawTemplateOptions): RawTemplateOptionsSentinel {\n return Object.freeze({\n [RAW_OPTIONS_SENTINEL]: true as const,\n value: options,\n });\n}\n\nfunction splitTemplateValues(values: readonly unknown[]): {\n readonly values: readonly unknown[];\n readonly options?: RawTemplateOptions;\n} {\n if (values.length === 0) {\n return { values };\n }\n\n const last = values[values.length - 1];\n if (!isOptionsSentinel(last)) {\n return { values };\n }\n\n return {\n values: values.slice(0, values.length - 1),\n options: last.value,\n };\n}\n\nfunction isOptionsSentinel(value: unknown): value is RawTemplateOptionsSentinel {\n return typeof value === 'object' && value !== null && RAW_OPTIONS_SENTINEL in value;\n}\n","import type {\n ExtractCodecTypes,\n ExtractOperationTypes,\n SqlContract,\n SqlStorage,\n} from '@prisma-next/sql-contract/types';\nimport type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport { createJoinOnBuilder } from '@prisma-next/sql-relational-core/ast';\nimport type { ParamPlaceholder, SqlBuilderOptions } from '@prisma-next/sql-relational-core/types';\nimport { createRawFactory } from '../raw';\nimport type { SelectBuilder } from '../types/public';\nimport { DeleteBuilderImpl, InsertBuilderImpl, UpdateBuilderImpl } from './mutation-builder';\nimport { SelectBuilderImpl } from './select-builder';\n\nexport { createJoinOnBuilder };\nexport type { DeleteBuilder, InsertBuilder, SelectBuilder, UpdateBuilder } from '../types/public';\nexport type { IncludeChildBuilder } from './include-builder';\n\nexport function sql<\n TContract extends SqlContract<SqlStorage>,\n CodecTypesOverride extends Record<\n string,\n { readonly output: unknown }\n > = ExtractCodecTypes<TContract>,\n>(\n options: SqlBuilderOptions<TContract>,\n): SelectBuilder<TContract, unknown, CodecTypesOverride, ExtractOperationTypes<TContract>> {\n type CodecTypes = CodecTypesOverride;\n type Operations = ExtractOperationTypes<TContract>;\n const builder = new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n options,\n ) as SelectBuilder<TContract, unknown, CodecTypes, Operations>;\n const rawFactory = createRawFactory(options.context.contract);\n\n Object.defineProperty(builder, 'raw', {\n value: rawFactory,\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'insert', {\n value: (table: TableRef, values: Record<string, ParamPlaceholder>) => {\n return new InsertBuilderImpl<TContract, CodecTypes>(options, table, values);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'update', {\n value: (table: TableRef, set: Record<string, ParamPlaceholder>) => {\n return new UpdateBuilderImpl<TContract, CodecTypes>(options, table, set);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'delete', {\n value: (table: TableRef) => {\n return new DeleteBuilderImpl<TContract, CodecTypes>(options, table);\n },\n enumerable: true,\n configurable: false,\n });\n\n return builder;\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createParamRef,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyColumnBuilder,\n BinaryBuilder,\n BuildOptions,\n InferReturningRow,\n ParamPlaceholder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport { checkReturningCapability } from '../utils/capabilities';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n errorWhereMustBeCalledForDelete,\n errorWhereMustBeCalledForUpdate,\n} from '../utils/errors';\nimport type { ProjectionState } from '../utils/state';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\n\nexport interface InsertBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface UpdateBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface DeleteBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport class InsertBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements InsertBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly values: Record<string, ParamPlaceholder>;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n values: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.values = values;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new InsertBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.values,\n );\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const values: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.values)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n values[columnName] = createParamRef(index, paramName);\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createInsertAst({\n table: createTableRef(this.table.name),\n values,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class UpdateBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements UpdateBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly set: Record<string, ParamPlaceholder>;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n set: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.set = set;\n }\n\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row> {\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForUpdate();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const set: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.set)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n set[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createUpdateAst({\n table: createTableRef(this.table.name),\n set,\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class DeleteBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements DeleteBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(options: SqlBuilderOptions<TContract>, table: TableRef) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n }\n\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row> {\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForDelete();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createDeleteAst({\n table: createTableRef(this.table.name),\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorLimitMustBeNonNegativeInteger(): never {\n throw planInvalid('Limit must be a non-negative integer');\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorIncludeRequiresCapabilities(target?: string): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities',\n target ? { target } : undefined,\n [\n 'Enable capabilities for your target in contract.capabilities[target]',\n \"For SQL includes, set both 'lateral' and 'jsonAgg' to true\",\n 'If your database lacks lateral/json_agg, use explicit joins + group aggregates',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/3-targets/6-adapters/postgres/README.md',\n ],\n );\n}\n\nexport function errorIncludeCapabilitiesNotTrue(\n target?: string,\n values?: { lateral?: unknown; jsonAgg?: unknown },\n): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities to be true',\n target ? { target, values } : undefined,\n [\n 'Set contract.capabilities[target].lateral = true and .jsonAgg = true',\n 'If the target does not support these, avoid includeMany and compose a two-step plan',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/3-targets/6-adapters/postgres/README.md',\n ],\n );\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorSelfJoinNotSupported(): never {\n throw planInvalid('Self-joins are not supported in MVP');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty');\n}\n\nexport function errorIncludeAliasCollision(alias: string, type: 'projection' | 'include'): never {\n throw planInvalid(\n `Alias collision: include alias \"${alias}\" conflicts with existing ${type} alias`,\n );\n}\n\nexport function errorMissingColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias ${alias ?? 'unknown'} at index ${index}`);\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorInvalidColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias ${alias} at index ${index}`);\n}\n\nexport function errorFromMustBeCalled(): never {\n throw planInvalid('from() must be called before building a query');\n}\n\nexport function errorSelectMustBeCalled(): never {\n throw planInvalid('select() must be called before build()');\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorReturningRequiresCapability(target?: string): never {\n throw planInvalid(\n 'returning() requires returning capability',\n target ? { target } : undefined,\n [\n \"Enable 'returning' for your target in contract.capabilities[target]\",\n 'PostgreSQL supports RETURNING; MySQL does not',\n 'If unsupported, remove returning() and fetch with a follow-up select()',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/3-targets/6-adapters/postgres/README.md',\n ],\n );\n}\n\nexport function errorReturningCapabilityNotTrue(target?: string, value?: unknown): never {\n throw planInvalid(\n 'returning() requires returning capability to be true',\n target ? { target, value } : undefined,\n [\n 'Set contract.capabilities[target].returning = true',\n 'If your database/adapter cannot support RETURNING, remove returning() and select after',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/3-targets/6-adapters/postgres/README.md',\n ],\n );\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorWhereMustBeCalledForUpdate(): never {\n throw planInvalid('where() must be called before building an UPDATE query');\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function errorWhereMustBeCalledForDelete(): never {\n throw planInvalid('where() must be called before building a DELETE query');\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n errorIncludeCapabilitiesNotTrue,\n errorIncludeRequiresCapabilities,\n errorReturningCapabilityNotTrue,\n errorReturningRequiresCapability,\n} from './errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const contractCapabilities = contract.capabilities;\n const declaredTargetCapabilities = contractCapabilities?.[target];\n\n if (!contractCapabilities || !declaredTargetCapabilities) {\n errorIncludeRequiresCapabilities(target);\n }\n\n if (\n declaredTargetCapabilities['lateral'] !== true ||\n declaredTargetCapabilities['jsonAgg'] !== true\n ) {\n errorIncludeCapabilitiesNotTrue(target, {\n lateral: declaredTargetCapabilities['lateral'],\n jsonAgg: declaredTargetCapabilities['jsonAgg'],\n });\n }\n}\n\nexport function checkReturningCapability(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorReturningRequiresCapability(target);\n }\n const targetCapabilities = capabilities[target];\n if (targetCapabilities['returning'] !== true) {\n errorReturningCapabilityNotTrue(target, targetCapabilities['returning']);\n }\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\nimport {\n collectColumnRefs,\n getColumnInfo,\n getOperationExpr,\n isColumnBuilder,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport type { MetaBuildArgs } from '../types/internal';\nimport { assertColumnBuilder } from '../utils/assertions';\nimport { errorMissingColumnForAlias } from '../utils/errors';\n\nexport function buildMeta(args: MetaBuildArgs): PlanMeta {\n const refsColumns = new Map<string, { table: string; column: string }>();\n const refsTables = new Set<string>([args.table.name]);\n\n for (const column of args.projection.columns) {\n // Skip null columns (include placeholders)\n if (!column) {\n continue;\n }\n const operationExpr = getOperationExpr(column);\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n refsColumns.set(`${column.table}.${column.column}`, {\n table: column.table,\n column: column.column,\n });\n }\n }\n\n if (args.joins) {\n for (const join of args.joins) {\n refsTables.add(join.table.name);\n const onLeft = assertColumnBuilder(join.on.left, 'join ON left');\n const onRight = assertColumnBuilder(join.on.right, 'join ON right');\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n }\n\n if (args.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n // Add ON condition columns\n // JoinOnPredicate.left and .right are always ColumnBuilder\n const leftCol = assertColumnBuilder(include.on.left, 'include ON left');\n const rightCol = assertColumnBuilder(include.on.right, 'include ON right');\n refsColumns.set(`${leftCol.table}.${leftCol.column}`, {\n table: leftCol.table,\n column: leftCol.column,\n });\n refsColumns.set(`${rightCol.table}.${rightCol.column}`, {\n table: rightCol.table,\n column: rightCol.column,\n });\n // Add child projection columns\n for (const column of include.childProjection.columns) {\n const col = assertColumnBuilder(column, 'include child projection column');\n\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n // Add child WHERE columns if present\n if (include.childWhere) {\n const colInfo = getColumnInfo(include.childWhere.left);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n // Handle right side of child WHERE clause\n const childWhereRight = include.childWhere.right;\n if (isColumnBuilder(childWhereRight)) {\n const rightColInfo = getColumnInfo(childWhereRight);\n refsColumns.set(`${rightColInfo.table}.${rightColInfo.column}`, {\n table: rightColInfo.table,\n column: rightColInfo.column,\n });\n }\n }\n // Add child ORDER BY columns if present\n if (include.childOrderBy) {\n const orderBy = include.childOrderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n if (orderBy.expr) {\n const colInfo = getColumnInfo(orderBy.expr);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n }\n }\n\n if (args.where) {\n const whereLeft = args.where.left;\n // Check if whereLeft is an OperationExpr directly (not wrapped in ColumnBuilder)\n if (isOperationExpr(whereLeft)) {\n const allRefs = collectColumnRefs(whereLeft);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // Check if whereLeft is a ColumnBuilder with an _operationExpr property\n const operationExpr = (whereLeft as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n const colBuilder = assertColumnBuilder(whereLeft, 'where clause must be a ColumnBuilder');\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n\n // Handle right side of WHERE clause - can be ParamPlaceholder or AnyColumnBuilder\n const whereRight = args.where.right;\n if (isColumnBuilder(whereRight)) {\n const colInfo = getColumnInfo(whereRight);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n\n if (args.orderBy) {\n const orderBy = args.orderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n const orderByExpr = orderBy.expr;\n if (orderByExpr) {\n if (isOperationExpr(orderByExpr)) {\n const allRefs = collectColumnRefs(orderByExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n refsColumns.set(`${orderByExpr.table}.${orderByExpr.column}`, {\n table: orderByExpr.table,\n column: orderByExpr.column,\n });\n }\n }\n }\n\n // Build projection map - mark include aliases with special marker\n const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n // Mark include alias with special marker\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n // Null column means this is an include placeholder, but alias doesn't match includes\n // This shouldn't happen if projection building is correct, but handle gracefully\n errorMissingColumnForAlias(alias, index);\n }\n\n const operationExpr = getOperationExpr(column);\n if (operationExpr) {\n return [alias, `operation:${operationExpr.method}`];\n }\n\n return [alias, `${column.table}.${column.column}`];\n }),\n );\n\n // Build projectionTypes mapping: alias → column type ID\n // Skip include aliases - they don't have column types\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionTypes[alias] = operationExpr.returns.type;\n } else if (operationExpr.returns.kind === 'builtin') {\n projectionTypes[alias] = operationExpr.returns.type;\n }\n } else {\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as unknown as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n }\n }\n\n // Build codec assignments from column types\n // Skip include aliases - they don't need codec entries\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionCodecs[alias] = operationExpr.returns.type;\n }\n } else {\n // Use columnMeta.codecId directly as typeId (already canonicalized)\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as unknown as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n }\n }\n\n // Merge projection and parameter codecs\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n","import { planInvalid } from '@prisma-next/plan';\nimport type { AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\n\n/**\n * Asserts that a ColumnBuilder has table and column properties.\n */\nexport function assertColumnBuilder(col: unknown, context: string): AnyColumnBuilder {\n if (\n typeof col === 'object' &&\n col !== null &&\n 'table' in col &&\n 'column' in col &&\n typeof (col as { table: unknown }).table === 'string' &&\n typeof (col as { column: unknown }).column === 'string'\n ) {\n return col as AnyColumnBuilder;\n }\n throw planInvalid(`ColumnBuilder missing table/column in ${context}`);\n}\n\n/**\n * Asserts that a JoinOnPredicate has valid left and right columns.\n */\nexport function assertJoinOnPredicate(on: {\n left?: { table?: string; column?: string };\n right?: { table?: string; column?: string };\n}): asserts on is {\n left: { table: string; column: string };\n right: { table: string; column: string };\n} {\n if (!on.left?.table || !on.left?.column || !on.right?.table || !on.right?.column) {\n throw planInvalid('JoinOnPredicate missing required table/column properties');\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createBinaryExpr,\n createColumnRef,\n createParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { BinaryBuilder, ParamPlaceholder } from '@prisma-next/sql-relational-core/types';\nimport {\n getColumnInfo,\n getOperationExpr,\n isColumnBuilder,\n isParamPlaceholder,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n} from '../utils/errors';\n\nexport interface BuildWhereExprResult {\n expr: BinaryExpr;\n codecId: string | undefined;\n paramName: string;\n}\n\nexport function buildWhereExpr(\n contract: SqlContract<SqlStorage>,\n where: BinaryBuilder,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): BuildWhereExprResult {\n let leftExpr: ColumnRef | OperationExpr;\n let codecId: string | undefined;\n let rightExpr: ColumnRef | ParamRef;\n let paramName: string;\n\n // Check if where.left is an OperationExpr directly (from operation.eq())\n // or a ColumnBuilder with _operationExpr property\n const operationExpr = getOperationExpr(where.left);\n if (operationExpr) {\n leftExpr = operationExpr;\n } else if (isColumnBuilder(where.left)) {\n // where.left is a ColumnBuilder - use proper type narrowing\n const { table, column } = getColumnInfo(where.left);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[column];\n if (!columnMeta) {\n errorUnknownColumn(column, table);\n }\n\n codecId = columnMeta.codecId;\n leftExpr = createColumnRef(table, column);\n } else {\n // where.left is neither OperationExpr nor ColumnBuilder - invalid state\n errorFailedToBuildWhereClause();\n }\n\n // Handle where.right - can be ParamPlaceholder or AnyColumnBuilder\n if (isParamPlaceholder(where.right)) {\n // Handle param placeholder (existing logic)\n const placeholder: ParamPlaceholder = where.right;\n paramName = placeholder.name;\n\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = values.push(value);\n\n // Construct descriptor directly from validated StorageColumn\n if (isColumnBuilder(where.left)) {\n const { table, column } = getColumnInfo(where.left);\n const contractTable = contract.storage.tables[table];\n const columnMeta = contractTable?.columns[column];\n if (columnMeta) {\n descriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table, column },\n nullable: columnMeta.nullable,\n codecId: columnMeta.codecId,\n nativeType: columnMeta.nativeType,\n });\n }\n }\n\n rightExpr = createParamRef(index, paramName);\n } else if (isColumnBuilder(where.right)) {\n // Handle column builder on the right\n const { table, column } = getColumnInfo(where.right);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[column];\n if (!columnMeta) {\n errorUnknownColumn(column, table);\n }\n\n rightExpr = createColumnRef(table, column);\n // Use a placeholder paramName for column references (not used for params)\n paramName = '';\n } else {\n // where.right is neither ParamPlaceholder nor ColumnBuilder - invalid state\n errorFailedToBuildWhereClause();\n }\n\n return {\n expr: createBinaryExpr(where.op, leftExpr, rightExpr),\n codecId,\n paramName,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n Direction,\n IncludeAst,\n IncludeRef,\n JoinAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnBuilder,\n createOrderByItem,\n createSelectAst,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n JoinOnBuilder,\n JoinOnPredicate,\n NestedProjection,\n OrderBuilder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport { getOperationExpr } from '@prisma-next/sql-relational-core/utils/guards';\nimport type { ProjectionInput } from '../types/internal';\nimport { assertColumnBuilder } from '../utils/assertions';\nimport { checkIncludeCapabilities } from '../utils/capabilities';\nimport {\n errorChildProjectionEmpty,\n errorFromMustBeCalled,\n errorIncludeAliasCollision,\n errorLimitMustBeNonNegativeInteger,\n errorMissingAlias,\n errorMissingColumnForAlias,\n errorSelectMustBeCalled,\n errorSelfJoinNotSupported,\n errorUnknownTable,\n} from '../utils/errors';\nimport type { BuilderState, IncludeState, JoinState, ProjectionState } from '../utils/state';\nimport {\n buildIncludeAst,\n type IncludeChildBuilder,\n IncludeChildBuilderImpl,\n} from './include-builder';\nimport { buildJoinAst } from './join-builder';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport class SelectBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n Row = unknown,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Includes extends Record<string, unknown> = Record<string, never>,\n> {\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly context: QueryLaneContext<TContract>;\n private state: BuilderState = {};\n\n constructor(options: SqlBuilderOptions<TContract>, state?: BuilderState) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.codecTypes = options.context.contract.mappings.codecTypes as CodecTypes;\n if (state) {\n this.state = state;\n }\n }\n\n from(table: TableRef): SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>> {\n return new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n {\n context: this.context,\n },\n { ...this.state, from: table },\n );\n }\n\n innerJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('inner', table, on);\n }\n\n leftJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('left', table, on);\n }\n\n rightJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('right', table, on);\n }\n\n fullJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('full', table, on);\n }\n\n includeMany<\n ChildProjection extends NestedProjection,\n ChildRow = InferNestedProjectionRow<ChildProjection, CodecTypes>,\n AliasName extends string = string,\n >(\n childTable: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n childBuilder: (\n child: IncludeChildBuilder<TContract, CodecTypes, unknown>,\n ) => IncludeChildBuilder<TContract, CodecTypes, ChildRow>,\n options?: { alias?: AliasName },\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes & { [K in AliasName]: ChildRow }> {\n checkIncludeCapabilities(this.contract);\n\n if (!this.contract.storage.tables[childTable.name]) {\n errorUnknownTable(childTable.name);\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n // Validate ON uses column equality\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = onPredicate.left as { table: string; column: string };\n const onRight = onPredicate.right as { table: string; column: string };\n if (onLeft.table === onRight.table) {\n errorSelfJoinNotSupported();\n }\n\n // Build child builder\n const childBuilderImpl = new IncludeChildBuilderImpl<TContract, CodecTypes, unknown>(\n this.contract,\n this.codecTypes,\n childTable,\n );\n const builtChild = childBuilder(\n childBuilderImpl as IncludeChildBuilder<TContract, CodecTypes, unknown>,\n );\n const childState = (\n builtChild as IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>\n ).getState();\n\n // Validate child projection is non-empty\n if (childState.childProjection.aliases.length === 0) {\n errorChildProjectionEmpty();\n }\n\n // Determine alias\n const alias = options?.alias ?? childTable.name;\n\n // Check for alias collisions with existing projection\n if (this.state.projection) {\n if (this.state.projection.aliases.includes(alias)) {\n errorIncludeAliasCollision(alias, 'projection');\n }\n }\n\n // Check for alias collisions with existing includes\n const existingIncludes = this.state.includes ?? [];\n if (existingIncludes.some((inc) => inc.alias === alias)) {\n errorIncludeAliasCollision(alias, 'include');\n }\n\n const includeState: IncludeState = {\n alias,\n table: childTable,\n on: onPredicate,\n childProjection: childState.childProjection,\n ...(childState.childWhere !== undefined ? { childWhere: childState.childWhere } : {}),\n ...(childState.childOrderBy !== undefined ? { childOrderBy: childState.childOrderBy } : {}),\n ...(childState.childLimit !== undefined ? { childLimit: childState.childLimit } : {}),\n };\n\n const newIncludes = [...existingIncludes, includeState];\n\n // Type-level: Update Includes map with new include\n // The AliasName generic parameter is inferred from options.alias, allowing TypeScript\n // to track include definitions across multiple includeMany() calls and infer correct\n // array types when select() includes boolean true for include references\n type NewIncludes = Includes & { [K in AliasName]: ChildRow };\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, NewIncludes>(\n {\n context: this.context,\n },\n { ...this.state, includes: newIncludes },\n );\n }\n\n private _addJoin(\n joinType: 'inner' | 'left' | 'right' | 'full',\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n const fromTable = this.ensureFrom();\n\n if (!this.contract.storage.tables[table.name]) {\n errorUnknownTable(table.name);\n }\n\n if (table.name === fromTable.name) {\n errorSelfJoinNotSupported();\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n const joinState: JoinState = {\n joinType,\n table,\n on: onPredicate,\n };\n\n const existingJoins = this.state.joins ?? [];\n const newJoins = [...existingJoins, joinState];\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, joins: newJoins },\n );\n }\n\n where(expr: AnyBinaryBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, where: expr },\n );\n }\n\n select<P extends ProjectionInput>(\n projection: P,\n ): SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n > {\n const table = this.ensureFrom();\n const projectionState = buildProjectionState(table, projection, this.state.includes);\n\n return new SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n >(\n {\n context: this.context,\n },\n { ...this.state, projection: projectionState },\n );\n }\n\n orderBy(order: AnyOrderBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, orderBy: order },\n );\n }\n\n limit(count: number): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, limit: count },\n );\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const table = this.ensureFrom();\n const projection = this.ensureProjection();\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[table.name];\n\n if (!contractTable) {\n errorUnknownTable(table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = this.state.where\n ? buildWhereExpr(this.contract, this.state.where, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const orderByClause = this.state.orderBy\n ? (() => {\n const orderBy = this.state.orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n const operationExpr = getOperationExpr(orderExpr);\n const expr: ColumnRef | OperationExpr = operationExpr\n ? operationExpr\n : (() => {\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n const joins = this.state.joins?.map((join) => buildJoinAst(join));\n\n const includes = this.state.includes?.map((include) =>\n buildIncludeAst(include, this.contract, paramsMap, paramDescriptors, paramValues),\n );\n\n // Build projection with support for includeRef and OperationExpr\n const projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> =\n [];\n for (let i = 0; i < projection.aliases.length; i++) {\n const alias = projection.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projection.columns[i];\n\n // Check if this alias matches an include alias first\n // Include placeholders have null columns\n const matchingInclude = this.state.includes?.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n // This is an include reference - column can be null for placeholders\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else {\n // Not an include - column must not be null\n if (!column) {\n errorMissingColumnForAlias(alias, i);\n }\n // Check if this column has an operation expression\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n projectEntries.push({\n alias,\n expr: operationExpr,\n });\n } else {\n // This is a regular column\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as { table: string; column: string };\n assertColumnBuilder(col, 'projection column');\n projectEntries.push({\n alias,\n expr: createColumnRef(col.table, col.column),\n });\n }\n }\n }\n\n const ast = createSelectAst({\n from: createTableRef(table.name),\n joins,\n includes,\n project: projectEntries,\n where: whereExpr,\n orderBy: orderByClause,\n limit: this.state.limit,\n } as {\n from: TableRef;\n joins?: ReadonlyArray<JoinAst>;\n includes?: ReadonlyArray<IncludeAst>;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;\n where?: BinaryExpr;\n orderBy?: ReadonlyArray<{ expr: ColumnRef | OperationExpr; dir: Direction }>;\n limit?: number;\n });\n\n const planMeta = buildMeta({\n contract: this.contract,\n table,\n projection,\n joins: this.state.joins,\n includes: this.state.includes,\n paramDescriptors,\n paramCodecs,\n where: this.state.where,\n orderBy: this.state.orderBy,\n } as {\n contract: SqlContract<SqlStorage>;\n table: TableRef;\n projection: ProjectionState;\n joins?: ReadonlyArray<JoinState>;\n includes?: ReadonlyArray<IncludeState>;\n where?: BinaryBuilder;\n orderBy?: AnyOrderBuilder;\n paramDescriptors: ParamDescriptor[];\n paramCodecs?: Record<string, string>;\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: planMeta,\n });\n\n return queryPlan;\n }\n\n private ensureFrom() {\n if (!this.state.from) {\n errorFromMustBeCalled();\n }\n\n return this.state.from;\n }\n\n private ensureProjection() {\n if (!this.state.projection) {\n errorSelectMustBeCalled();\n }\n\n return this.state.projection;\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n IncludeAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnExpr,\n createOrderByItem,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n CodecTypes as CodecTypesMap,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n extractBaseColumnRef,\n isOperationExpr,\n} from '@prisma-next/sql-relational-core/utils/guards';\nimport {\n errorChildProjectionMustBeSpecified,\n errorLimitMustBeNonNegativeInteger,\n errorMissingColumnForAlias,\n} from '../utils/errors';\nimport type { IncludeState, ProjectionState } from '../utils/state';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport interface IncludeChildBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n ChildRow = unknown,\n> {\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilder<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>>;\n where(expr: AnyBinaryBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n orderBy(order: AnyOrderBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n limit(count: number): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n}\n\nexport class IncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesMap = CodecTypesMap,\n ChildRow = unknown,\n> implements IncludeChildBuilder<TContract, CodecTypes, ChildRow>\n{\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly table: TableRef;\n private childProjection?: ProjectionState;\n private childWhere?: BinaryBuilder;\n private childOrderBy?: OrderBuilder;\n private childLimit?: number;\n\n constructor(contract: TContract, codecTypes: CodecTypes, table: TableRef) {\n this.contract = contract;\n this.codecTypes = codecTypes;\n this.table = table;\n }\n\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilderImpl<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>> {\n const projectionState = buildProjectionState(this.table, projection);\n const builder = new IncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n InferNestedProjectionRow<P, CodecTypes>\n >(this.contract, this.codecTypes, this.table);\n builder.childProjection = projectionState;\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n where(expr: AnyBinaryBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n builder.childWhere = expr;\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n orderBy(order: AnyOrderBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n builder.childOrderBy = order;\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n limit(count: number): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n builder.childLimit = count;\n return builder;\n }\n\n getState(): {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } {\n if (!this.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const state: {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } = {\n childProjection: this.childProjection,\n };\n if (this.childWhere !== undefined) {\n state.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n state.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n state.childLimit = this.childLimit;\n }\n return state;\n }\n}\n\nexport function buildIncludeAst(\n include: IncludeState,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n paramDescriptors: ParamDescriptor[],\n paramValues: unknown[],\n): IncludeAst {\n const childOrderBy = include.childOrderBy\n ? (() => {\n const orderBy = include.childOrderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(orderExpr)) {\n const baseCol = extractBaseColumnRef(orderExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n // orderExpr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n let childWhere: BinaryExpr | undefined;\n if (include.childWhere) {\n const whereResult = buildWhereExpr(\n contract,\n include.childWhere,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n const onLeft = include.on.left as { table: string; column: string };\n const onRight = include.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n\n return {\n kind: 'includeMany' as const,\n alias: include.alias,\n child: {\n table: createTableRef(include.table.name),\n on: onExpr,\n ...(childWhere ? { where: childWhere } : {}),\n ...(childOrderBy ? { orderBy: childOrderBy } : {}),\n ...(typeof include.childLimit === 'number' ? { limit: include.childLimit } : {}),\n project: include.childProjection.aliases.map((alias, idx) => {\n const column = include.childProjection.columns[idx];\n if (!column || !alias) {\n errorMissingColumnForAlias(alias ?? 'unknown', idx);\n }\n\n return {\n alias,\n expr: createColumnRef(column.table, column.column),\n };\n }),\n },\n };\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder, NestedProjection } from '@prisma-next/sql-relational-core/types';\nimport { isColumnBuilder } from '@prisma-next/sql-relational-core/utils/guards';\nimport type { ProjectionInput } from '../types/internal';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\nimport type { IncludeState, ProjectionState } from '../utils/state';\n\nexport function generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: AnyColumnBuilder[] } {\n const aliases: string[] = [];\n const columns: AnyColumnBuilder[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n const path = [...currentPath, key];\n\n if (isColumnBuilder(value)) {\n const alias = tracker.register(path);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value, tracker, path);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionValue(path);\n }\n }\n\n return { aliases, columns };\n}\n\nexport function buildProjectionState(\n _table: TableRef,\n projection: ProjectionInput,\n includes?: ReadonlyArray<IncludeState>,\n): ProjectionState {\n const tracker = new AliasTracker();\n const aliases: string[] = [];\n const columns: (AnyColumnBuilder | null)[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n if (value === true) {\n // Boolean true means this is an include reference\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n // For include references, we track the alias but use null as placeholder\n // The actual handling happens in AST building where we create includeRef\n // Using null instead of invalid ColumnBuilder avoids code smell\n aliases.push(key);\n columns.push(null);\n } else if (isColumnBuilder(value)) {\n const alias = tracker.register([key]);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value as NestedProjection, tracker, [key]);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionKey(key);\n }\n }\n\n if (aliases.length === 0) {\n errorProjectionEmpty();\n }\n\n return { aliases, columns };\n}\n","import type { JoinAst } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoin,\n createJoinOnExpr,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { JoinState } from '../utils/state';\n\nexport function buildJoinAst(join: JoinState): JoinAst {\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = join.on.left as { table: string; column: string };\n const onRight = join.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n return createJoin(join.joinType, createTableRef(join.table.name), onExpr);\n}\n"],"mappings":"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","names":["options","sql","createJoinOnBuilder","createColumnRef","createParamRef","planInvalid","planInvalid","planInvalid","getColumnInfo","getOperationExpr","isColumnBuilder","getOperationExpr","isColumnBuilder","getColumnInfo","createParamRef","createColumnRef","createColumnRef","createOrderByItem","createTableRef","getOperationExpr","createColumnRef","createTableRef","isOperationExpr","isColumnBuilder","isColumnBuilder","isOperationExpr","createColumnRef","createTableRef","createColumnRef","createJoinOnExpr","createTableRef","getOperationExpr","createColumnRef","createOrderByItem","createTableRef"]}
@@ -2,7 +2,7 @@ import {
2
2
  createJoinOnBuilder,
3
3
  rawOptions,
4
4
  sql
5
- } from "../chunk-LKYBFSHM.js";
5
+ } from "../chunk-WA646VY6.js";
6
6
  export {
7
7
  createJoinOnBuilder,
8
8
  rawOptions,
package/dist/index.d.ts CHANGED
@@ -35,7 +35,7 @@ interface DeleteBuilder<TContract extends SqlContract<SqlStorage> = SqlContract<
35
35
 
36
36
  interface ProjectionState {
37
37
  readonly aliases: string[];
38
- readonly columns: AnyColumnBuilder[];
38
+ readonly columns: (AnyColumnBuilder | null)[];
39
39
  }
40
40
  interface JoinState {
41
41
  readonly joinType: 'inner' | 'left' | 'right' | 'full';
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  createJoinOnBuilder,
3
3
  rawOptions,
4
4
  sql
5
- } from "./chunk-LKYBFSHM.js";
5
+ } from "./chunk-WA646VY6.js";
6
6
  export {
7
7
  createJoinOnBuilder,
8
8
  rawOptions,
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@prisma-next/sql-lane",
3
- "version": "0.1.0-dev.2",
3
+ "version": "0.1.0-dev.20",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "Relational DSL and raw SQL helpers for Prisma Next",
7
7
  "dependencies": {
8
- "@prisma-next/contract": "0.1.0-dev.2",
9
- "@prisma-next/plan": "0.1.0-dev.2",
10
- "@prisma-next/sql-contract": "0.1.0-dev.2",
11
- "@prisma-next/sql-relational-core": "0.1.0-dev.2"
8
+ "@prisma-next/contract": "0.1.0-dev.20",
9
+ "@prisma-next/plan": "0.1.0-dev.20",
10
+ "@prisma-next/sql-contract": "0.1.0-dev.20",
11
+ "@prisma-next/sql-relational-core": "0.1.0-dev.20"
12
12
  },
13
13
  "devDependencies": {
14
14
  "@types/pg": "^8.11.10",
@@ -16,9 +16,9 @@
16
16
  "tsup": "^8.3.0",
17
17
  "typescript": "^5.9.3",
18
18
  "vite-tsconfig-paths": "^5.1.4",
19
- "vitest": "^2.1.1",
20
- "@prisma-next/sql-contract-ts": "0.1.0-dev.2",
21
- "@prisma-next/sql-runtime": "0.1.0-dev.2",
19
+ "vitest": "^4.0.16",
20
+ "@prisma-next/sql-contract-ts": "0.1.0-dev.20",
21
+ "@prisma-next/sql-runtime": "0.1.0-dev.20",
22
22
  "@prisma-next/test-utils": "0.0.1"
23
23
  },
24
24
  "files": [
@@ -40,6 +40,8 @@
40
40
  "test:coverage": "vitest run --coverage",
41
41
  "typecheck": "tsc --project tsconfig.json --noEmit",
42
42
  "lint": "biome check . --config-path ../../../../biome.json --error-on-warnings",
43
+ "lint:fix": "biome check --write . --config-path ../../../../biome.json",
44
+ "lint:fix:unsafe": "biome check --write --unsafe . --config-path ../../../../biome.json",
43
45
  "clean": "node ../../../../scripts/clean.mjs"
44
46
  }
45
47
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/raw.ts","../src/sql/builder.ts","../src/sql/mutation-builder.ts","../src/utils/errors.ts","../src/utils/capabilities.ts","../src/sql/plan.ts","../src/utils/guards.ts","../src/sql/predicate-builder.ts","../src/sql/select-builder.ts","../src/sql/include-builder.ts","../src/sql/projection.ts","../src/sql/join-builder.ts"],"sourcesContent":["import type {\n ExecutionPlan,\n ParamDescriptor,\n PlanMeta,\n PlanRefs,\n} from '@prisma-next/contract/types';\nimport { planInvalid } from '@prisma-next/plan';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type {\n RawFactory,\n RawFunctionOptions,\n RawTemplateFactory,\n RawTemplateOptions,\n} from '@prisma-next/sql-relational-core/types';\n\nconst POSTGRES_TARGET = 'postgres';\n\nconst RAW_OPTIONS_SENTINEL = Symbol('rawOptions');\n\ntype TemplateInvocation = {\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n};\n\ninterface RawPlanBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly sql: string;\n readonly params: readonly unknown[];\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nexport function createRawFactory(contract: SqlContract<SqlStorage>): RawFactory {\n if (contract.target !== POSTGRES_TARGET) {\n throw planInvalid('Raw lane currently supports only postgres target', {\n expectedTarget: POSTGRES_TARGET,\n actualTarget: contract.target,\n });\n }\n\n const factory = ((first: TemplateStringsArray | string, ...rest: unknown[]) => {\n if (isTemplateInvocation(first)) {\n const { values, options } = splitTemplateValues(rest);\n const compiled = compileTemplateToPositional(first, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n ...(options ? { options } : {}),\n });\n }\n\n const text = first;\n const [options] = rest as [RawFunctionOptions | undefined];\n\n if (!options) {\n throw planInvalid('Function form requires params option');\n }\n\n if (!Array.isArray(options.params)) {\n throw planInvalid('Function form params must be an array');\n }\n\n const paramDescriptors = buildSequentialDescriptors(options.params.length);\n\n return buildRawPlan({\n contract,\n sql: text,\n params: options.params,\n paramDescriptors,\n options,\n });\n }) as RawFactory;\n\n factory.with = (options: RawTemplateOptions) => {\n return ((strings: TemplateStringsArray, ...values: readonly unknown[]) => {\n const compiled = compileTemplateToPositional(strings, values);\n return buildRawPlan({\n contract,\n sql: compiled.sql,\n params: compiled.params,\n paramDescriptors: compiled.paramDescriptors,\n options,\n });\n }) as RawTemplateFactory;\n };\n\n return factory;\n}\n\nfunction compileTemplateToPositional(\n strings: TemplateStringsArray,\n values: readonly unknown[],\n): TemplateInvocation {\n let sql = '';\n const params: unknown[] = [];\n const paramDescriptors: ParamDescriptor[] = [];\n\n strings.forEach((part, index) => {\n sql += part;\n\n if (index < values.length) {\n const value = values[index];\n const placeholderIndex = params.push(value);\n sql += `$${placeholderIndex}`;\n paramDescriptors.push({\n index: placeholderIndex,\n name: `p${placeholderIndex}`,\n source: 'raw',\n });\n }\n });\n\n return {\n sql,\n params,\n paramDescriptors,\n };\n}\n\nfunction buildRawPlan(args: RawPlanBuildArgs): ExecutionPlan {\n const params = Array.from(args.params);\n const descriptors = args.paramDescriptors.map((descriptor) =>\n Object.freeze({ ...descriptor, source: 'raw' as const }),\n );\n\n const meta = buildRawMeta({\n contract: args.contract,\n paramDescriptors: descriptors,\n ...(args.options ? { options: args.options } : {}),\n });\n\n return Object.freeze({\n sql: args.sql,\n params: Object.freeze(params),\n meta,\n });\n}\n\ninterface RawMetaBuildArgs {\n readonly contract: SqlContract<SqlStorage>;\n readonly paramDescriptors: ReadonlyArray<ParamDescriptor>;\n readonly options?: RawTemplateOptions;\n}\n\nfunction buildRawMeta(args: RawMetaBuildArgs): PlanMeta {\n const { contract, paramDescriptors, options } = args;\n\n const meta: PlanMeta = {\n target: POSTGRES_TARGET,\n ...(contract.targetFamily ? { targetFamily: contract.targetFamily } : {}),\n coreHash: contract.coreHash,\n ...(contract.profileHash !== undefined ? { profileHash: contract.profileHash } : {}),\n lane: 'raw',\n paramDescriptors: Object.freeze([...paramDescriptors]),\n ...(options?.annotations ? { annotations: Object.freeze({ ...options.annotations }) } : {}),\n ...(options?.refs ? { refs: freezeRefs(options.refs) } : {}),\n ...(options?.projection ? { projection: Object.freeze([...options.projection]) } : {}),\n };\n\n return Object.freeze(meta);\n}\n\nfunction freezeRefs(refs: PlanRefs): PlanRefs {\n return Object.freeze({\n ...(refs.tables ? { tables: Object.freeze([...refs.tables]) } : {}),\n ...(refs.columns\n ? {\n columns: Object.freeze(\n refs.columns.map((col: { table: string; column: string }) => Object.freeze({ ...col })),\n ),\n }\n : {}),\n ...(refs.indexes\n ? {\n indexes: Object.freeze(\n refs.indexes.map(\n (index: { table: string; columns: ReadonlyArray<string>; name?: string }) =>\n Object.freeze({\n ...index,\n columns: Object.freeze([...index.columns]),\n }),\n ),\n ),\n }\n : {}),\n });\n}\n\nfunction buildSequentialDescriptors(count: number): ReadonlyArray<ParamDescriptor> {\n return Array.from({ length: count }, (_, idx) =>\n Object.freeze({\n index: idx + 1,\n name: `p${idx + 1}`,\n source: 'raw' as const,\n }),\n );\n}\n\nfunction isTemplateInvocation(value: unknown): value is TemplateStringsArray {\n return Array.isArray(value) && Object.hasOwn(value, 'raw');\n}\n\ninterface RawTemplateOptionsSentinel {\n readonly [RAW_OPTIONS_SENTINEL]: true;\n readonly value: RawTemplateOptions;\n}\n\nexport function rawOptions(options: RawTemplateOptions): RawTemplateOptionsSentinel {\n return Object.freeze({\n [RAW_OPTIONS_SENTINEL]: true as const,\n value: options,\n });\n}\n\nfunction splitTemplateValues(values: readonly unknown[]): {\n readonly values: readonly unknown[];\n readonly options?: RawTemplateOptions;\n} {\n if (values.length === 0) {\n return { values };\n }\n\n const last = values[values.length - 1];\n if (!isOptionsSentinel(last)) {\n return { values };\n }\n\n return {\n values: values.slice(0, values.length - 1),\n options: last.value,\n };\n}\n\nfunction isOptionsSentinel(value: unknown): value is RawTemplateOptionsSentinel {\n return typeof value === 'object' && value !== null && RAW_OPTIONS_SENTINEL in value;\n}\n","import type {\n ExtractCodecTypes,\n ExtractOperationTypes,\n SqlContract,\n SqlStorage,\n} from '@prisma-next/sql-contract/types';\nimport type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport { createJoinOnBuilder } from '@prisma-next/sql-relational-core/ast';\nimport type { ParamPlaceholder, SqlBuilderOptions } from '@prisma-next/sql-relational-core/types';\nimport { createRawFactory } from '../raw';\nimport type { SelectBuilder } from '../types/public';\nimport { DeleteBuilderImpl, InsertBuilderImpl, UpdateBuilderImpl } from './mutation-builder';\nimport { SelectBuilderImpl } from './select-builder';\n\nexport { createJoinOnBuilder };\nexport type { DeleteBuilder, InsertBuilder, SelectBuilder, UpdateBuilder } from '../types/public';\nexport type { IncludeChildBuilder } from './include-builder';\n\nexport function sql<\n TContract extends SqlContract<SqlStorage>,\n CodecTypesOverride extends Record<\n string,\n { readonly output: unknown }\n > = ExtractCodecTypes<TContract>,\n>(\n options: SqlBuilderOptions<TContract>,\n): SelectBuilder<TContract, unknown, CodecTypesOverride, ExtractOperationTypes<TContract>> {\n type CodecTypes = CodecTypesOverride;\n type Operations = ExtractOperationTypes<TContract>;\n const builder = new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n options,\n ) as SelectBuilder<TContract, unknown, CodecTypes, Operations>;\n const rawFactory = createRawFactory(options.context.contract);\n\n Object.defineProperty(builder, 'raw', {\n value: rawFactory,\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'insert', {\n value: (table: TableRef, values: Record<string, ParamPlaceholder>) => {\n return new InsertBuilderImpl<TContract, CodecTypes>(options, table, values);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'update', {\n value: (table: TableRef, set: Record<string, ParamPlaceholder>) => {\n return new UpdateBuilderImpl<TContract, CodecTypes>(options, table, set);\n },\n enumerable: true,\n configurable: false,\n });\n\n Object.defineProperty(builder, 'delete', {\n value: (table: TableRef) => {\n return new DeleteBuilderImpl<TContract, CodecTypes>(options, table);\n },\n enumerable: true,\n configurable: false,\n });\n\n return builder;\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport type { ColumnRef, ParamRef, TableRef } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createDeleteAst,\n createInsertAst,\n createParamRef,\n createTableRef,\n createUpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyColumnBuilder,\n BinaryBuilder,\n BuildOptions,\n InferReturningRow,\n ParamPlaceholder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport { checkReturningCapability } from '../utils/capabilities';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n errorWhereMustBeCalledForDelete,\n errorWhereMustBeCalledForUpdate,\n} from '../utils/errors';\nimport type { ProjectionState } from '../utils/state';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\n\nexport interface InsertBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface UpdateBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport interface DeleteBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> {\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row>;\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>>;\n build(options?: BuildOptions): SqlQueryPlan<Row>;\n}\n\nexport class InsertBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements InsertBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly values: Record<string, ParamPlaceholder>;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n values: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.values = values;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): InsertBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new InsertBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.values,\n );\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const values: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.values)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n values[columnName] = createParamRef(index, paramName);\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createInsertAst({\n table: createTableRef(this.table.name),\n values,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class UpdateBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements UpdateBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private readonly set: Record<string, ParamPlaceholder>;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(\n options: SqlBuilderOptions<TContract>,\n table: TableRef,\n set: Record<string, ParamPlaceholder>,\n ) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n this.set = set;\n }\n\n where(predicate: BinaryBuilder): UpdateBuilder<TContract, CodecTypes, Row> {\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): UpdateBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new UpdateBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n this.set,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForUpdate();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const set: Record<string, ColumnRef | ParamRef> = {};\n for (const [columnName, placeholder] of Object.entries(this.set)) {\n if (!contractTable.columns[columnName]) {\n errorUnknownColumn(columnName, this.table.name);\n }\n\n const paramName = placeholder.name;\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = paramValues.push(value);\n\n const columnMeta = contractTable.columns[columnName];\n const codecId = columnMeta?.codecId;\n if (paramName && codecId) {\n paramCodecs[paramName] = codecId;\n }\n\n paramDescriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table: this.table.name, column: columnName },\n ...(codecId ? { codecId } : {}),\n ...(columnMeta?.nativeType ? { nativeType: columnMeta.nativeType } : {}),\n ...(columnMeta?.nullable !== undefined ? { nullable: columnMeta.nullable } : {}),\n });\n\n set[columnName] = createParamRef(index, paramName);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createUpdateAst({\n table: createTableRef(this.table.name),\n set,\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n\nexport class DeleteBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { output: unknown }> = Record<string, never>,\n Row = unknown,\n> implements DeleteBuilder<TContract, CodecTypes, Row>\n{\n private readonly contract: TContract;\n private readonly context: QueryLaneContext<TContract>;\n private readonly table: TableRef;\n private wherePredicate?: BinaryBuilder;\n private returningColumns: AnyColumnBuilder[] = [];\n\n constructor(options: SqlBuilderOptions<TContract>, table: TableRef) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.table = table;\n }\n\n where(predicate: BinaryBuilder): DeleteBuilder<TContract, CodecTypes, Row> {\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, Row>(\n {\n context: this.context,\n },\n this.table,\n );\n builder.wherePredicate = predicate;\n builder.returningColumns = [...this.returningColumns];\n return builder;\n }\n\n returning<const Columns extends readonly AnyColumnBuilder[]>(\n ...columns: Columns\n ): DeleteBuilder<TContract, CodecTypes, InferReturningRow<Columns>> {\n checkReturningCapability(this.contract);\n\n const builder = new DeleteBuilderImpl<TContract, CodecTypes, InferReturningRow<Columns>>(\n {\n context: this.context,\n },\n this.table,\n );\n if (this.wherePredicate) {\n builder.wherePredicate = this.wherePredicate;\n }\n builder.returningColumns = [...this.returningColumns, ...columns];\n return builder;\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n if (!this.wherePredicate) {\n errorWhereMustBeCalledForDelete();\n }\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const contractTable = this.contract.storage.tables[this.table.name];\n if (!contractTable) {\n errorUnknownTable(this.table.name);\n }\n\n const whereResult = buildWhereExpr(\n this.contract,\n this.wherePredicate,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n const whereExpr = whereResult.expr;\n if (!whereExpr) {\n errorFailedToBuildWhereClause();\n }\n\n if (whereResult.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const returning: ColumnRef[] = this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { table: string; column: string };\n return createColumnRef(c.table, c.column);\n });\n\n const ast = createDeleteAst({\n table: createTableRef(this.table.name),\n where: whereExpr,\n returning,\n });\n\n const returningProjection: ProjectionState = {\n aliases: this.returningColumns.map((col) => {\n // TypeScript can't narrow ColumnBuilder properly\n const c = col as unknown as { column: string };\n return c.column;\n }),\n columns: this.returningColumns,\n };\n\n const planMeta = buildMeta({\n contract: this.contract,\n table: this.table,\n projection: returning.length > 0 ? returningProjection : { aliases: [], columns: [] },\n paramDescriptors,\n ...(Object.keys(paramCodecs).length > 0 ? { paramCodecs } : {}),\n where: this.wherePredicate,\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: {\n ...planMeta,\n lane: 'dsl',\n annotations: {\n ...planMeta.annotations,\n intent: 'write',\n isMutation: true,\n hasWhere: true,\n },\n },\n });\n\n return queryPlan;\n }\n}\n","import { planInvalid } from '@prisma-next/plan';\n\nexport function errorAliasPathEmpty(): never {\n throw planInvalid('Alias path cannot be empty');\n}\n\nexport function errorAliasCollision(path: string[], alias: string, existingPath?: string[]): never {\n throw planInvalid(\n `Alias collision: path ${path.join('.')} would generate alias \"${alias}\" which conflicts with path ${existingPath?.join('.') ?? 'unknown'}`,\n );\n}\n\nexport function errorLimitMustBeNonNegativeInteger(): never {\n throw planInvalid('Limit must be a non-negative integer');\n}\n\nexport function errorChildProjectionMustBeSpecified(): never {\n throw planInvalid('Child projection must be specified');\n}\n\nexport function errorIncludeRequiresCapabilities(target?: string): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities',\n target ? { target } : undefined,\n [\n 'Enable capabilities for your target in contract.capabilities[target]',\n \"For SQL includes, set both 'lateral' and 'jsonAgg' to true\",\n 'If your database lacks lateral/json_agg, use explicit joins + group aggregates',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorIncludeCapabilitiesNotTrue(\n target?: string,\n values?: { lateral?: unknown; jsonAgg?: unknown },\n): never {\n throw planInvalid(\n 'includeMany requires lateral and jsonAgg capabilities to be true',\n target ? { target, values } : undefined,\n [\n 'Set contract.capabilities[target].lateral = true and .jsonAgg = true',\n 'If the target does not support these, avoid includeMany and compose a two-step plan',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownTable(tableName: string): never {\n throw planInvalid(`Unknown table ${tableName}`);\n}\n\nexport function errorSelfJoinNotSupported(): never {\n throw planInvalid('Self-joins are not supported in MVP');\n}\n\nexport function errorChildProjectionEmpty(): never {\n throw planInvalid('Child projection must not be empty');\n}\n\nexport function errorIncludeAliasCollision(alias: string, type: 'projection' | 'include'): never {\n throw planInvalid(\n `Alias collision: include alias \"${alias}\" conflicts with existing ${type} alias`,\n );\n}\n\nexport function errorMissingColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Missing column for alias ${alias ?? 'unknown'} at index ${index}`);\n}\n\nexport function errorMissingAlias(index: number): never {\n throw planInvalid(`Missing alias at index ${index}`);\n}\n\nexport function errorInvalidColumnForAlias(alias: string, index: number): never {\n throw planInvalid(`Invalid column for alias ${alias} at index ${index}`);\n}\n\nexport function errorFromMustBeCalled(): never {\n throw planInvalid('from() must be called before building a query');\n}\n\nexport function errorSelectMustBeCalled(): never {\n throw planInvalid('select() must be called before build()');\n}\n\nexport function errorMissingParameter(paramName: string): never {\n throw planInvalid(`Missing value for parameter ${paramName}`);\n}\n\nexport function errorInvalidProjectionValue(path: string[]): never {\n throw planInvalid(\n `Invalid projection value at path ${path.join('.')}: expected ColumnBuilder or nested object`,\n );\n}\n\nexport function errorIncludeAliasNotFound(alias: string): never {\n throw planInvalid(\n `Include alias \"${alias}\" not found. Did you call includeMany() with alias \"${alias}\"?`,\n );\n}\n\nexport function errorInvalidProjectionKey(key: string): never {\n throw planInvalid(\n `Invalid projection value at key \"${key}\": expected ColumnBuilder, boolean true (for includes), or nested object`,\n );\n}\n\nexport function errorProjectionEmpty(): never {\n throw planInvalid('select() requires at least one column or include');\n}\n\nexport function errorReturningRequiresCapability(target?: string): never {\n throw planInvalid(\n 'returning() requires returning capability',\n target ? { target } : undefined,\n [\n \"Enable 'returning' for your target in contract.capabilities[target]\",\n 'PostgreSQL supports RETURNING; MySQL does not',\n 'If unsupported, remove returning() and fetch with a follow-up select()',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorReturningCapabilityNotTrue(target?: string, value?: unknown): never {\n throw planInvalid(\n 'returning() requires returning capability to be true',\n target ? { target, value } : undefined,\n [\n 'Set contract.capabilities[target].returning = true',\n 'If your database/adapter cannot support RETURNING, remove returning() and select after',\n ],\n [\n 'docs/Architecture Overview.md',\n 'docs/reference/extensions-glossary.md',\n 'packages/targets/postgres-adapter/README.md',\n ],\n );\n}\n\nexport function errorUnknownColumn(columnName: string, tableName: string): never {\n throw planInvalid(`Unknown column ${columnName} in table ${tableName}`);\n}\n\nexport function errorWhereMustBeCalledForUpdate(): never {\n throw planInvalid('where() must be called before building an UPDATE query');\n}\n\nexport function errorFailedToBuildWhereClause(): never {\n throw planInvalid('Failed to build WHERE clause');\n}\n\nexport function errorWhereMustBeCalledForDelete(): never {\n throw planInvalid('where() must be called before building a DELETE query');\n}\n","import type { SqlContract, SqlStorage } from '@prisma-next/sql-contract/types';\nimport {\n errorIncludeCapabilitiesNotTrue,\n errorIncludeRequiresCapabilities,\n errorReturningCapabilityNotTrue,\n errorReturningRequiresCapability,\n} from './errors';\n\nexport function checkIncludeCapabilities(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const contractCapabilities = contract.capabilities;\n const declaredTargetCapabilities = contractCapabilities?.[target];\n\n if (!contractCapabilities || !declaredTargetCapabilities) {\n errorIncludeRequiresCapabilities(target);\n }\n\n if (\n declaredTargetCapabilities['lateral'] !== true ||\n declaredTargetCapabilities['jsonAgg'] !== true\n ) {\n errorIncludeCapabilitiesNotTrue(target, {\n lateral: declaredTargetCapabilities['lateral'],\n jsonAgg: declaredTargetCapabilities['jsonAgg'],\n });\n }\n}\n\nexport function checkReturningCapability(contract: SqlContract<SqlStorage>): void {\n const target = contract.target;\n const capabilities = contract.capabilities;\n if (!capabilities || !capabilities[target]) {\n errorReturningRequiresCapability(target);\n }\n const targetCapabilities = capabilities[target];\n if (targetCapabilities['returning'] !== true) {\n errorReturningCapabilityNotTrue(target, targetCapabilities['returning']);\n }\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport { compact } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\nimport type { MetaBuildArgs } from '../types/internal';\nimport { errorMissingColumnForAlias } from '../utils/errors';\nimport { collectColumnRefs, getColumnInfo, isOperationExpr } from '../utils/guards';\n\nexport function buildMeta(args: MetaBuildArgs): PlanMeta {\n const refsColumns = new Map<string, { table: string; column: string }>();\n const refsTables = new Set<string>([args.table.name]);\n\n for (const column of args.projection.columns) {\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // column is ColumnBuilder - TypeScript can't narrow properly\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n }\n\n if (args.joins) {\n for (const join of args.joins) {\n refsTables.add(join.table.name);\n // TypeScript can't narrow ColumnBuilder properly\n const onLeft = join.on.left as unknown as { table: string; column: string };\n const onRight = join.on.right as unknown as { table: string; column: string };\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n }\n\n if (args.includes) {\n for (const include of args.includes) {\n refsTables.add(include.table.name);\n // Add ON condition columns\n // JoinOnPredicate.left and .right are always ColumnBuilder\n const onLeft = include.on.left as unknown as { table: string; column: string };\n const onRight = include.on.right as unknown as { table: string; column: string };\n if (onLeft.table && onLeft.column && onRight.table && onRight.column) {\n refsColumns.set(`${onLeft.table}.${onLeft.column}`, {\n table: onLeft.table,\n column: onLeft.column,\n });\n refsColumns.set(`${onRight.table}.${onRight.column}`, {\n table: onRight.table,\n column: onRight.column,\n });\n }\n // Add child projection columns\n for (const column of include.childProjection.columns) {\n const col = column as unknown as { table?: string; column?: string };\n if (col.table && col.column) {\n refsColumns.set(`${col.table}.${col.column}`, {\n table: col.table,\n column: col.column,\n });\n }\n }\n // Add child WHERE columns if present\n if (include.childWhere) {\n const colInfo = getColumnInfo(include.childWhere.left);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n // Add child ORDER BY columns if present\n if (include.childOrderBy) {\n const orderBy = include.childOrderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n if (orderBy.expr) {\n const colInfo = getColumnInfo(orderBy.expr);\n refsColumns.set(`${colInfo.table}.${colInfo.column}`, {\n table: colInfo.table,\n column: colInfo.column,\n });\n }\n }\n }\n }\n\n if (args.where) {\n const whereLeft = args.where.left;\n const operationExpr = (whereLeft as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n const allRefs = collectColumnRefs(operationExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // whereLeft is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = whereLeft as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n\n if (args.orderBy) {\n const orderBy = args.orderBy as unknown as {\n expr?: AnyColumnBuilder | OperationExpr;\n };\n const orderByExpr = orderBy.expr;\n if (orderByExpr) {\n if (isOperationExpr(orderByExpr)) {\n const allRefs = collectColumnRefs(orderByExpr);\n for (const ref of allRefs) {\n refsColumns.set(`${ref.table}.${ref.column}`, {\n table: ref.table,\n column: ref.column,\n });\n }\n } else {\n // orderByExpr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = orderByExpr as unknown as { table?: string; column?: string };\n if (colBuilder.table && colBuilder.column) {\n refsColumns.set(`${colBuilder.table}.${colBuilder.column}`, {\n table: colBuilder.table,\n column: colBuilder.column,\n });\n }\n }\n }\n }\n\n // Build projection map - mark include aliases with special marker\n const includeAliases = new Set(args.includes?.map((inc) => inc.alias) ?? []);\n const projectionMap = Object.fromEntries(\n args.projection.aliases.map((alias, index) => {\n if (includeAliases.has(alias)) {\n // Mark include alias with special marker\n return [alias, `include:${alias}`];\n }\n const column = args.projection.columns[index];\n if (!column) {\n errorMissingColumnForAlias(alias, index);\n }\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as unknown as {\n table?: string;\n column?: string;\n _operationExpr?: OperationExpr;\n };\n if (!col.table || !col.column) {\n // This is a placeholder column for an include - skip it\n return [alias, `include:${alias}`];\n }\n const operationExpr = col._operationExpr;\n if (operationExpr) {\n return [alias, `operation:${operationExpr.method}`];\n }\n return [alias, `${col.table}.${col.column}`];\n }),\n );\n\n // Build projectionTypes mapping: alias → column type ID\n // Skip include aliases - they don't have column types\n const projectionTypes: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionTypes[alias] = operationExpr.returns.type;\n } else if (operationExpr.returns.kind === 'builtin') {\n projectionTypes[alias] = operationExpr.returns.type;\n }\n } else {\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as unknown as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionTypes[alias] = codecId;\n }\n }\n }\n\n // Build codec assignments from column types\n // Skip include aliases - they don't need codec entries\n const projectionCodecs: Record<string, string> = {};\n for (let i = 0; i < args.projection.aliases.length; i++) {\n const alias = args.projection.aliases[i];\n if (!alias || includeAliases.has(alias)) {\n continue;\n }\n const column = args.projection.columns[i];\n if (!column) {\n continue;\n }\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n if (operationExpr.returns.kind === 'typeId') {\n projectionCodecs[alias] = operationExpr.returns.type;\n }\n } else {\n // Use columnMeta.codecId directly as typeId (already canonicalized)\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as unknown as { columnMeta?: { codecId: string } };\n const columnMeta = col.columnMeta;\n const codecId = columnMeta?.codecId;\n if (codecId) {\n projectionCodecs[alias] = codecId;\n }\n }\n }\n\n // Merge projection and parameter codecs\n const allCodecs: Record<string, string> = {\n ...projectionCodecs,\n ...(args.paramCodecs ? args.paramCodecs : {}),\n };\n\n return Object.freeze(\n compact({\n target: args.contract.target,\n targetFamily: args.contract.targetFamily,\n coreHash: args.contract.coreHash,\n lane: 'dsl',\n refs: {\n tables: Array.from(refsTables),\n columns: Array.from(refsColumns.values()),\n },\n projection: projectionMap,\n projectionTypes: Object.keys(projectionTypes).length > 0 ? projectionTypes : undefined,\n annotations:\n Object.keys(allCodecs).length > 0\n ? Object.freeze({ codecs: Object.freeze(allCodecs) })\n : undefined,\n paramDescriptors: args.paramDescriptors,\n profileHash: args.contract.profileHash,\n }) as PlanMeta,\n );\n}\n","import type {\n ColumnRef,\n LiteralExpr,\n OperationExpr,\n ParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder } from '@prisma-next/sql-relational-core/types';\n\n/**\n * Recursively extracts the base ColumnRef from an OperationExpr.\n * If the expression is already a ColumnRef, it is returned directly.\n */\nexport function extractBaseColumnRef(expr: ColumnRef | OperationExpr): ColumnRef {\n if (expr.kind === 'col') {\n return expr;\n }\n return extractBaseColumnRef(expr.self);\n}\n\n/**\n * Recursively collects all ColumnRef nodes from an expression tree.\n * Handles nested OperationExpr structures by traversing both self and args.\n */\nexport function collectColumnRefs(\n expr: ColumnRef | ParamRef | LiteralExpr | OperationExpr,\n): ColumnRef[] {\n if (expr.kind === 'col') {\n return [expr];\n }\n if (expr.kind === 'operation') {\n const refs: ColumnRef[] = collectColumnRefs(expr.self);\n for (const arg of expr.args) {\n refs.push(...collectColumnRefs(arg));\n }\n return refs;\n }\n return [];\n}\n\n/**\n * Type predicate to check if an expression is an OperationExpr.\n */\nexport function isOperationExpr(expr: AnyColumnBuilder | OperationExpr): expr is OperationExpr {\n return typeof expr === 'object' && expr !== null && 'kind' in expr && expr.kind === 'operation';\n}\n\n/**\n * Helper to extract table and column from a ColumnBuilder or OperationExpr.\n * For OperationExpr, recursively unwraps to find the base ColumnRef.\n */\nexport function getColumnInfo(expr: AnyColumnBuilder | OperationExpr): {\n table: string;\n column: string;\n} {\n if (isOperationExpr(expr)) {\n const baseCol = extractBaseColumnRef(expr);\n return { table: baseCol.table, column: baseCol.column };\n }\n // expr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = expr as unknown as { table: string; column: string };\n return { table: colBuilder.table, column: colBuilder.column };\n}\n\n/**\n * Type predicate to check if a value is a ColumnBuilder.\n */\nexport function isColumnBuilder(value: unknown): value is AnyColumnBuilder {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'kind' in value &&\n (value as { kind: unknown }).kind === 'column'\n );\n}\n\n/**\n * Extracts and returns an OperationExpr from a builder.\n * Returns the OperationExpr if the builder is an OperationExpr or has an _operationExpr property,\n * otherwise returns undefined.\n */\nexport function getOperationExpr(\n builder: AnyColumnBuilder | OperationExpr,\n): OperationExpr | undefined {\n if (isOperationExpr(builder)) {\n return builder;\n }\n const builderWithExpr = builder as unknown as { _operationExpr?: OperationExpr };\n return builderWithExpr._operationExpr;\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type { BinaryExpr, ColumnRef, OperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport {\n createBinaryExpr,\n createColumnRef,\n createParamRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { BinaryBuilder } from '@prisma-next/sql-relational-core/types';\nimport {\n errorFailedToBuildWhereClause,\n errorMissingParameter,\n errorUnknownColumn,\n errorUnknownTable,\n} from '../utils/errors';\nimport { getColumnInfo, getOperationExpr, isColumnBuilder } from '../utils/guards';\n\nexport interface BuildWhereExprResult {\n expr: BinaryExpr;\n codecId: string | undefined;\n paramName: string;\n}\n\nexport function buildWhereExpr(\n contract: SqlContract<SqlStorage>,\n where: BinaryBuilder,\n paramsMap: Record<string, unknown>,\n descriptors: ParamDescriptor[],\n values: unknown[],\n): BuildWhereExprResult {\n const placeholder = where.right;\n const paramName = placeholder.name;\n\n if (!Object.hasOwn(paramsMap, paramName)) {\n errorMissingParameter(paramName);\n }\n\n const value = paramsMap[paramName];\n const index = values.push(value);\n\n let leftExpr: ColumnRef | OperationExpr;\n let codecId: string | undefined;\n\n // Check if where.left is an OperationExpr directly (from operation.eq())\n // or a ColumnBuilder with _operationExpr property\n const operationExpr = getOperationExpr(where.left);\n if (operationExpr) {\n leftExpr = operationExpr;\n } else if (isColumnBuilder(where.left)) {\n // where.left is a ColumnBuilder - use proper type narrowing\n const { table, column } = getColumnInfo(where.left);\n\n const contractTable = contract.storage.tables[table];\n if (!contractTable) {\n errorUnknownTable(table);\n }\n\n const columnMeta: StorageColumn | undefined = contractTable.columns[column];\n if (!columnMeta) {\n errorUnknownColumn(column, table);\n }\n\n // Construct descriptor directly from validated StorageColumn\n descriptors.push({\n name: paramName,\n source: 'dsl',\n refs: { table, column },\n nullable: columnMeta.nullable,\n codecId: columnMeta.codecId,\n nativeType: columnMeta.nativeType,\n });\n\n codecId = columnMeta.codecId;\n leftExpr = createColumnRef(table, column);\n } else {\n // where.left is neither OperationExpr nor ColumnBuilder - invalid state\n errorFailedToBuildWhereClause();\n }\n\n const rightParam = createParamRef(index, paramName);\n return {\n expr: createBinaryExpr(where.op, leftExpr, rightParam),\n codecId,\n paramName,\n };\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n Direction,\n IncludeAst,\n IncludeRef,\n JoinAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnBuilder,\n createOrderByItem,\n createSelectAst,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type { QueryLaneContext } from '@prisma-next/sql-relational-core/query-lane-context';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n BuildOptions,\n InferNestedProjectionRow,\n JoinOnBuilder,\n JoinOnPredicate,\n NestedProjection,\n OrderBuilder,\n SqlBuilderOptions,\n} from '@prisma-next/sql-relational-core/types';\nimport type { ProjectionInput } from '../types/internal';\nimport { checkIncludeCapabilities } from '../utils/capabilities';\nimport {\n errorChildProjectionEmpty,\n errorFromMustBeCalled,\n errorIncludeAliasCollision,\n errorInvalidColumnForAlias,\n errorLimitMustBeNonNegativeInteger,\n errorMissingAlias,\n errorMissingColumnForAlias,\n errorSelectMustBeCalled,\n errorSelfJoinNotSupported,\n errorUnknownTable,\n} from '../utils/errors';\nimport { isOperationExpr } from '../utils/guards';\nimport type { BuilderState, IncludeState, JoinState, ProjectionState } from '../utils/state';\nimport {\n buildIncludeAst,\n type IncludeChildBuilder,\n IncludeChildBuilderImpl,\n} from './include-builder';\nimport { buildJoinAst } from './join-builder';\nimport { buildMeta } from './plan';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport class SelectBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n Row = unknown,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n Includes extends Record<string, unknown> = Record<string, never>,\n> {\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly context: QueryLaneContext<TContract>;\n private state: BuilderState = {};\n\n constructor(options: SqlBuilderOptions<TContract>, state?: BuilderState) {\n this.context = options.context;\n this.contract = options.context.contract;\n this.codecTypes = options.context.contract.mappings.codecTypes as CodecTypes;\n if (state) {\n this.state = state;\n }\n }\n\n from(table: TableRef): SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>> {\n return new SelectBuilderImpl<TContract, unknown, CodecTypes, Record<string, never>>(\n {\n context: this.context,\n },\n { ...this.state, from: table },\n );\n }\n\n innerJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('inner', table, on);\n }\n\n leftJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('left', table, on);\n }\n\n rightJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('right', table, on);\n }\n\n fullJoin(\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return this._addJoin('full', table, on);\n }\n\n includeMany<\n ChildProjection extends NestedProjection,\n ChildRow = InferNestedProjectionRow<ChildProjection, CodecTypes>,\n AliasName extends string = string,\n >(\n childTable: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n childBuilder: (\n child: IncludeChildBuilder<TContract, CodecTypes, unknown>,\n ) => IncludeChildBuilder<TContract, CodecTypes, ChildRow>,\n options?: { alias?: AliasName },\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes & { [K in AliasName]: ChildRow }> {\n checkIncludeCapabilities(this.contract);\n\n if (!this.contract.storage.tables[childTable.name]) {\n errorUnknownTable(childTable.name);\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n // Validate ON uses column equality\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = onPredicate.left as { table: string; column: string };\n const onRight = onPredicate.right as { table: string; column: string };\n if (onLeft.table === onRight.table) {\n errorSelfJoinNotSupported();\n }\n\n // Build child builder\n const childBuilderImpl = new IncludeChildBuilderImpl<TContract, CodecTypes, unknown>(\n this.contract,\n this.codecTypes,\n childTable,\n );\n const builtChild = childBuilder(\n childBuilderImpl as IncludeChildBuilder<TContract, CodecTypes, unknown>,\n );\n const childState = (\n builtChild as IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>\n ).getState();\n\n // Validate child projection is non-empty\n if (childState.childProjection.aliases.length === 0) {\n errorChildProjectionEmpty();\n }\n\n // Determine alias\n const alias = options?.alias ?? childTable.name;\n\n // Check for alias collisions with existing projection\n if (this.state.projection) {\n if (this.state.projection.aliases.includes(alias)) {\n errorIncludeAliasCollision(alias, 'projection');\n }\n }\n\n // Check for alias collisions with existing includes\n const existingIncludes = this.state.includes ?? [];\n if (existingIncludes.some((inc) => inc.alias === alias)) {\n errorIncludeAliasCollision(alias, 'include');\n }\n\n const includeState: IncludeState = {\n alias,\n table: childTable,\n on: onPredicate,\n childProjection: childState.childProjection,\n ...(childState.childWhere !== undefined ? { childWhere: childState.childWhere } : {}),\n ...(childState.childOrderBy !== undefined ? { childOrderBy: childState.childOrderBy } : {}),\n ...(childState.childLimit !== undefined ? { childLimit: childState.childLimit } : {}),\n };\n\n const newIncludes = [...existingIncludes, includeState];\n\n // Type-level: Update Includes map with new include\n // The AliasName generic parameter is inferred from options.alias, allowing TypeScript\n // to track include definitions across multiple includeMany() calls and infer correct\n // array types when select() includes boolean true for include references\n type NewIncludes = Includes & { [K in AliasName]: ChildRow };\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, NewIncludes>(\n {\n context: this.context,\n },\n { ...this.state, includes: newIncludes },\n );\n }\n\n private _addJoin(\n joinType: 'inner' | 'left' | 'right' | 'full',\n table: TableRef,\n on: (on: JoinOnBuilder) => JoinOnPredicate,\n ): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n const fromTable = this.ensureFrom();\n\n if (!this.contract.storage.tables[table.name]) {\n errorUnknownTable(table.name);\n }\n\n if (table.name === fromTable.name) {\n errorSelfJoinNotSupported();\n }\n\n const joinOnBuilder = createJoinOnBuilder();\n const onPredicate = on(joinOnBuilder);\n\n const joinState: JoinState = {\n joinType,\n table,\n on: onPredicate,\n };\n\n const existingJoins = this.state.joins ?? [];\n const newJoins = [...existingJoins, joinState];\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, joins: newJoins },\n );\n }\n\n where(expr: AnyBinaryBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, where: expr },\n );\n }\n\n select<P extends ProjectionInput>(\n projection: P,\n ): SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n > {\n const table = this.ensureFrom();\n const projectionState = buildProjectionState(table, projection, this.state.includes);\n\n return new SelectBuilderImpl<\n TContract,\n InferNestedProjectionRow<P, CodecTypes, Includes>,\n CodecTypes,\n Includes\n >(\n {\n context: this.context,\n },\n { ...this.state, projection: projectionState },\n );\n }\n\n orderBy(order: AnyOrderBuilder): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, orderBy: order },\n );\n }\n\n limit(count: number): SelectBuilderImpl<TContract, Row, CodecTypes, Includes> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n return new SelectBuilderImpl<TContract, Row, CodecTypes, Includes>(\n {\n context: this.context,\n },\n { ...this.state, limit: count },\n );\n }\n\n build(options?: BuildOptions): SqlQueryPlan<Row> {\n const table = this.ensureFrom();\n const projection = this.ensureProjection();\n\n const paramsMap = (options?.params ?? {}) as Record<string, unknown>;\n const contractTable = this.contract.storage.tables[table.name];\n\n if (!contractTable) {\n errorUnknownTable(table.name);\n }\n\n const paramDescriptors: ParamDescriptor[] = [];\n const paramValues: unknown[] = [];\n const paramCodecs: Record<string, string> = {};\n\n const whereResult = this.state.where\n ? buildWhereExpr(this.contract, this.state.where, paramsMap, paramDescriptors, paramValues)\n : undefined;\n const whereExpr = whereResult?.expr;\n\n if (whereResult?.codecId && whereResult.paramName) {\n paramCodecs[whereResult.paramName] = whereResult.codecId;\n }\n\n const orderByClause = this.state.orderBy\n ? (() => {\n const orderBy = this.state.orderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n const expr: ColumnRef | OperationExpr = isOperationExpr(orderExpr)\n ? orderExpr\n : (() => {\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n const joins = this.state.joins?.map((join) => buildJoinAst(join));\n\n const includes = this.state.includes?.map((include) =>\n buildIncludeAst(include, this.contract, paramsMap, paramDescriptors, paramValues),\n );\n\n // Build projection with support for includeRef and OperationExpr\n const projectEntries: Array<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }> =\n [];\n for (let i = 0; i < projection.aliases.length; i++) {\n const alias = projection.aliases[i];\n if (!alias) {\n errorMissingAlias(i);\n }\n const column = projection.columns[i];\n if (!column) {\n errorMissingColumnForAlias(alias, i);\n }\n\n // Check if this alias matches an include alias\n const matchingInclude = this.state.includes?.find((inc) => inc.alias === alias);\n if (matchingInclude) {\n // This is an include reference\n projectEntries.push({\n alias,\n expr: { kind: 'includeRef', alias },\n });\n } else {\n // Check if this column has an operation expression\n const operationExpr = (column as { _operationExpr?: OperationExpr })._operationExpr;\n if (operationExpr) {\n projectEntries.push({\n alias,\n expr: operationExpr,\n });\n } else {\n // This is a regular column\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as { table: string; column: string };\n const tableName = col.table;\n const columnName = col.column;\n if (!tableName || !columnName) {\n errorInvalidColumnForAlias(alias, i);\n }\n projectEntries.push({\n alias,\n expr: createColumnRef(tableName, columnName),\n });\n }\n }\n }\n\n const ast = createSelectAst({\n from: createTableRef(table.name),\n joins,\n includes,\n project: projectEntries,\n where: whereExpr,\n orderBy: orderByClause,\n limit: this.state.limit,\n } as {\n from: TableRef;\n joins?: ReadonlyArray<JoinAst>;\n includes?: ReadonlyArray<IncludeAst>;\n project: ReadonlyArray<{ alias: string; expr: ColumnRef | IncludeRef | OperationExpr }>;\n where?: BinaryExpr;\n orderBy?: ReadonlyArray<{ expr: ColumnRef | OperationExpr; dir: Direction }>;\n limit?: number;\n });\n\n const planMeta = buildMeta({\n contract: this.contract,\n table,\n projection,\n joins: this.state.joins,\n includes: this.state.includes,\n paramDescriptors,\n paramCodecs,\n where: this.state.where,\n orderBy: this.state.orderBy,\n } as {\n contract: SqlContract<SqlStorage>;\n table: TableRef;\n projection: ProjectionState;\n joins?: ReadonlyArray<JoinState>;\n includes?: ReadonlyArray<IncludeState>;\n where?: BinaryBuilder;\n orderBy?: AnyOrderBuilder;\n paramDescriptors: ParamDescriptor[];\n paramCodecs?: Record<string, string>;\n });\n\n const queryPlan: SqlQueryPlan<Row> = Object.freeze({\n ast,\n params: paramValues,\n meta: planMeta,\n });\n\n return queryPlan;\n }\n\n private ensureFrom() {\n if (!this.state.from) {\n errorFromMustBeCalled();\n }\n\n return this.state.from;\n }\n\n private ensureProjection() {\n if (!this.state.projection) {\n errorSelectMustBeCalled();\n }\n\n return this.state.projection;\n }\n}\n","import type { ParamDescriptor } from '@prisma-next/contract/types';\nimport type { SqlContract, SqlStorage, StorageColumn } from '@prisma-next/sql-contract/types';\nimport type {\n BinaryExpr,\n ColumnRef,\n IncludeAst,\n OperationExpr,\n TableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoinOnExpr,\n createOrderByItem,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type {\n AnyBinaryBuilder,\n AnyOrderBuilder,\n BinaryBuilder,\n CodecTypes as CodecTypesMap,\n InferNestedProjectionRow,\n NestedProjection,\n OrderBuilder,\n} from '@prisma-next/sql-relational-core/types';\nimport {\n errorChildProjectionMustBeSpecified,\n errorLimitMustBeNonNegativeInteger,\n errorMissingColumnForAlias,\n} from '../utils/errors';\nimport { extractBaseColumnRef, isOperationExpr } from '../utils/guards';\nimport type { IncludeState, ProjectionState } from '../utils/state';\nimport { buildWhereExpr } from './predicate-builder';\nimport { buildProjectionState } from './projection';\n\nexport interface IncludeChildBuilder<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends Record<string, { readonly output: unknown }> = Record<string, never>,\n ChildRow = unknown,\n> {\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilder<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>>;\n where(expr: AnyBinaryBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n orderBy(order: AnyOrderBuilder): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n limit(count: number): IncludeChildBuilder<TContract, CodecTypes, ChildRow>;\n}\n\nexport class IncludeChildBuilderImpl<\n TContract extends SqlContract<SqlStorage> = SqlContract<SqlStorage>,\n CodecTypes extends CodecTypesMap = CodecTypesMap,\n ChildRow = unknown,\n> implements IncludeChildBuilder<TContract, CodecTypes, ChildRow>\n{\n private readonly contract: TContract;\n private readonly codecTypes: CodecTypes;\n private readonly table: TableRef;\n private childProjection?: ProjectionState;\n private childWhere?: BinaryBuilder;\n private childOrderBy?: OrderBuilder;\n private childLimit?: number;\n\n constructor(contract: TContract, codecTypes: CodecTypes, table: TableRef) {\n this.contract = contract;\n this.codecTypes = codecTypes;\n this.table = table;\n }\n\n select<P extends NestedProjection>(\n projection: P,\n ): IncludeChildBuilderImpl<TContract, CodecTypes, InferNestedProjectionRow<P, CodecTypes>> {\n const projectionState = buildProjectionState(this.table, projection);\n const builder = new IncludeChildBuilderImpl<\n TContract,\n CodecTypes,\n InferNestedProjectionRow<P, CodecTypes>\n >(this.contract, this.codecTypes, this.table);\n builder.childProjection = projectionState;\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n where(expr: AnyBinaryBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n builder.childWhere = expr;\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n orderBy(order: AnyOrderBuilder): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n builder.childOrderBy = order;\n if (this.childLimit !== undefined) {\n builder.childLimit = this.childLimit;\n }\n return builder;\n }\n\n limit(count: number): IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow> {\n if (!Number.isInteger(count) || count < 0) {\n errorLimitMustBeNonNegativeInteger();\n }\n\n const builder = new IncludeChildBuilderImpl<TContract, CodecTypes, ChildRow>(\n this.contract,\n this.codecTypes,\n this.table,\n );\n if (this.childProjection !== undefined) {\n builder.childProjection = this.childProjection;\n }\n if (this.childWhere !== undefined) {\n builder.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n builder.childOrderBy = this.childOrderBy;\n }\n builder.childLimit = count;\n return builder;\n }\n\n getState(): {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } {\n if (!this.childProjection) {\n errorChildProjectionMustBeSpecified();\n }\n const state: {\n childProjection: ProjectionState;\n childWhere?: AnyBinaryBuilder;\n childOrderBy?: AnyOrderBuilder;\n childLimit?: number;\n } = {\n childProjection: this.childProjection,\n };\n if (this.childWhere !== undefined) {\n state.childWhere = this.childWhere;\n }\n if (this.childOrderBy !== undefined) {\n state.childOrderBy = this.childOrderBy;\n }\n if (this.childLimit !== undefined) {\n state.childLimit = this.childLimit;\n }\n return state;\n }\n}\n\nexport function buildIncludeAst(\n include: IncludeState,\n contract: SqlContract<SqlStorage>,\n paramsMap: Record<string, unknown>,\n paramDescriptors: ParamDescriptor[],\n paramValues: unknown[],\n): IncludeAst {\n const childOrderBy = include.childOrderBy\n ? (() => {\n const orderBy = include.childOrderBy as OrderBuilder<string, StorageColumn, unknown>;\n const orderExpr = orderBy.expr;\n const expr: ColumnRef | OperationExpr = (() => {\n if (isOperationExpr(orderExpr)) {\n const baseCol = extractBaseColumnRef(orderExpr);\n return createColumnRef(baseCol.table, baseCol.column);\n }\n // orderExpr is ColumnBuilder - TypeScript can't narrow properly\n const colBuilder = orderExpr as { table: string; column: string };\n return createColumnRef(colBuilder.table, colBuilder.column);\n })();\n return [createOrderByItem(expr, orderBy.dir)];\n })()\n : undefined;\n\n let childWhere: BinaryExpr | undefined;\n if (include.childWhere) {\n const whereResult = buildWhereExpr(\n contract,\n include.childWhere,\n paramsMap,\n paramDescriptors,\n paramValues,\n );\n childWhere = whereResult.expr;\n }\n\n const onLeft = include.on.left as { table: string; column: string };\n const onRight = include.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n\n return {\n kind: 'includeMany' as const,\n alias: include.alias,\n child: {\n table: createTableRef(include.table.name),\n on: onExpr,\n ...(childWhere ? { where: childWhere } : {}),\n ...(childOrderBy ? { orderBy: childOrderBy } : {}),\n ...(typeof include.childLimit === 'number' ? { limit: include.childLimit } : {}),\n project: include.childProjection.aliases.map((alias, idx) => {\n const column = include.childProjection.columns[idx];\n if (!column || !alias) {\n errorMissingColumnForAlias(alias ?? 'unknown', idx);\n }\n // TypeScript can't narrow ColumnBuilder properly\n const col = column as { table: string; column: string };\n return {\n alias,\n expr: createColumnRef(col.table, col.column),\n };\n }),\n },\n };\n}\n","import type { TableRef } from '@prisma-next/sql-relational-core/ast';\nimport type { AnyColumnBuilder, NestedProjection } from '@prisma-next/sql-relational-core/types';\nimport type { ProjectionInput } from '../types/internal';\nimport {\n errorAliasCollision,\n errorAliasPathEmpty,\n errorIncludeAliasNotFound,\n errorInvalidProjectionKey,\n errorInvalidProjectionValue,\n errorProjectionEmpty,\n} from '../utils/errors';\nimport { isColumnBuilder } from '../utils/guards';\nimport type { IncludeState, ProjectionState } from '../utils/state';\n\nexport function generateAlias(path: string[]): string {\n if (path.length === 0) {\n errorAliasPathEmpty();\n }\n return path.join('_');\n}\n\nexport class AliasTracker {\n private readonly aliases = new Set<string>();\n private readonly aliasToPath = new Map<string, string[]>();\n\n register(path: string[]): string {\n const alias = generateAlias(path);\n if (this.aliases.has(alias)) {\n const existingPath = this.aliasToPath.get(alias);\n errorAliasCollision(path, alias, existingPath);\n }\n this.aliases.add(alias);\n this.aliasToPath.set(alias, path);\n return alias;\n }\n\n getPath(alias: string): string[] | undefined {\n return this.aliasToPath.get(alias);\n }\n\n has(alias: string): boolean {\n return this.aliases.has(alias);\n }\n}\n\nexport function flattenProjection(\n projection: NestedProjection,\n tracker: AliasTracker,\n currentPath: string[] = [],\n): { aliases: string[]; columns: AnyColumnBuilder[] } {\n const aliases: string[] = [];\n const columns: AnyColumnBuilder[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n const path = [...currentPath, key];\n\n if (isColumnBuilder(value)) {\n const alias = tracker.register(path);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value, tracker, path);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionValue(path);\n }\n }\n\n return { aliases, columns };\n}\n\nexport function buildProjectionState(\n _table: TableRef,\n projection: ProjectionInput,\n includes?: ReadonlyArray<IncludeState>,\n): ProjectionState {\n const tracker = new AliasTracker();\n const aliases: string[] = [];\n const columns: AnyColumnBuilder[] = [];\n\n for (const [key, value] of Object.entries(projection)) {\n if (value === true) {\n // Boolean true means this is an include reference\n const matchingInclude = includes?.find((inc) => inc.alias === key);\n if (!matchingInclude) {\n errorIncludeAliasNotFound(key);\n }\n // For include references, we track the alias but use a placeholder column\n // The actual handling happens in AST building where we create includeRef\n aliases.push(key);\n // Use a placeholder column - this won't be used for includes, but we need\n // to maintain the same array length for aliases and columns\n columns.push({\n kind: 'column',\n table: matchingInclude.table.name,\n column: '',\n columnMeta: { nativeType: 'jsonb', codecId: 'core/json@1', nullable: true },\n } as AnyColumnBuilder);\n } else if (isColumnBuilder(value)) {\n const alias = tracker.register([key]);\n aliases.push(alias);\n columns.push(value);\n } else if (typeof value === 'object' && value !== null) {\n const nested = flattenProjection(value as NestedProjection, tracker, [key]);\n aliases.push(...nested.aliases);\n columns.push(...nested.columns);\n } else {\n errorInvalidProjectionKey(key);\n }\n }\n\n if (aliases.length === 0) {\n errorProjectionEmpty();\n }\n\n return { aliases, columns };\n}\n","import type { JoinAst } from '@prisma-next/sql-relational-core/ast';\nimport {\n createColumnRef,\n createJoin,\n createJoinOnExpr,\n createTableRef,\n} from '@prisma-next/sql-relational-core/ast';\nimport type { JoinState } from '../utils/state';\n\nexport function buildJoinAst(join: JoinState): JoinAst {\n // TypeScript can't narrow ColumnBuilder properly, so we assert\n const onLeft = join.on.left as { table: string; column: string };\n const onRight = join.on.right as { table: string; column: string };\n const leftCol = createColumnRef(onLeft.table, onLeft.column);\n const rightCol = createColumnRef(onRight.table, onRight.column);\n const onExpr = createJoinOnExpr(leftCol, rightCol);\n return createJoin(join.joinType, createTableRef(join.table.name), onExpr);\n}\n"],"mappings":";AAMA,SAAS,mBAAmB;AAS5B,IAAM,kBAAkB;AAExB,IAAM,uBAAuB,OAAO,YAAY;AAgBzC,SAAS,iBAAiB,UAA+C;AAC9E,MAAI,SAAS,WAAW,iBAAiB;AACvC,UAAM,YAAY,oDAAoD;AAAA,MACpE,gBAAgB;AAAA,MAChB,cAAc,SAAS;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,UAAyC,SAAoB;AAC7E,QAAI,qBAAqB,KAAK,GAAG;AAC/B,YAAM,EAAE,QAAQ,SAAAA,SAAQ,IAAI,oBAAoB,IAAI;AACpD,YAAM,WAAW,4BAA4B,OAAO,MAAM;AAC1D,aAAO,aAAa;AAAA,QAClB;AAAA,QACA,KAAK,SAAS;AAAA,QACd,QAAQ,SAAS;AAAA,QACjB,kBAAkB,SAAS;AAAA,QAC3B,GAAIA,WAAU,EAAE,SAAAA,SAAQ,IAAI,CAAC;AAAA,MAC/B,CAAC;AAAA,IACH;AAEA,UAAM,OAAO;AACb,UAAM,CAAC,OAAO,IAAI;AAElB,QAAI,CAAC,SAAS;AACZ,YAAM,YAAY,sCAAsC;AAAA,IAC1D;AAEA,QAAI,CAAC,MAAM,QAAQ,QAAQ,MAAM,GAAG;AAClC,YAAM,YAAY,uCAAuC;AAAA,IAC3D;AAEA,UAAM,mBAAmB,2BAA2B,QAAQ,OAAO,MAAM;AAEzE,WAAO,aAAa;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,MACL,QAAQ,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,UAAQ,OAAO,CAAC,YAAgC;AAC9C,YAAQ,CAAC,YAAkC,WAA+B;AACxE,YAAM,WAAW,4BAA4B,SAAS,MAAM;AAC5D,aAAO,aAAa;AAAA,QAClB;AAAA,QACA,KAAK,SAAS;AAAA,QACd,QAAQ,SAAS;AAAA,QACjB,kBAAkB,SAAS;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,4BACP,SACA,QACoB;AACpB,MAAIC,OAAM;AACV,QAAM,SAAoB,CAAC;AAC3B,QAAM,mBAAsC,CAAC;AAE7C,UAAQ,QAAQ,CAAC,MAAM,UAAU;AAC/B,IAAAA,QAAO;AAEP,QAAI,QAAQ,OAAO,QAAQ;AACzB,YAAM,QAAQ,OAAO,KAAK;AAC1B,YAAM,mBAAmB,OAAO,KAAK,KAAK;AAC1C,MAAAA,QAAO,IAAI,gBAAgB;AAC3B,uBAAiB,KAAK;AAAA,QACpB,OAAO;AAAA,QACP,MAAM,IAAI,gBAAgB;AAAA,QAC1B,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,KAAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,aAAa,MAAuC;AAC3D,QAAM,SAAS,MAAM,KAAK,KAAK,MAAM;AACrC,QAAM,cAAc,KAAK,iBAAiB;AAAA,IAAI,CAAC,eAC7C,OAAO,OAAO,EAAE,GAAG,YAAY,QAAQ,MAAe,CAAC;AAAA,EACzD;AAEA,QAAM,OAAO,aAAa;AAAA,IACxB,UAAU,KAAK;AAAA,IACf,kBAAkB;AAAA,IAClB,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,EAClD,CAAC;AAED,SAAO,OAAO,OAAO;AAAA,IACnB,KAAK,KAAK;AAAA,IACV,QAAQ,OAAO,OAAO,MAAM;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AAQA,SAAS,aAAa,MAAkC;AACtD,QAAM,EAAE,UAAU,kBAAkB,QAAQ,IAAI;AAEhD,QAAM,OAAiB;AAAA,IACrB,QAAQ;AAAA,IACR,GAAI,SAAS,eAAe,EAAE,cAAc,SAAS,aAAa,IAAI,CAAC;AAAA,IACvE,UAAU,SAAS;AAAA,IACnB,GAAI,SAAS,gBAAgB,SAAY,EAAE,aAAa,SAAS,YAAY,IAAI,CAAC;AAAA,IAClF,MAAM;AAAA,IACN,kBAAkB,OAAO,OAAO,CAAC,GAAG,gBAAgB,CAAC;AAAA,IACrD,GAAI,SAAS,cAAc,EAAE,aAAa,OAAO,OAAO,EAAE,GAAG,QAAQ,YAAY,CAAC,EAAE,IAAI,CAAC;AAAA,IACzF,GAAI,SAAS,OAAO,EAAE,MAAM,WAAW,QAAQ,IAAI,EAAE,IAAI,CAAC;AAAA,IAC1D,GAAI,SAAS,aAAa,EAAE,YAAY,OAAO,OAAO,CAAC,GAAG,QAAQ,UAAU,CAAC,EAAE,IAAI,CAAC;AAAA,EACtF;AAEA,SAAO,OAAO,OAAO,IAAI;AAC3B;AAEA,SAAS,WAAW,MAA0B;AAC5C,SAAO,OAAO,OAAO;AAAA,IACnB,GAAI,KAAK,SAAS,EAAE,QAAQ,OAAO,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC;AAAA,IACjE,GAAI,KAAK,UACL;AAAA,MACE,SAAS,OAAO;AAAA,QACd,KAAK,QAAQ,IAAI,CAAC,QAA2C,OAAO,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA,MACxF;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,KAAK,UACL;AAAA,MACE,SAAS,OAAO;AAAA,QACd,KAAK,QAAQ;AAAA,UACX,CAAC,UACC,OAAO,OAAO;AAAA,YACZ,GAAG;AAAA,YACH,SAAS,OAAO,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC;AAAA,UAC3C,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACF,IACA,CAAC;AAAA,EACP,CAAC;AACH;AAEA,SAAS,2BAA2B,OAA+C;AACjF,SAAO,MAAM;AAAA,IAAK,EAAE,QAAQ,MAAM;AAAA,IAAG,CAAC,GAAG,QACvC,OAAO,OAAO;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,MAAM,IAAI,MAAM,CAAC;AAAA,MACjB,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AACF;AAEA,SAAS,qBAAqB,OAA+C;AAC3E,SAAO,MAAM,QAAQ,KAAK,KAAK,OAAO,OAAO,OAAO,KAAK;AAC3D;AAOO,SAAS,WAAW,SAAyD;AAClF,SAAO,OAAO,OAAO;AAAA,IACnB,CAAC,oBAAoB,GAAG;AAAA,IACxB,OAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,oBAAoB,QAG3B;AACA,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,EAAE,OAAO;AAAA,EAClB;AAEA,QAAM,OAAO,OAAO,OAAO,SAAS,CAAC;AACrC,MAAI,CAAC,kBAAkB,IAAI,GAAG;AAC5B,WAAO,EAAE,OAAO;AAAA,EAClB;AAEA,SAAO;AAAA,IACL,QAAQ,OAAO,MAAM,GAAG,OAAO,SAAS,CAAC;AAAA,IACzC,SAAS,KAAK;AAAA,EAChB;AACF;AAEA,SAAS,kBAAkB,OAAqD;AAC9E,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,wBAAwB;AAChF;;;ACvOA,SAAS,uBAAAC,4BAA2B;;;ACJpC;AAAA,EACE,mBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACVP,SAAS,eAAAC,oBAAmB;AAErB,SAAS,sBAA6B;AAC3C,QAAMA,aAAY,4BAA4B;AAChD;AAEO,SAAS,oBAAoB,MAAgB,OAAe,cAAgC;AACjG,QAAMA;AAAA,IACJ,yBAAyB,KAAK,KAAK,GAAG,CAAC,0BAA0B,KAAK,+BAA+B,cAAc,KAAK,GAAG,KAAK,SAAS;AAAA,EAC3I;AACF;AAEO,SAAS,qCAA4C;AAC1D,QAAMA,aAAY,sCAAsC;AAC1D;AAEO,SAAS,sCAA6C;AAC3D,QAAMA,aAAY,oCAAoC;AACxD;AAEO,SAAS,iCAAiC,QAAwB;AACvE,QAAMA;AAAA,IACJ;AAAA,IACA,SAAS,EAAE,OAAO,IAAI;AAAA,IACtB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,gCACd,QACA,QACO;AACP,QAAMA;AAAA,IACJ;AAAA,IACA,SAAS,EAAE,QAAQ,OAAO,IAAI;AAAA,IAC9B;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,WAA0B;AAC1D,QAAMA,aAAY,iBAAiB,SAAS,EAAE;AAChD;AAEO,SAAS,4BAAmC;AACjD,QAAMA,aAAY,qCAAqC;AACzD;AAEO,SAAS,4BAAmC;AACjD,QAAMA,aAAY,oCAAoC;AACxD;AAEO,SAAS,2BAA2B,OAAe,MAAuC;AAC/F,QAAMA;AAAA,IACJ,mCAAmC,KAAK,6BAA6B,IAAI;AAAA,EAC3E;AACF;AAEO,SAAS,2BAA2B,OAAe,OAAsB;AAC9E,QAAMA,aAAY,4BAA4B,SAAS,SAAS,aAAa,KAAK,EAAE;AACtF;AAEO,SAAS,kBAAkB,OAAsB;AACtD,QAAMA,aAAY,0BAA0B,KAAK,EAAE;AACrD;AAEO,SAAS,2BAA2B,OAAe,OAAsB;AAC9E,QAAMA,aAAY,4BAA4B,KAAK,aAAa,KAAK,EAAE;AACzE;AAEO,SAAS,wBAA+B;AAC7C,QAAMA,aAAY,+CAA+C;AACnE;AAEO,SAAS,0BAAiC;AAC/C,QAAMA,aAAY,wCAAwC;AAC5D;AAEO,SAAS,sBAAsB,WAA0B;AAC9D,QAAMA,aAAY,+BAA+B,SAAS,EAAE;AAC9D;AAEO,SAAS,4BAA4B,MAAuB;AACjE,QAAMA;AAAA,IACJ,oCAAoC,KAAK,KAAK,GAAG,CAAC;AAAA,EACpD;AACF;AAEO,SAAS,0BAA0B,OAAsB;AAC9D,QAAMA;AAAA,IACJ,kBAAkB,KAAK,uDAAuD,KAAK;AAAA,EACrF;AACF;AAEO,SAAS,0BAA0B,KAAoB;AAC5D,QAAMA;AAAA,IACJ,oCAAoC,GAAG;AAAA,EACzC;AACF;AAEO,SAAS,uBAA8B;AAC5C,QAAMA,aAAY,kDAAkD;AACtE;AAEO,SAAS,iCAAiC,QAAwB;AACvE,QAAMA;AAAA,IACJ;AAAA,IACA,SAAS,EAAE,OAAO,IAAI;AAAA,IACtB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,gCAAgC,QAAiB,OAAwB;AACvF,QAAMA;AAAA,IACJ;AAAA,IACA,SAAS,EAAE,QAAQ,MAAM,IAAI;AAAA,IAC7B;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB,YAAoB,WAA0B;AAC/E,QAAMA,aAAY,kBAAkB,UAAU,aAAa,SAAS,EAAE;AACxE;AAEO,SAAS,kCAAyC;AACvD,QAAMA,aAAY,wDAAwD;AAC5E;AAEO,SAAS,gCAAuC;AACrD,QAAMA,aAAY,8BAA8B;AAClD;AAEO,SAAS,kCAAyC;AACvD,QAAMA,aAAY,uDAAuD;AAC3E;;;AC/JO,SAAS,yBAAyB,UAAyC;AAChF,QAAM,SAAS,SAAS;AACxB,QAAM,uBAAuB,SAAS;AACtC,QAAM,6BAA6B,uBAAuB,MAAM;AAEhE,MAAI,CAAC,wBAAwB,CAAC,4BAA4B;AACxD,qCAAiC,MAAM;AAAA,EACzC;AAEA,MACE,2BAA2B,SAAS,MAAM,QAC1C,2BAA2B,SAAS,MAAM,MAC1C;AACA,oCAAgC,QAAQ;AAAA,MACtC,SAAS,2BAA2B,SAAS;AAAA,MAC7C,SAAS,2BAA2B,SAAS;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;AAEO,SAAS,yBAAyB,UAAyC;AAChF,QAAM,SAAS,SAAS;AACxB,QAAM,eAAe,SAAS;AAC9B,MAAI,CAAC,gBAAgB,CAAC,aAAa,MAAM,GAAG;AAC1C,qCAAiC,MAAM;AAAA,EACzC;AACA,QAAM,qBAAqB,aAAa,MAAM;AAC9C,MAAI,mBAAmB,WAAW,MAAM,MAAM;AAC5C,oCAAgC,QAAQ,mBAAmB,WAAW,CAAC;AAAA,EACzE;AACF;;;ACpCA,SAAS,eAAe;;;ACUjB,SAAS,qBAAqB,MAA4C;AAC/E,MAAI,KAAK,SAAS,OAAO;AACvB,WAAO;AAAA,EACT;AACA,SAAO,qBAAqB,KAAK,IAAI;AACvC;AAMO,SAAS,kBACd,MACa;AACb,MAAI,KAAK,SAAS,OAAO;AACvB,WAAO,CAAC,IAAI;AAAA,EACd;AACA,MAAI,KAAK,SAAS,aAAa;AAC7B,UAAM,OAAoB,kBAAkB,KAAK,IAAI;AACrD,eAAW,OAAO,KAAK,MAAM;AAC3B,WAAK,KAAK,GAAG,kBAAkB,GAAG,CAAC;AAAA,IACrC;AACA,WAAO;AAAA,EACT;AACA,SAAO,CAAC;AACV;AAKO,SAAS,gBAAgB,MAA+D;AAC7F,SAAO,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU,QAAQ,KAAK,SAAS;AACtF;AAMO,SAAS,cAAc,MAG5B;AACA,MAAI,gBAAgB,IAAI,GAAG;AACzB,UAAM,UAAU,qBAAqB,IAAI;AACzC,WAAO,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO;AAAA,EACxD;AAEA,QAAM,aAAa;AACnB,SAAO,EAAE,OAAO,WAAW,OAAO,QAAQ,WAAW,OAAO;AAC9D;AAKO,SAAS,gBAAgB,OAA2C;AACzE,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAA4B,SAAS;AAE1C;AAOO,SAAS,iBACd,SAC2B;AAC3B,MAAI,gBAAgB,OAAO,GAAG;AAC5B,WAAO;AAAA,EACT;AACA,QAAM,kBAAkB;AACxB,SAAO,gBAAgB;AACzB;;;ADhFO,SAAS,UAAU,MAA+B;AACvD,QAAM,cAAc,oBAAI,IAA+C;AACvE,QAAM,aAAa,oBAAI,IAAY,CAAC,KAAK,MAAM,IAAI,CAAC;AAEpD,aAAW,UAAU,KAAK,WAAW,SAAS;AAC5C,UAAM,gBAAiB,OAA8C;AACrE,QAAI,eAAe;AACjB,YAAM,UAAU,kBAAkB,aAAa;AAC/C,iBAAW,OAAO,SAAS;AACzB,oBAAY,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI;AAAA,UAC5C,OAAO,IAAI;AAAA,UACX,QAAQ,IAAI;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AAEL,YAAM,MAAM;AACZ,UAAI,IAAI,SAAS,IAAI,QAAQ;AAC3B,oBAAY,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI;AAAA,UAC5C,OAAO,IAAI;AAAA,UACX,QAAQ,IAAI;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,OAAO;AACd,eAAW,QAAQ,KAAK,OAAO;AAC7B,iBAAW,IAAI,KAAK,MAAM,IAAI;AAE9B,YAAM,SAAS,KAAK,GAAG;AACvB,YAAM,UAAU,KAAK,GAAG;AACxB,kBAAY,IAAI,GAAG,OAAO,KAAK,IAAI,OAAO,MAAM,IAAI;AAAA,QAClD,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,MACjB,CAAC;AACD,kBAAY,IAAI,GAAG,QAAQ,KAAK,IAAI,QAAQ,MAAM,IAAI;AAAA,QACpD,OAAO,QAAQ;AAAA,QACf,QAAQ,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,KAAK,UAAU;AACjB,eAAW,WAAW,KAAK,UAAU;AACnC,iBAAW,IAAI,QAAQ,MAAM,IAAI;AAGjC,YAAM,SAAS,QAAQ,GAAG;AAC1B,YAAM,UAAU,QAAQ,GAAG;AAC3B,UAAI,OAAO,SAAS,OAAO,UAAU,QAAQ,SAAS,QAAQ,QAAQ;AACpE,oBAAY,IAAI,GAAG,OAAO,KAAK,IAAI,OAAO,MAAM,IAAI;AAAA,UAClD,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,QACjB,CAAC;AACD,oBAAY,IAAI,GAAG,QAAQ,KAAK,IAAI,QAAQ,MAAM,IAAI;AAAA,UACpD,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,QAClB,CAAC;AAAA,MACH;AAEA,iBAAW,UAAU,QAAQ,gBAAgB,SAAS;AACpD,cAAM,MAAM;AACZ,YAAI,IAAI,SAAS,IAAI,QAAQ;AAC3B,sBAAY,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI;AAAA,YAC5C,OAAO,IAAI;AAAA,YACX,QAAQ,IAAI;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF;AAEA,UAAI,QAAQ,YAAY;AACtB,cAAM,UAAU,cAAc,QAAQ,WAAW,IAAI;AACrD,oBAAY,IAAI,GAAG,QAAQ,KAAK,IAAI,QAAQ,MAAM,IAAI;AAAA,UACpD,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,QAClB,CAAC;AAAA,MACH;AAEA,UAAI,QAAQ,cAAc;AACxB,cAAM,UAAU,QAAQ;AAGxB,YAAI,QAAQ,MAAM;AAChB,gBAAM,UAAU,cAAc,QAAQ,IAAI;AAC1C,sBAAY,IAAI,GAAG,QAAQ,KAAK,IAAI,QAAQ,MAAM,IAAI;AAAA,YACpD,OAAO,QAAQ;AAAA,YACf,QAAQ,QAAQ;AAAA,UAClB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,OAAO;AACd,UAAM,YAAY,KAAK,MAAM;AAC7B,UAAM,gBAAiB,UAAiD;AACxE,QAAI,eAAe;AACjB,YAAM,UAAU,kBAAkB,aAAa;AAC/C,iBAAW,OAAO,SAAS;AACzB,oBAAY,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI;AAAA,UAC5C,OAAO,IAAI;AAAA,UACX,QAAQ,IAAI;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AAEL,YAAM,aAAa;AACnB,UAAI,WAAW,SAAS,WAAW,QAAQ;AACzC,oBAAY,IAAI,GAAG,WAAW,KAAK,IAAI,WAAW,MAAM,IAAI;AAAA,UAC1D,OAAO,WAAW;AAAA,UAClB,QAAQ,WAAW;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS;AAChB,UAAM,UAAU,KAAK;AAGrB,UAAM,cAAc,QAAQ;AAC5B,QAAI,aAAa;AACf,UAAI,gBAAgB,WAAW,GAAG;AAChC,cAAM,UAAU,kBAAkB,WAAW;AAC7C,mBAAW,OAAO,SAAS;AACzB,sBAAY,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI;AAAA,YAC5C,OAAO,IAAI;AAAA,YACX,QAAQ,IAAI;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,OAAO;AAEL,cAAM,aAAa;AACnB,YAAI,WAAW,SAAS,WAAW,QAAQ;AACzC,sBAAY,IAAI,GAAG,WAAW,KAAK,IAAI,WAAW,MAAM,IAAI;AAAA,YAC1D,OAAO,WAAW;AAAA,YAClB,QAAQ,WAAW;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,QAAM,iBAAiB,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC;AAC3E,QAAM,gBAAgB,OAAO;AAAA,IAC3B,KAAK,WAAW,QAAQ,IAAI,CAAC,OAAO,UAAU;AAC5C,UAAI,eAAe,IAAI,KAAK,GAAG;AAE7B,eAAO,CAAC,OAAO,WAAW,KAAK,EAAE;AAAA,MACnC;AACA,YAAM,SAAS,KAAK,WAAW,QAAQ,KAAK;AAC5C,UAAI,CAAC,QAAQ;AACX,mCAA2B,OAAO,KAAK;AAAA,MACzC;AAEA,YAAM,MAAM;AAKZ,UAAI,CAAC,IAAI,SAAS,CAAC,IAAI,QAAQ;AAE7B,eAAO,CAAC,OAAO,WAAW,KAAK,EAAE;AAAA,MACnC;AACA,YAAM,gBAAgB,IAAI;AAC1B,UAAI,eAAe;AACjB,eAAO,CAAC,OAAO,aAAa,cAAc,MAAM,EAAE;AAAA,MACpD;AACA,aAAO,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,IAAI,MAAM,EAAE;AAAA,IAC7C,CAAC;AAAA,EACH;AAIA,QAAM,kBAA0C,CAAC;AACjD,WAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,QAAQ,KAAK;AACvD,UAAM,QAAQ,KAAK,WAAW,QAAQ,CAAC;AACvC,QAAI,CAAC,SAAS,eAAe,IAAI,KAAK,GAAG;AACvC;AAAA,IACF;AACA,UAAM,SAAS,KAAK,WAAW,QAAQ,CAAC;AACxC,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AACA,UAAM,gBAAiB,OAA8C;AACrE,QAAI,eAAe;AACjB,UAAI,cAAc,QAAQ,SAAS,UAAU;AAC3C,wBAAgB,KAAK,IAAI,cAAc,QAAQ;AAAA,MACjD,WAAW,cAAc,QAAQ,SAAS,WAAW;AACnD,wBAAgB,KAAK,IAAI,cAAc,QAAQ;AAAA,MACjD;AAAA,IACF,OAAO;AAEL,YAAM,MAAM;AACZ,YAAM,aAAa,IAAI;AACvB,YAAM,UAAU,YAAY;AAC5B,UAAI,SAAS;AACX,wBAAgB,KAAK,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAIA,QAAM,mBAA2C,CAAC;AAClD,WAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,QAAQ,KAAK;AACvD,UAAM,QAAQ,KAAK,WAAW,QAAQ,CAAC;AACvC,QAAI,CAAC,SAAS,eAAe,IAAI,KAAK,GAAG;AACvC;AAAA,IACF;AACA,UAAM,SAAS,KAAK,WAAW,QAAQ,CAAC;AACxC,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AACA,UAAM,gBAAiB,OAA8C;AACrE,QAAI,eAAe;AACjB,UAAI,cAAc,QAAQ,SAAS,UAAU;AAC3C,yBAAiB,KAAK,IAAI,cAAc,QAAQ;AAAA,MAClD;AAAA,IACF,OAAO;AAGL,YAAM,MAAM;AACZ,YAAM,aAAa,IAAI;AACvB,YAAM,UAAU,YAAY;AAC5B,UAAI,SAAS;AACX,yBAAiB,KAAK,IAAI;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAGA,QAAM,YAAoC;AAAA,IACxC,GAAG;AAAA,IACH,GAAI,KAAK,cAAc,KAAK,cAAc,CAAC;AAAA,EAC7C;AAEA,SAAO,OAAO;AAAA,IACZ,QAAQ;AAAA,MACN,QAAQ,KAAK,SAAS;AAAA,MACtB,cAAc,KAAK,SAAS;AAAA,MAC5B,UAAU,KAAK,SAAS;AAAA,MACxB,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,QAAQ,MAAM,KAAK,UAAU;AAAA,QAC7B,SAAS,MAAM,KAAK,YAAY,OAAO,CAAC;AAAA,MAC1C;AAAA,MACA,YAAY;AAAA,MACZ,iBAAiB,OAAO,KAAK,eAAe,EAAE,SAAS,IAAI,kBAAkB;AAAA,MAC7E,aACE,OAAO,KAAK,SAAS,EAAE,SAAS,IAC5B,OAAO,OAAO,EAAE,QAAQ,OAAO,OAAO,SAAS,EAAE,CAAC,IAClD;AAAA,MACN,kBAAkB,KAAK;AAAA,MACvB,aAAa,KAAK,SAAS;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;;;AExQA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAgBA,SAAS,eACd,UACA,OACA,WACA,aACA,QACsB;AACtB,QAAM,cAAc,MAAM;AAC1B,QAAM,YAAY,YAAY;AAE9B,MAAI,CAAC,OAAO,OAAO,WAAW,SAAS,GAAG;AACxC,0BAAsB,SAAS;AAAA,EACjC;AAEA,QAAM,QAAQ,UAAU,SAAS;AACjC,QAAM,QAAQ,OAAO,KAAK,KAAK;AAE/B,MAAI;AACJ,MAAI;AAIJ,QAAM,gBAAgB,iBAAiB,MAAM,IAAI;AACjD,MAAI,eAAe;AACjB,eAAW;AAAA,EACb,WAAW,gBAAgB,MAAM,IAAI,GAAG;AAEtC,UAAM,EAAE,OAAO,OAAO,IAAI,cAAc,MAAM,IAAI;AAElD,UAAM,gBAAgB,SAAS,QAAQ,OAAO,KAAK;AACnD,QAAI,CAAC,eAAe;AAClB,wBAAkB,KAAK;AAAA,IACzB;AAEA,UAAM,aAAwC,cAAc,QAAQ,MAAM;AAC1E,QAAI,CAAC,YAAY;AACf,yBAAmB,QAAQ,KAAK;AAAA,IAClC;AAGA,gBAAY,KAAK;AAAA,MACf,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM,EAAE,OAAO,OAAO;AAAA,MACtB,UAAU,WAAW;AAAA,MACrB,SAAS,WAAW;AAAA,MACpB,YAAY,WAAW;AAAA,IACzB,CAAC;AAED,cAAU,WAAW;AACrB,eAAW,gBAAgB,OAAO,MAAM;AAAA,EAC1C,OAAO;AAEL,kCAA8B;AAAA,EAChC;AAEA,QAAM,aAAa,eAAe,OAAO,SAAS;AAClD,SAAO;AAAA,IACL,MAAM,iBAAiB,MAAM,IAAI,UAAU,UAAU;AAAA,IACrD;AAAA,IACA;AAAA,EACF;AACF;;;ALhBO,IAAM,oBAAN,MAAM,mBAKb;AAAA,EACmB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT,mBAAuC,CAAC;AAAA,EAEhD,YACE,SACA,OACA,QACA;AACA,SAAK,UAAU,QAAQ;AACvB,SAAK,WAAW,QAAQ,QAAQ;AAChC,SAAK,QAAQ;AACb,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,aACK,SAC+D;AAClE,6BAAyB,KAAK,QAAQ;AAEtC,UAAM,UAAU,IAAI;AAAA,MAClB;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,YAAQ,mBAAmB,CAAC,GAAG,KAAK,kBAAkB,GAAG,OAAO;AAChE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAA2C;AAC/C,UAAM,YAAa,SAAS,UAAU,CAAC;AACvC,UAAM,mBAAsC,CAAC;AAC7C,UAAM,cAAyB,CAAC;AAChC,UAAM,cAAsC,CAAC;AAE7C,UAAM,gBAAgB,KAAK,SAAS,QAAQ,OAAO,KAAK,MAAM,IAAI;AAClE,QAAI,CAAC,eAAe;AAClB,wBAAkB,KAAK,MAAM,IAAI;AAAA,IACnC;AAEA,UAAM,SAA+C,CAAC;AACtD,eAAW,CAAC,YAAY,WAAW,KAAK,OAAO,QAAQ,KAAK,MAAM,GAAG;AACnE,UAAI,CAAC,cAAc,QAAQ,UAAU,GAAG;AACtC,2BAAmB,YAAY,KAAK,MAAM,IAAI;AAAA,MAChD;AAEA,YAAM,YAAY,YAAY;AAC9B,UAAI,CAAC,OAAO,OAAO,WAAW,SAAS,GAAG;AACxC,8BAAsB,SAAS;AAAA,MACjC;AAEA,YAAM,QAAQ,UAAU,SAAS;AACjC,YAAM,QAAQ,YAAY,KAAK,KAAK;AAEpC,YAAM,aAAa,cAAc,QAAQ,UAAU;AACnD,YAAM,UAAU,YAAY;AAC5B,UAAI,aAAa,SAAS;AACxB,oBAAY,SAAS,IAAI;AAAA,MAC3B;AAEA,uBAAiB,KAAK;AAAA,QACpB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,MAAM,EAAE,OAAO,KAAK,MAAM,MAAM,QAAQ,WAAW;AAAA,QACnD,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC7B,GAAI,YAAY,aAAa,EAAE,YAAY,WAAW,WAAW,IAAI,CAAC;AAAA,QACtE,GAAI,YAAY,aAAa,SAAY,EAAE,UAAU,WAAW,SAAS,IAAI,CAAC;AAAA,MAChF,CAAC;AAED,aAAO,UAAU,IAAIC,gBAAe,OAAO,SAAS;AAAA,IACtD;AAEA,UAAM,YAAyB,KAAK,iBAAiB,IAAI,CAAC,QAAQ;AAEhE,YAAM,IAAI;AACV,aAAOC,iBAAgB,EAAE,OAAO,EAAE,MAAM;AAAA,IAC1C,CAAC;AAED,UAAM,MAAM,gBAAgB;AAAA,MAC1B,OAAO,eAAe,KAAK,MAAM,IAAI;AAAA,MACrC;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,sBAAuC;AAAA,MAC3C,SAAS,KAAK,iBAAiB,IAAI,CAAC,QAAQ;AAE1C,cAAM,IAAI;AACV,eAAO,EAAE;AAAA,MACX,CAAC;AAAA,MACD,SAAS,KAAK;AAAA,IAChB;AAEA,UAAM,WAAW,UAAU;AAAA,MACzB,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,YAAY,UAAU,SAAS,IAAI,sBAAsB,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE;AAAA,MACpF;AAAA,MACA,GAAI,OAAO,KAAK,WAAW,EAAE,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;AAAA,IAC/D,CAAC;AAED,UAAM,YAA+B,OAAO,OAAO;AAAA,MACjD;AAAA,MACA,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,MAAM;AAAA,QACN,aAAa;AAAA,UACX,GAAG,SAAS;AAAA,UACZ,QAAQ;AAAA,UACR,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;AAEO,IAAM,oBAAN,MAAM,mBAKb;AAAA,EACmB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT;AAAA,EACA,mBAAuC,CAAC;AAAA,EAEhD,YACE,SACA,OACA,KACA;AACA,SAAK,UAAU,QAAQ;AACvB,SAAK,WAAW,QAAQ,QAAQ;AAChC,SAAK,QAAQ;AACb,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,MAAM,WAAqE;AACzE,UAAM,UAAU,IAAI;AAAA,MAClB;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,YAAQ,iBAAiB;AACzB,YAAQ,mBAAmB,CAAC,GAAG,KAAK,gBAAgB;AACpD,WAAO;AAAA,EACT;AAAA,EAEA,aACK,SAC+D;AAClE,6BAAyB,KAAK,QAAQ;AAEtC,UAAM,UAAU,IAAI;AAAA,MAClB;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,QAAI,KAAK,gBAAgB;AACvB,cAAQ,iBAAiB,KAAK;AAAA,IAChC;AACA,YAAQ,mBAAmB,CAAC,GAAG,KAAK,kBAAkB,GAAG,OAAO;AAChE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAA2C;AAC/C,QAAI,CAAC,KAAK,gBAAgB;AACxB,sCAAgC;AAAA,IAClC;AAEA,UAAM,YAAa,SAAS,UAAU,CAAC;AACvC,UAAM,mBAAsC,CAAC;AAC7C,UAAM,cAAyB,CAAC;AAChC,UAAM,cAAsC,CAAC;AAE7C,UAAM,gBAAgB,KAAK,SAAS,QAAQ,OAAO,KAAK,MAAM,IAAI;AAClE,QAAI,CAAC,eAAe;AAClB,wBAAkB,KAAK,MAAM,IAAI;AAAA,IACnC;AAEA,UAAM,MAA4C,CAAC;AACnD,eAAW,CAAC,YAAY,WAAW,KAAK,OAAO,QAAQ,KAAK,GAAG,GAAG;AAChE,UAAI,CAAC,cAAc,QAAQ,UAAU,GAAG;AACtC,2BAAmB,YAAY,KAAK,MAAM,IAAI;AAAA,MAChD;AAEA,YAAM,YAAY,YAAY;AAC9B,UAAI,CAAC,OAAO,OAAO,WAAW,SAAS,GAAG;AACxC,8BAAsB,SAAS;AAAA,MACjC;AAEA,YAAM,QAAQ,UAAU,SAAS;AACjC,YAAM,QAAQ,YAAY,KAAK,KAAK;AAEpC,YAAM,aAAa,cAAc,QAAQ,UAAU;AACnD,YAAM,UAAU,YAAY;AAC5B,UAAI,aAAa,SAAS;AACxB,oBAAY,SAAS,IAAI;AAAA,MAC3B;AAEA,uBAAiB,KAAK;AAAA,QACpB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,MAAM,EAAE,OAAO,KAAK,MAAM,MAAM,QAAQ,WAAW;AAAA,QACnD,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC7B,GAAI,YAAY,aAAa,EAAE,YAAY,WAAW,WAAW,IAAI,CAAC;AAAA,QACtE,GAAI,YAAY,aAAa,SAAY,EAAE,UAAU,WAAW,SAAS,IAAI,CAAC;AAAA,MAChF,CAAC;AAED,UAAI,UAAU,IAAID,gBAAe,OAAO,SAAS;AAAA,IACnD;AAEA,UAAM,cAAc;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,YAAY,YAAY;AAC9B,QAAI,CAAC,WAAW;AACd,oCAA8B;AAAA,IAChC;AAEA,QAAI,YAAY,WAAW,YAAY,WAAW;AAChD,kBAAY,YAAY,SAAS,IAAI,YAAY;AAAA,IACnD;AAEA,UAAM,YAAyB,KAAK,iBAAiB,IAAI,CAAC,QAAQ;AAEhE,YAAM,IAAI;AACV,aAAOC,iBAAgB,EAAE,OAAO,EAAE,MAAM;AAAA,IAC1C,CAAC;AAED,UAAM,MAAM,gBAAgB;AAAA,MAC1B,OAAO,eAAe,KAAK,MAAM,IAAI;AAAA,MACrC;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAED,UAAM,sBAAuC;AAAA,MAC3C,SAAS,KAAK,iBAAiB,IAAI,CAAC,QAAQ;AAE1C,cAAM,IAAI;AACV,eAAO,EAAE;AAAA,MACX,CAAC;AAAA,MACD,SAAS,KAAK;AAAA,IAChB;AAEA,UAAM,WAAW,UAAU;AAAA,MACzB,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,YAAY,UAAU,SAAS,IAAI,sBAAsB,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE;AAAA,MACpF;AAAA,MACA,GAAI,OAAO,KAAK,WAAW,EAAE,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;AAAA,MAC7D,OAAO,KAAK;AAAA,IACd,CAAC;AAED,UAAM,YAA+B,OAAO,OAAO;AAAA,MACjD;AAAA,MACA,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,MAAM;AAAA,QACN,aAAa;AAAA,UACX,GAAG,SAAS;AAAA,UACZ,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;AAEO,IAAM,oBAAN,MAAM,mBAKb;AAAA,EACmB;AAAA,EACA;AAAA,EACA;AAAA,EACT;AAAA,EACA,mBAAuC,CAAC;AAAA,EAEhD,YAAY,SAAuC,OAAiB;AAClE,SAAK,UAAU,QAAQ;AACvB,SAAK,WAAW,QAAQ,QAAQ;AAChC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,MAAM,WAAqE;AACzE,UAAM,UAAU,IAAI;AAAA,MAClB;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,IACP;AACA,YAAQ,iBAAiB;AACzB,YAAQ,mBAAmB,CAAC,GAAG,KAAK,gBAAgB;AACpD,WAAO;AAAA,EACT;AAAA,EAEA,aACK,SAC+D;AAClE,6BAAyB,KAAK,QAAQ;AAEtC,UAAM,UAAU,IAAI;AAAA,MAClB;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,IACP;AACA,QAAI,KAAK,gBAAgB;AACvB,cAAQ,iBAAiB,KAAK;AAAA,IAChC;AACA,YAAQ,mBAAmB,CAAC,GAAG,KAAK,kBAAkB,GAAG,OAAO;AAChE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAA2C;AAC/C,QAAI,CAAC,KAAK,gBAAgB;AACxB,sCAAgC;AAAA,IAClC;AAEA,UAAM,YAAa,SAAS,UAAU,CAAC;AACvC,UAAM,mBAAsC,CAAC;AAC7C,UAAM,cAAyB,CAAC;AAChC,UAAM,cAAsC,CAAC;AAE7C,UAAM,gBAAgB,KAAK,SAAS,QAAQ,OAAO,KAAK,MAAM,IAAI;AAClE,QAAI,CAAC,eAAe;AAClB,wBAAkB,KAAK,MAAM,IAAI;AAAA,IACnC;AAEA,UAAM,cAAc;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,YAAY,YAAY;AAC9B,QAAI,CAAC,WAAW;AACd,oCAA8B;AAAA,IAChC;AAEA,QAAI,YAAY,WAAW,YAAY,WAAW;AAChD,kBAAY,YAAY,SAAS,IAAI,YAAY;AAAA,IACnD;AAEA,UAAM,YAAyB,KAAK,iBAAiB,IAAI,CAAC,QAAQ;AAEhE,YAAM,IAAI;AACV,aAAOA,iBAAgB,EAAE,OAAO,EAAE,MAAM;AAAA,IAC1C,CAAC;AAED,UAAM,MAAM,gBAAgB;AAAA,MAC1B,OAAO,eAAe,KAAK,MAAM,IAAI;AAAA,MACrC,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAED,UAAM,sBAAuC;AAAA,MAC3C,SAAS,KAAK,iBAAiB,IAAI,CAAC,QAAQ;AAE1C,cAAM,IAAI;AACV,eAAO,EAAE;AAAA,MACX,CAAC;AAAA,MACD,SAAS,KAAK;AAAA,IAChB;AAEA,UAAM,WAAW,UAAU;AAAA,MACzB,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,YAAY,UAAU,SAAS,IAAI,sBAAsB,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE;AAAA,MACpF;AAAA,MACA,GAAI,OAAO,KAAK,WAAW,EAAE,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;AAAA,MAC7D,OAAO,KAAK;AAAA,IACd,CAAC;AAED,UAAM,YAA+B,OAAO,OAAO;AAAA,MACjD;AAAA,MACA,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,MAAM;AAAA,QACN,aAAa;AAAA,UACX,GAAG,SAAS;AAAA,UACZ,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;;;AMjeA;AAAA,EACE,mBAAAC;AAAA,EACA;AAAA,EACA,qBAAAC;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,OACK;;;ACTP;AAAA,EACE,mBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,OACK;;;ACAA,SAAS,cAAc,MAAwB;AACpD,MAAI,KAAK,WAAW,GAAG;AACrB,wBAAoB;AAAA,EACtB;AACA,SAAO,KAAK,KAAK,GAAG;AACtB;AAEO,IAAM,eAAN,MAAmB;AAAA,EACP,UAAU,oBAAI,IAAY;AAAA,EAC1B,cAAc,oBAAI,IAAsB;AAAA,EAEzD,SAAS,MAAwB;AAC/B,UAAM,QAAQ,cAAc,IAAI;AAChC,QAAI,KAAK,QAAQ,IAAI,KAAK,GAAG;AAC3B,YAAM,eAAe,KAAK,YAAY,IAAI,KAAK;AAC/C,0BAAoB,MAAM,OAAO,YAAY;AAAA,IAC/C;AACA,SAAK,QAAQ,IAAI,KAAK;AACtB,SAAK,YAAY,IAAI,OAAO,IAAI;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,OAAqC;AAC3C,WAAO,KAAK,YAAY,IAAI,KAAK;AAAA,EACnC;AAAA,EAEA,IAAI,OAAwB;AAC1B,WAAO,KAAK,QAAQ,IAAI,KAAK;AAAA,EAC/B;AACF;AAEO,SAAS,kBACd,YACA,SACA,cAAwB,CAAC,GAC2B;AACpD,QAAM,UAAoB,CAAC;AAC3B,QAAM,UAA8B,CAAC;AAErC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,UAAM,OAAO,CAAC,GAAG,aAAa,GAAG;AAEjC,QAAI,gBAAgB,KAAK,GAAG;AAC1B,YAAM,QAAQ,QAAQ,SAAS,IAAI;AACnC,cAAQ,KAAK,KAAK;AAClB,cAAQ,KAAK,KAAK;AAAA,IACpB,WAAW,OAAO,UAAU,YAAY,UAAU,MAAM;AACtD,YAAM,SAAS,kBAAkB,OAAO,SAAS,IAAI;AACrD,cAAQ,KAAK,GAAG,OAAO,OAAO;AAC9B,cAAQ,KAAK,GAAG,OAAO,OAAO;AAAA,IAChC,OAAO;AACL,kCAA4B,IAAI;AAAA,IAClC;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,QAAQ;AAC5B;AAEO,SAAS,qBACd,QACA,YACA,UACiB;AACjB,QAAM,UAAU,IAAI,aAAa;AACjC,QAAM,UAAoB,CAAC;AAC3B,QAAM,UAA8B,CAAC;AAErC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,QAAI,UAAU,MAAM;AAElB,YAAM,kBAAkB,UAAU,KAAK,CAAC,QAAQ,IAAI,UAAU,GAAG;AACjE,UAAI,CAAC,iBAAiB;AACpB,kCAA0B,GAAG;AAAA,MAC/B;AAGA,cAAQ,KAAK,GAAG;AAGhB,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,OAAO,gBAAgB,MAAM;AAAA,QAC7B,QAAQ;AAAA,QACR,YAAY,EAAE,YAAY,SAAS,SAAS,eAAe,UAAU,KAAK;AAAA,MAC5E,CAAqB;AAAA,IACvB,WAAW,gBAAgB,KAAK,GAAG;AACjC,YAAM,QAAQ,QAAQ,SAAS,CAAC,GAAG,CAAC;AACpC,cAAQ,KAAK,KAAK;AAClB,cAAQ,KAAK,KAAK;AAAA,IACpB,WAAW,OAAO,UAAU,YAAY,UAAU,MAAM;AACtD,YAAM,SAAS,kBAAkB,OAA2B,SAAS,CAAC,GAAG,CAAC;AAC1E,cAAQ,KAAK,GAAG,OAAO,OAAO;AAC9B,cAAQ,KAAK,GAAG,OAAO,OAAO;AAAA,IAChC,OAAO;AACL,gCAA0B,GAAG;AAAA,IAC/B;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,yBAAqB;AAAA,EACvB;AAEA,SAAO,EAAE,SAAS,QAAQ;AAC5B;;;ADtEO,IAAM,0BAAN,MAAM,yBAKb;AAAA,EACmB;AAAA,EACA;AAAA,EACA;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,UAAqB,YAAwB,OAAiB;AACxE,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OACE,YACyF;AACzF,UAAM,kBAAkB,qBAAqB,KAAK,OAAO,UAAU;AACnE,UAAM,UAAU,IAAI,yBAIlB,KAAK,UAAU,KAAK,YAAY,KAAK,KAAK;AAC5C,YAAQ,kBAAkB;AAC1B,QAAI,KAAK,eAAe,QAAW;AACjC,cAAQ,aAAa,KAAK;AAAA,IAC5B;AACA,QAAI,KAAK,iBAAiB,QAAW;AACnC,cAAQ,eAAe,KAAK;AAAA,IAC9B;AACA,QAAI,KAAK,eAAe,QAAW;AACjC,cAAQ,aAAa,KAAK;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,MAAkF;AACtF,UAAM,UAAU,IAAI;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,QAAI,KAAK,oBAAoB,QAAW;AACtC,cAAQ,kBAAkB,KAAK;AAAA,IACjC;AACA,YAAQ,aAAa;AACrB,QAAI,KAAK,iBAAiB,QAAW;AACnC,cAAQ,eAAe,KAAK;AAAA,IAC9B;AACA,QAAI,KAAK,eAAe,QAAW;AACjC,cAAQ,aAAa,KAAK;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,OAAkF;AACxF,UAAM,UAAU,IAAI;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,QAAI,KAAK,oBAAoB,QAAW;AACtC,cAAQ,kBAAkB,KAAK;AAAA,IACjC;AACA,QAAI,KAAK,eAAe,QAAW;AACjC,cAAQ,aAAa,KAAK;AAAA,IAC5B;AACA,YAAQ,eAAe;AACvB,QAAI,KAAK,eAAe,QAAW;AACjC,cAAQ,aAAa,KAAK;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAyE;AAC7E,QAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AACzC,yCAAmC;AAAA,IACrC;AAEA,UAAM,UAAU,IAAI;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,QAAI,KAAK,oBAAoB,QAAW;AACtC,cAAQ,kBAAkB,KAAK;AAAA,IACjC;AACA,QAAI,KAAK,eAAe,QAAW;AACjC,cAAQ,aAAa,KAAK;AAAA,IAC5B;AACA,QAAI,KAAK,iBAAiB,QAAW;AACnC,cAAQ,eAAe,KAAK;AAAA,IAC9B;AACA,YAAQ,aAAa;AACrB,WAAO;AAAA,EACT;AAAA,EAEA,WAKE;AACA,QAAI,CAAC,KAAK,iBAAiB;AACzB,0CAAoC;AAAA,IACtC;AACA,UAAM,QAKF;AAAA,MACF,iBAAiB,KAAK;AAAA,IACxB;AACA,QAAI,KAAK,eAAe,QAAW;AACjC,YAAM,aAAa,KAAK;AAAA,IAC1B;AACA,QAAI,KAAK,iBAAiB,QAAW;AACnC,YAAM,eAAe,KAAK;AAAA,IAC5B;AACA,QAAI,KAAK,eAAe,QAAW;AACjC,YAAM,aAAa,KAAK;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBACd,SACA,UACA,WACA,kBACA,aACY;AACZ,QAAM,eAAe,QAAQ,gBACxB,MAAM;AACL,UAAM,UAAU,QAAQ;AACxB,UAAM,YAAY,QAAQ;AAC1B,UAAM,QAAmC,MAAM;AAC7C,UAAI,gBAAgB,SAAS,GAAG;AAC9B,cAAM,UAAU,qBAAqB,SAAS;AAC9C,eAAOC,iBAAgB,QAAQ,OAAO,QAAQ,MAAM;AAAA,MACtD;AAEA,YAAM,aAAa;AACnB,aAAOA,iBAAgB,WAAW,OAAO,WAAW,MAAM;AAAA,IAC5D,GAAG;AACH,WAAO,CAAC,kBAAkB,MAAM,QAAQ,GAAG,CAAC;AAAA,EAC9C,GAAG,IACH;AAEJ,MAAI;AACJ,MAAI,QAAQ,YAAY;AACtB,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,iBAAa,YAAY;AAAA,EAC3B;AAEA,QAAM,SAAS,QAAQ,GAAG;AAC1B,QAAM,UAAU,QAAQ,GAAG;AAC3B,QAAM,UAAUA,iBAAgB,OAAO,OAAO,OAAO,MAAM;AAC3D,QAAM,WAAWA,iBAAgB,QAAQ,OAAO,QAAQ,MAAM;AAC9D,QAAM,SAAS,iBAAiB,SAAS,QAAQ;AAEjD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,QAAQ;AAAA,IACf,OAAO;AAAA,MACL,OAAOC,gBAAe,QAAQ,MAAM,IAAI;AAAA,MACxC,IAAI;AAAA,MACJ,GAAI,aAAa,EAAE,OAAO,WAAW,IAAI,CAAC;AAAA,MAC1C,GAAI,eAAe,EAAE,SAAS,aAAa,IAAI,CAAC;AAAA,MAChD,GAAI,OAAO,QAAQ,eAAe,WAAW,EAAE,OAAO,QAAQ,WAAW,IAAI,CAAC;AAAA,MAC9E,SAAS,QAAQ,gBAAgB,QAAQ,IAAI,CAAC,OAAO,QAAQ;AAC3D,cAAM,SAAS,QAAQ,gBAAgB,QAAQ,GAAG;AAClD,YAAI,CAAC,UAAU,CAAC,OAAO;AACrB,qCAA2B,SAAS,WAAW,GAAG;AAAA,QACpD;AAEA,cAAM,MAAM;AACZ,eAAO;AAAA,UACL;AAAA,UACA,MAAMD,iBAAgB,IAAI,OAAO,IAAI,MAAM;AAAA,QAC7C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AEpPA;AAAA,EACE,mBAAAE;AAAA,EACA;AAAA,EACA,oBAAAC;AAAA,EACA,kBAAAC;AAAA,OACK;AAGA,SAAS,aAAa,MAA0B;AAErD,QAAM,SAAS,KAAK,GAAG;AACvB,QAAM,UAAU,KAAK,GAAG;AACxB,QAAM,UAAUF,iBAAgB,OAAO,OAAO,OAAO,MAAM;AAC3D,QAAM,WAAWA,iBAAgB,QAAQ,OAAO,QAAQ,MAAM;AAC9D,QAAM,SAASC,kBAAiB,SAAS,QAAQ;AACjD,SAAO,WAAW,KAAK,UAAUC,gBAAe,KAAK,MAAM,IAAI,GAAG,MAAM;AAC1E;;;AH0CO,IAAM,oBAAN,MAAM,mBAKX;AAAA,EACiB;AAAA,EACA;AAAA,EACA;AAAA,EACT,QAAsB,CAAC;AAAA,EAE/B,YAAY,SAAuC,OAAsB;AACvE,SAAK,UAAU,QAAQ;AACvB,SAAK,WAAW,QAAQ,QAAQ;AAChC,SAAK,aAAa,QAAQ,QAAQ,SAAS,SAAS;AACpD,QAAI,OAAO;AACT,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,KAAK,OAA2F;AAC9F,WAAO,IAAI;AAAA,MACT;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,EAAE,GAAG,KAAK,OAAO,MAAM,MAAM;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,UACE,OACA,IACyD;AACzD,WAAO,KAAK,SAAS,SAAS,OAAO,EAAE;AAAA,EACzC;AAAA,EAEA,SACE,OACA,IACyD;AACzD,WAAO,KAAK,SAAS,QAAQ,OAAO,EAAE;AAAA,EACxC;AAAA,EAEA,UACE,OACA,IACyD;AACzD,WAAO,KAAK,SAAS,SAAS,OAAO,EAAE;AAAA,EACzC;AAAA,EAEA,SACE,OACA,IACyD;AACzD,WAAO,KAAK,SAAS,QAAQ,OAAO,EAAE;AAAA,EACxC;AAAA,EAEA,YAKE,YACA,IACA,cAGA,SAC0F;AAC1F,6BAAyB,KAAK,QAAQ;AAEtC,QAAI,CAAC,KAAK,SAAS,QAAQ,OAAO,WAAW,IAAI,GAAG;AAClD,wBAAkB,WAAW,IAAI;AAAA,IACnC;AAEA,UAAM,gBAAgB,oBAAoB;AAC1C,UAAM,cAAc,GAAG,aAAa;AAIpC,UAAM,SAAS,YAAY;AAC3B,UAAM,UAAU,YAAY;AAC5B,QAAI,OAAO,UAAU,QAAQ,OAAO;AAClC,gCAA0B;AAAA,IAC5B;AAGA,UAAM,mBAAmB,IAAI;AAAA,MAC3B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACF;AACA,UAAM,aAAa;AAAA,MACjB;AAAA,IACF;AACA,UAAM,aACJ,WACA,SAAS;AAGX,QAAI,WAAW,gBAAgB,QAAQ,WAAW,GAAG;AACnD,gCAA0B;AAAA,IAC5B;AAGA,UAAM,QAAQ,SAAS,SAAS,WAAW;AAG3C,QAAI,KAAK,MAAM,YAAY;AACzB,UAAI,KAAK,MAAM,WAAW,QAAQ,SAAS,KAAK,GAAG;AACjD,mCAA2B,OAAO,YAAY;AAAA,MAChD;AAAA,IACF;AAGA,UAAM,mBAAmB,KAAK,MAAM,YAAY,CAAC;AACjD,QAAI,iBAAiB,KAAK,CAAC,QAAQ,IAAI,UAAU,KAAK,GAAG;AACvD,iCAA2B,OAAO,SAAS;AAAA,IAC7C;AAEA,UAAM,eAA6B;AAAA,MACjC;AAAA,MACA,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,iBAAiB,WAAW;AAAA,MAC5B,GAAI,WAAW,eAAe,SAAY,EAAE,YAAY,WAAW,WAAW,IAAI,CAAC;AAAA,MACnF,GAAI,WAAW,iBAAiB,SAAY,EAAE,cAAc,WAAW,aAAa,IAAI,CAAC;AAAA,MACzF,GAAI,WAAW,eAAe,SAAY,EAAE,YAAY,WAAW,WAAW,IAAI,CAAC;AAAA,IACrF;AAEA,UAAM,cAAc,CAAC,GAAG,kBAAkB,YAAY;AAQtD,WAAO,IAAI;AAAA,MACT;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,EAAE,GAAG,KAAK,OAAO,UAAU,YAAY;AAAA,IACzC;AAAA,EACF;AAAA,EAEQ,SACN,UACA,OACA,IACyD;AACzD,UAAM,YAAY,KAAK,WAAW;AAElC,QAAI,CAAC,KAAK,SAAS,QAAQ,OAAO,MAAM,IAAI,GAAG;AAC7C,wBAAkB,MAAM,IAAI;AAAA,IAC9B;AAEA,QAAI,MAAM,SAAS,UAAU,MAAM;AACjC,gCAA0B;AAAA,IAC5B;AAEA,UAAM,gBAAgB,oBAAoB;AAC1C,UAAM,cAAc,GAAG,aAAa;AAEpC,UAAM,YAAuB;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,IAAI;AAAA,IACN;AAEA,UAAM,gBAAgB,KAAK,MAAM,SAAS,CAAC;AAC3C,UAAM,WAAW,CAAC,GAAG,eAAe,SAAS;AAE7C,WAAO,IAAI;AAAA,MACT;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,EAAE,GAAG,KAAK,OAAO,OAAO,SAAS;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,MAAM,MAAiF;AACrF,WAAO,IAAI;AAAA,MACT;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,EAAE,GAAG,KAAK,OAAO,OAAO,KAAK;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,OACE,YAMA;AACA,UAAM,QAAQ,KAAK,WAAW;AAC9B,UAAM,kBAAkB,qBAAqB,OAAO,YAAY,KAAK,MAAM,QAAQ;AAEnF,WAAO,IAAI;AAAA,MAMT;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,EAAE,GAAG,KAAK,OAAO,YAAY,gBAAgB;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,QAAQ,OAAiF;AACvF,WAAO,IAAI;AAAA,MACT;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,EAAE,GAAG,KAAK,OAAO,SAAS,MAAM;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,MAAM,OAAwE;AAC5E,QAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AACzC,yCAAmC;AAAA,IACrC;AAEA,WAAO,IAAI;AAAA,MACT;AAAA,QACE,SAAS,KAAK;AAAA,MAChB;AAAA,MACA,EAAE,GAAG,KAAK,OAAO,OAAO,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,SAA2C;AAC/C,UAAM,QAAQ,KAAK,WAAW;AAC9B,UAAM,aAAa,KAAK,iBAAiB;AAEzC,UAAM,YAAa,SAAS,UAAU,CAAC;AACvC,UAAM,gBAAgB,KAAK,SAAS,QAAQ,OAAO,MAAM,IAAI;AAE7D,QAAI,CAAC,eAAe;AAClB,wBAAkB,MAAM,IAAI;AAAA,IAC9B;AAEA,UAAM,mBAAsC,CAAC;AAC7C,UAAM,cAAyB,CAAC;AAChC,UAAM,cAAsC,CAAC;AAE7C,UAAM,cAAc,KAAK,MAAM,QAC3B,eAAe,KAAK,UAAU,KAAK,MAAM,OAAO,WAAW,kBAAkB,WAAW,IACxF;AACJ,UAAM,YAAY,aAAa;AAE/B,QAAI,aAAa,WAAW,YAAY,WAAW;AACjD,kBAAY,YAAY,SAAS,IAAI,YAAY;AAAA,IACnD;AAEA,UAAM,gBAAgB,KAAK,MAAM,WAC5B,MAAM;AACL,YAAM,UAAU,KAAK,MAAM;AAC3B,YAAM,YAAY,QAAQ;AAC1B,YAAM,OAAkC,gBAAgB,SAAS,IAC7D,aACC,MAAM;AACL,cAAM,aAAa;AACnB,eAAOC,iBAAgB,WAAW,OAAO,WAAW,MAAM;AAAA,MAC5D,GAAG;AACP,aAAO,CAACC,mBAAkB,MAAM,QAAQ,GAAG,CAAC;AAAA,IAC9C,GAAG,IACH;AAEJ,UAAM,QAAQ,KAAK,MAAM,OAAO,IAAI,CAAC,SAAS,aAAa,IAAI,CAAC;AAEhE,UAAM,WAAW,KAAK,MAAM,UAAU;AAAA,MAAI,CAAC,YACzC,gBAAgB,SAAS,KAAK,UAAU,WAAW,kBAAkB,WAAW;AAAA,IAClF;AAGA,UAAM,iBACJ,CAAC;AACH,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,QAAQ,KAAK;AAClD,YAAM,QAAQ,WAAW,QAAQ,CAAC;AAClC,UAAI,CAAC,OAAO;AACV,0BAAkB,CAAC;AAAA,MACrB;AACA,YAAM,SAAS,WAAW,QAAQ,CAAC;AACnC,UAAI,CAAC,QAAQ;AACX,mCAA2B,OAAO,CAAC;AAAA,MACrC;AAGA,YAAM,kBAAkB,KAAK,MAAM,UAAU,KAAK,CAAC,QAAQ,IAAI,UAAU,KAAK;AAC9E,UAAI,iBAAiB;AAEnB,uBAAe,KAAK;AAAA,UAClB;AAAA,UACA,MAAM,EAAE,MAAM,cAAc,MAAM;AAAA,QACpC,CAAC;AAAA,MACH,OAAO;AAEL,cAAM,gBAAiB,OAA8C;AACrE,YAAI,eAAe;AACjB,yBAAe,KAAK;AAAA,YAClB;AAAA,YACA,MAAM;AAAA,UACR,CAAC;AAAA,QACH,OAAO;AAGL,gBAAM,MAAM;AACZ,gBAAM,YAAY,IAAI;AACtB,gBAAM,aAAa,IAAI;AACvB,cAAI,CAAC,aAAa,CAAC,YAAY;AAC7B,uCAA2B,OAAO,CAAC;AAAA,UACrC;AACA,yBAAe,KAAK;AAAA,YAClB;AAAA,YACA,MAAMD,iBAAgB,WAAW,UAAU;AAAA,UAC7C,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,gBAAgB;AAAA,MAC1B,MAAME,gBAAe,MAAM,IAAI;AAAA,MAC/B;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO,KAAK,MAAM;AAAA,IACpB,CAQC;AAED,UAAM,WAAW,UAAU;AAAA,MACzB,UAAU,KAAK;AAAA,MACf;AAAA,MACA;AAAA,MACA,OAAO,KAAK,MAAM;AAAA,MAClB,UAAU,KAAK,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,MACA,OAAO,KAAK,MAAM;AAAA,MAClB,SAAS,KAAK,MAAM;AAAA,IACtB,CAUC;AAED,UAAM,YAA+B,OAAO,OAAO;AAAA,MACjD;AAAA,MACA,QAAQ;AAAA,MACR,MAAM;AAAA,IACR,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa;AACnB,QAAI,CAAC,KAAK,MAAM,MAAM;AACpB,4BAAsB;AAAA,IACxB;AAEA,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEQ,mBAAmB;AACzB,QAAI,CAAC,KAAK,MAAM,YAAY;AAC1B,8BAAwB;AAAA,IAC1B;AAEA,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;;;AP/aO,SAAS,IAOd,SACyF;AAGzF,QAAM,UAAU,IAAI;AAAA,IAClB;AAAA,EACF;AACA,QAAM,aAAa,iBAAiB,QAAQ,QAAQ,QAAQ;AAE5D,SAAO,eAAe,SAAS,OAAO;AAAA,IACpC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AAED,SAAO,eAAe,SAAS,UAAU;AAAA,IACvC,OAAO,CAAC,OAAiB,WAA6C;AACpE,aAAO,IAAI,kBAAyC,SAAS,OAAO,MAAM;AAAA,IAC5E;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AAED,SAAO,eAAe,SAAS,UAAU;AAAA,IACvC,OAAO,CAAC,OAAiB,QAA0C;AACjE,aAAO,IAAI,kBAAyC,SAAS,OAAO,GAAG;AAAA,IACzE;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AAED,SAAO,eAAe,SAAS,UAAU;AAAA,IACvC,OAAO,CAAC,UAAoB;AAC1B,aAAO,IAAI,kBAAyC,SAAS,KAAK;AAAA,IACpE;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AAED,SAAO;AACT;","names":["options","sql","createJoinOnBuilder","createColumnRef","createParamRef","planInvalid","createParamRef","createColumnRef","createColumnRef","createOrderByItem","createTableRef","createColumnRef","createTableRef","createColumnRef","createTableRef","createColumnRef","createJoinOnExpr","createTableRef","createColumnRef","createOrderByItem","createTableRef"]}