zenstack 0.6.0-pre.13 → 0.6.0-pre.15
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/cli/index.js
CHANGED
|
@@ -10,12 +10,13 @@ var _colors = _interopRequireDefault(require("colors"));
|
|
|
10
10
|
var _commander = require("commander");
|
|
11
11
|
var _telemetry = _interopRequireDefault(require("../telemetry"));
|
|
12
12
|
var _cliUtil = require("./cli-util");
|
|
13
|
+
var semver = _interopRequireWildcard(require("semver"));
|
|
14
|
+
var _cliError = require("./cli-error");
|
|
15
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
18
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
15
19
|
|
|
16
|
-
// import * as semver from 'semver';
|
|
17
|
-
// import { CliError } from './cli-error';
|
|
18
|
-
|
|
19
20
|
// required minimal version of Prisma
|
|
20
21
|
const requiredPrismaVersion = '4.0.0';
|
|
21
22
|
exports.requiredPrismaVersion = requiredPrismaVersion;
|
|
@@ -34,22 +35,18 @@ const generateAction = async options => {
|
|
|
34
35
|
};
|
|
35
36
|
exports.generateAction = generateAction;
|
|
36
37
|
const checkRequiredPackage = (packageName, minVersion) => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// )
|
|
50
|
-
// );
|
|
51
|
-
// throw new CliError(`${packageName} version is too low`);
|
|
52
|
-
// }
|
|
38
|
+
let packageVersion;
|
|
39
|
+
try {
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
41
|
+
packageVersion = require(`${packageName}/package.json`).version;
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.error(_colors.default.red(`${packageName} not found, please install it`));
|
|
44
|
+
throw new _cliError.CliError(`${packageName} not found`);
|
|
45
|
+
}
|
|
46
|
+
if (minVersion && semver.lt(packageVersion, minVersion)) {
|
|
47
|
+
console.error(_colors.default.red(`${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`));
|
|
48
|
+
throw new _cliError.CliError(`${packageName} version is too low`);
|
|
49
|
+
}
|
|
53
50
|
};
|
|
54
51
|
async function _default() {
|
|
55
52
|
await _telemetry.default.trackSpan('cli:start', 'cli:complete', 'cli:error', {
|
package/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["requiredPrismaVersion","initAction","projectPath","options","telemetry","trackSpan","command","initProject","packageManager","generateAction","checkRequiredPackage","runPlugins","packageName","minVersion","
|
|
1
|
+
{"version":3,"file":"index.js","names":["requiredPrismaVersion","initAction","projectPath","options","telemetry","trackSpan","command","initProject","packageManager","generateAction","checkRequiredPackage","runPlugins","packageName","minVersion","packageVersion","require","version","error","console","colors","red","CliError","semver","lt","args","process","argv","program","Command","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","default","pmOption","choices","addOption","argument","action","exitOverride","parseAsync"],"sources":["../../src/cli/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ZModelLanguageMetaData } from '@zenstackhq/language/module';\nimport colors from 'colors';\nimport { Command, Option } from 'commander';\nimport telemetry from '../telemetry';\nimport { PackageManagers } from '../utils/pkg-utils';\nimport { initProject, runPlugins } from './cli-util';\nimport * as semver from 'semver';\nimport { CliError } from './cli-error';\n\n// required minimal version of Prisma\nexport const requiredPrismaVersion = '4.0.0';\n\nexport const initAction = async (\n projectPath: string,\n options: {\n packageManager: PackageManagers | undefined;\n }\n): Promise<void> => {\n await telemetry.trackSpan(\n 'cli:command:start',\n 'cli:command:complete',\n 'cli:command:error',\n { command: 'init' },\n () => initProject(projectPath, options.packageManager)\n );\n};\n\nexport const generateAction = async (options: {\n schema: string;\n packageManager: PackageManagers | undefined;\n}): Promise<void> => {\n checkRequiredPackage('prisma', requiredPrismaVersion);\n checkRequiredPackage('@prisma/client', requiredPrismaVersion);\n await telemetry.trackSpan(\n 'cli:command:start',\n 'cli:command:complete',\n 'cli:command:error',\n { command: 'generate' },\n () => runPlugins(options)\n );\n};\n\nconst checkRequiredPackage = (packageName: string, minVersion?: string) => {\n let packageVersion: string;\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n packageVersion = require(`${packageName}/package.json`).version;\n } catch (error) {\n console.error(colors.red(`${packageName} not found, please install it`));\n throw new CliError(`${packageName} not found`);\n }\n\n if (minVersion && semver.lt(packageVersion, minVersion)) {\n console.error(\n colors.red(\n `${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`\n )\n );\n throw new CliError(`${packageName} version is too low`);\n }\n};\n\nexport default async function (): Promise<void> {\n await telemetry.trackSpan('cli:start', 'cli:complete', 'cli:error', { args: process.argv }, async () => {\n const program = new Command('zenstack');\n\n program.version(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n require('../package.json').version,\n '-v --version',\n 'display CLI version'\n );\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ'\n )} ZenStack is a toolkit for building secure CRUD apps with Next.js + Typescript.\\n\\nDocumentation: https://zenstack.dev.`\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option('--schema <file>', `schema file (with extension ${schemaExtensions})`).default(\n './schema.zmodel'\n );\n\n const pmOption = new Option('-p, --package-manager <pm>', 'package manager to use').choices([\n 'npm',\n 'yarn',\n 'pnpm',\n ]);\n\n //#region wraps Prisma commands\n\n program\n .command('init')\n .description('Set up a new ZenStack project.')\n .addOption(pmOption)\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n program\n .command('generate')\n .description('Generates RESTful API and Typescript client for your data model.')\n .addOption(schemaOption)\n .addOption(pmOption)\n .action(generateAction);\n\n //#endregion\n\n // handle errors explicitly to ensure telemetry\n program.exitOverride();\n\n await program.parseAsync(process.argv);\n });\n}\n"],"mappings":"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"}
|
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.
|
|
6
|
+
"version": "0.6.0-pre.15",
|
|
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/
|
|
94
|
-
"@zenstackhq/
|
|
95
|
-
"@zenstackhq/
|
|
93
|
+
"@zenstackhq/sdk": "0.6.0-pre.15",
|
|
94
|
+
"@zenstackhq/language": "0.6.0-pre.14",
|
|
95
|
+
"@zenstackhq/runtime": "0.6.0-pre.15"
|
|
96
96
|
},
|
|
97
97
|
"devDependencies": {
|
|
98
98
|
"@babel/cli": "^7.19.3",
|
|
@@ -35,7 +35,7 @@ async function generate(model, options) {
|
|
|
35
35
|
function wrapReadbackErrorCheck(code) {
|
|
36
36
|
return `try {
|
|
37
37
|
${code}
|
|
38
|
-
} catch (err:
|
|
38
|
+
} catch (err: unknown) {
|
|
39
39
|
if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === 'P2004') {
|
|
40
40
|
// unable to readback data
|
|
41
41
|
return undefined;
|
|
@@ -61,6 +61,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
61
61
|
isExported: true
|
|
62
62
|
});
|
|
63
63
|
useFunc.addStatements(['const mutate = request.getMutate();', 'const { endpoint } = useContext(RequestHandlerContext);']);
|
|
64
|
+
const modelRouteName = (0, _changeCase.camelCase)(model.name);
|
|
64
65
|
|
|
65
66
|
// create
|
|
66
67
|
{
|
|
@@ -75,7 +76,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
75
76
|
name: 'args',
|
|
76
77
|
type: inputType
|
|
77
78
|
}]
|
|
78
|
-
}).addBody().addStatements([wrapReadbackErrorCheck(`return await request.post<${inputType}, ${returnType}>(\`\${endpoint}/${
|
|
79
|
+
}).addBody().addStatements([wrapReadbackErrorCheck(`return await request.post<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/create\`, args, mutate);`)]);
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
// createMany
|
|
@@ -91,7 +92,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
91
92
|
name: 'args',
|
|
92
93
|
type: inputType
|
|
93
94
|
}]
|
|
94
|
-
}).addBody().addStatements([`return await request.post<${inputType}, ${returnType}>(\`\${endpoint}/${
|
|
95
|
+
}).addBody().addStatements([`return await request.post<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/createMany\`, args, mutate);`]);
|
|
95
96
|
}
|
|
96
97
|
|
|
97
98
|
// findMany
|
|
@@ -109,7 +110,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
109
110
|
name: 'options?',
|
|
110
111
|
type: `RequestOptions<${returnType}>`
|
|
111
112
|
}]
|
|
112
|
-
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${
|
|
113
|
+
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/findMany\`, args, options);`]);
|
|
113
114
|
}
|
|
114
115
|
|
|
115
116
|
// findUnique
|
|
@@ -127,7 +128,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
127
128
|
name: 'options?',
|
|
128
129
|
type: `RequestOptions<${returnType}>`
|
|
129
130
|
}]
|
|
130
|
-
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${
|
|
131
|
+
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/findUnique\`, args, options);`]);
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
// findFirst
|
|
@@ -145,7 +146,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
145
146
|
name: 'options?',
|
|
146
147
|
type: `RequestOptions<${returnType}>`
|
|
147
148
|
}]
|
|
148
|
-
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${
|
|
149
|
+
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/findFirst\`, args, options);`]);
|
|
149
150
|
}
|
|
150
151
|
|
|
151
152
|
// update
|
|
@@ -161,7 +162,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
161
162
|
name: 'args',
|
|
162
163
|
type: inputType
|
|
163
164
|
}]
|
|
164
|
-
}).addBody().addStatements([wrapReadbackErrorCheck(`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${
|
|
165
|
+
}).addBody().addStatements([wrapReadbackErrorCheck(`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/update\`, args, mutate);`)]);
|
|
165
166
|
}
|
|
166
167
|
|
|
167
168
|
// updateMany
|
|
@@ -177,7 +178,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
177
178
|
name: 'args',
|
|
178
179
|
type: inputType
|
|
179
180
|
}]
|
|
180
|
-
}).addBody().addStatements([`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${
|
|
181
|
+
}).addBody().addStatements([`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/updateMany\`, args, mutate);`]);
|
|
181
182
|
}
|
|
182
183
|
|
|
183
184
|
// upsert
|
|
@@ -193,7 +194,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
193
194
|
name: 'args',
|
|
194
195
|
type: inputType
|
|
195
196
|
}]
|
|
196
|
-
}).addBody().addStatements([wrapReadbackErrorCheck(`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${
|
|
197
|
+
}).addBody().addStatements([wrapReadbackErrorCheck(`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/upsert\`, args, mutate);`)]);
|
|
197
198
|
}
|
|
198
199
|
|
|
199
200
|
// del
|
|
@@ -209,7 +210,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
209
210
|
name: 'args?',
|
|
210
211
|
type: inputType
|
|
211
212
|
}]
|
|
212
|
-
}).addBody().addStatements([wrapReadbackErrorCheck(`return await request.del<${returnType}>(\`\${endpoint}/${
|
|
213
|
+
}).addBody().addStatements([wrapReadbackErrorCheck(`return await request.del<${returnType}>(\`\${endpoint}/${modelRouteName}/delete\`, args, mutate);`)]);
|
|
213
214
|
}
|
|
214
215
|
|
|
215
216
|
// deleteMany
|
|
@@ -225,7 +226,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
225
226
|
name: 'args?',
|
|
226
227
|
type: inputType
|
|
227
228
|
}]
|
|
228
|
-
}).addBody().addStatements([`return await request.del<${returnType}>(\`\${endpoint}/${
|
|
229
|
+
}).addBody().addStatements([`return await request.del<${returnType}>(\`\${endpoint}/${modelRouteName}/deleteMany\`, args, mutate);`]);
|
|
229
230
|
}
|
|
230
231
|
|
|
231
232
|
// aggregate
|
|
@@ -243,7 +244,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
243
244
|
name: 'options?',
|
|
244
245
|
type: `RequestOptions<${returnType}>`
|
|
245
246
|
}]
|
|
246
|
-
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${
|
|
247
|
+
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/aggregate\`, args, options);`]);
|
|
247
248
|
}
|
|
248
249
|
|
|
249
250
|
// groupBy
|
|
@@ -300,7 +301,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
300
301
|
name: 'options?',
|
|
301
302
|
type: `RequestOptions<${returnType}>`
|
|
302
303
|
}]
|
|
303
|
-
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${
|
|
304
|
+
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/groupBy\`, args, options);`]);
|
|
304
305
|
}
|
|
305
306
|
|
|
306
307
|
// count
|
|
@@ -318,7 +319,7 @@ function generateModelHooks(project, outDir, model) {
|
|
|
318
319
|
name: 'options?',
|
|
319
320
|
type: `RequestOptions<${returnType}>`
|
|
320
321
|
}]
|
|
321
|
-
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${
|
|
322
|
+
}).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/count\`, args, options);`]);
|
|
322
323
|
}
|
|
323
324
|
useFunc.addStatements(['return { create, createMany, findMany, findUnique, findFirst, update, updateMany, upsert, del, deleteMany, aggregate, groupBy, count };']);
|
|
324
325
|
sf.formatText();
|
|
@@ -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","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 { 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: any) {\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 // 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}/${model.name}/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}/${model.name}/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}/${model.name}/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}/${model.name}/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}/${model.name}/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}/${model.name}/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}/${model.name}/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}/${model.name}/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}/${model.name}/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}/${model.name}/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}/${model.name}/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}/${model.name}/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([`return request.get<${returnType}>(\\`\\${endpoint}/${model.name}/count\\`, args, options);`]);\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';`,\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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"}
|