@prisma-next/sql-orm-client 0.5.1 → 0.6.0-dev.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +10 -10
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +43 -77
- package/dist/index.mjs.map +1 -1
- package/package.json +17 -17
- package/src/collection-internal-types.ts +8 -7
- package/src/model-accessor.ts +10 -3
- package/src/query-plan-aggregate.ts +17 -12
- package/src/query-plan-mutations.ts +18 -14
- package/src/query-plan-select.ts +7 -4
- package/src/types.ts +246 -287
- package/src/where-binding.ts +5 -8
package/src/types.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
type AnyExpression,
|
|
11
11
|
BinaryExpr,
|
|
12
12
|
type BinaryOp,
|
|
13
|
+
type CodecRef,
|
|
13
14
|
type CodecTrait,
|
|
14
15
|
ListExpression,
|
|
15
16
|
NullCheckExpr,
|
|
@@ -19,7 +20,6 @@ import {
|
|
|
19
20
|
import type { Expression } from '@prisma-next/sql-relational-core/expression';
|
|
20
21
|
import type { ExecutionContext } from '@prisma-next/sql-relational-core/query-lane-context';
|
|
21
22
|
import type { ComputeColumnJsType, RuntimeScope } from '@prisma-next/sql-relational-core/types';
|
|
22
|
-
import { ifDefined } from '@prisma-next/utils/defined';
|
|
23
23
|
import type { RowSelection } from './collection-internal-types';
|
|
24
24
|
|
|
25
25
|
export type AggregateFn = 'count' | 'sum' | 'avg' | 'min' | 'max';
|
|
@@ -241,60 +241,34 @@ type FieldOperations<
|
|
|
241
241
|
TContract extends Contract<SqlStorage>,
|
|
242
242
|
ModelName extends string,
|
|
243
243
|
FieldName extends string,
|
|
244
|
-
> =
|
|
245
|
-
|
|
246
|
-
?
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Resolve the unique column ref carried by `left` so its surrounding `ParamRef` can dispatch through `forColumn`. The previous implementation only matched bare `column-ref` expressions, which lost refs the moment the expression got wrapped (`upper(f.id)`, `BinaryExpr`, function-call expressions, etc.) — and column-aware dispatch (AC-5) silently degraded for any predicate that touched a computed column.
|
|
260
|
-
*
|
|
261
|
-
* Walking via `collectColumnRefs()` and accepting only a single unambiguous ref gives `eq(upper(f.id), value)` and friends correct dispatch without inventing refs for ambiguous shapes (e.g. `eq(concat(f.firstName, f.lastName), value)` returns `undefined` and falls through to the codec-id path, which is correct for non-parameterized comparisons).
|
|
262
|
-
*/
|
|
263
|
-
function refsFromLeft(left: AnyExpression): { table: string; column: string } | undefined {
|
|
264
|
-
if (left.kind === 'column-ref') {
|
|
265
|
-
return { table: left.table, column: left.column };
|
|
266
|
-
}
|
|
267
|
-
const columnRefs = left.collectColumnRefs();
|
|
268
|
-
if (columnRefs.length !== 1) return undefined;
|
|
269
|
-
const single = columnRefs[0];
|
|
270
|
-
if (!single) return undefined;
|
|
271
|
-
return { table: single.table, column: single.column };
|
|
272
|
-
}
|
|
244
|
+
> =
|
|
245
|
+
FieldCodecId<TContract, ModelName, FieldName> extends infer CodecId extends string
|
|
246
|
+
? ExtractQueryOperationTypes<TContract> extends infer AllOps
|
|
247
|
+
? {
|
|
248
|
+
[OpName in keyof AllOps & string as OpMatchesField<
|
|
249
|
+
AllOps[OpName],
|
|
250
|
+
CodecId,
|
|
251
|
+
ExtractCodecTypes<TContract>
|
|
252
|
+
> extends true
|
|
253
|
+
? OpName
|
|
254
|
+
: never]: QueryOperationMethod<AllOps[OpName], ExtractCodecTypes<TContract>>;
|
|
255
|
+
}
|
|
256
|
+
: unknown
|
|
257
|
+
: unknown;
|
|
273
258
|
|
|
274
|
-
function param(
|
|
275
|
-
|
|
276
|
-
value
|
|
277
|
-
refs: { table: string; column: string } | undefined,
|
|
278
|
-
): ParamRef {
|
|
279
|
-
if (codecId === undefined && refs === undefined) return ParamRef.of(value);
|
|
280
|
-
return ParamRef.of(value, {
|
|
281
|
-
...ifDefined('codecId', codecId),
|
|
282
|
-
...ifDefined('refs', refs),
|
|
283
|
-
});
|
|
259
|
+
function param(codec: CodecRef | undefined, value: unknown): ParamRef {
|
|
260
|
+
if (codec === undefined) return ParamRef.of(value);
|
|
261
|
+
return ParamRef.of(value, { codec });
|
|
284
262
|
}
|
|
285
263
|
|
|
286
|
-
function paramList(
|
|
287
|
-
|
|
288
|
-
values: readonly unknown[],
|
|
289
|
-
refs: { table: string; column: string } | undefined,
|
|
290
|
-
): ListExpression {
|
|
291
|
-
return ListExpression.of(values.map((value) => param(codecId, value, refs)));
|
|
264
|
+
function paramList(codec: CodecRef | undefined, values: readonly unknown[]): ListExpression {
|
|
265
|
+
return ListExpression.of(values.map((value) => param(codec, value)));
|
|
292
266
|
}
|
|
293
267
|
|
|
294
268
|
// never[] is intentional: factories have heterogeneous signatures (value: unknown, values: readonly unknown[], pattern: string, etc.) but are only called through the typed ComparisonMethodFns interface, never through this type directly.
|
|
295
269
|
type MethodFactory = (
|
|
296
270
|
left: AnyExpression,
|
|
297
|
-
|
|
271
|
+
codec: CodecRef | undefined,
|
|
298
272
|
) => (...args: never[]) => unknown;
|
|
299
273
|
|
|
300
274
|
type ComparisonMethodMeta = {
|
|
@@ -303,17 +277,17 @@ type ComparisonMethodMeta = {
|
|
|
303
277
|
};
|
|
304
278
|
|
|
305
279
|
function scalarComparisonMethod(op: BinaryOp) {
|
|
306
|
-
return ((left,
|
|
307
|
-
|
|
280
|
+
return ((left, codec) => (value: unknown) => {
|
|
281
|
+
if (value === null && (op === 'eq' || op === 'neq')) {
|
|
282
|
+
return op === 'eq' ? NullCheckExpr.isNull(left) : NullCheckExpr.isNotNull(left);
|
|
283
|
+
}
|
|
284
|
+
return new BinaryExpr(op, left, param(codec, value));
|
|
285
|
+
}) satisfies MethodFactory;
|
|
308
286
|
}
|
|
309
287
|
|
|
310
288
|
function listComparisonMethod(op: BinaryOp) {
|
|
311
|
-
return ((left,
|
|
312
|
-
new BinaryExpr(
|
|
313
|
-
op,
|
|
314
|
-
left,
|
|
315
|
-
paramList(codecId, values, refsFromLeft(left)),
|
|
316
|
-
)) satisfies MethodFactory;
|
|
289
|
+
return ((left, codec) => (values: readonly unknown[]) =>
|
|
290
|
+
new BinaryExpr(op, left, paramList(codec, values))) satisfies MethodFactory;
|
|
317
291
|
}
|
|
318
292
|
|
|
319
293
|
/**
|
|
@@ -424,58 +398,55 @@ export type DefaultModelRow<TContract extends Contract<SqlStorage>, ModelName ex
|
|
|
424
398
|
|
|
425
399
|
type Simplify<T> = { [K in keyof T]: T[K] } & {};
|
|
426
400
|
|
|
427
|
-
type VariantRow<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
428
|
-
TContract,
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
: DefaultModelRow<TContract, ModelName>
|
|
445
|
-
: DefaultModelRow<TContract, ModelName>;
|
|
401
|
+
type VariantRow<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
402
|
+
ModelDef<TContract, ModelName> extends {
|
|
403
|
+
readonly discriminator: { readonly field: infer DiscField extends string };
|
|
404
|
+
readonly variants: infer V;
|
|
405
|
+
}
|
|
406
|
+
? V extends Record<string, { readonly value: string }>
|
|
407
|
+
? {
|
|
408
|
+
[VK in keyof V]: VK extends string & keyof ModelsOf<TContract>
|
|
409
|
+
? Simplify<
|
|
410
|
+
Omit<DefaultModelRow<TContract, ModelName>, DiscField> &
|
|
411
|
+
DefaultModelRow<TContract, VK> &
|
|
412
|
+
Record<DiscField, V[VK]['value']>
|
|
413
|
+
>
|
|
414
|
+
: never;
|
|
415
|
+
}[keyof V]
|
|
416
|
+
: DefaultModelRow<TContract, ModelName>
|
|
417
|
+
: DefaultModelRow<TContract, ModelName>;
|
|
446
418
|
|
|
447
419
|
export type InferRootRow<
|
|
448
420
|
TContract extends Contract<SqlStorage>,
|
|
449
421
|
ModelName extends string,
|
|
450
422
|
> = VariantRow<TContract, ModelName>;
|
|
451
423
|
|
|
452
|
-
export type VariantNames<
|
|
453
|
-
TContract extends
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
? keyof V & string
|
|
459
|
-
: never;
|
|
424
|
+
export type VariantNames<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
425
|
+
ModelDef<TContract, ModelName> extends {
|
|
426
|
+
readonly variants: infer V extends Record<string, unknown>;
|
|
427
|
+
}
|
|
428
|
+
? keyof V & string
|
|
429
|
+
: never;
|
|
460
430
|
|
|
461
431
|
export type VariantModelRow<
|
|
462
432
|
TContract extends Contract<SqlStorage>,
|
|
463
433
|
ModelName extends string,
|
|
464
434
|
VariantName extends string,
|
|
465
|
-
> =
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
?
|
|
471
|
-
?
|
|
472
|
-
|
|
473
|
-
DefaultModelRow<TContract,
|
|
474
|
-
|
|
475
|
-
|
|
435
|
+
> =
|
|
436
|
+
ModelDef<TContract, ModelName> extends {
|
|
437
|
+
readonly discriminator: { readonly field: infer DiscField extends string };
|
|
438
|
+
readonly variants: infer V;
|
|
439
|
+
}
|
|
440
|
+
? V extends Record<string, { readonly value: string }>
|
|
441
|
+
? VariantName extends keyof V & string & keyof ModelsOf<TContract>
|
|
442
|
+
? Simplify<
|
|
443
|
+
Omit<DefaultModelRow<TContract, ModelName>, DiscField> &
|
|
444
|
+
DefaultModelRow<TContract, VariantName> &
|
|
445
|
+
Record<DiscField, V[VariantName]['value']>
|
|
446
|
+
>
|
|
447
|
+
: DefaultModelRow<TContract, ModelName>
|
|
476
448
|
: DefaultModelRow<TContract, ModelName>
|
|
477
|
-
: DefaultModelRow<TContract, ModelName
|
|
478
|
-
: DefaultModelRow<TContract, ModelName>;
|
|
449
|
+
: DefaultModelRow<TContract, ModelName>;
|
|
479
450
|
|
|
480
451
|
declare const aggregateResultBrand: unique symbol;
|
|
481
452
|
|
|
@@ -550,50 +521,40 @@ type ModelDef<
|
|
|
550
521
|
ModelName extends string,
|
|
551
522
|
> = ModelName extends keyof ModelsOf<TContract> ? ModelsOf<TContract>[ModelName] : never;
|
|
552
523
|
|
|
553
|
-
type FieldsOf<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
554
|
-
TContract,
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
: Record<string, never>
|
|
560
|
-
: Record<string, never>;
|
|
524
|
+
type FieldsOf<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
525
|
+
ModelDef<TContract, ModelName> extends { readonly fields: infer F }
|
|
526
|
+
? F extends Record<string, unknown>
|
|
527
|
+
? F
|
|
528
|
+
: Record<string, never>
|
|
529
|
+
: Record<string, never>;
|
|
561
530
|
|
|
562
|
-
type ModelStorageFields<
|
|
563
|
-
TContract extends
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
: never
|
|
571
|
-
: never;
|
|
531
|
+
type ModelStorageFields<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
532
|
+
ModelDef<TContract, ModelName> extends {
|
|
533
|
+
readonly storage: { readonly fields: infer Fields };
|
|
534
|
+
}
|
|
535
|
+
? Fields extends Record<string, { readonly column: string }>
|
|
536
|
+
? Fields
|
|
537
|
+
: never
|
|
538
|
+
: never;
|
|
572
539
|
|
|
573
|
-
type ModelFieldToColumnMap<
|
|
574
|
-
TContract extends
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
: never
|
|
580
|
-
: never;
|
|
540
|
+
type ModelFieldToColumnMap<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
541
|
+
ModelStorageFields<TContract, ModelName> extends infer Fields
|
|
542
|
+
? Fields extends Record<string, { readonly column: string }>
|
|
543
|
+
? { readonly [F in keyof Fields]: Fields[F]['column'] }
|
|
544
|
+
: never
|
|
545
|
+
: never;
|
|
581
546
|
|
|
582
|
-
type FieldToColumnMapSafe<
|
|
583
|
-
TContract extends
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
? ModelFieldToColumnMap<TContract, ModelName>
|
|
587
|
-
: never;
|
|
547
|
+
type FieldToColumnMapSafe<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
548
|
+
ModelFieldToColumnMap<TContract, ModelName> extends Record<string, string>
|
|
549
|
+
? ModelFieldToColumnMap<TContract, ModelName>
|
|
550
|
+
: never;
|
|
588
551
|
|
|
589
|
-
type ModelTableName<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
590
|
-
TContract,
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
? T
|
|
596
|
-
: never;
|
|
552
|
+
type ModelTableName<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
553
|
+
ModelDef<TContract, ModelName> extends {
|
|
554
|
+
readonly storage: { readonly table: infer T extends string };
|
|
555
|
+
}
|
|
556
|
+
? T
|
|
557
|
+
: never;
|
|
597
558
|
|
|
598
559
|
type FieldColumnName<
|
|
599
560
|
TContract extends Contract<SqlStorage>,
|
|
@@ -610,36 +571,38 @@ type ResolvedStorageColumn<
|
|
|
610
571
|
TContract extends Contract<SqlStorage>,
|
|
611
572
|
ModelName extends string,
|
|
612
573
|
FieldName extends string,
|
|
613
|
-
> =
|
|
614
|
-
|
|
615
|
-
? TContract
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
?
|
|
621
|
-
? TContract['storage']['tables'][TableName]['columns']
|
|
622
|
-
? TContract['storage']['tables'][TableName]['columns'][ColName]
|
|
574
|
+
> =
|
|
575
|
+
ModelTableName<TContract, ModelName> extends infer TableName extends string
|
|
576
|
+
? FieldColumnName<TContract, ModelName, FieldName> extends infer ColName extends string
|
|
577
|
+
? TContract['storage']['tables'] extends Record<
|
|
578
|
+
string,
|
|
579
|
+
{ readonly columns: Record<string, unknown> }
|
|
580
|
+
>
|
|
581
|
+
? TableName extends keyof TContract['storage']['tables']
|
|
582
|
+
? ColName extends keyof TContract['storage']['tables'][TableName]['columns']
|
|
583
|
+
? TContract['storage']['tables'][TableName]['columns'][ColName] extends StorageColumn
|
|
584
|
+
? TContract['storage']['tables'][TableName]['columns'][ColName]
|
|
585
|
+
: never
|
|
623
586
|
: never
|
|
624
587
|
: never
|
|
625
588
|
: never
|
|
626
589
|
: never
|
|
627
|
-
: never
|
|
628
|
-
: never;
|
|
590
|
+
: never;
|
|
629
591
|
|
|
630
592
|
type FieldStorageJsType<
|
|
631
593
|
TContract extends Contract<SqlStorage>,
|
|
632
594
|
ModelName extends string,
|
|
633
595
|
FieldName extends string,
|
|
634
|
-
> =
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
596
|
+
> =
|
|
597
|
+
ResolvedStorageColumn<TContract, ModelName, FieldName> extends infer Col extends StorageColumn
|
|
598
|
+
? ComputeColumnJsType<
|
|
599
|
+
TContract,
|
|
600
|
+
ModelTableName<TContract, ModelName> & string,
|
|
601
|
+
FieldColumnName<TContract, ModelName, FieldName> & string,
|
|
602
|
+
Col,
|
|
603
|
+
ExtractCodecTypes<TContract>
|
|
604
|
+
>
|
|
605
|
+
: never;
|
|
643
606
|
|
|
644
607
|
type FieldJsType<
|
|
645
608
|
TContract extends Contract<SqlStorage>,
|
|
@@ -659,33 +622,36 @@ type FieldCodecId<
|
|
|
659
622
|
TContract extends Contract<SqlStorage>,
|
|
660
623
|
ModelName extends string,
|
|
661
624
|
FieldName extends string,
|
|
662
|
-
> =
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
625
|
+
> =
|
|
626
|
+
FieldStorageColumn<TContract, ModelName, FieldName> extends {
|
|
627
|
+
readonly codecId: infer Id extends string;
|
|
628
|
+
}
|
|
629
|
+
? Id
|
|
630
|
+
: never;
|
|
667
631
|
|
|
668
632
|
type FieldNullable<
|
|
669
633
|
TContract extends Contract<SqlStorage>,
|
|
670
634
|
ModelName extends string,
|
|
671
635
|
FieldName extends string,
|
|
672
|
-
> =
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
636
|
+
> =
|
|
637
|
+
FieldStorageColumn<TContract, ModelName, FieldName> extends {
|
|
638
|
+
readonly nullable: infer N extends boolean;
|
|
639
|
+
}
|
|
640
|
+
? N
|
|
641
|
+
: false;
|
|
677
642
|
|
|
678
643
|
type FieldTraits<
|
|
679
644
|
TContract extends Contract<SqlStorage>,
|
|
680
645
|
ModelName extends string,
|
|
681
646
|
FieldName extends string,
|
|
682
|
-
> =
|
|
683
|
-
|
|
684
|
-
?
|
|
685
|
-
? T
|
|
647
|
+
> =
|
|
648
|
+
FieldCodecId<TContract, ModelName, FieldName> extends infer Id extends string
|
|
649
|
+
? Id extends keyof ExtractCodecTypes<TContract>
|
|
650
|
+
? ExtractCodecTypes<TContract>[Id] extends { readonly traits: infer T }
|
|
651
|
+
? T
|
|
652
|
+
: never
|
|
686
653
|
: never
|
|
687
|
-
: never
|
|
688
|
-
: never;
|
|
654
|
+
: never;
|
|
689
655
|
|
|
690
656
|
export type NumericFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> = {
|
|
691
657
|
[K in keyof DefaultModelRow<TContract, ModelName> & string]: 'numeric' extends FieldTraits<
|
|
@@ -731,15 +697,16 @@ type IsOptionalCreateField<
|
|
|
731
697
|
TContract extends Contract<SqlStorage>,
|
|
732
698
|
ModelName extends string,
|
|
733
699
|
FieldName extends string,
|
|
734
|
-
> =
|
|
735
|
-
|
|
736
|
-
? Column
|
|
737
|
-
? true
|
|
738
|
-
: Column extends { readonly default: unknown }
|
|
700
|
+
> =
|
|
701
|
+
FieldStorageColumn<TContract, ModelName, FieldName> extends infer Column
|
|
702
|
+
? Column extends StorageColumn
|
|
703
|
+
? Column['nullable'] extends true
|
|
739
704
|
? true
|
|
740
|
-
:
|
|
741
|
-
|
|
742
|
-
|
|
705
|
+
: Column extends { readonly default: unknown }
|
|
706
|
+
? true
|
|
707
|
+
: HasExecutionCreateDefault<TContract, ModelName, FieldName>
|
|
708
|
+
: HasExecutionCreateDefault<TContract, ModelName, FieldName>
|
|
709
|
+
: HasExecutionCreateDefault<TContract, ModelName, FieldName>;
|
|
743
710
|
|
|
744
711
|
type CreateFieldNames<
|
|
745
712
|
TContract extends Contract<SqlStorage>,
|
|
@@ -775,24 +742,20 @@ export type CreateInput<TContract extends Contract<SqlStorage>, ModelName extend
|
|
|
775
742
|
> &
|
|
776
743
|
RelationMutationFields<TContract, ModelName>;
|
|
777
744
|
|
|
778
|
-
type IsPolymorphicBase<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
779
|
-
TContract,
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
? true
|
|
786
|
-
: false;
|
|
745
|
+
type IsPolymorphicBase<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
746
|
+
ModelDef<TContract, ModelName> extends {
|
|
747
|
+
readonly discriminator: unknown;
|
|
748
|
+
readonly variants: Record<string, unknown>;
|
|
749
|
+
}
|
|
750
|
+
? true
|
|
751
|
+
: false;
|
|
787
752
|
|
|
788
|
-
type DiscriminatorFieldName<
|
|
789
|
-
TContract extends
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
? F
|
|
795
|
-
: never;
|
|
753
|
+
type DiscriminatorFieldName<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
754
|
+
ModelDef<TContract, ModelName> extends {
|
|
755
|
+
readonly discriminator: { readonly field: infer F extends string };
|
|
756
|
+
}
|
|
757
|
+
? F
|
|
758
|
+
: never;
|
|
796
759
|
|
|
797
760
|
export type VariantCreateInput<
|
|
798
761
|
TContract extends Contract<SqlStorage>,
|
|
@@ -805,44 +768,39 @@ export type ResolvedCreateInput<
|
|
|
805
768
|
TContract extends Contract<SqlStorage>,
|
|
806
769
|
ModelName extends string,
|
|
807
770
|
VName extends string | undefined,
|
|
808
|
-
> =
|
|
809
|
-
|
|
810
|
-
?
|
|
811
|
-
|
|
812
|
-
|
|
771
|
+
> =
|
|
772
|
+
IsPolymorphicBase<TContract, ModelName> extends true
|
|
773
|
+
? VName extends string
|
|
774
|
+
? VariantCreateInput<TContract, ModelName, VName>
|
|
775
|
+
: never
|
|
776
|
+
: CreateInput<TContract, ModelName>;
|
|
813
777
|
|
|
814
|
-
type ModelStorageTableDef<
|
|
815
|
-
TContract extends
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
? TContract['storage']['tables'][TableName]
|
|
778
|
+
type ModelStorageTableDef<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
779
|
+
ModelTableName<TContract, ModelName> extends infer TableName extends string
|
|
780
|
+
? TContract['storage']['tables'] extends Record<string, unknown>
|
|
781
|
+
? TableName extends keyof TContract['storage']['tables']
|
|
782
|
+
? TContract['storage']['tables'][TableName]
|
|
783
|
+
: never
|
|
821
784
|
: never
|
|
822
|
-
: never
|
|
823
|
-
: never;
|
|
785
|
+
: never;
|
|
824
786
|
|
|
825
|
-
type PrimaryKeyConstraintColumns<
|
|
826
|
-
TContract extends
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
? Columns
|
|
832
|
-
: never;
|
|
787
|
+
type PrimaryKeyConstraintColumns<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
788
|
+
ModelStorageTableDef<TContract, ModelName> extends {
|
|
789
|
+
readonly primaryKey: { readonly columns: infer Columns extends readonly string[] };
|
|
790
|
+
}
|
|
791
|
+
? Columns
|
|
792
|
+
: never;
|
|
833
793
|
|
|
834
|
-
type UniqueConstraintColumns<
|
|
835
|
-
TContract extends
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
}
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
? Columns
|
|
794
|
+
type UniqueConstraintColumns<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
795
|
+
ModelStorageTableDef<TContract, ModelName> extends {
|
|
796
|
+
readonly uniques: infer Uniques;
|
|
797
|
+
}
|
|
798
|
+
? Uniques extends ReadonlyArray<infer Unique>
|
|
799
|
+
? Unique extends { readonly columns: infer Columns extends readonly string[] }
|
|
800
|
+
? Columns
|
|
801
|
+
: never
|
|
843
802
|
: never
|
|
844
|
-
: never
|
|
845
|
-
: never;
|
|
803
|
+
: never;
|
|
846
804
|
|
|
847
805
|
type FieldNameForColumn<
|
|
848
806
|
TContract extends Contract<SqlStorage>,
|
|
@@ -891,11 +849,12 @@ type ConstraintColumnsUnion<TContract extends Contract<SqlStorage>, ModelName ex
|
|
|
891
849
|
export type UniqueConstraintCriterion<
|
|
892
850
|
TContract extends Contract<SqlStorage>,
|
|
893
851
|
ModelName extends string,
|
|
894
|
-
> =
|
|
895
|
-
|
|
896
|
-
?
|
|
897
|
-
|
|
898
|
-
|
|
852
|
+
> =
|
|
853
|
+
ConstraintColumnsUnion<TContract, ModelName> extends infer Columns
|
|
854
|
+
? Columns extends readonly string[]
|
|
855
|
+
? CriterionFromConstraintColumns<TContract, ModelName, Columns>
|
|
856
|
+
: never
|
|
857
|
+
: never;
|
|
899
858
|
|
|
900
859
|
type RelationConnectCriterion<TContract extends Contract<SqlStorage>, ModelName extends string> = [
|
|
901
860
|
UniqueConstraintCriterion<TContract, ModelName>,
|
|
@@ -981,19 +940,17 @@ type RelationDefWithTargetFields = {
|
|
|
981
940
|
};
|
|
982
941
|
};
|
|
983
942
|
|
|
984
|
-
type ChildForeignKeyFieldNames<
|
|
985
|
-
TContract extends
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
: never
|
|
996
|
-
: never;
|
|
943
|
+
type ChildForeignKeyFieldNames<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
944
|
+
Extract<AllModelRelationEntries<TContract>, RelationDefWithTargetFields> extends infer Relation
|
|
945
|
+
? Relation extends {
|
|
946
|
+
readonly to: ModelName;
|
|
947
|
+
readonly on: {
|
|
948
|
+
readonly targetFields: infer Fields extends readonly string[];
|
|
949
|
+
};
|
|
950
|
+
}
|
|
951
|
+
? Fields[number]
|
|
952
|
+
: never
|
|
953
|
+
: never;
|
|
997
954
|
|
|
998
955
|
type NestedOptionalCreateFieldNames<
|
|
999
956
|
TContract extends Contract<SqlStorage>,
|
|
@@ -1046,14 +1003,12 @@ export type MutationUpdateInput<
|
|
|
1046
1003
|
ModelName extends string,
|
|
1047
1004
|
> = Partial<DefaultModelRow<TContract, ModelName>> & RelationMutationFields<TContract, ModelName>;
|
|
1048
1005
|
|
|
1049
|
-
type ModelRelations<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
1050
|
-
TContract,
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
: Record<string, never>
|
|
1056
|
-
: Record<string, never>;
|
|
1006
|
+
type ModelRelations<TContract extends Contract<SqlStorage>, ModelName extends string> =
|
|
1007
|
+
ModelDef<TContract, ModelName> extends { readonly relations: infer R }
|
|
1008
|
+
? R extends Record<string, unknown>
|
|
1009
|
+
? R
|
|
1010
|
+
: Record<string, never>
|
|
1011
|
+
: Record<string, never>;
|
|
1057
1012
|
|
|
1058
1013
|
type ExactRecord<T> =
|
|
1059
1014
|
T extends Record<string, unknown>
|
|
@@ -1083,13 +1038,14 @@ export type RelatedModelName<
|
|
|
1083
1038
|
TContract extends Contract<SqlStorage>,
|
|
1084
1039
|
ModelName extends string,
|
|
1085
1040
|
RelName extends string,
|
|
1086
|
-
> =
|
|
1087
|
-
|
|
1088
|
-
?
|
|
1089
|
-
?
|
|
1041
|
+
> =
|
|
1042
|
+
RelationsOf<TContract, ModelName> extends infer Rels
|
|
1043
|
+
? Rels extends Record<string, unknown>
|
|
1044
|
+
? RelName extends keyof Rels
|
|
1045
|
+
? RelationModelName<Rels[RelName]>
|
|
1046
|
+
: never
|
|
1090
1047
|
: never
|
|
1091
|
-
: never
|
|
1092
|
-
: never;
|
|
1048
|
+
: never;
|
|
1093
1049
|
|
|
1094
1050
|
type RelationCardinalityFromRelation<Relation> = Relation extends {
|
|
1095
1051
|
readonly cardinality: infer Cardinality extends RelationCardinalityTag;
|
|
@@ -1101,13 +1057,14 @@ export type RelationCardinality<
|
|
|
1101
1057
|
TContract extends Contract<SqlStorage>,
|
|
1102
1058
|
ModelName extends string,
|
|
1103
1059
|
RelName extends string,
|
|
1104
|
-
> =
|
|
1105
|
-
|
|
1106
|
-
?
|
|
1107
|
-
?
|
|
1060
|
+
> =
|
|
1061
|
+
RelationsOf<TContract, ModelName> extends infer Rels
|
|
1062
|
+
? Rels extends Record<string, unknown>
|
|
1063
|
+
? RelName extends keyof Rels
|
|
1064
|
+
? RelationCardinalityFromRelation<Rels[RelName]>
|
|
1065
|
+
: '1:N'
|
|
1108
1066
|
: '1:N'
|
|
1109
|
-
: '1:N'
|
|
1110
|
-
: '1:N';
|
|
1067
|
+
: '1:N';
|
|
1111
1068
|
|
|
1112
1069
|
type RelationLocalFieldColumns<
|
|
1113
1070
|
TContract extends Contract<SqlStorage>,
|
|
@@ -1161,36 +1118,38 @@ type IsToOneRelationNullable<
|
|
|
1161
1118
|
TContract extends Contract<SqlStorage>,
|
|
1162
1119
|
ModelName extends string,
|
|
1163
1120
|
RelName extends string,
|
|
1164
|
-
> =
|
|
1165
|
-
|
|
1166
|
-
? TContract['storage']['tables']
|
|
1167
|
-
?
|
|
1168
|
-
?
|
|
1169
|
-
?
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
?
|
|
1121
|
+
> =
|
|
1122
|
+
ModelTableName<TContract, ModelName> extends infer TableName extends string
|
|
1123
|
+
? TableName extends keyof TContract['storage']['tables']
|
|
1124
|
+
? TContract['storage']['tables'][TableName] extends infer Table extends StorageTable
|
|
1125
|
+
? RelationsOf<TContract, ModelName> extends infer Rels extends Record<string, unknown>
|
|
1126
|
+
? RelName extends keyof Rels
|
|
1127
|
+
? RelationLocalFieldColumns<
|
|
1128
|
+
TContract,
|
|
1129
|
+
ModelName,
|
|
1130
|
+
Rels[RelName]
|
|
1131
|
+
> extends infer Cols extends readonly string[]
|
|
1132
|
+
? IsFkSideOfRelation<Table, Cols> extends true
|
|
1133
|
+
? AnyColumnNullable<Table['columns'], Cols>
|
|
1134
|
+
: true
|
|
1176
1135
|
: true
|
|
1177
1136
|
: true
|
|
1178
1137
|
: true
|
|
1179
1138
|
: true
|
|
1180
1139
|
: true
|
|
1181
|
-
: true
|
|
1182
|
-
: true;
|
|
1140
|
+
: true;
|
|
1183
1141
|
|
|
1184
1142
|
export type IncludeRelationValue<
|
|
1185
1143
|
TContract extends Contract<SqlStorage>,
|
|
1186
1144
|
ModelName extends string,
|
|
1187
1145
|
RelName extends string,
|
|
1188
1146
|
IncludedRow,
|
|
1189
|
-
> =
|
|
1190
|
-
|
|
1191
|
-
?
|
|
1192
|
-
|
|
1193
|
-
|
|
1147
|
+
> =
|
|
1148
|
+
RelationCardinality<TContract, ModelName, RelName> extends '1:1' | 'N:1'
|
|
1149
|
+
? IsToOneRelationNullable<TContract, ModelName, RelName> extends true
|
|
1150
|
+
? IncludedRow | null
|
|
1151
|
+
: IncludedRow
|
|
1152
|
+
: IncludedRow[];
|
|
1194
1153
|
|
|
1195
1154
|
export type CollectionModelName<TContract extends Contract<SqlStorage>> =
|
|
1196
1155
|
keyof ModelsOf<TContract> & string;
|