@pothos/plugin-prisma 0.15.0

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.
Files changed (147) hide show
  1. package/.turbo/turbo-build.log +17 -0
  2. package/.turbo/turbo-test.log +17 -0
  3. package/CHANGELOG.md +312 -0
  4. package/LICENSE +6 -0
  5. package/README.md +808 -0
  6. package/babel.config.js +3 -0
  7. package/bin/generator.js +2 -0
  8. package/esm/cursors.d.ts +55 -0
  9. package/esm/cursors.d.ts.map +1 -0
  10. package/esm/cursors.js +106 -0
  11. package/esm/cursors.js.map +1 -0
  12. package/esm/field-builder.d.ts +2 -0
  13. package/esm/field-builder.d.ts.map +1 -0
  14. package/esm/field-builder.js +51 -0
  15. package/esm/field-builder.js.map +1 -0
  16. package/esm/generator.d.ts +2 -0
  17. package/esm/generator.d.ts.map +1 -0
  18. package/esm/generator.js +82 -0
  19. package/esm/generator.js.map +1 -0
  20. package/esm/global-types.d.ts +52 -0
  21. package/esm/global-types.d.ts.map +1 -0
  22. package/esm/global-types.js +2 -0
  23. package/esm/global-types.js.map +1 -0
  24. package/esm/index.d.ts +11 -0
  25. package/esm/index.d.ts.map +1 -0
  26. package/esm/index.js +14 -0
  27. package/esm/index.js.map +1 -0
  28. package/esm/loader-map.d.ts +6 -0
  29. package/esm/loader-map.d.ts.map +1 -0
  30. package/esm/loader-map.js +35 -0
  31. package/esm/loader-map.js.map +1 -0
  32. package/esm/model-loader.d.ts +17 -0
  33. package/esm/model-loader.d.ts.map +1 -0
  34. package/esm/model-loader.js +89 -0
  35. package/esm/model-loader.js.map +1 -0
  36. package/esm/node-ref.d.ts +10 -0
  37. package/esm/node-ref.d.ts.map +1 -0
  38. package/esm/node-ref.js +18 -0
  39. package/esm/node-ref.js.map +1 -0
  40. package/esm/package.json +3 -0
  41. package/esm/prisma-field-builder.d.ts +22 -0
  42. package/esm/prisma-field-builder.d.ts.map +1 -0
  43. package/esm/prisma-field-builder.js +178 -0
  44. package/esm/prisma-field-builder.js.map +1 -0
  45. package/esm/refs.d.ts +13 -0
  46. package/esm/refs.d.ts.map +1 -0
  47. package/esm/refs.js +63 -0
  48. package/esm/refs.js.map +1 -0
  49. package/esm/schema-builder.d.ts +2 -0
  50. package/esm/schema-builder.d.ts.map +1 -0
  51. package/esm/schema-builder.js +69 -0
  52. package/esm/schema-builder.js.map +1 -0
  53. package/esm/types.d.ts +164 -0
  54. package/esm/types.d.ts.map +1 -0
  55. package/esm/types.js +2 -0
  56. package/esm/types.js.map +1 -0
  57. package/esm/util/index.d.ts +5 -0
  58. package/esm/util/index.d.ts.map +1 -0
  59. package/esm/util/index.js +16 -0
  60. package/esm/util/index.js.map +1 -0
  61. package/esm/util/map-includes.d.ts +5 -0
  62. package/esm/util/map-includes.d.ts.map +1 -0
  63. package/esm/util/map-includes.js +168 -0
  64. package/esm/util/map-includes.js.map +1 -0
  65. package/esm/util/merge-includes.d.ts +3 -0
  66. package/esm/util/merge-includes.d.ts.map +1 -0
  67. package/esm/util/merge-includes.js +91 -0
  68. package/esm/util/merge-includes.js.map +1 -0
  69. package/generated.ts +54 -0
  70. package/lib/cursors.d.ts +55 -0
  71. package/lib/cursors.d.ts.map +1 -0
  72. package/lib/cursors.js +112 -0
  73. package/lib/cursors.js.map +1 -0
  74. package/lib/field-builder.d.ts +2 -0
  75. package/lib/field-builder.d.ts.map +1 -0
  76. package/lib/field-builder.js +63 -0
  77. package/lib/field-builder.js.map +1 -0
  78. package/lib/generator.d.ts +2 -0
  79. package/lib/generator.d.ts.map +1 -0
  80. package/lib/generator.js +103 -0
  81. package/lib/generator.js.map +1 -0
  82. package/lib/global-types.d.ts +52 -0
  83. package/lib/global-types.d.ts.map +1 -0
  84. package/lib/global-types.js +3 -0
  85. package/lib/global-types.js.map +1 -0
  86. package/lib/index.d.ts +11 -0
  87. package/lib/index.d.ts.map +1 -0
  88. package/lib/index.js +40 -0
  89. package/lib/index.js.map +1 -0
  90. package/lib/loader-map.d.ts +6 -0
  91. package/lib/loader-map.d.ts.map +1 -0
  92. package/lib/loader-map.js +41 -0
  93. package/lib/loader-map.js.map +1 -0
  94. package/lib/model-loader.d.ts +17 -0
  95. package/lib/model-loader.d.ts.map +1 -0
  96. package/lib/model-loader.js +93 -0
  97. package/lib/model-loader.js.map +1 -0
  98. package/lib/node-ref.d.ts +10 -0
  99. package/lib/node-ref.d.ts.map +1 -0
  100. package/lib/node-ref.js +21 -0
  101. package/lib/node-ref.js.map +1 -0
  102. package/lib/prisma-field-builder.d.ts +22 -0
  103. package/lib/prisma-field-builder.d.ts.map +1 -0
  104. package/lib/prisma-field-builder.js +182 -0
  105. package/lib/prisma-field-builder.js.map +1 -0
  106. package/lib/refs.d.ts +13 -0
  107. package/lib/refs.d.ts.map +1 -0
  108. package/lib/refs.js +72 -0
  109. package/lib/refs.js.map +1 -0
  110. package/lib/schema-builder.d.ts +2 -0
  111. package/lib/schema-builder.d.ts.map +1 -0
  112. package/lib/schema-builder.js +93 -0
  113. package/lib/schema-builder.js.map +1 -0
  114. package/lib/types.d.ts +164 -0
  115. package/lib/types.d.ts.map +1 -0
  116. package/lib/types.js +4 -0
  117. package/lib/types.js.map +1 -0
  118. package/lib/util/index.d.ts +5 -0
  119. package/lib/util/index.d.ts.map +1 -0
  120. package/lib/util/index.js +30 -0
  121. package/lib/util/index.js.map +1 -0
  122. package/lib/util/map-includes.d.ts +5 -0
  123. package/lib/util/map-includes.d.ts.map +1 -0
  124. package/lib/util/map-includes.js +173 -0
  125. package/lib/util/map-includes.js.map +1 -0
  126. package/lib/util/merge-includes.d.ts +3 -0
  127. package/lib/util/merge-includes.d.ts.map +1 -0
  128. package/lib/util/merge-includes.js +96 -0
  129. package/lib/util/merge-includes.js.map +1 -0
  130. package/package.json +70 -0
  131. package/src/cursors.ts +159 -0
  132. package/src/field-builder.ts +115 -0
  133. package/src/generator.ts +184 -0
  134. package/src/global-types.ts +180 -0
  135. package/src/index.ts +18 -0
  136. package/src/loader-map.ts +48 -0
  137. package/src/model-loader.ts +135 -0
  138. package/src/node-ref.ts +29 -0
  139. package/src/prisma-field-builder.ts +324 -0
  140. package/src/refs.ts +110 -0
  141. package/src/schema-builder.ts +124 -0
  142. package/src/types.ts +470 -0
  143. package/src/util/index.ts +26 -0
  144. package/src/util/map-includes.ts +298 -0
  145. package/src/util/merge-includes.ts +121 -0
  146. package/tsconfig.json +21 -0
  147. package/tsconfig.tsbuildinfo +1 -0
package/src/types.ts ADDED
@@ -0,0 +1,470 @@
1
+ import { GraphQLResolveInfo } from 'graphql';
2
+ import {
3
+ FieldKind,
4
+ FieldMap,
5
+ FieldNullability,
6
+ FieldOptionsFromKind,
7
+ InputFieldMap,
8
+ InputFieldsFromShape,
9
+ InputShapeFromFields,
10
+ InterfaceParam,
11
+ ListResolveValue,
12
+ MaybePromise,
13
+ ObjectRef,
14
+ OutputShape,
15
+ OutputType,
16
+ SchemaTypes,
17
+ ShapeFromTypeParam,
18
+ ShapeWithNullability,
19
+ typeBrandKey,
20
+ TypeParam,
21
+ } from '@pothos/core';
22
+ import { PrismaObjectFieldBuilder } from './field-builder';
23
+
24
+ export interface PrismaDelegate {
25
+ findUnique: (...args: any[]) => Promise<unknown>;
26
+ }
27
+
28
+ type RelationKeys<T> = {
29
+ [K in keyof T]: T[K] extends (args: {}) => {
30
+ then: (cb: (result: unknown) => unknown) => unknown;
31
+ }
32
+ ? K
33
+ : never;
34
+ }[keyof T];
35
+
36
+ export type ModelTypes<Model extends {}> = Model extends {
37
+ findUnique: (
38
+ options: infer UniqueOptions & {
39
+ where?: infer Where | null | undefined;
40
+ select?: infer Select | null | undefined;
41
+ } & (
42
+ | {
43
+ include?: infer Include | null | undefined;
44
+ }
45
+ | {}
46
+ ),
47
+ ) => infer Chain & {
48
+ then: (cb: (result: infer Shape | null) => unknown) => unknown;
49
+ };
50
+ }
51
+ ? PrismaModelTypes & {
52
+ Shape: Shape;
53
+ Include: unknown extends Include ? never : Include;
54
+ Where: Where;
55
+ Fields: keyof Select;
56
+ ListRelation: ListRelationFields<Include> & string;
57
+ Relations: {
58
+ [RelationName in RelationKeys<Chain>]: Chain[RelationName] extends (args: {}) => {
59
+ then: (cb: (result: infer Relation) => unknown) => unknown;
60
+ }
61
+ ? { Shape: Relation; Types: PrismaModelTypes }
62
+ : never;
63
+ };
64
+ }
65
+ : never;
66
+
67
+ export interface PrismaModelTypes {
68
+ Shape: {};
69
+ Include: unknown;
70
+ Where: {};
71
+ Fields: string;
72
+ ListRelations: string;
73
+ Relations: Record<
74
+ string,
75
+ {
76
+ Shape: unknown;
77
+ Types: PrismaModelTypes;
78
+ }
79
+ >;
80
+ }
81
+
82
+ export type ListRelationFields<T> = {
83
+ [K in keyof T]: T[K] extends infer Option
84
+ ? Option extends { orderBy?: unknown }
85
+ ? K
86
+ : never
87
+ : never;
88
+ }[keyof T];
89
+
90
+ export type PrismaObjectFieldsShape<
91
+ Types extends SchemaTypes,
92
+ Model extends PrismaModelTypes,
93
+ NeedsResolve extends boolean,
94
+ Shape extends object,
95
+ > = (t: PrismaObjectFieldBuilder<Types, Model, NeedsResolve, Shape>) => FieldMap;
96
+
97
+ export type ShapeFromInclude<Model extends PrismaModelTypes, Include> = {} extends Include
98
+ ? Model['Shape']
99
+ : {
100
+ [K in keyof Include &
101
+ keyof Model['Relations']]: Model['Relations'][K]['Shape'] extends infer RelationShape
102
+ ? RelationShape extends (infer ItemShape)[]
103
+ ? (ItemShape &
104
+ (Include[K] extends { include?: infer NestedInclude & object }
105
+ ? ShapeFromInclude<Model['Relations'][K]['Types'], NestedInclude>
106
+ : {}))[]
107
+ : RelationShape &
108
+ (
109
+ | (Include[K] extends { include?: infer NestedInclude & object }
110
+ ? ShapeFromInclude<Model['Relations'][K]['Types'], NestedInclude>
111
+ : {})
112
+ | null
113
+ )
114
+ : never;
115
+ };
116
+
117
+ export type ShapeWithInclude<
118
+ Model extends PrismaModelTypes,
119
+ Include extends Model['Include'],
120
+ > = Model['Shape'] & ([Include] extends [never] ? {} : ShapeFromInclude<Model, Include>);
121
+
122
+ export type PrismaObjectTypeOptions<
123
+ Types extends SchemaTypes,
124
+ Model extends PrismaModelTypes,
125
+ Interfaces extends InterfaceParam<Types>[],
126
+ FindUnique,
127
+ Include extends Model['Include'],
128
+ Shape extends object,
129
+ > = Omit<
130
+ | PothosSchemaTypes.ObjectTypeOptions<Types, ObjectRef<Shape>>
131
+ | PothosSchemaTypes.ObjectTypeWithInterfaceOptions<Types, ObjectRef<Shape>, Interfaces>,
132
+ 'fields'
133
+ > & {
134
+ name?: string;
135
+ include?: Include;
136
+ fields?: PrismaObjectFieldsShape<Types, Model, FindUnique extends null ? true : false, Shape>;
137
+ findUnique: FindUnique & (((parent: Shape, context: Types['Context']) => Model['Where']) | null);
138
+ };
139
+
140
+ export type PrismaNodeOptions<
141
+ Types extends SchemaTypes,
142
+ Model extends PrismaModelTypes,
143
+ Interfaces extends InterfaceParam<Types>[],
144
+ Include extends Model['Include'],
145
+ Shape extends object,
146
+ > = Omit<
147
+ | PothosSchemaTypes.ObjectTypeOptions<Types, Shape>
148
+ | PothosSchemaTypes.ObjectTypeWithInterfaceOptions<Types, ObjectRef<Shape>, Interfaces>,
149
+ 'fields' | 'isTypeOf'
150
+ > & {
151
+ name?: string;
152
+ include?: Include;
153
+ id: Omit<
154
+ FieldOptionsFromKind<
155
+ Types,
156
+ Shape,
157
+ 'ID',
158
+ false,
159
+ {},
160
+ 'Object',
161
+ OutputShape<Types, 'ID'>,
162
+ MaybePromise<OutputShape<Types, 'ID'>>
163
+ >,
164
+ 'args' | 'nullable' | 'resolve' | 'type'
165
+ > & {
166
+ resolve: (parent: Shape, context: Types['Context']) => MaybePromise<OutputShape<Types, 'ID'>>;
167
+ };
168
+ fields?: PrismaObjectFieldsShape<Types, Model, false, Shape>;
169
+ findUnique: (id: string, context: Types['Context']) => Model['Where'];
170
+ };
171
+
172
+ export type QueryForField<
173
+ Types extends SchemaTypes,
174
+ Args extends InputFieldMap,
175
+ Include,
176
+ > = Include extends { where?: unknown }
177
+ ?
178
+ | Omit<Include, 'include' | 'select'>
179
+ | ((
180
+ args: InputShapeFromFields<Args>,
181
+ ctx: Types['Context'],
182
+ ) => Omit<Include, 'include' | 'select'>)
183
+ : never;
184
+
185
+ export type IncludeFromRelation<
186
+ Model extends PrismaModelTypes,
187
+ Field extends keyof Model['Include'],
188
+ > = Model['Include'][Field] extends infer Include
189
+ ? Include extends {
190
+ include?: infer T;
191
+ }
192
+ ? NonNullable<T>
193
+ : never
194
+ : never;
195
+
196
+ export type CursorFromRelation<
197
+ Model extends PrismaModelTypes,
198
+ Field extends Model['ListRelations'],
199
+ > = Field extends keyof Model['Include']
200
+ ? Model['Include'][Field] extends infer Include
201
+ ? Include extends { cursor?: infer T }
202
+ ? keyof T
203
+ : never
204
+ : never
205
+ : never;
206
+
207
+ export type RefForRelation<
208
+ Model extends PrismaModelTypes,
209
+ Field extends keyof Model['Relations'],
210
+ > = Model['Relations'][Field] extends unknown[]
211
+ ? [ObjectRef<Model['Relations'][Field]>]
212
+ : ObjectRef<Model['Relations'][Field]>;
213
+
214
+ export type RelatedFieldOptions<
215
+ Types extends SchemaTypes,
216
+ Model extends PrismaModelTypes,
217
+ Field extends keyof Model['Relations'],
218
+ Nullable extends boolean,
219
+ Args extends InputFieldMap,
220
+ ResolveReturnShape,
221
+ NeedsResolve extends boolean,
222
+ Shape,
223
+ > = Omit<
224
+ PothosSchemaTypes.ObjectFieldOptions<
225
+ Types,
226
+ Shape,
227
+ RefForRelation<Model, Field>,
228
+ Nullable,
229
+ Args,
230
+ ResolveReturnShape
231
+ >,
232
+ 'resolve' | 'type'
233
+ > &
234
+ (NeedsResolve extends false
235
+ ? {
236
+ resolve?: (
237
+ query: { include?: IncludeFromRelation<Model, Field & keyof Model['Include']> },
238
+ parent: Shape,
239
+ args: InputShapeFromFields<Args>,
240
+ context: Types['Context'],
241
+ info: GraphQLResolveInfo,
242
+ ) => MaybePromise<
243
+ ShapeWithNullability<Types, Model['Relations'][Field]['Shape'], Nullable>
244
+ >;
245
+ }
246
+ : {
247
+ resolve: (
248
+ query: { include?: IncludeFromRelation<Model, Field & keyof Model['Include']> },
249
+ parent: Shape,
250
+ args: InputShapeFromFields<Args>,
251
+ context: Types['Context'],
252
+ info: GraphQLResolveInfo,
253
+ ) => MaybePromise<
254
+ ShapeWithNullability<Types, Model['Relations'][Field]['Shape'], Nullable>
255
+ >;
256
+ }) & {
257
+ query?: QueryForField<Types, Args, Model['Include'][Field & keyof Model['Include']]>;
258
+ };
259
+
260
+ export type RelationCountOptions<
261
+ Types extends SchemaTypes,
262
+ Shape,
263
+ NeedsResolve extends boolean,
264
+ > = Omit<
265
+ PothosSchemaTypes.ObjectFieldOptions<Types, Shape, 'Int', false, {}, number>,
266
+ 'resolve' | 'type'
267
+ > &
268
+ (NeedsResolve extends false
269
+ ? {
270
+ resolve?: (
271
+ parent: Shape,
272
+ args: {},
273
+ context: Types['Context'],
274
+ info: GraphQLResolveInfo,
275
+ ) => MaybePromise<number>;
276
+ }
277
+ : {
278
+ resolve: (
279
+ parent: Shape,
280
+ args: {},
281
+ context: Types['Context'],
282
+ info: GraphQLResolveInfo,
283
+ ) => MaybePromise<number>;
284
+ });
285
+
286
+ export type PrismaFieldOptions<
287
+ Types extends SchemaTypes,
288
+ ParentShape,
289
+ Type extends keyof Types['PrismaTypes'] | [keyof Types['PrismaTypes']],
290
+ Model extends PrismaModelTypes,
291
+ Param extends TypeParam<Types>,
292
+ Args extends InputFieldMap,
293
+ Nullable extends FieldNullability<Param>,
294
+ ResolveReturnShape,
295
+ Kind extends FieldKind = FieldKind,
296
+ > = Omit<
297
+ FieldOptionsFromKind<
298
+ Types,
299
+ ParentShape,
300
+ Param,
301
+ Nullable,
302
+ Args,
303
+ Kind,
304
+ ParentShape,
305
+ ResolveReturnShape
306
+ >,
307
+ 'resolve' | 'type'
308
+ > & {
309
+ type: Type;
310
+ resolve: (
311
+ query: {
312
+ include?: Model['Include'];
313
+ },
314
+ parent: ParentShape,
315
+ args: InputShapeFromFields<Args>,
316
+ context: Types['Context'],
317
+ info: GraphQLResolveInfo,
318
+ ) => ShapeFromTypeParam<Types, Param, Nullable> extends infer Shape
319
+ ? [Shape] extends [[readonly (infer Item)[] | null | undefined]]
320
+ ? ListResolveValue<Shape, Item, ResolveReturnShape>
321
+ : MaybePromise<Shape>
322
+ : never;
323
+ };
324
+
325
+ export type PrismaConnectionFieldOptions<
326
+ Types extends SchemaTypes,
327
+ ParentShape,
328
+ Type extends keyof Types['PrismaTypes'],
329
+ Model extends PrismaModelTypes,
330
+ Param extends OutputType<Types>,
331
+ Nullable extends boolean,
332
+ Args extends InputFieldMap,
333
+ ResolveReturnShape,
334
+ Kind extends FieldKind,
335
+ // eslint-disable-next-line @typescript-eslint/sort-type-union-intersection-members
336
+ > = Omit<
337
+ PothosSchemaTypes.ConnectionFieldOptions<
338
+ Types,
339
+ ParentShape,
340
+ Param,
341
+ Nullable,
342
+ Args,
343
+ ResolveReturnShape
344
+ >,
345
+ 'resolve' | 'type'
346
+ > &
347
+ Omit<
348
+ FieldOptionsFromKind<
349
+ Types,
350
+ ParentShape,
351
+ Param,
352
+ Nullable,
353
+ Args & InputFieldsFromShape<PothosSchemaTypes.DefaultConnectionArguments>,
354
+ Kind,
355
+ ParentShape,
356
+ ResolveReturnShape
357
+ >,
358
+ 'args' | 'resolve' | 'type'
359
+ > & {
360
+ type: Type;
361
+ cursor: string & keyof Model['Where'];
362
+ defaultSize?: number;
363
+ maxSize?: number;
364
+ resolve: (
365
+ query: {
366
+ include?: Model['Include'];
367
+ cursor?: {};
368
+ take: number;
369
+ skip: number;
370
+ },
371
+ parent: ParentShape,
372
+ args: InputShapeFromFields<Args> & PothosSchemaTypes.DefaultConnectionArguments,
373
+ context: Types['Context'],
374
+ info: GraphQLResolveInfo,
375
+ ) => MaybePromise<Model['Shape'][]>;
376
+ };
377
+
378
+ export type RelatedConnectionOptions<
379
+ Types extends SchemaTypes,
380
+ Model extends PrismaModelTypes,
381
+ Field extends Model['ListRelations'],
382
+ Nullable extends boolean,
383
+ Args extends InputFieldMap,
384
+ NeedsResolve extends boolean,
385
+ // eslint-disable-next-line @typescript-eslint/sort-type-union-intersection-members
386
+ > = Omit<
387
+ PothosSchemaTypes.ObjectFieldOptions<
388
+ Types,
389
+ Model['Shape'],
390
+ ObjectRef<unknown>,
391
+ Nullable,
392
+ Args,
393
+ unknown
394
+ >,
395
+ 'resolve' | 'type'
396
+ > &
397
+ Omit<
398
+ PothosSchemaTypes.ConnectionFieldOptions<
399
+ Types,
400
+ Model['Shape'],
401
+ ObjectRef<unknown>,
402
+ Nullable,
403
+ Args,
404
+ unknown
405
+ >,
406
+ 'resolve' | 'type'
407
+ > & {
408
+ query?: QueryForField<Types, Args, Model['Include'][Field & keyof Model['Include']]>;
409
+ cursor: CursorFromRelation<Model, Field>;
410
+ defaultSize?: number;
411
+ maxSize?: number;
412
+ totalCount?: NeedsResolve extends false ? boolean : false;
413
+ } & (NeedsResolve extends false
414
+ ? {
415
+ resolve?: (
416
+ query: {
417
+ include?: Model['Include'];
418
+ cursor?: {};
419
+ take: number;
420
+ skip: number;
421
+ },
422
+ parent: Model['Shape'],
423
+ args: InputShapeFromFields<Args>,
424
+ context: Types['Context'],
425
+ info: GraphQLResolveInfo,
426
+ ) => MaybePromise<Model['Relations'][Field & keyof Model['Relations']]>;
427
+ }
428
+ : {
429
+ resolve: (
430
+ query: {
431
+ include?: Model['Include'];
432
+ cursor?: {};
433
+ take: number;
434
+ skip: number;
435
+ },
436
+ parent: Model['Shape'],
437
+ args: InputShapeFromFields<Args>,
438
+ context: Types['Context'],
439
+ info: GraphQLResolveInfo,
440
+ ) => MaybePromise<Model['Relations'][Field & keyof Model['Relations']]>;
441
+ });
442
+
443
+ export type WithBrand<T> = T & { [typeBrandKey]: string };
444
+
445
+ export type IncludeMap = Record<string, Record<string, unknown> | boolean>;
446
+
447
+ export interface IncludeCounts {
448
+ current: Record<string, boolean>;
449
+ parent: Record<string, boolean>;
450
+ }
451
+
452
+ export type LoaderMappings = Record<
453
+ string,
454
+ {
455
+ field: string;
456
+ alias?: string;
457
+ mappings: LoaderMappings;
458
+ indirectPath: string[];
459
+ }[]
460
+ >;
461
+
462
+ export interface SubFieldInclude {
463
+ type?: string;
464
+ name: string;
465
+ }
466
+
467
+ export interface IndirectLoadMap {
468
+ subFields: SubFieldInclude[];
469
+ path: string[];
470
+ }
@@ -0,0 +1,26 @@
1
+ import { GraphQLNamedType, GraphQLResolveInfo } from 'graphql';
2
+
3
+ export * from './map-includes';
4
+ export * from './merge-includes';
5
+
6
+ export function resolveIndirectType(
7
+ type: GraphQLNamedType,
8
+ info: GraphQLResolveInfo,
9
+ ): GraphQLNamedType {
10
+ const indirectInclude = type.extensions?.pothosPrismaIndirectInclude as
11
+ | { getType: () => string }
12
+ | undefined;
13
+
14
+ if (indirectInclude) {
15
+ const includeTypeName = indirectInclude.getType();
16
+ const resolvedType = info.schema.getType(includeTypeName);
17
+
18
+ if (!resolvedType) {
19
+ throw new Error(`Could not find type ${includeTypeName}`);
20
+ }
21
+
22
+ return resolveIndirectType(resolvedType, info);
23
+ }
24
+
25
+ return type;
26
+ }