@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/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
- > = FieldCodecId<TContract, ModelName, FieldName> extends infer CodecId extends string
245
- ? ExtractQueryOperationTypes<TContract> extends infer AllOps
246
- ? {
247
- [OpName in keyof AllOps & string as OpMatchesField<
248
- AllOps[OpName],
249
- CodecId,
250
- ExtractCodecTypes<TContract>
251
- > extends true
252
- ? OpName
253
- : never]: QueryOperationMethod<AllOps[OpName], ExtractCodecTypes<TContract>>;
254
- }
255
- : unknown
256
- : unknown;
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
- codecId: string | undefined,
276
- value: unknown,
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
- codecId: string | undefined,
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
- codecId: string | undefined,
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, codecId) => (value: unknown) =>
307
- new BinaryExpr(op, left, param(codecId, value, refsFromLeft(left)))) satisfies MethodFactory;
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, codecId) => (values: readonly unknown[]) =>
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> = ModelDef<
428
- TContract,
429
- ModelName
430
- > extends {
431
- readonly discriminator: { readonly field: infer DiscField extends string };
432
- readonly variants: infer V;
433
- }
434
- ? V extends Record<string, { readonly value: string }>
435
- ? {
436
- [VK in keyof V]: VK extends string & keyof ModelsOf<TContract>
437
- ? Simplify<
438
- Omit<DefaultModelRow<TContract, ModelName>, DiscField> &
439
- DefaultModelRow<TContract, VK> &
440
- Record<DiscField, V[VK]['value']>
441
- >
442
- : never;
443
- }[keyof V]
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 Contract<SqlStorage>,
454
- ModelName extends string,
455
- > = ModelDef<TContract, ModelName> extends {
456
- readonly variants: infer V extends Record<string, unknown>;
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
- > = ModelDef<TContract, ModelName> extends {
466
- readonly discriminator: { readonly field: infer DiscField extends string };
467
- readonly variants: infer V;
468
- }
469
- ? V extends Record<string, { readonly value: string }>
470
- ? VariantName extends keyof V & string & keyof ModelsOf<TContract>
471
- ? Simplify<
472
- Omit<DefaultModelRow<TContract, ModelName>, DiscField> &
473
- DefaultModelRow<TContract, VariantName> &
474
- Record<DiscField, V[VariantName]['value']>
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> = ModelDef<
554
- TContract,
555
- ModelName
556
- > extends { readonly fields: infer F }
557
- ? F extends Record<string, unknown>
558
- ? F
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 Contract<SqlStorage>,
564
- ModelName extends string,
565
- > = ModelDef<TContract, ModelName> extends {
566
- readonly storage: { readonly fields: infer Fields };
567
- }
568
- ? Fields extends Record<string, { readonly column: string }>
569
- ? Fields
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 Contract<SqlStorage>,
575
- ModelName extends string,
576
- > = ModelStorageFields<TContract, ModelName> extends infer Fields
577
- ? Fields extends Record<string, { readonly column: string }>
578
- ? { readonly [F in keyof Fields]: Fields[F]['column'] }
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 Contract<SqlStorage>,
584
- ModelName extends string,
585
- > = ModelFieldToColumnMap<TContract, ModelName> extends Record<string, string>
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> = ModelDef<
590
- TContract,
591
- ModelName
592
- > extends {
593
- readonly storage: { readonly table: infer T extends string };
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
- > = ModelTableName<TContract, ModelName> extends infer TableName extends string
614
- ? FieldColumnName<TContract, ModelName, FieldName> extends infer ColName extends string
615
- ? TContract['storage']['tables'] extends Record<
616
- string,
617
- { readonly columns: Record<string, unknown> }
618
- >
619
- ? TableName extends keyof TContract['storage']['tables']
620
- ? ColName extends keyof TContract['storage']['tables'][TableName]['columns']
621
- ? TContract['storage']['tables'][TableName]['columns'][ColName] extends StorageColumn
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
- > = ResolvedStorageColumn<TContract, ModelName, FieldName> extends infer Col extends StorageColumn
635
- ? ComputeColumnJsType<
636
- TContract,
637
- ModelTableName<TContract, ModelName> & string,
638
- FieldColumnName<TContract, ModelName, FieldName> & string,
639
- Col,
640
- ExtractCodecTypes<TContract>
641
- >
642
- : never;
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
- > = FieldStorageColumn<TContract, ModelName, FieldName> extends {
663
- readonly codecId: infer Id extends string;
664
- }
665
- ? Id
666
- : never;
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
- > = FieldStorageColumn<TContract, ModelName, FieldName> extends {
673
- readonly nullable: infer N extends boolean;
674
- }
675
- ? N
676
- : false;
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
- > = FieldCodecId<TContract, ModelName, FieldName> extends infer Id extends string
683
- ? Id extends keyof ExtractCodecTypes<TContract>
684
- ? ExtractCodecTypes<TContract>[Id] extends { readonly traits: infer T }
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
- > = FieldStorageColumn<TContract, ModelName, FieldName> extends infer Column
735
- ? Column extends StorageColumn
736
- ? Column['nullable'] extends true
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
- : HasExecutionCreateDefault<TContract, ModelName, FieldName>
741
- : HasExecutionCreateDefault<TContract, ModelName, FieldName>
742
- : HasExecutionCreateDefault<TContract, ModelName, FieldName>;
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> = ModelDef<
779
- TContract,
780
- ModelName
781
- > extends {
782
- readonly discriminator: unknown;
783
- readonly variants: Record<string, unknown>;
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 Contract<SqlStorage>,
790
- ModelName extends string,
791
- > = ModelDef<TContract, ModelName> extends {
792
- readonly discriminator: { readonly field: infer F extends string };
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
- > = IsPolymorphicBase<TContract, ModelName> extends true
809
- ? VName extends string
810
- ? VariantCreateInput<TContract, ModelName, VName>
811
- : never
812
- : CreateInput<TContract, ModelName>;
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 Contract<SqlStorage>,
816
- ModelName extends string,
817
- > = ModelTableName<TContract, ModelName> extends infer TableName extends string
818
- ? TContract['storage']['tables'] extends Record<string, unknown>
819
- ? TableName extends keyof TContract['storage']['tables']
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 Contract<SqlStorage>,
827
- ModelName extends string,
828
- > = ModelStorageTableDef<TContract, ModelName> extends {
829
- readonly primaryKey: { readonly columns: infer Columns extends readonly string[] };
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 Contract<SqlStorage>,
836
- ModelName extends string,
837
- > = ModelStorageTableDef<TContract, ModelName> extends {
838
- readonly uniques: infer Uniques;
839
- }
840
- ? Uniques extends ReadonlyArray<infer Unique>
841
- ? Unique extends { readonly columns: infer Columns extends readonly string[] }
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
- > = ConstraintColumnsUnion<TContract, ModelName> extends infer Columns
895
- ? Columns extends readonly string[]
896
- ? CriterionFromConstraintColumns<TContract, ModelName, Columns>
897
- : never
898
- : never;
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 Contract<SqlStorage>,
986
- ModelName extends string,
987
- > = Extract<AllModelRelationEntries<TContract>, RelationDefWithTargetFields> extends infer Relation
988
- ? Relation extends {
989
- readonly to: ModelName;
990
- readonly on: {
991
- readonly targetFields: infer Fields extends readonly string[];
992
- };
993
- }
994
- ? Fields[number]
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> = ModelDef<
1050
- TContract,
1051
- ModelName
1052
- > extends { readonly relations: infer R }
1053
- ? R extends Record<string, unknown>
1054
- ? R
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
- > = RelationsOf<TContract, ModelName> extends infer Rels
1087
- ? Rels extends Record<string, unknown>
1088
- ? RelName extends keyof Rels
1089
- ? RelationModelName<Rels[RelName]>
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
- > = RelationsOf<TContract, ModelName> extends infer Rels
1105
- ? Rels extends Record<string, unknown>
1106
- ? RelName extends keyof Rels
1107
- ? RelationCardinalityFromRelation<Rels[RelName]>
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
- > = ModelTableName<TContract, ModelName> extends infer TableName extends string
1165
- ? TableName extends keyof TContract['storage']['tables']
1166
- ? TContract['storage']['tables'][TableName] extends infer Table extends StorageTable
1167
- ? RelationsOf<TContract, ModelName> extends infer Rels extends Record<string, unknown>
1168
- ? RelName extends keyof Rels
1169
- ? RelationLocalFieldColumns<
1170
- TContract,
1171
- ModelName,
1172
- Rels[RelName]
1173
- > extends infer Cols extends readonly string[]
1174
- ? IsFkSideOfRelation<Table, Cols> extends true
1175
- ? AnyColumnNullable<Table['columns'], Cols>
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
- > = RelationCardinality<TContract, ModelName, RelName> extends '1:1' | 'N:1'
1190
- ? IsToOneRelationNullable<TContract, ModelName, RelName> extends true
1191
- ? IncludedRow | null
1192
- : IncludedRow
1193
- : IncludedRow[];
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;