@pothos/plugin-prisma 3.1.2 → 3.4.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.
- package/CHANGELOG.md +22 -0
- package/{esm → dts}/field-builder.d.ts +0 -0
- package/{esm → dts}/field-builder.d.ts.map +0 -0
- package/{esm → dts}/generator.d.ts +0 -0
- package/{esm → dts}/generator.d.ts.map +0 -0
- package/{esm → dts}/global-types.d.ts +1 -1
- package/dts/global-types.d.ts.map +1 -0
- package/{esm → dts}/index.d.ts +0 -0
- package/{esm → dts}/index.d.ts.map +0 -0
- package/{esm → dts}/model-loader.d.ts +0 -0
- package/{esm → dts}/model-loader.d.ts.map +0 -0
- package/{esm → dts}/node-ref.d.ts +0 -0
- package/{esm → dts}/node-ref.d.ts.map +0 -0
- package/{esm → dts}/object-ref.d.ts +0 -0
- package/{esm → dts}/object-ref.d.ts.map +0 -0
- package/{esm → dts}/prisma-field-builder.d.ts +0 -0
- package/{esm → dts}/prisma-field-builder.d.ts.map +0 -0
- package/{esm → dts}/schema-builder.d.ts +0 -0
- package/{esm → dts}/schema-builder.d.ts.map +0 -0
- package/{esm → dts}/types.d.ts +0 -0
- package/{esm → dts}/types.d.ts.map +0 -0
- package/{esm → dts}/util/cursors.d.ts +0 -0
- package/{esm → dts}/util/cursors.d.ts.map +0 -0
- package/{esm → dts}/util/datamodel.d.ts +0 -0
- package/{esm → dts}/util/datamodel.d.ts.map +0 -0
- package/{esm → dts}/util/deep-equal.d.ts +0 -0
- package/{esm → dts}/util/deep-equal.d.ts.map +0 -0
- package/{esm → dts}/util/loader-map.d.ts +0 -0
- package/{esm → dts}/util/loader-map.d.ts.map +0 -0
- package/{esm → dts}/util/map-query.d.ts +0 -0
- package/{esm → dts}/util/map-query.d.ts.map +0 -0
- package/{esm → dts}/util/relation-map.d.ts +0 -0
- package/{esm → dts}/util/relation-map.d.ts.map +0 -0
- package/{esm → dts}/util/selections.d.ts +0 -0
- package/{esm → dts}/util/selections.d.ts.map +0 -0
- package/esm/field-builder.js +37 -29
- package/esm/field-builder.js.map +1 -1
- package/esm/generator.js +27 -31
- package/esm/generator.js.map +1 -1
- package/esm/global-types.js +1 -1
- package/esm/global-types.js.map +1 -1
- package/esm/index.js +12 -14
- package/esm/index.js.map +1 -1
- package/esm/model-loader.js +11 -9
- package/esm/model-loader.js.map +1 -1
- package/esm/node-ref.js +3 -5
- package/esm/node-ref.js.map +1 -1
- package/esm/object-ref.js.map +1 -1
- package/esm/prisma-field-builder.js +147 -113
- package/esm/prisma-field-builder.js.map +1 -1
- package/esm/schema-builder.js +24 -21
- package/esm/schema-builder.js.map +1 -1
- package/esm/types.js +0 -1
- package/esm/types.js.map +1 -1
- package/esm/util/cursors.js +22 -25
- package/esm/util/cursors.js.map +1 -1
- package/esm/util/datamodel.js +8 -7
- package/esm/util/datamodel.js.map +1 -1
- package/esm/util/deep-equal.js +1 -2
- package/esm/util/deep-equal.js.map +1 -1
- package/esm/util/loader-map.js +6 -3
- package/esm/util/loader-map.js.map +1 -1
- package/esm/util/map-query.js +53 -30
- package/esm/util/map-query.js.map +1 -1
- package/esm/util/relation-map.js +6 -4
- package/esm/util/relation-map.js.map +1 -1
- package/esm/util/selections.js +14 -19
- package/esm/util/selections.js.map +1 -1
- package/jest.config.js +6 -0
- package/lib/field-builder.js +92 -61
- package/lib/field-builder.js.map +1 -1
- package/lib/generator.js +94 -94
- package/lib/generator.js.map +1 -1
- package/lib/global-types.js +4 -1
- package/lib/global-types.js.map +1 -1
- package/lib/index.js +76 -53
- package/lib/index.js.map +1 -1
- package/lib/model-loader.js +26 -21
- package/lib/model-loader.js.map +1 -1
- package/lib/node-ref.js +12 -10
- package/lib/node-ref.js.map +1 -1
- package/lib/object-ref.js +9 -5
- package/lib/object-ref.js.map +1 -1
- package/lib/prisma-field-builder.js +169 -124
- package/lib/prisma-field-builder.js.map +1 -1
- package/lib/schema-builder.js +76 -71
- package/lib/schema-builder.js.map +1 -1
- package/lib/types.js +6 -3
- package/lib/types.js.map +1 -1
- package/lib/util/cursors.js +41 -41
- package/lib/util/cursors.js.map +1 -1
- package/lib/util/datamodel.js +39 -30
- package/lib/util/datamodel.js.map +1 -1
- package/lib/util/deep-equal.js +8 -7
- package/lib/util/deep-equal.js.map +1 -1
- package/lib/util/loader-map.js +21 -15
- package/lib/util/loader-map.js.map +1 -1
- package/lib/util/map-query.js +89 -67
- package/lib/util/map-query.js.map +1 -1
- package/lib/util/relation-map.js +19 -12
- package/lib/util/relation-map.js.map +1 -1
- package/lib/util/selections.js +44 -48
- package/lib/util/selections.js.map +1 -1
- package/package.json +19 -17
- package/src/field-builder.ts +1 -1
- package/src/global-types.ts +1 -3
- package/src/prisma-field-builder.ts +4 -4
- package/src/schema-builder.ts +1 -10
- package/tsconfig.json +7 -14
- package/tsconfig.type.json +10 -0
- package/tsconfig.type.tsbuildinfo +1 -0
- package/esm/global-types.d.ts.map +0 -1
- package/lib/field-builder.d.ts +0 -2
- package/lib/field-builder.d.ts.map +0 -1
- package/lib/generator.d.ts +0 -2
- package/lib/generator.d.ts.map +0 -1
- package/lib/global-types.d.ts +0 -70
- package/lib/global-types.d.ts.map +0 -1
- package/lib/index.d.ts +0 -14
- package/lib/index.d.ts.map +0 -1
- package/lib/model-loader.d.ts +0 -17
- package/lib/model-loader.d.ts.map +0 -1
- package/lib/node-ref.d.ts +0 -12
- package/lib/node-ref.d.ts.map +0 -1
- package/lib/object-ref.d.ts +0 -7
- package/lib/object-ref.d.ts.map +0 -1
- package/lib/prisma-field-builder.d.ts +0 -47
- package/lib/prisma-field-builder.d.ts.map +0 -1
- package/lib/schema-builder.d.ts +0 -2
- package/lib/schema-builder.d.ts.map +0 -1
- package/lib/types.d.ts +0 -174
- package/lib/types.d.ts.map +0 -1
- package/lib/util/cursors.d.ts +0 -57
- package/lib/util/cursors.d.ts.map +0 -1
- package/lib/util/datamodel.d.ts +0 -16
- package/lib/util/datamodel.d.ts.map +0 -1
- package/lib/util/deep-equal.d.ts +0 -2
- package/lib/util/deep-equal.d.ts.map +0 -1
- package/lib/util/loader-map.d.ts +0 -6
- package/lib/util/loader-map.d.ts.map +0 -1
- package/lib/util/map-query.d.ts +0 -6
- package/lib/util/map-query.d.ts.map +0 -1
- package/lib/util/relation-map.d.ts +0 -9
- package/lib/util/relation-map.d.ts.map +0 -1
- package/lib/util/selections.d.ts +0 -20
- package/lib/util/selections.d.ts.map +0 -1
package/lib/types.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
3
5
|
exports.prismaModelName = void 0;
|
|
4
|
-
const
|
|
5
|
-
exports.prismaModelName =
|
|
6
|
+
const prismaModelName = Symbol.for('Pothos.prismaModelName');
|
|
7
|
+
exports.prismaModelName = prismaModelName;
|
|
8
|
+
|
|
6
9
|
//# sourceMappingURL=types.js.map
|
package/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AACA,uCAoBsB;AAQT,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import { GraphQLResolveInfo } from 'graphql';\nimport {\n FieldKind,\n FieldMap,\n FieldNullability,\n FieldOptionsFromKind,\n InputFieldMap,\n InputFieldsFromShape,\n InputShapeFromFields,\n InterfaceParam,\n ListResolveValue,\n MaybePromise,\n Normalize,\n ObjectRef,\n OutputShape,\n OutputType,\n SchemaTypes,\n ShapeFromTypeParam,\n ShapeWithNullability,\n typeBrandKey,\n TypeParam,\n} from '@pothos/core';\nimport { PrismaObjectFieldBuilder } from './field-builder';\nimport { PrismaObjectRef } from './object-ref';\n\nexport interface PrismaDelegate {\n findUnique: (...args: any[]) => Promise<unknown>;\n}\n\nexport const prismaModelName = Symbol.for('Pothos.prismaModelName');\n\nexport interface PrismaModelTypes {\n Name: string;\n Shape: {};\n Include: unknown;\n Select: unknown;\n Where: {};\n Fields: string;\n ListRelations: string;\n RelationName: string;\n Relations: Record<\n string,\n {\n Shape: unknown;\n Types: PrismaModelTypes;\n }\n >;\n}\n\ntype ExtractModel<Types extends SchemaTypes, ParentShape> = ParentShape extends {\n [prismaModelName]?: infer Name;\n}\n ? Types['PrismaTypes'][Name & keyof Types['PrismaTypes']] extends infer Model\n ? Model extends PrismaModelTypes\n ? Model\n : never\n : never\n : never;\n\nexport type PrismaObjectFieldOptions<\n Types extends SchemaTypes,\n ParentShape,\n Type extends TypeParam<Types>,\n Nullable extends FieldNullability<Type>,\n Args extends InputFieldMap,\n Select,\n ResolveReturnShape,\n> = PothosSchemaTypes.ObjectFieldOptions<\n Types,\n unknown extends Select\n ? ParentShape\n : ParentShape &\n ShapeFromSelection<\n ExtractModel<Types, ParentShape>,\n { select: Select extends (...args: any[]) => infer S ? S : Select }\n >,\n Type,\n Nullable,\n Args,\n ResolveReturnShape\n> & {\n select?: Select &\n (\n | ExtractModel<Types, ParentShape>['Select']\n | ((\n args: InputShapeFromFields<Args>,\n ctx: Types['Context'],\n ) => ExtractModel<Types, ParentShape>['Select'])\n );\n};\n\ntype PrismaObjectFieldsShape<\n Types extends SchemaTypes,\n Model extends PrismaModelTypes,\n NeedsResolve extends boolean,\n Shape extends object,\n Select,\n> = Model['Select'] extends Select\n ? (t: PrismaObjectFieldBuilder<Types, Model, NeedsResolve, Shape>) => FieldMap\n : (t: PrismaSelectionFieldBuilder<Types, Model, Shape>) => FieldMap;\n\ntype PrismaSelectionFieldBuilder<\n Types extends SchemaTypes,\n Model extends PrismaModelTypes,\n Shape extends object,\n> = PrismaObjectFieldBuilder<Types, Model, false, Shape>;\n\ninterface BaseSelection {\n include?: unknown;\n select?: unknown;\n}\n\nexport type SelectedKeys<T> = { [K in keyof T]: T[K] extends false ? never : K }[keyof T];\n\nexport type ShapeFromSelection<Model extends PrismaModelTypes, Selection> = Normalize<\n Selection extends BaseSelection\n ? unknown extends Selection['select']\n ? Model['Shape'] & RelationShapeFromInclude<Model, Selection['include']>\n : Pick<Model['Shape'], SelectedKeys<Selection['select']>> &\n RelationShapeFromInclude<Model, Selection['select']>\n : Model['Shape']\n>;\n\ntype RelationShapeFromInclude<Model extends PrismaModelTypes, Include> = Normalize<{\n [K in SelectedKeys<Include> as K extends Model['RelationName']\n ? K\n : never]: K extends keyof Model['Relations']\n ? Model['Relations'][K]['Shape'] extends unknown[]\n ? ShapeFromSelection<Model['Relations'][K]['Types'], Include[K]>[]\n : ShapeFromSelection<Model['Relations'][K]['Types'], Include[K]>\n : unknown;\n}>;\n\nexport type PrismaObjectTypeOptions<\n Types extends SchemaTypes,\n Model extends PrismaModelTypes,\n Interfaces extends InterfaceParam<Types>[],\n FindUnique,\n Include,\n Select,\n Shape extends object,\n> = NameOrVariant &\n Omit<\n | PothosSchemaTypes.ObjectTypeOptions<Types, Shape>\n | PothosSchemaTypes.ObjectTypeWithInterfaceOptions<Types, Shape, Interfaces>,\n 'fields'\n > & {\n fields?: PrismaObjectFieldsShape<\n Types,\n Model,\n FindUnique extends null ? true : false,\n Shape & (FindUnique extends null ? {} : { [prismaModelName]?: Model['Name'] }),\n Select\n >;\n } & (\n | {\n include?: Include & Model['Include'];\n select?: never;\n findUnique: FindUnique &\n (((parent: Shape, context: Types['Context']) => Model['Where']) | null);\n }\n | {\n select: Model['Select'] & Select;\n include?: never;\n findUnique: (parent: Shape, context: Types['Context']) => Model['Where'];\n }\n );\n\ntype NameOrVariant =\n | {\n name?: never;\n variant?: string;\n }\n | {\n name?: string;\n variant?: never;\n };\n\nexport type PrismaNodeOptions<\n Types extends SchemaTypes,\n Model extends PrismaModelTypes,\n Interfaces extends InterfaceParam<Types>[],\n Include,\n Select,\n Shape extends object,\n> = NameOrVariant &\n Omit<\n | PothosSchemaTypes.ObjectTypeOptions<Types, Shape>\n | PothosSchemaTypes.ObjectTypeWithInterfaceOptions<Types, Shape, Interfaces>,\n 'fields' | 'isTypeOf'\n > & {\n id: Omit<\n FieldOptionsFromKind<\n Types,\n Shape,\n 'ID',\n false,\n {},\n 'Object',\n OutputShape<Types, 'ID'>,\n MaybePromise<OutputShape<Types, 'ID'>>\n >,\n 'args' | 'nullable' | 'resolve' | 'type'\n > & {\n resolve: (parent: Shape, context: Types['Context']) => MaybePromise<OutputShape<Types, 'ID'>>;\n };\n fields?: PrismaObjectFieldsShape<\n Types,\n Model,\n false,\n Shape & { [prismaModelName]?: Model['Name'] },\n Select\n >;\n findUnique: (id: string, context: Types['Context']) => Model['Where'];\n } & (\n | {\n include?: Include & Model['Include'];\n select?: never;\n }\n | {\n select: Model['Select'] & Select;\n include?: never;\n }\n );\n\ntype QueryForField<\n Types extends SchemaTypes,\n Args extends InputFieldMap,\n Include,\n> = Include extends { where?: unknown }\n ?\n | Omit<Include, 'include' | 'select'>\n | ((\n args: InputShapeFromFields<Args>,\n ctx: Types['Context'],\n ) => Omit<Include, 'include' | 'select'>)\n : never;\n\ntype QueryFromRelation<\n Model extends PrismaModelTypes,\n Field extends keyof Model['Include'],\n> = Model['Include'][Field] extends infer Include\n ? Include extends {\n include?: infer I;\n select?: infer S;\n }\n ? { include?: NonNullable<I>; select?: NonNullable<S> }\n : never\n : never;\n\ntype CursorFromRelation<\n Model extends PrismaModelTypes,\n Field extends Model['ListRelations'],\n> = Field extends keyof Model['Include']\n ? Model['Include'][Field] extends infer Include\n ? Include extends { cursor?: infer T }\n ? keyof T\n : never\n : never\n : never;\n\ntype RefForRelation<\n Model extends PrismaModelTypes,\n Field extends keyof Model['Relations'],\n> = Model['Relations'][Field] extends unknown[]\n ? [ObjectRef<Model['Relations'][Field]>]\n : ObjectRef<Model['Relations'][Field]>;\n\nexport type RelatedFieldOptions<\n Types extends SchemaTypes,\n Model extends PrismaModelTypes,\n Field extends keyof Model['Relations'],\n Nullable extends boolean,\n Args extends InputFieldMap,\n ResolveReturnShape,\n NeedsResolve extends boolean,\n Shape,\n> = Omit<\n PothosSchemaTypes.ObjectFieldOptions<\n Types,\n Shape,\n RefForRelation<Model, Field>,\n Nullable,\n Args,\n ResolveReturnShape\n >,\n 'resolve' | 'type'\n> &\n (NeedsResolve extends false\n ? {\n resolve?: (\n query: QueryFromRelation<Model, Field & keyof Model['Include']>,\n parent: Shape,\n args: InputShapeFromFields<Args>,\n context: Types['Context'],\n info: GraphQLResolveInfo,\n ) => MaybePromise<\n ShapeWithNullability<Types, Model['Relations'][Field]['Shape'], Nullable>\n >;\n }\n : {\n resolve: (\n query: QueryFromRelation<Model, Field & keyof Model['Include']>,\n parent: Shape,\n args: InputShapeFromFields<Args>,\n context: Types['Context'],\n info: GraphQLResolveInfo,\n ) => MaybePromise<\n ShapeWithNullability<Types, Model['Relations'][Field]['Shape'], Nullable>\n >;\n }) & {\n type?: PrismaObjectRef<Model['Relations'][Field]['Types']>;\n query?: QueryForField<Types, Args, Model['Include'][Field & keyof Model['Include']]>;\n };\n\nexport type VariantFieldOptions<\n Types extends SchemaTypes,\n Model extends PrismaModelTypes,\n Variant extends PrismaObjectRef<Model>,\n> = Omit<\n PothosSchemaTypes.ObjectFieldOptions<Types, Model['Shape'], Variant, false, {}, Model['Shape']>,\n 'resolve' | 'type'\n>;\n\nexport type RelationCountOptions<\n Types extends SchemaTypes,\n Shape,\n NeedsResolve extends boolean,\n> = Omit<\n PothosSchemaTypes.ObjectFieldOptions<Types, Shape, 'Int', false, {}, number>,\n 'resolve' | 'type'\n> &\n (NeedsResolve extends false\n ? {\n resolve?: (\n parent: Shape,\n args: {},\n context: Types['Context'],\n info: GraphQLResolveInfo,\n ) => MaybePromise<number>;\n }\n : {\n resolve: (\n parent: Shape,\n args: {},\n context: Types['Context'],\n info: GraphQLResolveInfo,\n ) => MaybePromise<number>;\n });\n\nexport type PrismaFieldOptions<\n Types extends SchemaTypes,\n ParentShape,\n Type extends\n | PrismaObjectRef<PrismaModelTypes>\n | keyof Types['PrismaTypes']\n | [keyof Types['PrismaTypes']]\n | [PrismaObjectRef<PrismaModelTypes>],\n Model extends PrismaModelTypes,\n Param extends TypeParam<Types>,\n Args extends InputFieldMap,\n Nullable extends FieldNullability<Param>,\n ResolveReturnShape,\n Kind extends FieldKind = FieldKind,\n> = Omit<\n FieldOptionsFromKind<\n Types,\n ParentShape,\n Param,\n Nullable,\n Args,\n Kind,\n ParentShape,\n ResolveReturnShape\n >,\n 'resolve' | 'type'\n> & {\n type: Type;\n resolve: (\n query: {\n include?: Model['Include'];\n },\n parent: ParentShape,\n args: InputShapeFromFields<Args>,\n context: Types['Context'],\n info: GraphQLResolveInfo,\n ) => ShapeFromTypeParam<Types, Param, Nullable> extends infer Shape\n ? [Shape] extends [[readonly (infer Item)[] | null | undefined]]\n ? ListResolveValue<Shape, Item, ResolveReturnShape>\n : MaybePromise<Shape>\n : never;\n};\n\nexport type PrismaConnectionFieldOptions<\n Types extends SchemaTypes,\n ParentShape,\n Type extends PrismaObjectRef<PrismaModelTypes> | keyof Types['PrismaTypes'],\n Model extends PrismaModelTypes,\n Param extends OutputType<Types>,\n Nullable extends boolean,\n Args extends InputFieldMap,\n ResolveReturnShape,\n Kind extends FieldKind,\n> = Omit<\n PothosSchemaTypes.ConnectionFieldOptions<\n Types,\n ParentShape,\n Param,\n Nullable,\n false,\n false,\n Args,\n ResolveReturnShape\n >,\n 'resolve' | 'type'\n> &\n Omit<\n FieldOptionsFromKind<\n Types,\n ParentShape,\n Param,\n Nullable,\n Args & InputFieldsFromShape<PothosSchemaTypes.DefaultConnectionArguments>,\n Kind,\n ParentShape,\n ResolveReturnShape\n >,\n 'args' | 'resolve' | 'type'\n > & {\n type: Type;\n cursor: string & keyof Model['Where'];\n defaultSize?: number;\n maxSize?: number;\n resolve: (\n query: {\n include?: Model['Include'];\n cursor?: {};\n take: number;\n skip: number;\n },\n parent: ParentShape,\n args: InputShapeFromFields<Args> & PothosSchemaTypes.DefaultConnectionArguments,\n context: Types['Context'],\n info: GraphQLResolveInfo,\n ) => MaybePromise<Model['Shape'][]>;\n totalCount?: (\n parent: ParentShape,\n args: InputShapeFromFields<Args> & PothosSchemaTypes.DefaultConnectionArguments,\n context: Types['Context'],\n info: GraphQLResolveInfo,\n ) => MaybePromise<number>;\n };\n\nexport type RelatedConnectionOptions<\n Types extends SchemaTypes,\n Model extends PrismaModelTypes,\n Field extends Model['ListRelations'],\n Nullable extends boolean,\n Args extends InputFieldMap,\n NeedsResolve extends boolean,\n> = Omit<\n PothosSchemaTypes.ObjectFieldOptions<\n Types,\n Model['Shape'],\n ObjectRef<unknown>,\n Nullable,\n Args,\n unknown\n >,\n 'resolve' | 'type'\n> &\n Omit<\n PothosSchemaTypes.ConnectionFieldOptions<\n Types,\n Model['Shape'],\n ObjectRef<unknown>,\n false,\n false,\n Nullable,\n Args,\n unknown\n >,\n 'resolve' | 'type'\n > & {\n query?: QueryForField<Types, Args, Model['Include'][Field & keyof Model['Include']]>;\n type?: PrismaObjectRef<Model['Relations'][Field]['Types']>;\n cursor: CursorFromRelation<Model, Field>;\n defaultSize?: number;\n maxSize?: number;\n totalCount?: NeedsResolve extends false ? boolean : false;\n } & (NeedsResolve extends false\n ? {\n resolve?: (\n query: {\n include?: Model['Include'];\n cursor?: {};\n take: number;\n skip: number;\n },\n parent: Model['Shape'],\n args: InputShapeFromFields<Args>,\n context: Types['Context'],\n info: GraphQLResolveInfo,\n ) => MaybePromise<Model['Relations'][Field & keyof Model['Relations']]>;\n }\n : {\n resolve: (\n query: {\n include?: Model['Include'];\n cursor?: {};\n take: number;\n skip: number;\n },\n parent: Model['Shape'],\n args: InputShapeFromFields<Args>,\n context: Types['Context'],\n info: GraphQLResolveInfo,\n ) => MaybePromise<Model['Relations'][Field & keyof Model['Relations']]>;\n });\n\nexport type WithBrand<T> = T & { [typeBrandKey]: string };\n\nexport type IncludeMap = Record<string, SelectionMap | boolean>;\n\nexport interface SelectionMap {\n select?: Record<string, SelectionMap | boolean>;\n include?: Record<string, SelectionMap | boolean>;\n where?: {};\n}\n\nexport type FieldSelection =\n | Record<string, SelectionMap | boolean>\n | ((\n args: object,\n context: object,\n query: (\n selection: SelectionMap | boolean | ((args: object, context: object) => SelectionMap),\n ) => SelectionMap | boolean,\n ) => SelectionMap);\n\nexport type LoaderMappings = Record<\n string,\n {\n field: string;\n mappings: LoaderMappings;\n indirectPath: string[];\n }\n>;\n\nexport interface IndirectInclude {\n getType: () => string;\n path: { type?: string; name: string }[];\n}\n\nexport type ShapeFromConnection<T> = T extends { shape: unknown } ? T['shape'] : never;\n"],"names":["prismaModelName","Symbol","for"],"mappings":"AAAA;;;;;AA6BO,MAAMA,eAAe,GAAGC,MAAM,CAACC,GAAG,CAAC,wBAAwB,CAAC,AAAC;QAAvDF,eAAe,GAAfA,eAAe"}
|
package/lib/util/cursors.js
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.formatCursorChunk = formatCursorChunk;
|
|
6
|
+
exports.formatCursor = formatCursor;
|
|
7
|
+
exports.parseRawCursor = parseRawCursor;
|
|
8
|
+
exports.parseCompositeCursor = parseCompositeCursor;
|
|
9
|
+
exports.prismaCursorConnectionQuery = prismaCursorConnectionQuery;
|
|
10
|
+
exports.wrapConnectionResult = wrapConnectionResult;
|
|
11
|
+
exports.resolvePrismaCursorConnection = resolvePrismaCursorConnection;
|
|
4
12
|
const DEFAULT_MAX_SIZE = 100;
|
|
5
13
|
const DEFAULT_SIZE = 20;
|
|
6
14
|
function formatCursorChunk(value) {
|
|
7
15
|
if (value instanceof Date) {
|
|
8
16
|
return `D:${String(Number(value))}`;
|
|
9
17
|
}
|
|
10
|
-
switch
|
|
18
|
+
switch(typeof value){
|
|
11
19
|
case 'number':
|
|
12
20
|
return `N:${value}`;
|
|
13
21
|
case 'string':
|
|
@@ -16,16 +24,15 @@ function formatCursorChunk(value) {
|
|
|
16
24
|
throw new TypeError(`Unsupported cursor type ${typeof value}`);
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
|
-
exports.formatCursorChunk = formatCursorChunk;
|
|
20
27
|
function formatCursor(fields) {
|
|
21
|
-
return (value)
|
|
28
|
+
return (value)=>{
|
|
22
29
|
if (typeof fields === 'string') {
|
|
23
30
|
return Buffer.from(`GPC:${formatCursorChunk(value[fields])}`).toString('base64');
|
|
24
31
|
}
|
|
25
|
-
return Buffer.from(`GPC:J:${JSON.stringify(fields.map((name)
|
|
32
|
+
return Buffer.from(`GPC:J:${JSON.stringify(fields.map((name)=>value[name]
|
|
33
|
+
))}`).toString('base64');
|
|
26
34
|
};
|
|
27
35
|
}
|
|
28
|
-
exports.formatCursor = formatCursor;
|
|
29
36
|
function parseRawCursor(cursor) {
|
|
30
37
|
if (typeof cursor !== 'string') {
|
|
31
38
|
throw new TypeError('Cursor must be a string');
|
|
@@ -33,7 +40,7 @@ function parseRawCursor(cursor) {
|
|
|
33
40
|
try {
|
|
34
41
|
const decoded = Buffer.from(cursor, 'base64').toString();
|
|
35
42
|
const [, type, value] = decoded.match(/^GPC:(\w):(.*)/);
|
|
36
|
-
switch
|
|
43
|
+
switch(type){
|
|
37
44
|
case 'S':
|
|
38
45
|
return value;
|
|
39
46
|
case 'N':
|
|
@@ -45,28 +52,24 @@ function parseRawCursor(cursor) {
|
|
|
45
52
|
default:
|
|
46
53
|
throw new TypeError(`Invalid cursor type ${type}`);
|
|
47
54
|
}
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
55
|
+
} catch {
|
|
50
56
|
throw new Error(`Invalid cursor: ${cursor}`);
|
|
51
57
|
}
|
|
52
58
|
}
|
|
53
|
-
exports.parseRawCursor = parseRawCursor;
|
|
54
59
|
function parseCompositeCursor(fields) {
|
|
55
|
-
return (cursor)
|
|
60
|
+
return (cursor)=>{
|
|
56
61
|
const parsed = parseRawCursor(cursor);
|
|
57
62
|
if (!Array.isArray(parsed)) {
|
|
58
63
|
throw new TypeError(`Expected compound cursor to contain an array, but got ${parsed}`);
|
|
59
64
|
}
|
|
60
65
|
const record = {};
|
|
61
|
-
fields.forEach((field, i)
|
|
66
|
+
fields.forEach((field, i)=>{
|
|
62
67
|
record[field] = parsed[i];
|
|
63
68
|
});
|
|
64
69
|
return record;
|
|
65
70
|
};
|
|
66
71
|
}
|
|
67
|
-
|
|
68
|
-
function prismaCursorConnectionQuery({ args: { before, after, first, last }, maxSize = DEFAULT_MAX_SIZE, defaultSize = DEFAULT_SIZE, parseCursor, }) {
|
|
69
|
-
var _a;
|
|
72
|
+
function prismaCursorConnectionQuery({ args: { before , after , first , last } , maxSize =DEFAULT_MAX_SIZE , defaultSize =DEFAULT_SIZE , parseCursor }) {
|
|
70
73
|
if (first != null && first < 0) {
|
|
71
74
|
throw new TypeError('Argument "first" must be a non-negative integer');
|
|
72
75
|
}
|
|
@@ -86,52 +89,49 @@ function prismaCursorConnectionQuery({ args: { before, after, first, last }, max
|
|
|
86
89
|
throw new Error('Arguments "after" and "last" are not supported at the same time');
|
|
87
90
|
}
|
|
88
91
|
const cursor = before !== null && before !== void 0 ? before : after;
|
|
89
|
-
|
|
92
|
+
var ref;
|
|
93
|
+
let take = Math.min((ref = first !== null && first !== void 0 ? first : last) !== null && ref !== void 0 ? ref : defaultSize, maxSize) + 1;
|
|
90
94
|
if (before) {
|
|
91
95
|
take = -take;
|
|
92
96
|
}
|
|
93
|
-
return cursor == null
|
|
94
|
-
|
|
95
|
-
:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
return cursor == null ? {
|
|
98
|
+
take,
|
|
99
|
+
skip: 0
|
|
100
|
+
} : {
|
|
101
|
+
cursor: parseCursor(cursor),
|
|
102
|
+
take,
|
|
103
|
+
skip: 1
|
|
104
|
+
};
|
|
100
105
|
}
|
|
101
|
-
exports.prismaCursorConnectionQuery = prismaCursorConnectionQuery;
|
|
102
106
|
function wrapConnectionResult(results, args, take, cursor, totalCount) {
|
|
103
|
-
var
|
|
107
|
+
var ref, ref1;
|
|
104
108
|
const gotFullResults = results.length === Math.abs(take);
|
|
105
109
|
const hasNextPage = args.before ? true : gotFullResults;
|
|
106
110
|
const hasPreviousPage = args.after ? true : args.before ? gotFullResults : false;
|
|
107
|
-
const nodes = gotFullResults
|
|
108
|
-
|
|
109
|
-
: results;
|
|
110
|
-
const edges = nodes.map((value, index) => value == null
|
|
111
|
-
? null
|
|
112
|
-
: {
|
|
111
|
+
const nodes = gotFullResults ? results.slice(take < 0 ? 1 : 0, take < 0 ? results.length : -1) : results;
|
|
112
|
+
const edges = nodes.map((value, index)=>value == null ? null : {
|
|
113
113
|
cursor: cursor(value),
|
|
114
|
-
node: value
|
|
115
|
-
}
|
|
114
|
+
node: value
|
|
115
|
+
}
|
|
116
|
+
);
|
|
116
117
|
return {
|
|
117
118
|
totalCount,
|
|
118
119
|
edges,
|
|
119
120
|
pageInfo: {
|
|
120
|
-
startCursor: (
|
|
121
|
-
endCursor: (
|
|
121
|
+
startCursor: (ref = edges[0]) === null || ref === void 0 ? void 0 : ref.cursor,
|
|
122
|
+
endCursor: (ref1 = edges[edges.length - 1]) === null || ref1 === void 0 ? void 0 : ref1.cursor,
|
|
122
123
|
hasPreviousPage,
|
|
123
|
-
hasNextPage
|
|
124
|
-
}
|
|
124
|
+
hasNextPage
|
|
125
|
+
}
|
|
125
126
|
};
|
|
126
127
|
}
|
|
127
|
-
exports.wrapConnectionResult = wrapConnectionResult;
|
|
128
128
|
async function resolvePrismaCursorConnection(options, cursor, resolve) {
|
|
129
129
|
const query = prismaCursorConnectionQuery(options);
|
|
130
130
|
const results = await resolve({
|
|
131
131
|
...options.query,
|
|
132
|
-
...query
|
|
132
|
+
...query
|
|
133
133
|
});
|
|
134
134
|
return wrapConnectionResult(results, options.args, query.take, cursor, options.totalCount);
|
|
135
135
|
}
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
//# sourceMappingURL=cursors.js.map
|
package/lib/util/cursors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursors.js","sourceRoot":"","sources":["../../src/util/cursors.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/util/cursors.ts"],"sourcesContent":["/* eslint-disable no-nested-ternary */\nimport { MaybePromise } from '@pothos/core';\n\nconst DEFAULT_MAX_SIZE = 100;\nconst DEFAULT_SIZE = 20;\n\nexport function formatCursorChunk(value: unknown) {\n if (value instanceof Date) {\n return `D:${String(Number(value))}`;\n }\n\n switch (typeof value) {\n case 'number':\n return `N:${value}`;\n case 'string':\n return `S:${value}`;\n default:\n throw new TypeError(`Unsupported cursor type ${typeof value}`);\n }\n}\n\nexport function formatCursor(fields: string | string[]) {\n return (value: Record<string, unknown>) => {\n if (typeof fields === 'string') {\n return Buffer.from(`GPC:${formatCursorChunk(value[fields])}`).toString('base64');\n }\n\n return Buffer.from(`GPC:J:${JSON.stringify(fields.map((name) => value[name]))}`).toString(\n 'base64',\n );\n };\n}\n\nexport function parseRawCursor(cursor: unknown) {\n if (typeof cursor !== 'string') {\n throw new TypeError('Cursor must be a string');\n }\n\n try {\n const decoded = Buffer.from(cursor, 'base64').toString();\n const [, type, value] = decoded.match(/^GPC:(\\w):(.*)/) as [string, string, string];\n\n switch (type) {\n case 'S':\n return value;\n case 'N':\n return Number.parseInt(value, 10);\n case 'D':\n return new Date(Number.parseInt(value, 10));\n case 'J':\n return JSON.parse(value) as unknown;\n default:\n throw new TypeError(`Invalid cursor type ${type}`);\n }\n } catch {\n throw new Error(`Invalid cursor: ${cursor}`);\n }\n}\n\nexport function parseCompositeCursor(fields: string[]) {\n return (cursor: string) => {\n const parsed = parseRawCursor(cursor) as unknown[];\n\n if (!Array.isArray(parsed)) {\n throw new TypeError(`Expected compound cursor to contain an array, but got ${parsed}`);\n }\n\n const record: Record<string, unknown> = {};\n\n fields.forEach((field, i) => {\n record[field] = parsed[i];\n });\n\n return record;\n };\n}\n\nexport interface PrismaCursorConnectionQueryOptions {\n args: PothosSchemaTypes.DefaultConnectionArguments;\n defaultSize?: number;\n maxSize?: number;\n parseCursor: (cursor: string) => Record<string, unknown>;\n}\n\ninterface ResolvePrismaCursorConnectionOptions extends PrismaCursorConnectionQueryOptions {\n query: {};\n totalCount?: number | (() => MaybePromise<number>);\n}\n\nexport function prismaCursorConnectionQuery({\n args: { before, after, first, last },\n maxSize = DEFAULT_MAX_SIZE,\n defaultSize = DEFAULT_SIZE,\n parseCursor,\n}: PrismaCursorConnectionQueryOptions) {\n if (first != null && first < 0) {\n throw new TypeError('Argument \"first\" must be a non-negative integer');\n }\n\n if (last != null && last < 0) {\n throw new Error('Argument \"last\" must be a non-negative integer');\n }\n\n if (before && after) {\n throw new Error('Arguments \"before\" and \"after\" are not supported at the same time');\n }\n\n if (before != null && last == null) {\n throw new Error('Argument \"last\" must be provided when using \"before\"');\n }\n\n if (before != null && first != null) {\n throw new Error('Arguments \"before\" and \"first\" are not supported at the same time');\n }\n\n if (after != null && last != null) {\n throw new Error('Arguments \"after\" and \"last\" are not supported at the same time');\n }\n\n const cursor = before ?? after;\n\n let take = Math.min(first ?? last ?? defaultSize, maxSize) + 1;\n\n if (before) {\n take = -take;\n }\n\n return cursor == null\n ? { take, skip: 0 }\n : {\n cursor: parseCursor(cursor),\n take,\n skip: 1,\n };\n}\n\nexport function wrapConnectionResult<T extends {}>(\n results: T[],\n args: PothosSchemaTypes.DefaultConnectionArguments,\n take: number,\n cursor: (node: T) => string,\n totalCount?: number | (() => MaybePromise<number>),\n) {\n const gotFullResults = results.length === Math.abs(take);\n const hasNextPage = args.before ? true : gotFullResults;\n const hasPreviousPage = args.after ? true : args.before ? gotFullResults : false;\n const nodes = gotFullResults\n ? results.slice(take < 0 ? 1 : 0, take < 0 ? results.length : -1)\n : results;\n\n const edges = nodes.map((value, index) =>\n value == null\n ? null\n : {\n cursor: cursor(value),\n node: value,\n },\n );\n\n return {\n totalCount,\n edges,\n pageInfo: {\n startCursor: edges[0]?.cursor,\n endCursor: edges[edges.length - 1]?.cursor,\n hasPreviousPage,\n hasNextPage,\n },\n };\n}\n\nexport async function resolvePrismaCursorConnection<T extends {}>(\n options: ResolvePrismaCursorConnectionOptions,\n cursor: (node: T) => string,\n resolve: (query: { include?: {}; cursor?: {}; take: number; skip: number }) => MaybePromise<T[]>,\n) {\n const query = prismaCursorConnectionQuery(options);\n const results = await resolve({\n ...options.query,\n ...query,\n });\n\n return wrapConnectionResult(results, options.args, query.take, cursor, options.totalCount);\n}\n"],"names":["formatCursorChunk","formatCursor","parseRawCursor","parseCompositeCursor","prismaCursorConnectionQuery","wrapConnectionResult","resolvePrismaCursorConnection","DEFAULT_MAX_SIZE","DEFAULT_SIZE","value","Date","String","Number","TypeError","fields","Buffer","from","toString","JSON","stringify","map","name","cursor","decoded","type","match","parseInt","parse","Error","parsed","Array","isArray","record","forEach","field","i","args","before","after","first","last","maxSize","defaultSize","parseCursor","take","Math","min","skip","results","totalCount","edges","gotFullResults","length","abs","hasNextPage","hasPreviousPage","nodes","slice","index","node","pageInfo","startCursor","endCursor","options","resolve","query"],"mappings":"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"}
|
package/lib/util/datamodel.js
CHANGED
|
@@ -1,25 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.getRefFromModel = getRefFromModel;
|
|
6
|
+
exports.getRelation = getRelation;
|
|
7
|
+
exports.getModel = getModel;
|
|
8
|
+
exports.getCursorFormatter = getCursorFormatter;
|
|
9
|
+
exports.getCursorParser = getCursorParser;
|
|
10
|
+
exports.getDelegateFromModel = getDelegateFromModel;
|
|
11
|
+
exports.includeForRefMap = exports.findUniqueMap = exports.refMap = void 0;
|
|
12
|
+
var _objectRef = require("../object-ref");
|
|
13
|
+
var _cursors = require("./cursors");
|
|
14
|
+
const refMap = new WeakMap();
|
|
15
|
+
exports.refMap = refMap;
|
|
16
|
+
const findUniqueMap = new WeakMap();
|
|
17
|
+
exports.findUniqueMap = findUniqueMap;
|
|
18
|
+
const includeForRefMap = new WeakMap();
|
|
19
|
+
exports.includeForRefMap = includeForRefMap;
|
|
9
20
|
function getRefFromModel(name, builder) {
|
|
10
|
-
if (!
|
|
11
|
-
|
|
21
|
+
if (!refMap.has(builder)) {
|
|
22
|
+
refMap.set(builder, new Map());
|
|
12
23
|
}
|
|
13
|
-
const cache =
|
|
24
|
+
const cache = refMap.get(builder);
|
|
14
25
|
if (!cache.has(name)) {
|
|
15
|
-
cache.set(name, new
|
|
26
|
+
cache.set(name, new _objectRef.PrismaObjectRef(name));
|
|
16
27
|
}
|
|
17
28
|
return cache.get(name);
|
|
18
29
|
}
|
|
19
|
-
exports.getRefFromModel = getRefFromModel;
|
|
20
30
|
function getRelation(name, builder, relation) {
|
|
21
31
|
const modelData = getModel(name, builder);
|
|
22
|
-
const fieldData = modelData.fields.find((field)
|
|
32
|
+
const fieldData = modelData.fields.find((field)=>field.name === relation
|
|
33
|
+
);
|
|
23
34
|
if (!fieldData) {
|
|
24
35
|
throw new Error(`Field '${relation}' not found in model '${name}'`);
|
|
25
36
|
}
|
|
@@ -28,36 +39,34 @@ function getRelation(name, builder, relation) {
|
|
|
28
39
|
}
|
|
29
40
|
return fieldData;
|
|
30
41
|
}
|
|
31
|
-
exports.getRelation = getRelation;
|
|
32
42
|
function getModel(name, builder) {
|
|
33
|
-
const { client
|
|
43
|
+
const { client } = builder.options.prisma;
|
|
34
44
|
// eslint-disable-next-line no-underscore-dangle
|
|
35
|
-
const dmmf = client
|
|
36
|
-
._dmmf;
|
|
45
|
+
const dmmf = client._dmmf;
|
|
37
46
|
const modelData = dmmf.modelMap[name];
|
|
38
47
|
if (!modelData) {
|
|
39
48
|
throw new Error(`Model '${name}' not found in DMMF`);
|
|
40
49
|
}
|
|
41
50
|
return modelData;
|
|
42
51
|
}
|
|
43
|
-
exports.getModel = getModel;
|
|
44
52
|
function getCursorFormatter(name, builder, cursor) {
|
|
45
|
-
var
|
|
53
|
+
var ref, ref1;
|
|
46
54
|
const modelData = getModel(name, builder);
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
var ref2;
|
|
56
|
+
const primaryKey = (ref2 = (ref = modelData.primaryKey) === null || ref === void 0 ? void 0 : ref.name) !== null && ref2 !== void 0 ? ref2 : (ref1 = modelData.primaryKey) === null || ref1 === void 0 ? void 0 : ref1.fields.join('_');
|
|
57
|
+
return (0, _cursors).formatCursor(cursor === primaryKey ? modelData.primaryKey.fields : cursor);
|
|
49
58
|
}
|
|
50
|
-
exports.getCursorFormatter = getCursorFormatter;
|
|
51
59
|
function getCursorParser(name, builder, cursor) {
|
|
52
|
-
var
|
|
60
|
+
var ref, ref3;
|
|
53
61
|
const modelData = getModel(name, builder);
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
var ref4;
|
|
63
|
+
const primaryKey = (ref4 = (ref = modelData.primaryKey) === null || ref === void 0 ? void 0 : ref.name) !== null && ref4 !== void 0 ? ref4 : (ref3 = modelData.primaryKey) === null || ref3 === void 0 ? void 0 : ref3.fields.join('_');
|
|
64
|
+
const parser = cursor === primaryKey ? (0, _cursors).parseCompositeCursor(modelData.primaryKey.fields) : _cursors.parseRawCursor;
|
|
65
|
+
return (rawCursor)=>({
|
|
66
|
+
[cursor]: parser(rawCursor)
|
|
67
|
+
})
|
|
68
|
+
;
|
|
59
69
|
}
|
|
60
|
-
exports.getCursorParser = getCursorParser;
|
|
61
70
|
function getDelegateFromModel(client, model) {
|
|
62
71
|
const lowerCase = `${model.slice(0, 1).toLowerCase()}${model.slice(1)}`;
|
|
63
72
|
const delegate = lowerCase in client ? client[lowerCase] : null;
|
|
@@ -66,5 +75,5 @@ function getDelegateFromModel(client, model) {
|
|
|
66
75
|
}
|
|
67
76
|
return delegate;
|
|
68
77
|
}
|
|
69
|
-
|
|
78
|
+
|
|
70
79
|
//# sourceMappingURL=datamodel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/util/datamodel.ts"],"sourcesContent":["import { ObjectRef, SchemaTypes } from '@pothos/core';\nimport { Prisma } from '../../tests/client';\nimport { PrismaObjectRef } from '../object-ref';\nimport { PrismaDelegate, PrismaModelTypes } from '../types';\nimport { formatCursor, parseCompositeCursor, parseRawCursor } from './cursors';\n\nexport const refMap = new WeakMap<object, Map<string, PrismaObjectRef<PrismaModelTypes>>>();\nexport const findUniqueMap = new WeakMap<\n object,\n Map<ObjectRef<unknown>, ((args: unknown, ctx: {}) => unknown) | null>\n>();\n\nexport const includeForRefMap = new WeakMap<\n object,\n Map<ObjectRef<unknown>, Record<string, unknown> | null>\n>();\n\nexport function getRefFromModel<Types extends SchemaTypes>(\n name: string,\n builder: PothosSchemaTypes.SchemaBuilder<Types>,\n): PrismaObjectRef<PrismaModelTypes> {\n if (!refMap.has(builder)) {\n refMap.set(builder, new Map());\n }\n const cache = refMap.get(builder)!;\n\n if (!cache.has(name)) {\n cache.set(name, new PrismaObjectRef(name));\n }\n\n return cache.get(name)!;\n}\n\nexport function getRelation<Types extends SchemaTypes>(\n name: string,\n builder: PothosSchemaTypes.SchemaBuilder<Types>,\n relation: string,\n) {\n const modelData = getModel(name, builder);\n\n const fieldData = modelData.fields.find((field) => field.name === relation);\n\n if (!fieldData) {\n throw new Error(`Field '${relation}' not found in model '${name}'`);\n }\n\n if (fieldData.kind !== 'object') {\n throw new Error(`Field ${relation} of model '${name}' is not a relation (${fieldData.kind})`);\n }\n\n return fieldData;\n}\n\nexport function getModel<Types extends SchemaTypes>(\n name: string,\n builder: PothosSchemaTypes.SchemaBuilder<Types>,\n) {\n const { client } = builder.options.prisma;\n // eslint-disable-next-line no-underscore-dangle\n const dmmf = (client as unknown as { _dmmf: { modelMap: Record<string, Prisma.DMMF.Model> } })\n ._dmmf;\n const modelData = dmmf.modelMap[name];\n\n if (!modelData) {\n throw new Error(`Model '${name}' not found in DMMF`);\n }\n\n return modelData;\n}\n\nexport function getCursorFormatter<Types extends SchemaTypes>(\n name: string,\n builder: PothosSchemaTypes.SchemaBuilder<Types>,\n cursor: string,\n) {\n const modelData = getModel(name, builder);\n const primaryKey = modelData.primaryKey?.name ?? modelData.primaryKey?.fields.join('_');\n\n return formatCursor(cursor === primaryKey ? modelData.primaryKey!.fields : cursor);\n}\n\nexport function getCursorParser<Types extends SchemaTypes>(\n name: string,\n builder: PothosSchemaTypes.SchemaBuilder<Types>,\n cursor: string,\n) {\n const modelData = getModel(name, builder);\n const primaryKey = modelData.primaryKey?.name ?? modelData.primaryKey?.fields.join('_');\n\n const parser =\n cursor === primaryKey ? parseCompositeCursor(modelData.primaryKey!.fields) : parseRawCursor;\n\n return (rawCursor: string) => ({\n [cursor]: parser(rawCursor),\n });\n}\n\nexport function getDelegateFromModel(client: Record<string, unknown>, model: string) {\n const lowerCase = `${model.slice(0, 1).toLowerCase()}${model.slice(1)}`;\n\n const delegate = lowerCase in client ? client[lowerCase] : null;\n\n if (!delegate) {\n throw new Error(`Unable to find delegate for model ${model}`);\n }\n\n return delegate as PrismaDelegate;\n}\n"],"names":["getRefFromModel","getRelation","getModel","getCursorFormatter","getCursorParser","getDelegateFromModel","refMap","WeakMap","findUniqueMap","includeForRefMap","name","builder","has","set","Map","cache","get","PrismaObjectRef","relation","modelData","fieldData","fields","find","field","Error","kind","client","options","prisma","dmmf","_dmmf","modelMap","cursor","primaryKey","join","formatCursor","parser","parseCompositeCursor","parseRawCursor","rawCursor","model","lowerCase","slice","toLowerCase","delegate"],"mappings":"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"}
|
package/lib/util/deep-equal.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.deepEqual = deepEqual;
|
|
5
6
|
function deepEqual(left, right, ignore) {
|
|
6
7
|
if (left === right) {
|
|
7
8
|
return true;
|
|
@@ -11,11 +12,11 @@ function deepEqual(left, right, ignore) {
|
|
|
11
12
|
if (!Array.isArray(right)) {
|
|
12
13
|
return false;
|
|
13
14
|
}
|
|
14
|
-
const { length
|
|
15
|
+
const { length } = left;
|
|
15
16
|
if (right.length !== length) {
|
|
16
17
|
return false;
|
|
17
18
|
}
|
|
18
|
-
for
|
|
19
|
+
for(let i = 0; i < length; i += 1){
|
|
19
20
|
if (!deepEqual(left[i], right[i])) {
|
|
20
21
|
return false;
|
|
21
22
|
}
|
|
@@ -27,7 +28,7 @@ function deepEqual(left, right, ignore) {
|
|
|
27
28
|
if (keyLength !== Object.keys(right).length) {
|
|
28
29
|
return false;
|
|
29
30
|
}
|
|
30
|
-
for (const key of keys)
|
|
31
|
+
for (const key of keys){
|
|
31
32
|
if (ignore === null || ignore === void 0 ? void 0 : ignore.has(key)) {
|
|
32
33
|
continue;
|
|
33
34
|
}
|
|
@@ -39,5 +40,5 @@ function deepEqual(left, right, ignore) {
|
|
|
39
40
|
}
|
|
40
41
|
return false;
|
|
41
42
|
}
|
|
42
|
-
|
|
43
|
+
|
|
43
44
|
//# sourceMappingURL=deep-equal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/util/deep-equal.ts"],"sourcesContent":["/* eslint-disable no-continue */\nexport function deepEqual(left: unknown, right: unknown, ignore?: Set<string>) {\n if (left === right) {\n return true;\n }\n\n if (left && right && typeof left === 'object' && typeof right === 'object') {\n if (Array.isArray(left)) {\n if (!Array.isArray(right)) {\n return false;\n }\n\n const { length } = left;\n\n if (right.length !== length) {\n return false;\n }\n\n for (let i = 0; i < length; i += 1) {\n if (!deepEqual(left[i], right[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n const keys = Object.keys(left);\n const keyLength = keys.length;\n\n if (keyLength !== Object.keys(right).length) {\n return false;\n }\n\n for (const key of keys) {\n if (ignore?.has(key)) {\n continue;\n }\n\n if (\n !deepEqual((left as Record<string, unknown>)[key], (right as Record<string, unknown>)[key])\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n"],"names":["deepEqual","left","right","ignore","Array","isArray","length","i","keys","Object","keyLength","key","has"],"mappings":"AACA;;;;QAAgBA,SAAS,GAATA,SAAS;AAAlB,SAASA,SAAS,CAACC,IAAa,EAAEC,KAAc,EAAEC,MAAoB,EAAE;IAC7E,IAAIF,IAAI,KAAKC,KAAK,EAAE;QAClB,OAAO,IAAI,CAAC;KACb;IAED,IAAID,IAAI,IAAIC,KAAK,IAAI,OAAOD,IAAI,KAAK,QAAQ,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;QAC1E,IAAIE,KAAK,CAACC,OAAO,CAACJ,IAAI,CAAC,EAAE;YACvB,IAAI,CAACG,KAAK,CAACC,OAAO,CAACH,KAAK,CAAC,EAAE;gBACzB,OAAO,KAAK,CAAC;aACd;YAED,MAAM,EAAEI,MAAM,CAAA,EAAE,GAAGL,IAAI,AAAC;YAExB,IAAIC,KAAK,CAACI,MAAM,KAAKA,MAAM,EAAE;gBAC3B,OAAO,KAAK,CAAC;aACd;YAED,IAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,MAAM,EAAEC,CAAC,IAAI,CAAC,CAAE;gBAClC,IAAI,CAACP,SAAS,CAACC,IAAI,CAACM,CAAC,CAAC,EAAEL,KAAK,CAACK,CAAC,CAAC,CAAC,EAAE;oBACjC,OAAO,KAAK,CAAC;iBACd;aACF;YAED,OAAO,IAAI,CAAC;SACb;QAED,MAAMC,IAAI,GAAGC,MAAM,CAACD,IAAI,CAACP,IAAI,CAAC,AAAC;QAC/B,MAAMS,SAAS,GAAGF,IAAI,CAACF,MAAM,AAAC;QAE9B,IAAII,SAAS,KAAKD,MAAM,CAACD,IAAI,CAACN,KAAK,CAAC,CAACI,MAAM,EAAE;YAC3C,OAAO,KAAK,CAAC;SACd;QAED,KAAK,MAAMK,GAAG,IAAIH,IAAI,CAAE;YACtB,IAAIL,MAAM,aAANA,MAAM,WAAK,GAAXA,KAAAA,CAAW,GAAXA,MAAM,CAAES,GAAG,CAACD,GAAG,CAAC,EAAE;gBACpB,SAAS;aACV;YAED,IACE,CAACX,SAAS,CAAC,AAACC,IAAI,AAA4B,CAACU,GAAG,CAAC,EAAE,AAACT,KAAK,AAA4B,CAACS,GAAG,CAAC,CAAC,EAC3F;gBACA,OAAO,KAAK,CAAC;aACd;SACF;QAED,OAAO,IAAI,CAAC;KACb;IAED,OAAO,KAAK,CAAC;CACd"}
|
package/lib/util/loader-map.js
CHANGED
|
@@ -1,39 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.cacheKey = cacheKey;
|
|
6
|
+
exports.setLoaderMappings = setLoaderMappings;
|
|
7
|
+
exports.getLoaderMapping = getLoaderMapping;
|
|
8
|
+
var _core = require("@pothos/core");
|
|
9
|
+
var _mapQuery = require("./map-query");
|
|
10
|
+
const cache = (0, _core).createContextCache((ctx)=>new Map()
|
|
11
|
+
);
|
|
7
12
|
function cacheKey(type, path, subPath) {
|
|
8
13
|
let key = '';
|
|
9
14
|
let current = path;
|
|
10
|
-
while
|
|
15
|
+
while(current){
|
|
11
16
|
if (typeof current.key === 'string') {
|
|
12
17
|
key = key ? `${current.key}.${key}` : current.key;
|
|
13
18
|
}
|
|
14
19
|
current = current.prev;
|
|
15
20
|
}
|
|
16
|
-
for (const entry of subPath)
|
|
21
|
+
for (const entry of subPath){
|
|
17
22
|
key = `${key}.${entry}`;
|
|
18
23
|
}
|
|
19
24
|
return `${type}@${key}`;
|
|
20
25
|
}
|
|
21
|
-
exports.cacheKey = cacheKey;
|
|
22
26
|
function setLoaderMappings(ctx, info, value, type) {
|
|
23
|
-
Object.keys(value).forEach((field)
|
|
27
|
+
Object.keys(value).forEach((field)=>{
|
|
24
28
|
const map = cache(ctx);
|
|
25
29
|
const mapping = value[field];
|
|
26
|
-
const subPath = [
|
|
27
|
-
|
|
30
|
+
const subPath = [
|
|
31
|
+
...mapping.indirectPath,
|
|
32
|
+
field
|
|
33
|
+
];
|
|
34
|
+
const key = cacheKey((0, _mapQuery).getIndirectType(type, info).name, info.path, subPath);
|
|
28
35
|
map.set(key, mapping.mappings);
|
|
29
36
|
});
|
|
30
37
|
}
|
|
31
|
-
exports.setLoaderMappings = setLoaderMappings;
|
|
32
38
|
function getLoaderMapping(ctx, path, type) {
|
|
33
|
-
var _a;
|
|
34
39
|
const map = cache(ctx);
|
|
35
40
|
const key = cacheKey(type, path, []);
|
|
36
|
-
|
|
41
|
+
var ref;
|
|
42
|
+
return (ref = map.get(key)) !== null && ref !== void 0 ? ref : null;
|
|
37
43
|
}
|
|
38
|
-
|
|
44
|
+
|
|
39
45
|
//# sourceMappingURL=loader-map.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/util/loader-map.ts"],"sourcesContent":["import { GraphQLNamedType, GraphQLResolveInfo } from 'graphql';\nimport { createContextCache } from '@pothos/core';\nimport { LoaderMappings } from '../types';\nimport { getIndirectType } from './map-query';\n\nconst cache = createContextCache((ctx) => new Map<string, LoaderMappings>());\n\nexport function cacheKey(type: string, path: GraphQLResolveInfo['path'], subPath: string[]) {\n let key = '';\n let current: GraphQLResolveInfo['path'] | undefined = path;\n\n while (current) {\n if (typeof current.key === 'string') {\n key = key ? `${current.key}.${key}` : current.key;\n }\n current = current.prev;\n }\n\n for (const entry of subPath) {\n key = `${key}.${entry}`;\n }\n\n return `${type}@${key}`;\n}\n\nexport function setLoaderMappings(\n ctx: object,\n info: GraphQLResolveInfo,\n value: LoaderMappings,\n type: GraphQLNamedType,\n) {\n Object.keys(value).forEach((field) => {\n const map = cache(ctx);\n\n const mapping = value[field];\n const subPath = [...mapping.indirectPath, field];\n const key = cacheKey(getIndirectType(type, info).name, info.path, subPath);\n\n map.set(key, mapping.mappings);\n });\n}\n\nexport function getLoaderMapping(ctx: object, path: GraphQLResolveInfo['path'], type: string) {\n const map = cache(ctx);\n const key = cacheKey(type, path, []);\n\n return map.get(key) ?? null;\n}\n"],"names":["cacheKey","setLoaderMappings","getLoaderMapping","cache","createContextCache","ctx","Map","type","path","subPath","key","current","prev","entry","info","value","Object","keys","forEach","field","map","mapping","indirectPath","getIndirectType","name","set","mappings","get"],"mappings":"AAAA;;;;QAOgBA,QAAQ,GAARA,QAAQ;QAkBRC,iBAAiB,GAAjBA,iBAAiB;QAiBjBC,gBAAgB,GAAhBA,gBAAgB;AAzCG,IAAA,KAAc,WAAd,cAAc,CAAA;AAEjB,IAAA,SAAa,WAAb,aAAa,CAAA;AAE7C,MAAMC,KAAK,GAAGC,CAAAA,GAAAA,KAAkB,AAA4C,CAAA,mBAA5C,CAAC,CAACC,GAAG,GAAK,IAAIC,GAAG,EAA0B;AAAA,CAAC,AAAC;AAEtE,SAASN,QAAQ,CAACO,IAAY,EAAEC,IAAgC,EAAEC,OAAiB,EAAE;IAC1F,IAAIC,GAAG,GAAG,EAAE,AAAC;IACb,IAAIC,OAAO,GAA2CH,IAAI,AAAC;IAE3D,MAAOG,OAAO,CAAE;QACd,IAAI,OAAOA,OAAO,CAACD,GAAG,KAAK,QAAQ,EAAE;YACnCA,GAAG,GAAGA,GAAG,GAAG,CAAC,EAAEC,OAAO,CAACD,GAAG,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,GAAGC,OAAO,CAACD,GAAG,CAAC;SACnD;QACDC,OAAO,GAAGA,OAAO,CAACC,IAAI,CAAC;KACxB;IAED,KAAK,MAAMC,KAAK,IAAIJ,OAAO,CAAE;QAC3BC,GAAG,GAAG,CAAC,EAAEA,GAAG,CAAC,CAAC,EAAEG,KAAK,CAAC,CAAC,CAAC;KACzB;IAED,OAAO,CAAC,EAAEN,IAAI,CAAC,CAAC,EAAEG,GAAG,CAAC,CAAC,CAAC;CACzB;AAEM,SAAST,iBAAiB,CAC/BI,GAAW,EACXS,IAAwB,EACxBC,KAAqB,EACrBR,IAAsB,EACtB;IACAS,MAAM,CAACC,IAAI,CAACF,KAAK,CAAC,CAACG,OAAO,CAAC,CAACC,KAAK,GAAK;QACpC,MAAMC,GAAG,GAAGjB,KAAK,CAACE,GAAG,CAAC,AAAC;QAEvB,MAAMgB,OAAO,GAAGN,KAAK,CAACI,KAAK,CAAC,AAAC;QAC7B,MAAMV,OAAO,GAAG;eAAIY,OAAO,CAACC,YAAY;YAAEH,KAAK;SAAC,AAAC;QACjD,MAAMT,GAAG,GAAGV,QAAQ,CAACuB,CAAAA,GAAAA,SAAe,AAAY,CAAA,gBAAZ,CAAChB,IAAI,EAAEO,IAAI,CAAC,CAACU,IAAI,EAAEV,IAAI,CAACN,IAAI,EAAEC,OAAO,CAAC,AAAC;QAE3EW,GAAG,CAACK,GAAG,CAACf,GAAG,EAAEW,OAAO,CAACK,QAAQ,CAAC,CAAC;KAChC,CAAC,CAAC;CACJ;AAEM,SAASxB,gBAAgB,CAACG,GAAW,EAAEG,IAAgC,EAAED,IAAY,EAAE;IAC5F,MAAMa,GAAG,GAAGjB,KAAK,CAACE,GAAG,CAAC,AAAC;IACvB,MAAMK,GAAG,GAAGV,QAAQ,CAACO,IAAI,EAAEC,IAAI,EAAE,EAAE,CAAC,AAAC;QAE9BY,GAAY;IAAnB,OAAOA,CAAAA,GAAY,GAAZA,GAAG,CAACO,GAAG,CAACjB,GAAG,CAAC,cAAZU,GAAY,cAAZA,GAAY,GAAI,IAAI,CAAC;CAC7B"}
|