@pothos/plugin-prisma 4.1.0 → 4.2.1
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/CHANGELOG.md +16 -4
- package/dts/connection-helpers.d.ts +2 -2
- package/dts/connection-helpers.d.ts.map +1 -1
- package/dts/global-types.d.ts +8 -8
- package/dts/global-types.d.ts.map +1 -1
- package/dts/index.d.ts +2 -2
- package/dts/index.d.ts.map +1 -1
- package/dts/interface-ref.d.ts +2 -2
- package/dts/interface-ref.d.ts.map +1 -1
- package/dts/model-loader.d.ts +4 -4
- package/dts/model-loader.d.ts.map +1 -1
- package/dts/node-ref.d.ts +1 -1
- package/dts/node-ref.d.ts.map +1 -1
- package/dts/object-ref.d.ts +1 -1
- package/dts/object-ref.d.ts.map +1 -1
- package/dts/prisma-field-builder.d.ts +6 -6
- package/dts/prisma-field-builder.d.ts.map +1 -1
- package/dts/types.d.ts +10 -10
- package/dts/types.d.ts.map +1 -1
- package/dts/util/cursors.d.ts +3 -3
- package/dts/util/cursors.d.ts.map +1 -1
- package/dts/util/datamodel.d.ts +3 -3
- package/dts/util/datamodel.d.ts.map +1 -1
- package/dts/util/deep-equal.d.ts.map +1 -1
- package/dts/util/description.d.ts +1 -1
- package/dts/util/description.d.ts.map +1 -1
- package/dts/util/get-client.d.ts +2 -2
- package/dts/util/get-client.d.ts.map +1 -1
- package/dts/util/loader-map.d.ts +2 -2
- package/dts/util/loader-map.d.ts.map +1 -1
- package/dts/util/map-query.d.ts +3 -3
- package/dts/util/map-query.d.ts.map +1 -1
- package/dts/util/relation-map.d.ts +1 -1
- package/dts/util/relation-map.d.ts.map +1 -1
- package/dts/util/selections.d.ts +2 -2
- package/dts/util/selections.d.ts.map +1 -1
- package/dts/util/usage.d.ts.map +1 -1
- package/esm/connection-helpers.d.ts +2 -2
- package/esm/connection-helpers.d.ts.map +1 -1
- package/esm/field-builder.js +6 -6
- package/esm/field-builder.js.map +1 -1
- package/esm/generator.js +5 -5
- package/esm/generator.js.map +1 -1
- package/esm/global-types.d.ts +8 -8
- package/esm/global-types.d.ts.map +1 -1
- package/esm/global-types.js +1 -1
- package/esm/global-types.js.map +1 -1
- package/esm/index.d.ts +2 -2
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4 -4
- package/esm/index.js.map +1 -1
- package/esm/interface-ref.d.ts +2 -2
- package/esm/interface-ref.d.ts.map +1 -1
- package/esm/interface-ref.js.map +1 -1
- package/esm/model-loader.d.ts +4 -4
- package/esm/model-loader.d.ts.map +1 -1
- package/esm/model-loader.js +13 -15
- package/esm/model-loader.js.map +1 -1
- package/esm/node-ref.d.ts +1 -1
- package/esm/node-ref.d.ts.map +1 -1
- package/esm/object-ref.d.ts +1 -1
- package/esm/object-ref.d.ts.map +1 -1
- package/esm/object-ref.js +4 -2
- package/esm/object-ref.js.map +1 -1
- package/esm/prisma-field-builder.d.ts +6 -6
- package/esm/prisma-field-builder.d.ts.map +1 -1
- package/esm/prisma-field-builder.js +7 -8
- package/esm/prisma-field-builder.js.map +1 -1
- package/esm/schema-builder.js +1 -1
- package/esm/schema-builder.js.map +1 -1
- package/esm/types.d.ts +10 -10
- package/esm/types.d.ts.map +1 -1
- package/esm/types.js.map +1 -1
- package/esm/util/cursors.d.ts +3 -3
- package/esm/util/cursors.d.ts.map +1 -1
- package/esm/util/cursors.js +2 -2
- package/esm/util/cursors.js.map +1 -1
- package/esm/util/datamodel.d.ts +3 -3
- package/esm/util/datamodel.d.ts.map +1 -1
- package/esm/util/datamodel.js.map +1 -1
- package/esm/util/deep-equal.d.ts.map +1 -1
- package/esm/util/deep-equal.js +1 -1
- package/esm/util/deep-equal.js.map +1 -1
- package/esm/util/description.d.ts +1 -1
- package/esm/util/description.d.ts.map +1 -1
- package/esm/util/description.js +1 -1
- package/esm/util/description.js.map +1 -1
- package/esm/util/get-client.d.ts +2 -2
- package/esm/util/get-client.d.ts.map +1 -1
- package/esm/util/get-client.js +1 -1
- package/esm/util/get-client.js.map +1 -1
- package/esm/util/loader-map.d.ts +2 -2
- package/esm/util/loader-map.d.ts.map +1 -1
- package/esm/util/loader-map.js +4 -5
- package/esm/util/loader-map.js.map +1 -1
- package/esm/util/map-query.d.ts +3 -3
- package/esm/util/map-query.d.ts.map +1 -1
- package/esm/util/map-query.js +2 -3
- package/esm/util/map-query.js.map +1 -1
- package/esm/util/relation-map.d.ts +1 -1
- package/esm/util/relation-map.d.ts.map +1 -1
- package/esm/util/relation-map.js +12 -12
- package/esm/util/relation-map.js.map +1 -1
- package/esm/util/selections.d.ts +2 -2
- package/esm/util/selections.d.ts.map +1 -1
- package/esm/util/selections.js +9 -9
- package/esm/util/selections.js.map +1 -1
- package/esm/util/usage.d.ts.map +1 -1
- package/esm/util/usage.js +0 -1
- package/esm/util/usage.js.map +1 -1
- package/generated.d.ts +1 -1
- package/lib/field-builder.js +7 -5
- package/lib/field-builder.js.map +1 -1
- package/lib/generator.js +4 -4
- package/lib/generator.js.map +1 -1
- package/lib/global-types.js +1 -1
- package/lib/global-types.js.map +1 -1
- package/lib/index.js +4 -4
- package/lib/index.js.map +1 -1
- package/lib/interface-ref.js.map +1 -1
- package/lib/model-loader.js +12 -14
- package/lib/model-loader.js.map +1 -1
- package/lib/object-ref.js +3 -1
- package/lib/object-ref.js.map +1 -1
- package/lib/prisma-field-builder.js +6 -7
- package/lib/prisma-field-builder.js.map +1 -1
- package/lib/schema-builder.js +1 -1
- package/lib/schema-builder.js.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/util/cursors.js +2 -2
- package/lib/util/cursors.js.map +1 -1
- package/lib/util/datamodel.js.map +1 -1
- package/lib/util/deep-equal.js +1 -1
- package/lib/util/deep-equal.js.map +1 -1
- package/lib/util/description.js +1 -1
- package/lib/util/description.js.map +1 -1
- package/lib/util/get-client.js +1 -1
- package/lib/util/get-client.js.map +1 -1
- package/lib/util/loader-map.js +4 -5
- package/lib/util/loader-map.js.map +1 -1
- package/lib/util/map-query.js +2 -3
- package/lib/util/map-query.js.map +1 -1
- package/lib/util/relation-map.js +12 -12
- package/lib/util/relation-map.js.map +1 -1
- package/lib/util/selections.js +9 -9
- package/lib/util/selections.js.map +1 -1
- package/lib/util/usage.js +0 -1
- package/lib/util/usage.js.map +1 -1
- package/package.json +12 -12
- package/src/connection-helpers.ts +2 -2
- package/src/field-builder.ts +21 -13
- package/src/generator.ts +5 -8
- package/src/global-types.ts +35 -28
- package/src/index.ts +12 -11
- package/src/interface-ref.ts +2 -2
- package/src/model-loader.ts +17 -19
- package/src/node-ref.ts +1 -1
- package/src/object-ref.ts +5 -3
- package/src/prisma-field-builder.ts +58 -51
- package/src/schema-builder.ts +8 -8
- package/src/types.ts +64 -62
- package/src/util/cursors.ts +7 -8
- package/src/util/datamodel.ts +3 -3
- package/src/util/deep-equal.ts +0 -1
- package/src/util/description.ts +1 -2
- package/src/util/get-client.ts +2 -3
- package/src/util/loader-map.ts +6 -8
- package/src/util/map-query.ts +16 -19
- package/src/util/relation-map.ts +13 -13
- package/src/util/selections.ts +10 -12
- package/src/util/usage.ts +0 -2
package/src/types.ts
CHANGED
|
@@ -1,33 +1,35 @@
|
|
|
1
|
-
import { FieldNode, GraphQLResolveInfo } from 'graphql';
|
|
2
1
|
import {
|
|
3
|
-
ArgumentRef,
|
|
4
|
-
FieldKind,
|
|
5
|
-
FieldMap,
|
|
6
|
-
FieldNullability,
|
|
7
|
-
FieldOptionsFromKind,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
InputFieldMap,
|
|
11
|
-
InputFieldsFromShape,
|
|
12
|
-
InputShapeFromFields,
|
|
13
|
-
InterfaceParam,
|
|
14
|
-
ListResolveValue,
|
|
15
|
-
MaybePromise,
|
|
16
|
-
Normalize,
|
|
17
|
-
ObjectRef,
|
|
18
|
-
OutputShape,
|
|
19
|
-
OutputType,
|
|
20
|
-
SchemaTypes,
|
|
21
|
-
ShapeFromTypeParam,
|
|
22
|
-
ShapeWithNullability,
|
|
2
|
+
type ArgumentRef,
|
|
3
|
+
type FieldKind,
|
|
4
|
+
type FieldMap,
|
|
5
|
+
type FieldNullability,
|
|
6
|
+
type FieldOptionsFromKind,
|
|
7
|
+
type InferredFieldOptionKeys,
|
|
8
|
+
type InferredFieldOptionsByKind,
|
|
9
|
+
type InputFieldMap,
|
|
10
|
+
type InputFieldsFromShape,
|
|
11
|
+
type InputShapeFromFields,
|
|
12
|
+
type InterfaceParam,
|
|
13
|
+
type ListResolveValue,
|
|
14
|
+
type MaybePromise,
|
|
15
|
+
type Normalize,
|
|
16
|
+
type ObjectRef,
|
|
17
|
+
type OutputShape,
|
|
18
|
+
type OutputType,
|
|
19
|
+
type SchemaTypes,
|
|
20
|
+
type ShapeFromTypeParam,
|
|
21
|
+
type ShapeWithNullability,
|
|
22
|
+
type TypeParam,
|
|
23
23
|
typeBrandKey,
|
|
24
|
-
TypeParam,
|
|
25
24
|
} from '@pothos/core';
|
|
26
|
-
import {
|
|
25
|
+
import type { FieldNode, GraphQLResolveInfo } from 'graphql';
|
|
26
|
+
import type { PrismaInterfaceRef, PrismaRef } from './interface-ref';
|
|
27
27
|
import type { PrismaObjectFieldBuilder } from './prisma-field-builder';
|
|
28
28
|
|
|
29
29
|
export interface PrismaDelegate {
|
|
30
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
30
31
|
findUniqueOrThrow?: (...args: any[]) => Promise<unknown>;
|
|
32
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
31
33
|
findUnique: (...args: any[]) => Promise<unknown>;
|
|
32
34
|
}
|
|
33
35
|
|
|
@@ -84,6 +86,7 @@ export type PrismaObjectFieldOptions<
|
|
|
84
86
|
ShapeFromSelection<
|
|
85
87
|
Types,
|
|
86
88
|
ExtractModel<Types, ParentShape>,
|
|
89
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
87
90
|
{ select: Select extends (...args: any[]) => infer S ? S : Select }
|
|
88
91
|
>,
|
|
89
92
|
> = PothosSchemaTypes.ObjectFieldOptions<Types, Shape, Type, Nullable, Args, ResolveReturnShape> &
|
|
@@ -432,7 +435,8 @@ export type RelatedFieldOptions<
|
|
|
432
435
|
info: GraphQLResolveInfo,
|
|
433
436
|
) => MaybePromise<ShapeWithNullability<Types, Model['Relations'][Field]['Shape'], Nullable>>;
|
|
434
437
|
description?: string | false;
|
|
435
|
-
|
|
438
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
439
|
+
type?: PrismaRef<any, TypesForRelation<Types, Model, Field>>;
|
|
436
440
|
query?: QueryForField<Types, Args, Model['Include'][Field & keyof Model['Include']]>;
|
|
437
441
|
onNull?:
|
|
438
442
|
| 'error'
|
|
@@ -454,7 +458,8 @@ export type RelatedFieldOptions<
|
|
|
454
458
|
export type VariantFieldOptions<
|
|
455
459
|
Types extends SchemaTypes,
|
|
456
460
|
Model extends PrismaModelTypes,
|
|
457
|
-
|
|
461
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
462
|
+
Variant extends PrismaRef<any, Model>,
|
|
458
463
|
Args extends InputFieldMap,
|
|
459
464
|
isNull,
|
|
460
465
|
Shape,
|
|
@@ -499,10 +504,11 @@ export type RelationCountOptions<
|
|
|
499
504
|
export type PrismaFieldOptions<
|
|
500
505
|
Types extends SchemaTypes,
|
|
501
506
|
ParentShape,
|
|
502
|
-
Type extends
|
|
507
|
+
Type extends // biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
503
508
|
| PrismaRef<any, PrismaModelTypes>
|
|
504
509
|
| keyof Types['PrismaTypes']
|
|
505
510
|
| [keyof Types['PrismaTypes']]
|
|
511
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
506
512
|
| [PrismaRef<any, PrismaModelTypes>],
|
|
507
513
|
Model extends PrismaModelTypes,
|
|
508
514
|
Param extends TypeParam<Types>,
|
|
@@ -511,34 +517,26 @@ export type PrismaFieldOptions<
|
|
|
511
517
|
ResolveShape,
|
|
512
518
|
ResolveReturnShape,
|
|
513
519
|
Kind extends FieldKind = FieldKind,
|
|
514
|
-
> =
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
>
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
}
|
|
530
|
-
? PrismaFieldResolver<Types, Model, Parent, Param, Args, Nullable, ResolveReturnShape>
|
|
531
|
-
: PrismaFieldResolver<
|
|
532
|
-
Types,
|
|
533
|
-
Model,
|
|
534
|
-
ParentShape,
|
|
535
|
-
Param,
|
|
536
|
-
Args,
|
|
537
|
-
Nullable,
|
|
538
|
-
ResolveReturnShape
|
|
539
|
-
>;
|
|
520
|
+
> = FieldOptionsFromKind<
|
|
521
|
+
Types,
|
|
522
|
+
ParentShape,
|
|
523
|
+
Param,
|
|
524
|
+
Nullable,
|
|
525
|
+
Args,
|
|
526
|
+
Kind,
|
|
527
|
+
ResolveShape,
|
|
528
|
+
ResolveReturnShape
|
|
529
|
+
> extends infer FieldOptions
|
|
530
|
+
? Omit<FieldOptions, InferredFieldOptionKeys | 'type'> & {
|
|
531
|
+
type: Type;
|
|
532
|
+
resolve: FieldOptions extends {
|
|
533
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
534
|
+
resolve?: (parent: infer Parent, ...args: any[]) => unknown;
|
|
540
535
|
}
|
|
541
|
-
|
|
536
|
+
? PrismaFieldResolver<Types, Model, Parent, Param, Args, Nullable, ResolveReturnShape>
|
|
537
|
+
: PrismaFieldResolver<Types, Model, ParentShape, Param, Args, Nullable, ResolveReturnShape>;
|
|
538
|
+
}
|
|
539
|
+
: never;
|
|
542
540
|
|
|
543
541
|
export type PrismaFieldWithInputOptions<
|
|
544
542
|
Types extends SchemaTypes,
|
|
@@ -546,10 +544,11 @@ export type PrismaFieldWithInputOptions<
|
|
|
546
544
|
Kind extends FieldKind,
|
|
547
545
|
Args extends InputFieldMap,
|
|
548
546
|
Fields extends InputFieldMap,
|
|
549
|
-
Type extends
|
|
547
|
+
Type extends // biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
550
548
|
| PrismaRef<any, PrismaModelTypes>
|
|
551
549
|
| keyof Types['PrismaTypes']
|
|
552
550
|
| [keyof Types['PrismaTypes']]
|
|
551
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
553
552
|
| [PrismaRef<any, PrismaModelTypes>],
|
|
554
553
|
Model extends PrismaModelTypes,
|
|
555
554
|
Param extends TypeParam<Types>,
|
|
@@ -617,8 +616,9 @@ export type PrismaFieldResolver<
|
|
|
617
616
|
export type PrismaConnectionFieldOptions<
|
|
618
617
|
Types extends SchemaTypes,
|
|
619
618
|
ParentShape,
|
|
620
|
-
Type extends
|
|
619
|
+
Type extends // biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
621
620
|
| PrismaInterfaceRef<any, PrismaModelTypes>
|
|
621
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
622
622
|
| PrismaRef<any, PrismaModelTypes>
|
|
623
623
|
| keyof Types['PrismaTypes'],
|
|
624
624
|
Model extends PrismaModelTypes,
|
|
@@ -627,7 +627,6 @@ export type PrismaConnectionFieldOptions<
|
|
|
627
627
|
Args extends InputFieldMap,
|
|
628
628
|
ResolveReturnShape,
|
|
629
629
|
Kind extends FieldKind,
|
|
630
|
-
// eslint-disable-next-line @typescript-eslint/sort-type-constituents
|
|
631
630
|
> = Omit<
|
|
632
631
|
FieldOptionsFromKind<
|
|
633
632
|
Types,
|
|
@@ -693,7 +692,6 @@ export type RelatedConnectionOptions<
|
|
|
693
692
|
Field extends Model['ListRelations'],
|
|
694
693
|
Nullable extends boolean,
|
|
695
694
|
Args extends InputFieldMap,
|
|
696
|
-
// eslint-disable-next-line @typescript-eslint/sort-type-constituents
|
|
697
695
|
> = Omit<
|
|
698
696
|
PothosSchemaTypes.ObjectFieldOptions<
|
|
699
697
|
Types,
|
|
@@ -743,7 +741,8 @@ export type RelatedConnectionOptions<
|
|
|
743
741
|
} & {
|
|
744
742
|
description?: string | false;
|
|
745
743
|
query?: QueryForField<Types, Args, Model['Include'][Field & keyof Model['Include']]>;
|
|
746
|
-
|
|
744
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
745
|
+
type?: PrismaRef<any, TypesForRelation<Types, Model, Field>>;
|
|
747
746
|
cursor: CursorFromRelation<Model, Field>;
|
|
748
747
|
defaultSize?: number | ((args: ConnectionArgs, ctx: Types['Context']) => number);
|
|
749
748
|
maxSize?: number | ((args: ConnectionArgs, ctx: Types['Context']) => number);
|
|
@@ -758,7 +757,7 @@ export type IncludeMap = Record<string, SelectionMap | boolean>;
|
|
|
758
757
|
export interface SelectionMap {
|
|
759
758
|
select?: Record<string, SelectionMap | boolean>;
|
|
760
759
|
include?: Record<string, SelectionMap | boolean>;
|
|
761
|
-
where?:
|
|
760
|
+
where?: object;
|
|
762
761
|
}
|
|
763
762
|
|
|
764
763
|
export type FieldSelection =
|
|
@@ -849,7 +848,8 @@ type InferModelShape<Model> = Simplify<
|
|
|
849
848
|
// Infer relations for a given model
|
|
850
849
|
type InferRelations<Model> = {
|
|
851
850
|
[K in keyof Model]: {
|
|
852
|
-
|
|
851
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
852
|
+
Shape: Model[K] extends any[] ? InferModelShape<Model[K][0]>[] : InferModelShape<Model[K]>;
|
|
853
853
|
Name: InferField<InferItemOfArray<Model[K]>, 'name'>;
|
|
854
854
|
Nullable: IsNullable<Model[K]>;
|
|
855
855
|
};
|
|
@@ -857,7 +857,8 @@ type InferRelations<Model> = {
|
|
|
857
857
|
|
|
858
858
|
// Create a list of keys that represent array relations
|
|
859
859
|
type InferRelationList<Model> = {
|
|
860
|
-
|
|
860
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
861
|
+
[K in keyof Model as Model[K] extends any[] ? K : never]: K;
|
|
861
862
|
};
|
|
862
863
|
|
|
863
864
|
// Make a type nullable if IsNullable is true
|
|
@@ -868,7 +869,8 @@ type InferItemOfArray<T> = T extends Array<infer U> ? U : T;
|
|
|
868
869
|
|
|
869
870
|
// Infers the composites of a given model
|
|
870
871
|
type InferComposites<Model> = {
|
|
871
|
-
|
|
872
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
873
|
+
[K in keyof Model]: Model[K] extends any[]
|
|
872
874
|
? Simplify<
|
|
873
875
|
InferField<Model[K][0], 'scalars'> & InferComposites<InferField<Model[K][0], 'composites'>>
|
|
874
876
|
>[]
|
package/src/util/cursors.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
/* eslint-disable no-nested-ternary */
|
|
2
1
|
import {
|
|
2
|
+
type MaybePromise,
|
|
3
|
+
PothosValidationError,
|
|
4
|
+
type SchemaTypes,
|
|
3
5
|
decodeBase64,
|
|
4
6
|
encodeBase64,
|
|
5
|
-
MaybePromise,
|
|
6
|
-
PothosValidationError,
|
|
7
|
-
SchemaTypes,
|
|
8
7
|
} from '@pothos/core';
|
|
9
8
|
import { getModel } from './datamodel';
|
|
10
|
-
import { DMMFField } from './get-client';
|
|
9
|
+
import type { DMMFField } from './get-client';
|
|
11
10
|
import { extendWithUsage } from './usage';
|
|
12
11
|
|
|
13
12
|
const DEFAULT_MAX_SIZE = 100;
|
|
@@ -303,7 +302,7 @@ export function wrapConnectionResult<T extends {}>(
|
|
|
303
302
|
},
|
|
304
303
|
};
|
|
305
304
|
|
|
306
|
-
const edges = nodes.map((value
|
|
305
|
+
const edges = nodes.map((value) =>
|
|
307
306
|
value == null
|
|
308
307
|
? null
|
|
309
308
|
: resolveNode
|
|
@@ -331,8 +330,8 @@ export async function resolvePrismaCursorConnection<T extends {}>(
|
|
|
331
330
|
options: ResolvePrismaCursorConnectionOptions,
|
|
332
331
|
cursor: (node: T) => string,
|
|
333
332
|
resolve: (query: {
|
|
334
|
-
include?:
|
|
335
|
-
cursor?:
|
|
333
|
+
include?: object;
|
|
334
|
+
cursor?: object;
|
|
336
335
|
take: number;
|
|
337
336
|
skip: number;
|
|
338
337
|
}) => MaybePromise<readonly T[]>,
|
package/src/util/datamodel.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ObjectRef, PothosSchemaError, SchemaTypes } from '@pothos/core';
|
|
2
|
-
import { PrismaInterfaceRef, PrismaRef } from '../interface-ref';
|
|
1
|
+
import { type ObjectRef, PothosSchemaError, type SchemaTypes } from '@pothos/core';
|
|
2
|
+
import { PrismaInterfaceRef, type PrismaRef } from '../interface-ref';
|
|
3
3
|
import { PrismaObjectRef } from '../object-ref';
|
|
4
|
-
import { PrismaClient, PrismaDelegate, PrismaModelTypes } from '../types';
|
|
4
|
+
import type { PrismaClient, PrismaDelegate, PrismaModelTypes } from '../types';
|
|
5
5
|
import { getDMMF } from './get-client';
|
|
6
6
|
|
|
7
7
|
export const refMap = new WeakMap<object, Map<string, PrismaRef<never, PrismaModelTypes>>>();
|
package/src/util/deep-equal.ts
CHANGED
package/src/util/description.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { SchemaTypes } from '@pothos/core';
|
|
1
|
+
import type { SchemaTypes } from '@pothos/core';
|
|
3
2
|
import { getFieldData, getModel } from './datamodel';
|
|
4
3
|
|
|
5
4
|
export function getFieldDescription<Types extends SchemaTypes>(
|
package/src/util/get-client.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { PrismaClient } from '../types';
|
|
1
|
+
import { type SchemaTypes, createContextCache } from '@pothos/core';
|
|
2
|
+
import type { PrismaClient } from '../types';
|
|
4
3
|
|
|
5
4
|
export interface DMMFField {
|
|
6
5
|
type: string;
|
package/src/util/loader-map.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { GraphQLResolveInfo } from 'graphql';
|
|
2
1
|
import { createContextCache } from '@pothos/core';
|
|
3
|
-
import {
|
|
2
|
+
import type { GraphQLResolveInfo } from 'graphql';
|
|
3
|
+
import type { LoaderMappings } from '../types';
|
|
4
4
|
|
|
5
|
-
const cache = createContextCache((
|
|
5
|
+
const cache = createContextCache(() => new Map<string, LoaderMappings>());
|
|
6
6
|
|
|
7
7
|
export function cacheKey(type: string, path: GraphQLResolveInfo['path'], subPath: string[] = []) {
|
|
8
8
|
let key = '';
|
|
@@ -23,15 +23,13 @@ export function cacheKey(type: string, path: GraphQLResolveInfo['path'], subPath
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export function setLoaderMappings(ctx: object, info: GraphQLResolveInfo, value: LoaderMappings) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const mapping = value[field];
|
|
26
|
+
const map = cache(ctx);
|
|
27
|
+
for (const [field, mapping] of Object.entries(value)) {
|
|
30
28
|
const subPath = [...mapping.indirectPath, field];
|
|
31
29
|
const key = cacheKey(mapping.type, info.path, subPath);
|
|
32
30
|
|
|
33
31
|
map.set(key, mapping.mappings);
|
|
34
|
-
}
|
|
32
|
+
}
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
export function getLoaderMapping(ctx: object, path: GraphQLResolveInfo['path'], type: string) {
|
package/src/util/map-query.ts
CHANGED
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
/* eslint-disable no-continue */
|
|
1
|
+
import { PothosValidationError, getMappedArgumentValues } from '@pothos/core';
|
|
3
2
|
import {
|
|
4
|
-
FieldNode,
|
|
5
|
-
FragmentDefinitionNode,
|
|
6
|
-
|
|
7
|
-
getNamedType,
|
|
8
|
-
GraphQLField,
|
|
3
|
+
type FieldNode,
|
|
4
|
+
type FragmentDefinitionNode,
|
|
5
|
+
type GraphQLField,
|
|
9
6
|
GraphQLIncludeDirective,
|
|
10
|
-
GraphQLInterfaceType,
|
|
11
|
-
GraphQLNamedType,
|
|
12
|
-
GraphQLObjectType,
|
|
13
|
-
GraphQLResolveInfo,
|
|
7
|
+
type GraphQLInterfaceType,
|
|
8
|
+
type GraphQLNamedType,
|
|
9
|
+
type GraphQLObjectType,
|
|
10
|
+
type GraphQLResolveInfo,
|
|
14
11
|
GraphQLSkipDirective,
|
|
15
|
-
InlineFragmentNode,
|
|
12
|
+
type InlineFragmentNode,
|
|
13
|
+
Kind,
|
|
14
|
+
type SelectionSetNode,
|
|
15
|
+
getDirectiveValues,
|
|
16
|
+
getNamedType,
|
|
16
17
|
isInterfaceType,
|
|
17
18
|
isObjectType,
|
|
18
|
-
Kind,
|
|
19
|
-
SelectionSetNode,
|
|
20
19
|
} from 'graphql';
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
20
|
+
import type {
|
|
23
21
|
FieldSelection,
|
|
24
22
|
IncludeMap,
|
|
25
23
|
IndirectInclude,
|
|
@@ -27,12 +25,12 @@ import {
|
|
|
27
25
|
SelectionMap,
|
|
28
26
|
} from '../types';
|
|
29
27
|
import { setLoaderMappings } from './loader-map';
|
|
30
|
-
import { FieldMap } from './relation-map';
|
|
28
|
+
import type { FieldMap } from './relation-map';
|
|
31
29
|
import {
|
|
30
|
+
type SelectionState,
|
|
32
31
|
createState,
|
|
33
32
|
mergeSelection,
|
|
34
33
|
selectionCompatible,
|
|
35
|
-
SelectionState,
|
|
36
34
|
selectionToQuery,
|
|
37
35
|
} from './selections';
|
|
38
36
|
import { wrapWithUsageCheck } from './usage';
|
|
@@ -355,7 +353,6 @@ function addFieldSelection(
|
|
|
355
353
|
|
|
356
354
|
addTypeSelectionsForField(returnType, context, info, fieldState, selection, []);
|
|
357
355
|
|
|
358
|
-
// eslint-disable-next-line prefer-destructuring
|
|
359
356
|
mappings = fieldState.mappings;
|
|
360
357
|
|
|
361
358
|
return selectionToQuery(fieldState);
|
package/src/util/relation-map.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createContextCache } from '@pothos/core';
|
|
2
|
-
import { DMMF, RuntimeDataModel } from './get-client';
|
|
2
|
+
import type { DMMF, RuntimeDataModel } from './get-client';
|
|
3
3
|
|
|
4
4
|
export interface FieldMap {
|
|
5
5
|
model: string;
|
|
@@ -16,33 +16,33 @@ export function createRelationMap({ models }: DMMF['datamodel'] | RuntimeDataMod
|
|
|
16
16
|
const relationMap: RelationMap = new Map();
|
|
17
17
|
|
|
18
18
|
if (Array.isArray(models)) {
|
|
19
|
-
|
|
19
|
+
for (const model of models) {
|
|
20
20
|
relationMap.set(model.name, { model: model.name, relations: new Map() });
|
|
21
|
-
}
|
|
21
|
+
}
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
for (const model of models) {
|
|
24
24
|
const map = relationMap.get(model.name)!.relations;
|
|
25
25
|
|
|
26
|
-
model.fields
|
|
26
|
+
for (const field of model.fields) {
|
|
27
27
|
if (field.kind === 'object' && relationMap.has(field.type)) {
|
|
28
28
|
map.set(field.name, relationMap.get(field.type)!);
|
|
29
29
|
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
32
|
} else {
|
|
33
|
-
Object.keys(models)
|
|
33
|
+
for (const name of Object.keys(models)) {
|
|
34
34
|
relationMap.set(name, { model: name, relations: new Map() });
|
|
35
|
-
}
|
|
35
|
+
}
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
for (const [name, model] of Object.entries(models)) {
|
|
38
38
|
const map = relationMap.get(name)!.relations;
|
|
39
39
|
|
|
40
|
-
model.fields
|
|
40
|
+
for (const field of model.fields) {
|
|
41
41
|
if (field.kind === 'object' && relationMap.has(field.type)) {
|
|
42
42
|
map.set(field.name, relationMap.get(field.type)!);
|
|
43
43
|
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
return relationMap;
|
package/src/util/selections.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
/* eslint-disable no-underscore-dangle */
|
|
3
|
-
import { LoaderMappings, SelectionMap } from '../types';
|
|
1
|
+
import type { LoaderMappings, SelectionMap } from '../types';
|
|
4
2
|
import { deepEqual } from './deep-equal';
|
|
5
|
-
import { FieldMap } from './relation-map';
|
|
3
|
+
import type { FieldMap } from './relation-map';
|
|
6
4
|
|
|
7
5
|
export type SelectionMode = 'include' | 'select';
|
|
8
6
|
|
|
@@ -114,15 +112,15 @@ export function mergeSelection(state: SelectionState, { select, include, ...quer
|
|
|
114
112
|
}
|
|
115
113
|
|
|
116
114
|
if (include) {
|
|
117
|
-
Object.keys(include)
|
|
115
|
+
for (const key of Object.keys(include)) {
|
|
118
116
|
merge(key, include[key]);
|
|
119
|
-
}
|
|
117
|
+
}
|
|
120
118
|
}
|
|
121
119
|
|
|
122
120
|
if (select) {
|
|
123
|
-
Object.keys(select)
|
|
121
|
+
for (const key of Object.keys(select)) {
|
|
124
122
|
merge(key, select[key]);
|
|
125
|
-
}
|
|
123
|
+
}
|
|
126
124
|
}
|
|
127
125
|
|
|
128
126
|
if (Object.keys(query).length > 0) {
|
|
@@ -136,9 +134,9 @@ export function mergeSelection(state: SelectionState, { select, include, ...quer
|
|
|
136
134
|
|
|
137
135
|
if (key === '_count') {
|
|
138
136
|
const counts = (value as { select?: Record<string, boolean> }).select ?? {};
|
|
139
|
-
Object.keys(counts)
|
|
137
|
+
for (const count of Object.keys(counts)) {
|
|
140
138
|
state.counts.set(count, counts[count]);
|
|
141
|
-
}
|
|
139
|
+
}
|
|
142
140
|
|
|
143
141
|
return;
|
|
144
142
|
}
|
|
@@ -184,10 +182,10 @@ export function selectionToQuery(state: SelectionState): SelectionMap {
|
|
|
184
182
|
}
|
|
185
183
|
|
|
186
184
|
if (state.mode === 'select') {
|
|
187
|
-
state.fields
|
|
185
|
+
for (const field of state.fields) {
|
|
188
186
|
hasSelection = true;
|
|
189
187
|
nestedIncludes[field] = true;
|
|
190
|
-
}
|
|
188
|
+
}
|
|
191
189
|
|
|
192
190
|
return {
|
|
193
191
|
...(state.query as SelectionMap),
|
package/src/util/usage.ts
CHANGED
|
@@ -20,7 +20,6 @@ export function wrapWithUsageCheck<T extends Object>(obj: T): T {
|
|
|
20
20
|
Object.defineProperty(result, key, {
|
|
21
21
|
enumerable: true,
|
|
22
22
|
configurable: true,
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/no-loop-func
|
|
24
23
|
get() {
|
|
25
24
|
used = true;
|
|
26
25
|
return obj[key as keyof T];
|
|
@@ -47,7 +46,6 @@ export function extendWithUsage<T extends object, U extends object>(
|
|
|
47
46
|
|
|
48
47
|
for (const key of [usageSymbol, ...Object.keys(original)]) {
|
|
49
48
|
if (key in result) {
|
|
50
|
-
// eslint-disable-next-line no-continue
|
|
51
49
|
continue;
|
|
52
50
|
}
|
|
53
51
|
|