zenstack 0.6.0-pre.15 → 0.6.0-pre.16

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/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publisher": "zenstack",
4
4
  "displayName": "ZenStack Language Tools",
5
5
  "description": "A toolkit for building secure CRUD apps with Next.js + Typescript",
6
- "version": "0.6.0-pre.15",
6
+ "version": "0.6.0-pre.16",
7
7
  "author": {
8
8
  "name": "ZenStack Team"
9
9
  },
@@ -90,9 +90,9 @@
90
90
  "vscode-languageserver-textdocument": "^1.0.7",
91
91
  "vscode-uri": "^3.0.6",
92
92
  "zod": "^3.19.1",
93
- "@zenstackhq/sdk": "0.6.0-pre.15",
94
- "@zenstackhq/language": "0.6.0-pre.14",
95
- "@zenstackhq/runtime": "0.6.0-pre.15"
93
+ "@zenstackhq/runtime": "0.6.0-pre.16",
94
+ "@zenstackhq/language": "0.6.0-pre.16",
95
+ "@zenstackhq/sdk": "0.6.0-pre.16"
96
96
  },
97
97
  "devDependencies": {
98
98
  "@babel/cli": "^7.19.3",
@@ -55,7 +55,7 @@ function generateModelHooks(project, outDir, model) {
55
55
  }, `type ${model.name}`],
56
56
  moduleSpecifier: '@prisma/client'
57
57
  });
58
- sf.addStatements([`import { useContext } from 'react';`, `import { RequestHandlerContext } from '@zenstackhq/next';`, `import * as request from '${_pluginUtils.RUNTIME_PACKAGE}/request';`, `import { RequestOptions } from '${_pluginUtils.RUNTIME_PACKAGE}/types';`]);
58
+ sf.addStatements([`import { useContext } from 'react';`, `import { RequestHandlerContext } from '@zenstackhq/next/client';`, `import * as request from '${_pluginUtils.RUNTIME_PACKAGE}/request';`, `import { RequestOptions } from '${_pluginUtils.RUNTIME_PACKAGE}/types';`]);
59
59
  const useFunc = sf.addFunction({
60
60
  name: `use${model.name}`,
61
61
  isExported: true
@@ -1 +1 @@
1
- {"version":3,"file":"react-hooks-generator.js","names":["generate","model","options","project","Project","models","warnings","dm","declarations","filter","d","isDataModel","hasAllowRule","attributes","find","attr","decl","ref","name","push","outDir","output","generateIndex","forEach","generateModelHooks","save","wrapReadbackErrorCheck","code","fileName","paramCase","sf","createSourceFile","path","join","undefined","overwrite","addImportDeclaration","namedImports","moduleSpecifier","addStatements","RUNTIME_PACKAGE","useFunc","addFunction","isExported","modelRouteName","camelCase","argsType","inputType","returnType","isAsync","typeParameters","parameters","type","addBody","formatText","map"],"sources":["../../../src/plugins/react-hooks/react-hooks-generator.ts"],"sourcesContent":["import { DataModel, Model, isDataModel } from '@zenstackhq/language/ast';\nimport { PluginOptions } from '@zenstackhq/sdk';\nimport { camelCase, paramCase } from 'change-case';\nimport * as path from 'path';\nimport { Project } from 'ts-morph';\nimport { RUNTIME_PACKAGE } from '../plugin-utils';\n\nexport async function generate(model: Model, options: PluginOptions) {\n const project = new Project();\n const models: DataModel[] = [];\n const warnings: string[] = [];\n\n for (const dm of model.declarations.filter((d): d is DataModel => isDataModel(d))) {\n const hasAllowRule = dm.attributes.find((attr) => attr.decl.ref?.name === '@@allow');\n if (!hasAllowRule) {\n warnings.push(`Not generating hooks for \"${dm.name}\" because it doesn't have any @@allow rule`);\n } else {\n models.push(dm);\n }\n }\n\n const outDir = (options.output as string) ?? 'node_modules/.zenstack/src/hooks';\n\n generateIndex(project, outDir, models);\n\n models.forEach((d) => generateModelHooks(project, outDir, d));\n\n await project.save();\n return warnings;\n}\n\nfunction wrapReadbackErrorCheck(code: string) {\n return `try {\n ${code}\n } catch (err: unknown) {\n if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === 'P2004') {\n // unable to readback data\n return undefined;\n } else {\n throw err;\n }\n }`;\n}\n\nfunction generateModelHooks(project: Project, outDir: string, model: DataModel) {\n const fileName = paramCase(model.name);\n const sf = project.createSourceFile(path.join(outDir, `${fileName}.ts`), undefined, { overwrite: true });\n\n sf.addImportDeclaration({\n namedImports: [{ name: 'Prisma' }, `type ${model.name}`],\n moduleSpecifier: '@prisma/client',\n });\n sf.addStatements([\n `import { useContext } from 'react';`,\n `import { RequestHandlerContext } from '@zenstackhq/next';`,\n `import * as request from '${RUNTIME_PACKAGE}/request';`,\n `import { RequestOptions } from '${RUNTIME_PACKAGE}/types';`,\n ]);\n\n const useFunc = sf.addFunction({\n name: `use${model.name}`,\n isExported: true,\n });\n\n useFunc.addStatements([\n 'const mutate = request.getMutate();',\n 'const { endpoint } = useContext(RequestHandlerContext);',\n ]);\n\n const modelRouteName = camelCase(model.name);\n\n // create\n {\n const argsType = `Prisma.${model.name}CreateArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.CheckSelect<T, ${model.name}, Prisma.${model.name}GetPayload<T>>`;\n useFunc\n .addFunction({\n name: 'create',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.post<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/create\\`, args, mutate);`\n ),\n ]);\n }\n\n // createMany\n {\n const argsType = `Prisma.${model.name}CreateManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'createMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.post<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/createMany\\`, args, mutate);`,\n ]);\n }\n\n // findMany\n {\n const argsType = `Prisma.${model.name}FindManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Array<Prisma.${model.name}GetPayload<T>>`;\n useFunc\n .addFunction({\n name: 'findMany',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/findMany\\`, args, options);`,\n ]);\n }\n\n // findUnique\n {\n const argsType = `Prisma.${model.name}FindUniqueArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'findUnique',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/findUnique\\`, args, options);`,\n ]);\n }\n\n // findFirst\n {\n const argsType = `Prisma.${model.name}FindFirstArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'findFirst',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/findFirst\\`, args, options);`,\n ]);\n }\n\n // update\n {\n const argsType = `Prisma.${model.name}UpdateArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'update',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/update\\`, args, mutate);`\n ),\n ]);\n }\n\n // updateMany\n {\n const argsType = `Prisma.${model.name}UpdateManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'updateMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/updateMany\\`, args, mutate);`,\n ]);\n }\n\n // upsert\n {\n const argsType = `Prisma.${model.name}UpsertArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'upsert',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/upsert\\`, args, mutate);`\n ),\n ]);\n }\n\n // del\n {\n const argsType = `Prisma.${model.name}DeleteArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'del',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.del<${returnType}>(\\`\\${endpoint}/${modelRouteName}/delete\\`, args, mutate);`\n ),\n ]);\n }\n\n // deleteMany\n {\n const argsType = `Prisma.${model.name}DeleteManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'deleteMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.del<${returnType}>(\\`\\${endpoint}/${modelRouteName}/deleteMany\\`, args, mutate);`,\n ]);\n }\n\n // aggregate\n {\n const argsType = `Prisma.${model.name}AggregateArgs`;\n const inputType = `Prisma.Subset<T, ${argsType}>`;\n const returnType = `Prisma.Get${model.name}AggregateType<T>`;\n useFunc\n .addFunction({\n name: 'aggregate',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/aggregate\\`, args, options);`,\n ]);\n }\n\n // groupBy\n {\n const returnType = `{} extends InputErrors ? Prisma.Get${model.name}GroupByPayload<T> : InputErrors`;\n useFunc\n .addFunction({\n name: 'groupBy',\n typeParameters: [\n `T extends Prisma.${model.name}GroupByArgs`,\n `HasSelectOrTake extends Prisma.Or<Prisma.Extends<'skip', Prisma.Keys<T>>, Prisma.Extends<'take', Prisma.Keys<T>>>`,\n `OrderByArg extends Prisma.True extends HasSelectOrTake ? { orderBy: Prisma.UserGroupByArgs['orderBy'] }: { orderBy?: Prisma.UserGroupByArgs['orderBy'] },`,\n `OrderFields extends Prisma.ExcludeUnderscoreKeys<Prisma.Keys<Prisma.MaybeTupleToUnion<T['orderBy']>>>`,\n `ByFields extends Prisma.TupleToUnion<T['by']>`,\n `ByValid extends Prisma.Has<ByFields, OrderFields>`,\n `HavingFields extends Prisma.GetHavingFields<T['having']>`,\n `HavingValid extends Prisma.Has<ByFields, HavingFields>`,\n `ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False`,\n `InputErrors extends ByEmpty extends Prisma.True\n ? \\`Error: \"by\" must not be empty.\\`\n : HavingValid extends Prisma.False\n ? {\n [P in HavingFields]: P extends ByFields\n ? never\n : P extends string\n ? \\`Error: Field \"\\${P}\" used in \"having\" needs to be provided in \"by\".\\`\n : [\n Error,\n 'Field ',\n P,\n \\` in \"having\" needs to be provided in \"by\"\\`,\n ]\n }[HavingFields]\n : 'take' extends Prisma.Keys<T>\n ? 'orderBy' extends Prisma.Keys<T>\n ? ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]\n : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n : 'skip' extends Prisma.Keys<T>\n ? 'orderBy' extends Prisma.Keys<T>\n ? ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]\n : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n : ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]`,\n ],\n parameters: [\n {\n name: 'args',\n type: `Prisma.SubsetIntersection<T, Prisma.${model.name}GroupByArgs, OrderByArg> & InputErrors`,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/groupBy\\`, args, options);`,\n ]);\n }\n\n // count\n {\n const argsType = `Prisma.${model.name}CountArgs`;\n const inputType = `Prisma.Subset<T, ${argsType}>`;\n const returnType = `T extends { select: any; } ? T['select'] extends true ? number : Prisma.GetScalarType<T['select'], Prisma.${model.name}CountAggregateOutputType> : number`;\n useFunc\n .addFunction({\n name: 'count',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/count\\`, args, options);`,\n ]);\n }\n\n useFunc.addStatements([\n 'return { create, createMany, findMany, findUnique, findFirst, update, updateMany, upsert, del, deleteMany, aggregate, groupBy, count };',\n ]);\n\n sf.formatText();\n}\n\nfunction generateIndex(project: Project, outDir: string, models: DataModel[]) {\n const sf = project.createSourceFile(path.join(outDir, 'index.ts'), undefined, { overwrite: true });\n\n sf.addStatements(models.map((d) => `export * from './${paramCase(d.name)}';`));\n\n sf.formatText();\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"react-hooks-generator.js","names":["generate","model","options","project","Project","models","warnings","dm","declarations","filter","d","isDataModel","hasAllowRule","attributes","find","attr","decl","ref","name","push","outDir","output","generateIndex","forEach","generateModelHooks","save","wrapReadbackErrorCheck","code","fileName","paramCase","sf","createSourceFile","path","join","undefined","overwrite","addImportDeclaration","namedImports","moduleSpecifier","addStatements","RUNTIME_PACKAGE","useFunc","addFunction","isExported","modelRouteName","camelCase","argsType","inputType","returnType","isAsync","typeParameters","parameters","type","addBody","formatText","map"],"sources":["../../../src/plugins/react-hooks/react-hooks-generator.ts"],"sourcesContent":["import { DataModel, Model, isDataModel } from '@zenstackhq/language/ast';\nimport { PluginOptions } from '@zenstackhq/sdk';\nimport { camelCase, paramCase } from 'change-case';\nimport * as path from 'path';\nimport { Project } from 'ts-morph';\nimport { RUNTIME_PACKAGE } from '../plugin-utils';\n\nexport async function generate(model: Model, options: PluginOptions) {\n const project = new Project();\n const models: DataModel[] = [];\n const warnings: string[] = [];\n\n for (const dm of model.declarations.filter((d): d is DataModel => isDataModel(d))) {\n const hasAllowRule = dm.attributes.find((attr) => attr.decl.ref?.name === '@@allow');\n if (!hasAllowRule) {\n warnings.push(`Not generating hooks for \"${dm.name}\" because it doesn't have any @@allow rule`);\n } else {\n models.push(dm);\n }\n }\n\n const outDir = (options.output as string) ?? 'node_modules/.zenstack/src/hooks';\n\n generateIndex(project, outDir, models);\n\n models.forEach((d) => generateModelHooks(project, outDir, d));\n\n await project.save();\n return warnings;\n}\n\nfunction wrapReadbackErrorCheck(code: string) {\n return `try {\n ${code}\n } catch (err: unknown) {\n if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === 'P2004') {\n // unable to readback data\n return undefined;\n } else {\n throw err;\n }\n }`;\n}\n\nfunction generateModelHooks(project: Project, outDir: string, model: DataModel) {\n const fileName = paramCase(model.name);\n const sf = project.createSourceFile(path.join(outDir, `${fileName}.ts`), undefined, { overwrite: true });\n\n sf.addImportDeclaration({\n namedImports: [{ name: 'Prisma' }, `type ${model.name}`],\n moduleSpecifier: '@prisma/client',\n });\n sf.addStatements([\n `import { useContext } from 'react';`,\n `import { RequestHandlerContext } from '@zenstackhq/next/client';`,\n `import * as request from '${RUNTIME_PACKAGE}/request';`,\n `import { RequestOptions } from '${RUNTIME_PACKAGE}/types';`,\n ]);\n\n const useFunc = sf.addFunction({\n name: `use${model.name}`,\n isExported: true,\n });\n\n useFunc.addStatements([\n 'const mutate = request.getMutate();',\n 'const { endpoint } = useContext(RequestHandlerContext);',\n ]);\n\n const modelRouteName = camelCase(model.name);\n\n // create\n {\n const argsType = `Prisma.${model.name}CreateArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.CheckSelect<T, ${model.name}, Prisma.${model.name}GetPayload<T>>`;\n useFunc\n .addFunction({\n name: 'create',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.post<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/create\\`, args, mutate);`\n ),\n ]);\n }\n\n // createMany\n {\n const argsType = `Prisma.${model.name}CreateManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'createMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.post<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/createMany\\`, args, mutate);`,\n ]);\n }\n\n // findMany\n {\n const argsType = `Prisma.${model.name}FindManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Array<Prisma.${model.name}GetPayload<T>>`;\n useFunc\n .addFunction({\n name: 'findMany',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/findMany\\`, args, options);`,\n ]);\n }\n\n // findUnique\n {\n const argsType = `Prisma.${model.name}FindUniqueArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'findUnique',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/findUnique\\`, args, options);`,\n ]);\n }\n\n // findFirst\n {\n const argsType = `Prisma.${model.name}FindFirstArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'findFirst',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/findFirst\\`, args, options);`,\n ]);\n }\n\n // update\n {\n const argsType = `Prisma.${model.name}UpdateArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'update',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/update\\`, args, mutate);`\n ),\n ]);\n }\n\n // updateMany\n {\n const argsType = `Prisma.${model.name}UpdateManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'updateMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/updateMany\\`, args, mutate);`,\n ]);\n }\n\n // upsert\n {\n const argsType = `Prisma.${model.name}UpsertArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'upsert',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/upsert\\`, args, mutate);`\n ),\n ]);\n }\n\n // del\n {\n const argsType = `Prisma.${model.name}DeleteArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'del',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.del<${returnType}>(\\`\\${endpoint}/${modelRouteName}/delete\\`, args, mutate);`\n ),\n ]);\n }\n\n // deleteMany\n {\n const argsType = `Prisma.${model.name}DeleteManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'deleteMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.del<${returnType}>(\\`\\${endpoint}/${modelRouteName}/deleteMany\\`, args, mutate);`,\n ]);\n }\n\n // aggregate\n {\n const argsType = `Prisma.${model.name}AggregateArgs`;\n const inputType = `Prisma.Subset<T, ${argsType}>`;\n const returnType = `Prisma.Get${model.name}AggregateType<T>`;\n useFunc\n .addFunction({\n name: 'aggregate',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/aggregate\\`, args, options);`,\n ]);\n }\n\n // groupBy\n {\n const returnType = `{} extends InputErrors ? Prisma.Get${model.name}GroupByPayload<T> : InputErrors`;\n useFunc\n .addFunction({\n name: 'groupBy',\n typeParameters: [\n `T extends Prisma.${model.name}GroupByArgs`,\n `HasSelectOrTake extends Prisma.Or<Prisma.Extends<'skip', Prisma.Keys<T>>, Prisma.Extends<'take', Prisma.Keys<T>>>`,\n `OrderByArg extends Prisma.True extends HasSelectOrTake ? { orderBy: Prisma.UserGroupByArgs['orderBy'] }: { orderBy?: Prisma.UserGroupByArgs['orderBy'] },`,\n `OrderFields extends Prisma.ExcludeUnderscoreKeys<Prisma.Keys<Prisma.MaybeTupleToUnion<T['orderBy']>>>`,\n `ByFields extends Prisma.TupleToUnion<T['by']>`,\n `ByValid extends Prisma.Has<ByFields, OrderFields>`,\n `HavingFields extends Prisma.GetHavingFields<T['having']>`,\n `HavingValid extends Prisma.Has<ByFields, HavingFields>`,\n `ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False`,\n `InputErrors extends ByEmpty extends Prisma.True\n ? \\`Error: \"by\" must not be empty.\\`\n : HavingValid extends Prisma.False\n ? {\n [P in HavingFields]: P extends ByFields\n ? never\n : P extends string\n ? \\`Error: Field \"\\${P}\" used in \"having\" needs to be provided in \"by\".\\`\n : [\n Error,\n 'Field ',\n P,\n \\` in \"having\" needs to be provided in \"by\"\\`,\n ]\n }[HavingFields]\n : 'take' extends Prisma.Keys<T>\n ? 'orderBy' extends Prisma.Keys<T>\n ? ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]\n : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n : 'skip' extends Prisma.Keys<T>\n ? 'orderBy' extends Prisma.Keys<T>\n ? ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]\n : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n : ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]`,\n ],\n parameters: [\n {\n name: 'args',\n type: `Prisma.SubsetIntersection<T, Prisma.${model.name}GroupByArgs, OrderByArg> & InputErrors`,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/groupBy\\`, args, options);`,\n ]);\n }\n\n // count\n {\n const argsType = `Prisma.${model.name}CountArgs`;\n const inputType = `Prisma.Subset<T, ${argsType}>`;\n const returnType = `T extends { select: any; } ? T['select'] extends true ? number : Prisma.GetScalarType<T['select'], Prisma.${model.name}CountAggregateOutputType> : number`;\n useFunc\n .addFunction({\n name: 'count',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/count\\`, args, options);`,\n ]);\n }\n\n useFunc.addStatements([\n 'return { create, createMany, findMany, findUnique, findFirst, update, updateMany, upsert, del, deleteMany, aggregate, groupBy, count };',\n ]);\n\n sf.formatText();\n}\n\nfunction generateIndex(project: Project, outDir: string, models: DataModel[]) {\n const sf = project.createSourceFile(path.join(outDir, 'index.ts'), undefined, { overwrite: true });\n\n sf.addStatements(models.map((d) => `export * from './${paramCase(d.name)}';`));\n\n sf.formatText();\n}\n"],"mappings":"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"}