export declare const objectsTemplate = "#{prismaImporter}#{crudExportRoot}#{builderCalculatedImport}\n\nexport const BatchPayload = builder.objectType(builder.objectRef('BatchPayload'), {\n description: 'Batch payloads from prisma.',\n fields: (t) => ({\n count: t.exposeInt('count', { description: 'Prisma Batch Payload', nullable: false }),\n }),\n});\n\nexport const modelNames = [\n #{modelNames}\n] as const;\n\nexport type Model = typeof modelNames[number];\n"; export declare const utilsTemplate = "import {\n FieldOptionsFromKind,\n InputFieldMap,\n InterfaceParam,\n MutationFieldBuilder,\n MutationFieldsShape,\n ObjectRef,\n QueryFieldBuilder,\n QueryFieldsShape,\n TypeParam,\n} from '@pothos/core';\nimport {\n PrismaFieldOptions,\n PrismaObjectTypeOptions,\n RelatedFieldOptions,\n} from '@pothos/plugin-prisma';#{builderCalculatedImport}\n\ntype Types = typeof builder extends PothosSchemaTypes.SchemaBuilder ? T : unknown;\n\nexport const defineQuery = >(q: Q) => q;\n\nexport const defineQueryFunction = (\n func: (t: QueryFieldBuilder) => Obj,\n) => func;\n\nexport const defineQueryObject = <\n Type extends TypeParam,\n Nullable extends boolean,\n Args extends InputFieldMap,\n>(\n obj: FieldOptionsFromKind,\n) => obj as { type: Type; nullable: Nullable; args: Args; resolve: typeof obj['resolve'] };\n\nexport const defineQueryPrismaObject = <\n Type extends keyof Types['PrismaTypes'] | [keyof Types['PrismaTypes']],\n Model extends Types['PrismaTypes'][Type extends [unknown] ? Type[0] : Type],\n Args extends InputFieldMap,\n Nullable extends boolean,\n>(\n def: PrismaFieldOptions<\n Types,\n Types['Root'],\n Type,\n Model,\n Type extends [unknown] ? [ObjectRef] : ObjectRef,\n Args,\n Nullable,\n unknown,\n unknown,\n 'Query'\n >,\n) => def as { type: Type; nullable: Nullable; args: Args; resolve: typeof def['resolve'] };\n\nexport const defineMutation = >(m: M) => m;\n\nexport const defineMutationFunction = (\n func: (t: MutationFieldBuilder) => Obj,\n) => func;\n\nexport const defineMutationObject = <\n Type extends TypeParam,\n Nullable extends boolean,\n Args extends InputFieldMap,\n>(\n obj: FieldOptionsFromKind,\n) => obj as { type: Type; nullable: Nullable; args: Args; resolve: typeof obj['resolve'] };\n\nexport const defineMutationPrismaObject = <\n Type extends keyof Types['PrismaTypes'] | [keyof Types['PrismaTypes']],\n Model extends Types['PrismaTypes'][Type extends [unknown] ? Type[0] : Type],\n Args extends InputFieldMap,\n Nullable extends boolean,\n>(\n obj: PrismaFieldOptions<\n Types,\n Types['Root'],\n Type,\n Model,\n Type extends [unknown] ? [ObjectRef] : ObjectRef,\n Args,\n Nullable,\n unknown,\n unknown,\n 'Mutation'\n >,\n) => obj as { type: Type; nullable: Nullable; args: Args; resolve: typeof obj['resolve'] };\n\nexport const defineFieldObject = <\n Name extends keyof Types['PrismaTypes'],\n Type extends TypeParam,\n Nullable extends boolean,\n Args extends InputFieldMap,\n>(\n _: Name,\n obj: FieldOptionsFromKind<\n Types,\n Types['PrismaTypes'][Name]['Shape'],\n Type,\n Nullable,\n Args,\n 'Object',\n unknown,\n unknown\n >,\n) =>\n obj as { type: Type; nullable: Nullable; description?: string; resolve: typeof obj['resolve'] };\n\nexport const defineRelationObject = <\n ModelName extends keyof Types['PrismaTypes'],\n RelationName extends keyof Types['PrismaTypes'][ModelName]['Relations'],\n Nullable extends boolean,\n Args extends InputFieldMap,\n>(\n _: ModelName,\n __: RelationName,\n obj: RelatedFieldOptions<\n Types,\n Types['PrismaTypes'][ModelName],\n RelationName,\n Nullable,\n Args,\n unknown,\n Types['PrismaTypes'][ModelName]['Shape']\n >,\n) =>\n obj as {\n description: string | undefined;\n nullable: Nullable;\n args: Args;\n query: typeof obj['query'];\n };\n\nexport const defineRelationFunction = (\n _: ModelName,\n func: (\n t: PothosSchemaTypes.PrismaObjectFieldBuilder<\n Types,\n Types['PrismaTypes'][ModelName],\n Types['PrismaTypes'][ModelName]['Shape']\n >,\n ) => O,\n) => func;\n\nexport const definePrismaObject = <\n Name extends keyof Types['PrismaTypes'],\n Obj extends PrismaObjectTypeOptions<\n Types,\n Types['PrismaTypes'][Name],\n InterfaceParam[],\n unknown,\n unknown,\n Types['PrismaTypes'][Name]['Shape']\n >,\n>(\n _: Name,\n obj: Obj,\n) => obj;\n"; /** User: { Object: User.UserObject, queries: {}, mutations: {}, }, Post: { Object: Post.PostObject, queries: { findFirst: Post.findFirstPostQuery, count: Post.countPostQuery, }, mutations: { createOne: Post.createOnePostMutation, }, }, */ export declare const autoCrudTemplate = "#{imports}#{builderCalculatedImport}\nimport * as Objects from './objects';\n\ntype Model = Objects.Model;\n\nexport const Cruds: Record<\n Objects.Model,\n {\n Object: any;\n queries: Record;\n mutations: Record;\n }\n> = {\n#{modelsGenerated}\n};\n\nconst crudEntries = Object.entries(Cruds);\n\ntype ResolverType = \"Query\" | \"Mutation\";\nfunction generateResolversByType(type: ResolverType, opts?: CrudOptions) {\n return crudEntries\n .filter(([modelName]) => includeModel(modelName, opts))\n .map(([modelName, config]) => {\n const resolverEntries = Object.entries(config[type === \"Query\" ? \"queries\" : \"mutations\"]);\n\n return resolverEntries.map(([operationName, resolverObjectDefiner]) => {\n const resolverName = operationName + modelName;\n const isntPrismaFieldList = [\"count\", \"deleteMany\", \"updateMany\"];\n const isPrismaField = !isntPrismaFieldList.includes(operationName);\n\n const getFields = (t: any) => {\n const field = resolverObjectDefiner(t);\n const handledField = opts?.handleResolver\n ? opts.handleResolver({\n field,\n modelName: modelName as Model,\n operationName,\n resolverName,\n t,\n isPrismaField,\n type,\n })\n : field;\n\n return {\n [resolverName]: isPrismaField\n ? t.prismaField(handledField)\n : t.field(handledField),\n }\n }\n\n return type === \"Query\"\n ? builder.queryFields((t) => getFields(t))\n : builder.mutationFields((t) => getFields(t));\n });\n });\n}\n\nexport function generateAllObjects(opts?: CrudOptions) {\n return crudEntries\n .filter(([md]) => includeModel(md, opts))\n .map(([modelName, { Object }]) => {\n return builder.prismaObject(modelName as Model, Object); // Objects is all imports\n });\n}\n\nexport function generateAllQueries(opts?: CrudOptions) {\n generateResolversByType(\"Query\", opts);\n}\n\nexport function generateAllMutations(opts?: CrudOptions) {\n generateResolversByType(\"Mutation\", opts);\n}\n\nexport function generateAllResolvers(opts?: CrudOptions) {\n generateResolversByType(\"Mutation\", opts);\n generateResolversByType(\"Query\", opts);\n}\n\ntype CrudOptions = {\n include?: Model[];\n exclude?: Model[];\n /**\n * Caution: This is not type safe\n * Wrap all queries/mutations to override args, run extra code in resolve function (ie: throw errors, logs), apply plugins, etc.\n */\n handleResolver?: (props: {\n modelName: Model;\n field: any;\n operationName: string;\n resolverName: string;\n t: any;\n isPrismaField: boolean;\n type: ResolverType;\n }) => any;\n};\n\nconst includeModel = (model: string, opts?: CrudOptions): boolean => {\n if (!opts) return true;\n if (opts.include) return opts.include.includes(model as Model);\n if (opts.exclude) return !opts.exclude.includes(model as Model);\n return true;\n};\n\nexport function generateAllCrud(opts?: CrudOptions) {\n generateAllObjects(opts);\n generateAllQueries(opts);\n generateAllMutations(opts);\n}\n";