@zenstackhq/trpc 2.6.2 → 2.7.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/client-helper/index.d.ts +17 -0
- package/client-helper/index.js +252 -0
- package/client-helper/index.js.map +1 -0
- package/client-helper/next.d.ts +3 -0
- package/client-helper/next.js +14 -0
- package/client-helper/next.js.map +1 -0
- package/client-helper/nuxt.d.ts +3 -0
- package/client-helper/nuxt.js +53 -0
- package/client-helper/nuxt.js.map +1 -0
- package/client-helper/react.d.ts +3 -0
- package/client-helper/react.js +90 -0
- package/client-helper/react.js.map +1 -0
- package/generator.js +15 -76
- package/generator.js.map +1 -1
- package/package.json +3 -3
- package/res/client/v10/next.ts +0 -1
- package/res/client/v10/nuxt.ts +12 -0
- package/res/client/v10/react.ts +0 -1
- package/res/client/v10/utils.ts +14 -0
- package/res/client/v11/next.ts +0 -1
- package/res/client/v11/nuxt.ts +12 -0
- package/res/client/v11/react.ts +0 -1
- package/res/client/v11/utils.ts +14 -0
- package/{helpers.d.ts → utils.d.ts} +7 -5
- package/utils.js +157 -0
- package/utils.js.map +1 -0
- package/helpers.js +0 -380
- package/helpers.js.map +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type PluginOptions } from '@zenstackhq/sdk';
|
|
2
|
+
import { Project } from 'ts-morph';
|
|
3
|
+
import { SupportedClientHelpers } from '../utils';
|
|
4
|
+
export declare function generateClientTypingForModel(project: Project, generateClientHelpers: SupportedClientHelpers[], model: string, options: PluginOptions, generateOperations: Array<{
|
|
5
|
+
name: string;
|
|
6
|
+
baseType: string;
|
|
7
|
+
}>, version: string, outDir: string): void;
|
|
8
|
+
export declare function createClientHelperEntries(project: Project, outputDir: string, generateClientHelpers: SupportedClientHelpers[], models: string[], version: string): void;
|
|
9
|
+
/**
|
|
10
|
+
* Given a model and Prisma operation, returns related TS types.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getPrismaOperationTypes(model: string, operation: string): {
|
|
13
|
+
genericBase: string;
|
|
14
|
+
argsType: string;
|
|
15
|
+
resultType: string;
|
|
16
|
+
argsOptional: boolean;
|
|
17
|
+
};
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.generateClientTypingForModel = generateClientTypingForModel;
|
|
30
|
+
exports.createClientHelperEntries = createClientHelperEntries;
|
|
31
|
+
exports.getPrismaOperationTypes = getPrismaOperationTypes;
|
|
32
|
+
const sdk_1 = require("@zenstackhq/sdk");
|
|
33
|
+
const prisma_1 = require("@zenstackhq/sdk/prisma");
|
|
34
|
+
const fs_1 = __importDefault(require("fs"));
|
|
35
|
+
const lower_case_first_1 = require("lower-case-first");
|
|
36
|
+
const path_1 = __importDefault(require("path"));
|
|
37
|
+
const ts_morph_1 = require("ts-morph");
|
|
38
|
+
const upper_case_first_1 = require("upper-case-first");
|
|
39
|
+
const __1 = require("..");
|
|
40
|
+
const NextHelpers = __importStar(require("./next"));
|
|
41
|
+
const NuxtHelpers = __importStar(require("./nuxt"));
|
|
42
|
+
const ReactHelpers = __importStar(require("./react"));
|
|
43
|
+
const helpers = {
|
|
44
|
+
react: ReactHelpers,
|
|
45
|
+
next: NextHelpers,
|
|
46
|
+
nuxt: NuxtHelpers,
|
|
47
|
+
};
|
|
48
|
+
function generateClientTypingForModel(project, generateClientHelpers, model, options, generateOperations, version, outDir) {
|
|
49
|
+
var _a;
|
|
50
|
+
for (const clientType of generateClientHelpers) {
|
|
51
|
+
const sf = project.createSourceFile(path_1.default.resolve(outDir, `client/${(0, upper_case_first_1.upperCaseFirst)(model)}.${clientType}.type.ts`), undefined, {
|
|
52
|
+
overwrite: true,
|
|
53
|
+
});
|
|
54
|
+
sf.addStatements([`/* eslint-disable */`]);
|
|
55
|
+
generateImports(clientType, sf, options, version);
|
|
56
|
+
// generate a `ClientType` interface that contains typing for query/mutation operations
|
|
57
|
+
const routerTypingStructure = {
|
|
58
|
+
kind: ts_morph_1.StructureKind.Interface,
|
|
59
|
+
name: 'ClientType',
|
|
60
|
+
isExported: true,
|
|
61
|
+
typeParameters: ['AppRouter extends AnyRouter', `Context = AppRouter['_def']['_config']['$types']['ctx']`],
|
|
62
|
+
properties: [],
|
|
63
|
+
};
|
|
64
|
+
for (const { name: generateOpName, baseType: baseOpType } of generateOperations) {
|
|
65
|
+
(_a = routerTypingStructure.properties) === null || _a === void 0 ? void 0 : _a.push({
|
|
66
|
+
kind: ts_morph_1.StructureKind.PropertySignature,
|
|
67
|
+
name: generateOpName,
|
|
68
|
+
type: (writer) => {
|
|
69
|
+
helpers[clientType].generateProcedureTyping(writer, generateOpName, model, baseOpType, version);
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
sf.addInterface(routerTypingStructure);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function generateImports(clientHelperType, sourceFile, options, version) {
|
|
77
|
+
const importingDir = sourceFile.getDirectoryPath();
|
|
78
|
+
const prismaImport = (0, prisma_1.getPrismaClientImportSpec)(importingDir, options);
|
|
79
|
+
sourceFile.addStatements([
|
|
80
|
+
`import type { Prisma } from '${prismaImport}';`,
|
|
81
|
+
`import type { TRPCClientErrorLike, TRPCRequestOptions } from '@trpc/client';`,
|
|
82
|
+
]);
|
|
83
|
+
// generate framework-specific imports
|
|
84
|
+
helpers[clientHelperType].generateRouterTypingImports(sourceFile, version);
|
|
85
|
+
}
|
|
86
|
+
function createClientHelperEntries(project, outputDir, generateClientHelpers, models, version) {
|
|
87
|
+
// generate utils
|
|
88
|
+
const content = fs_1.default.readFileSync(path_1.default.join(__dirname, `../res/client/${version}/utils.ts`), 'utf-8');
|
|
89
|
+
project.createSourceFile(path_1.default.resolve(outputDir, 'client', `utils.ts`), content, {
|
|
90
|
+
overwrite: true,
|
|
91
|
+
});
|
|
92
|
+
for (const client of generateClientHelpers) {
|
|
93
|
+
createClientHelperEntryForType(project, client, models, version, outputDir);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function createClientHelperEntryForType(project, clientHelperType, models, version, outputDir) {
|
|
97
|
+
const content = fs_1.default.readFileSync(path_1.default.join(__dirname, `../res/client/${version}/${clientHelperType}.ts`), 'utf-8');
|
|
98
|
+
const sf = project.createSourceFile(path_1.default.resolve(outputDir, 'client', `${clientHelperType}.ts`), content, {
|
|
99
|
+
overwrite: true,
|
|
100
|
+
});
|
|
101
|
+
sf.addInterface({
|
|
102
|
+
name: 'ClientType',
|
|
103
|
+
typeParameters: ['AppRouter extends AnyRouter'],
|
|
104
|
+
isExported: true,
|
|
105
|
+
properties: models.map((model) => {
|
|
106
|
+
sf.addImportDeclaration({
|
|
107
|
+
namedImports: [{ name: 'ClientType', alias: `${(0, upper_case_first_1.upperCaseFirst)(model)}ClientType` }],
|
|
108
|
+
moduleSpecifier: `./${(0, upper_case_first_1.upperCaseFirst)(model)}.${clientHelperType}.type`,
|
|
109
|
+
});
|
|
110
|
+
return {
|
|
111
|
+
name: (0, lower_case_first_1.lowerCaseFirst)(model),
|
|
112
|
+
type: `${(0, upper_case_first_1.upperCaseFirst)(model)}ClientType<AppRouter>`,
|
|
113
|
+
};
|
|
114
|
+
}),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Given a model and Prisma operation, returns related TS types.
|
|
119
|
+
*/
|
|
120
|
+
function getPrismaOperationTypes(model, operation) {
|
|
121
|
+
// TODO: find a way to derive from Prisma Client API's generic types
|
|
122
|
+
// instead of duplicating them
|
|
123
|
+
const capModel = (0, upper_case_first_1.upperCaseFirst)(model);
|
|
124
|
+
const capOperation = (0, upper_case_first_1.upperCaseFirst)(operation);
|
|
125
|
+
let genericBase = `Prisma.${capModel}${capOperation}Args`;
|
|
126
|
+
const getPayload = `Prisma.${capModel}GetPayload<T>`;
|
|
127
|
+
const selectSubset = `Prisma.SelectSubset<T, ${genericBase}>`;
|
|
128
|
+
let argsType;
|
|
129
|
+
let resultType;
|
|
130
|
+
const argsOptional = ['findMany', 'findFirst', 'findFirstOrThrow', 'createMany', 'deleteMany', 'count'].includes(operation);
|
|
131
|
+
switch (operation) {
|
|
132
|
+
case 'findUnique':
|
|
133
|
+
case 'findFirst':
|
|
134
|
+
argsType = selectSubset;
|
|
135
|
+
resultType = `${getPayload} | null`;
|
|
136
|
+
break;
|
|
137
|
+
case 'findUniqueOrThrow':
|
|
138
|
+
case 'findFirstOrThrow':
|
|
139
|
+
argsType = selectSubset;
|
|
140
|
+
resultType = getPayload;
|
|
141
|
+
break;
|
|
142
|
+
case 'findMany':
|
|
143
|
+
argsType = selectSubset;
|
|
144
|
+
resultType = `Array<${getPayload}>`;
|
|
145
|
+
break;
|
|
146
|
+
case 'create':
|
|
147
|
+
argsType = selectSubset;
|
|
148
|
+
resultType = getPayload;
|
|
149
|
+
break;
|
|
150
|
+
case 'createMany':
|
|
151
|
+
argsType = selectSubset;
|
|
152
|
+
resultType = `Prisma.BatchPayload`;
|
|
153
|
+
break;
|
|
154
|
+
case 'update':
|
|
155
|
+
argsType = selectSubset;
|
|
156
|
+
resultType = getPayload;
|
|
157
|
+
break;
|
|
158
|
+
case 'updateMany':
|
|
159
|
+
argsType = selectSubset;
|
|
160
|
+
resultType = `Prisma.BatchPayload`;
|
|
161
|
+
break;
|
|
162
|
+
case 'upsert':
|
|
163
|
+
argsType = selectSubset;
|
|
164
|
+
resultType = getPayload;
|
|
165
|
+
break;
|
|
166
|
+
case 'delete':
|
|
167
|
+
argsType = selectSubset;
|
|
168
|
+
resultType = getPayload;
|
|
169
|
+
break;
|
|
170
|
+
case 'deleteMany':
|
|
171
|
+
argsType = selectSubset;
|
|
172
|
+
resultType = `Prisma.BatchPayload`;
|
|
173
|
+
break;
|
|
174
|
+
case 'count':
|
|
175
|
+
argsType = `Prisma.Subset<T, ${genericBase}>`;
|
|
176
|
+
resultType = `'select' extends keyof T
|
|
177
|
+
? T['select'] extends true
|
|
178
|
+
? number
|
|
179
|
+
: Prisma.GetScalarType<T['select'], Prisma.${capModel}CountAggregateOutputType>
|
|
180
|
+
: number`;
|
|
181
|
+
break;
|
|
182
|
+
case 'aggregate':
|
|
183
|
+
argsType = `Prisma.Subset<T, ${genericBase}>`;
|
|
184
|
+
resultType = `Prisma.Get${capModel}AggregateType<T>`;
|
|
185
|
+
break;
|
|
186
|
+
case 'groupBy':
|
|
187
|
+
genericBase = `Prisma.${capModel}GroupByArgs,
|
|
188
|
+
HasSelectOrTake extends Prisma.Or<
|
|
189
|
+
Prisma.Extends<'skip', Prisma.Keys<T>>,
|
|
190
|
+
Prisma.Extends<'take', Prisma.Keys<T>>
|
|
191
|
+
>,
|
|
192
|
+
OrderByArg extends Prisma.True extends HasSelectOrTake
|
|
193
|
+
? { orderBy: Prisma.${capModel}GroupByArgs['orderBy'] }
|
|
194
|
+
: { orderBy?: Prisma.${capModel}GroupByArgs['orderBy'] },
|
|
195
|
+
OrderFields extends Prisma.ExcludeUnderscoreKeys<Prisma.Keys<Prisma.MaybeTupleToUnion<T['orderBy']>>>,
|
|
196
|
+
ByFields extends Prisma.MaybeTupleToUnion<T['by']>,
|
|
197
|
+
ByValid extends Prisma.Has<ByFields, OrderFields>,
|
|
198
|
+
HavingFields extends Prisma.GetHavingFields<T['having']>,
|
|
199
|
+
HavingValid extends Prisma.Has<ByFields, HavingFields>,
|
|
200
|
+
ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False,
|
|
201
|
+
InputErrors extends ByEmpty extends Prisma.True
|
|
202
|
+
? \`Error: "by" must not be empty.\`
|
|
203
|
+
: HavingValid extends Prisma.False
|
|
204
|
+
? {
|
|
205
|
+
[P in HavingFields]: P extends ByFields
|
|
206
|
+
? never
|
|
207
|
+
: P extends string
|
|
208
|
+
? \`Error: Field "\${P}" used in "having" needs to be provided in "by".\`
|
|
209
|
+
: [
|
|
210
|
+
Error,
|
|
211
|
+
'Field ',
|
|
212
|
+
P,
|
|
213
|
+
\` in "having" needs to be provided in "by"\`,
|
|
214
|
+
]
|
|
215
|
+
}[HavingFields]
|
|
216
|
+
: 'take' extends Prisma.Keys<T>
|
|
217
|
+
? 'orderBy' extends Prisma.Keys<T>
|
|
218
|
+
? ByValid extends Prisma.True
|
|
219
|
+
? {}
|
|
220
|
+
: {
|
|
221
|
+
[P in OrderFields]: P extends ByFields
|
|
222
|
+
? never
|
|
223
|
+
: \`Error: Field "\${P}" in "orderBy" needs to be provided in "by"\`
|
|
224
|
+
}[OrderFields]
|
|
225
|
+
: 'Error: If you provide "take", you also need to provide "orderBy"'
|
|
226
|
+
: 'skip' extends Prisma.Keys<T>
|
|
227
|
+
? 'orderBy' extends Prisma.Keys<T>
|
|
228
|
+
? ByValid extends Prisma.True
|
|
229
|
+
? {}
|
|
230
|
+
: {
|
|
231
|
+
[P in OrderFields]: P extends ByFields
|
|
232
|
+
? never
|
|
233
|
+
: \`Error: Field "\${P}" in "orderBy" needs to be provided in "by"\`
|
|
234
|
+
}[OrderFields]
|
|
235
|
+
: 'Error: If you provide "skip", you also need to provide "orderBy"'
|
|
236
|
+
: ByValid extends Prisma.True
|
|
237
|
+
? {}
|
|
238
|
+
: {
|
|
239
|
+
[P in OrderFields]: P extends ByFields
|
|
240
|
+
? never
|
|
241
|
+
: \`Error: Field "\${P}" in "orderBy" needs to be provided in "by"\`
|
|
242
|
+
}[OrderFields]
|
|
243
|
+
`;
|
|
244
|
+
argsType = `Prisma.SubsetIntersection<T, Prisma.${capModel}GroupByArgs, OrderByArg> & InputErrors`;
|
|
245
|
+
resultType = `{} extends InputErrors ? Prisma.Get${capModel}GroupByPayload<T> : InputErrors`;
|
|
246
|
+
break;
|
|
247
|
+
default:
|
|
248
|
+
throw new sdk_1.PluginError(__1.name, `Unsupported operation: "${operation}"`);
|
|
249
|
+
}
|
|
250
|
+
return { genericBase, argsType, resultType, argsOptional };
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client-helper/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { CodeBlockWriter, SourceFile } from 'ts-morph';
|
|
2
|
+
export declare function generateRouterTypingImports(sourceFile: SourceFile, version: string): void;
|
|
3
|
+
export declare function generateProcedureTyping(writer: CodeBlockWriter, opType: string, modelName: string, baseOpType: string, version: string): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRouterTypingImports = generateRouterTypingImports;
|
|
4
|
+
exports.generateProcedureTyping = generateProcedureTyping;
|
|
5
|
+
const react_1 = require("./react");
|
|
6
|
+
function generateRouterTypingImports(sourceFile, version) {
|
|
7
|
+
// next shares the same typing imports as react
|
|
8
|
+
(0, react_1.generateRouterTypingImports)(sourceFile, version);
|
|
9
|
+
}
|
|
10
|
+
function generateProcedureTyping(writer, opType, modelName, baseOpType, version) {
|
|
11
|
+
// next shares the same procedure typing as react
|
|
12
|
+
(0, react_1.generateProcedureTyping)(writer, opType, modelName, baseOpType, version);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=next.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/client-helper/next.ts"],"names":[],"mappings":";;AAMA,kEAGC;AAED,0DASC;AAnBD,mCAGiB;AAEjB,SAAgB,2BAA2B,CAAC,UAAsB,EAAE,OAAe;IAC/E,+CAA+C;IAC/C,IAAA,mCAAmC,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,uBAAuB,CACnC,MAAuB,EACvB,MAAc,EACd,SAAiB,EACjB,UAAkB,EAClB,OAAe;IAEf,iDAAiD;IACjD,IAAA,+BAA+B,EAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { CodeBlockWriter, SourceFile } from 'ts-morph';
|
|
2
|
+
export declare function generateRouterTypingImports(sourceFile: SourceFile, version: string): void;
|
|
3
|
+
export declare function generateProcedureTyping(writer: CodeBlockWriter, opType: string, modelName: string, baseOpType: string, _version: string): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRouterTypingImports = generateRouterTypingImports;
|
|
4
|
+
exports.generateProcedureTyping = generateProcedureTyping;
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const _1 = require(".");
|
|
7
|
+
function generateRouterTypingImports(sourceFile, version) {
|
|
8
|
+
sourceFile.addStatements([
|
|
9
|
+
`import type { MaybeRefOrGetter, UnwrapRef } from 'vue';`,
|
|
10
|
+
`import type { AsyncData, AsyncDataOptions } from 'nuxt/app';`,
|
|
11
|
+
`import type { KeysOf, PickFrom } from './utils';`,
|
|
12
|
+
]);
|
|
13
|
+
if (version === 'v10') {
|
|
14
|
+
sourceFile.addStatements([`import type { AnyRouter } from '@trpc/server';`]);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
sourceFile.addStatements([`import type { AnyTRPCRouter as AnyRouter } from '@trpc/server';`]);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function generateProcedureTyping(writer, opType, modelName, baseOpType, _version) {
|
|
21
|
+
const procType = (0, utils_1.getProcedureTypeByOpName)(baseOpType);
|
|
22
|
+
const { genericBase, argsType, argsOptional, resultType } = (0, _1.getPrismaOperationTypes)(modelName, opType);
|
|
23
|
+
const errorType = `TRPCClientErrorLike<AppRouter>`;
|
|
24
|
+
const inputOptional = argsOptional ? '?' : '';
|
|
25
|
+
writer.block(() => {
|
|
26
|
+
if (procType === 'query') {
|
|
27
|
+
writer.writeLine(`
|
|
28
|
+
query: <T extends ${genericBase}>(input${inputOptional}: ${argsType}) => Promise<${resultType}>;
|
|
29
|
+
useQuery: <T extends ${genericBase}, ResT = ${resultType}, DataE = ${errorType}, DataT = ResT, PickKeys extends KeysOf<DataT> = KeysOf<DataT>, DefaultT = null>(input${inputOptional}: MaybeRefOrGetter<${argsType}>, opts?: Omit<AsyncDataOptions<ResT, DataT, PickKeys, DefaultT>, 'watch'> & {
|
|
30
|
+
trpc?: TRPCRequestOptions;
|
|
31
|
+
queryKey?: string;
|
|
32
|
+
watch?: AsyncDataOptions<ResT, DataT, PickKeys, DefaultT>['watch'] | false;
|
|
33
|
+
}) => AsyncData<PickFrom<DataT, PickKeys> | DefaultT, DataE>;
|
|
34
|
+
useLazyQuery: <T extends ${genericBase}, ResT = ${resultType}, DataE = ${errorType}, DataT = ResT, PickKeys extends KeysOf<DataT> = KeysOf<DataT>, DefaultT = null>(input${inputOptional}: MaybeRefOrGetter<${argsType}>, opts?: Omit<AsyncDataOptions<ResT, DataT, PickKeys, DefaultT>, 'lazy' | 'watch'> & {
|
|
35
|
+
trpc?: TRPCRequestOptions;
|
|
36
|
+
queryKey?: string;
|
|
37
|
+
watch?: AsyncDataOptions<ResT, DataT, PickKeys, DefaultT>['watch'] | false;
|
|
38
|
+
}) => AsyncData<PickFrom<DataT, PickKeys> | DefaultT, DataE>;
|
|
39
|
+
`);
|
|
40
|
+
}
|
|
41
|
+
else if (procType === 'mutation') {
|
|
42
|
+
writer.writeLine(`
|
|
43
|
+
mutate: <T extends ${genericBase}>(input${inputOptional}: ${argsType}) => Promise<${resultType}>;
|
|
44
|
+
useMutation: <T extends ${genericBase}, ResT = ${resultType}, DataE = ${errorType}, DataT = ResT, PickKeys extends KeysOf<DataT> = KeysOf<DataT>, DefaultT = null>(opts?: Omit<AsyncDataOptions<ResT, DataT, PickKeys, DefaultT>, 'lazy'> & {
|
|
45
|
+
trpc?: TRPCRequestOptions;
|
|
46
|
+
}) => AsyncData<PickFrom<DataT, PickKeys> | DefaultT, DataE> & {
|
|
47
|
+
mutate: <T extends ${genericBase}, ResT = ${resultType}, DataE = ${errorType}, DataT = ResT, PickKeys extends KeysOf<DataT> = KeysOf<DataT>>(input${inputOptional}: ${argsType}) => Promise<UnwrapRef<AsyncData<PickFrom<DataT, PickKeys> | null, DataE>['data']>>;
|
|
48
|
+
};
|
|
49
|
+
`);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=nuxt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nuxt.js","sourceRoot":"","sources":["../../src/client-helper/nuxt.ts"],"names":[],"mappings":";;AAIA,kEAYC;AAED,0DAsCC;AAvDD,oCAAoD;AACpD,wBAA4C;AAE5C,SAAgB,2BAA2B,CAAC,UAAsB,EAAE,OAAe;IAC/E,UAAU,CAAC,aAAa,CAAC;QACrB,yDAAyD;QACzD,8DAA8D;QAC9D,kDAAkD;KACrD,CAAC,CAAC;IAEH,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACpB,UAAU,CAAC,aAAa,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACJ,UAAU,CAAC,aAAa,CAAC,CAAC,iEAAiE,CAAC,CAAC,CAAC;IAClG,CAAC;AACL,CAAC;AAED,SAAgB,uBAAuB,CACnC,MAAuB,EACvB,MAAc,EACd,SAAiB,EACjB,UAAkB,EAClB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;IACtD,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAA,0BAAuB,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACvG,MAAM,SAAS,GAAG,gCAAgC,CAAC;IACnD,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QACd,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,SAAS,CAAC;oCACO,WAAW,UAAU,aAAa,KAAK,QAAQ,gBAAgB,UAAU;uCACtE,WAAW,YAAY,UAAU,aAAa,SAAS,yFAAyF,aAAa,sBAAsB,QAAQ;;;;;2CAKvL,WAAW,YAAY,UAAU,aAAa,SAAS,yFAAyF,aAAa,sBAAsB,QAAQ;;;;;iBAKrN,CAAC,CAAC;QACX,CAAC;aAAM,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,CAAC,SAAS,CAAC;qCACQ,WAAW,UAAU,aAAa,KAAK,QAAQ,gBAAgB,UAAU;0CACpE,WAAW,YAAY,UAAU,aAAa,SAAS;;;yCAGxD,WAAW,YAAY,UAAU,aAAa,SAAS,wEAAwE,aAAa,KAAK,QAAQ;;iBAEjL,CAAC,CAAC;QACX,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { CodeBlockWriter, SourceFile } from 'ts-morph';
|
|
2
|
+
export declare function generateRouterTypingImports(sourceFile: SourceFile, version: string): void;
|
|
3
|
+
export declare function generateProcedureTyping(writer: CodeBlockWriter, opType: string, modelName: string, baseOpType: string, version: string): void;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRouterTypingImports = generateRouterTypingImports;
|
|
4
|
+
exports.generateProcedureTyping = generateProcedureTyping;
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const _1 = require(".");
|
|
7
|
+
function generateRouterTypingImports(sourceFile, version) {
|
|
8
|
+
sourceFile.addStatements([
|
|
9
|
+
`import type { UseTRPCMutationOptions, UseTRPCMutationResult, UseTRPCQueryOptions, UseTRPCQueryResult, UseTRPCInfiniteQueryOptions, UseTRPCInfiniteQueryResult } from '@trpc/react-query/shared';`,
|
|
10
|
+
]);
|
|
11
|
+
if (version === 'v10') {
|
|
12
|
+
sourceFile.addStatements([`import type { AnyRouter } from '@trpc/server';`]);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
sourceFile.addStatements([
|
|
16
|
+
`import type { AnyTRPCRouter as AnyRouter } from '@trpc/server';`,
|
|
17
|
+
`import type { UseTRPCSuspenseQueryOptions, UseTRPCSuspenseQueryResult, UseTRPCSuspenseInfiniteQueryOptions, UseTRPCSuspenseInfiniteQueryResult } from '@trpc/react-query/shared';`,
|
|
18
|
+
]);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function generateProcedureTyping(writer, opType, modelName, baseOpType, version) {
|
|
22
|
+
const procType = (0, utils_1.getProcedureTypeByOpName)(baseOpType);
|
|
23
|
+
const { genericBase, argsType, argsOptional, resultType } = (0, _1.getPrismaOperationTypes)(modelName, opType);
|
|
24
|
+
const errorType = `TRPCClientErrorLike<AppRouter>`;
|
|
25
|
+
const inputOptional = argsOptional ? '?' : '';
|
|
26
|
+
writer.block(() => {
|
|
27
|
+
if (procType === 'query') {
|
|
28
|
+
if (version === 'v10') {
|
|
29
|
+
writer.writeLine(`
|
|
30
|
+
useQuery: <T extends ${genericBase}, TData = ${resultType}>(
|
|
31
|
+
input${inputOptional}: ${argsType},
|
|
32
|
+
opts?: UseTRPCQueryOptions<string, T, ${resultType}, TData, Error>
|
|
33
|
+
) => UseTRPCQueryResult<
|
|
34
|
+
TData,
|
|
35
|
+
${errorType}
|
|
36
|
+
>;
|
|
37
|
+
useInfiniteQuery: <T extends ${genericBase}>(
|
|
38
|
+
input${inputOptional}: Omit<${argsType}, 'cursor'>,
|
|
39
|
+
opts?: UseTRPCInfiniteQueryOptions<string, T, ${resultType}, Error>
|
|
40
|
+
) => UseTRPCInfiniteQueryResult<
|
|
41
|
+
${resultType},
|
|
42
|
+
${errorType}
|
|
43
|
+
>;
|
|
44
|
+
`);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
writer.writeLine(`
|
|
48
|
+
useQuery: <T extends ${genericBase}, TData = ${resultType}>(
|
|
49
|
+
input${inputOptional}: ${argsType},
|
|
50
|
+
opts?: UseTRPCQueryOptions<${resultType}, TData, Error>
|
|
51
|
+
) => UseTRPCQueryResult<
|
|
52
|
+
TData,
|
|
53
|
+
${errorType}
|
|
54
|
+
>;
|
|
55
|
+
useInfiniteQuery: <T extends ${genericBase}>(
|
|
56
|
+
input${inputOptional}: Omit<${argsType}, 'cursor'>,
|
|
57
|
+
opts?: UseTRPCInfiniteQueryOptions<T, ${resultType}, Error>
|
|
58
|
+
) => UseTRPCInfiniteQueryResult<
|
|
59
|
+
${resultType},
|
|
60
|
+
${errorType},
|
|
61
|
+
T
|
|
62
|
+
>;
|
|
63
|
+
useSuspenseQuery: <T extends ${genericBase}, TData = ${resultType}>(
|
|
64
|
+
input${inputOptional}: ${argsType},
|
|
65
|
+
opts?: UseTRPCSuspenseQueryOptions<${resultType}, TData, Error>
|
|
66
|
+
) => UseTRPCSuspenseQueryResult<TData, ${errorType}>;
|
|
67
|
+
useSuspenseInfiniteQuery: <T extends ${genericBase}>(
|
|
68
|
+
input${inputOptional}: Omit<${argsType}, 'cursor'>,
|
|
69
|
+
opts?: UseTRPCSuspenseInfiniteQueryOptions<T, ${resultType}, Error>
|
|
70
|
+
) => UseTRPCSuspenseInfiniteQueryResult<${resultType}, ${errorType}, T>;
|
|
71
|
+
`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (procType === 'mutation') {
|
|
75
|
+
writer.writeLine(`
|
|
76
|
+
useMutation: <T extends ${genericBase}>(opts?: UseTRPCMutationOptions<
|
|
77
|
+
${genericBase},
|
|
78
|
+
${errorType},
|
|
79
|
+
${resultType},
|
|
80
|
+
Context
|
|
81
|
+
>) =>
|
|
82
|
+
Omit<UseTRPCMutationResult<${resultType}, ${errorType}, ${argsType}, Context>, 'mutateAsync'> & {
|
|
83
|
+
mutateAsync:
|
|
84
|
+
<T extends ${genericBase}>(variables${inputOptional}: T, opts?: UseTRPCMutationOptions<T, ${errorType}, ${resultType}, Context>) => Promise<${resultType}>
|
|
85
|
+
};
|
|
86
|
+
`);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/client-helper/react.ts"],"names":[],"mappings":";;AAIA,kEAYC;AAED,0DAyEC;AA1FD,oCAAoD;AACpD,wBAA4C;AAE5C,SAAgB,2BAA2B,CAAC,UAAsB,EAAE,OAAe;IAC/E,UAAU,CAAC,aAAa,CAAC;QACrB,kMAAkM;KACrM,CAAC,CAAC;IACH,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACpB,UAAU,CAAC,aAAa,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACJ,UAAU,CAAC,aAAa,CAAC;YACrB,iEAAiE;YACjE,mLAAmL;SACtL,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,SAAgB,uBAAuB,CACnC,MAAuB,EACvB,MAAc,EACd,SAAiB,EACjB,UAAkB,EAClB,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;IACtD,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAA,0BAAuB,EAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACvG,MAAM,SAAS,GAAG,gCAAgC,CAAC;IACnD,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QACd,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;gBACpB,MAAM,CAAC,SAAS,CAAC;uCACM,WAAW,aAAa,UAAU;2BAC9C,aAAa,KAAK,QAAQ;4DACO,UAAU;;;0BAG5C,SAAS;;+CAEY,WAAW;2BAC/B,aAAa,UAAU,QAAQ;oEACU,UAAU;;0BAEpD,UAAU;0BACV,SAAS;;iBAElB,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,SAAS,CAAC;uCACM,WAAW,aAAa,UAAU;2BAC9C,aAAa,KAAK,QAAQ;iDACJ,UAAU;;;0BAGjC,SAAS;;+CAEY,WAAW;2BAC/B,aAAa,UAAU,QAAQ;4DACE,UAAU;;0BAE5C,UAAU;0BACV,SAAS;;;+CAGY,WAAW,aAAa,UAAU;2BACtD,aAAa,KAAK,QAAQ;yDACI,UAAU;6DACN,SAAS;uDACf,WAAW;2BACvC,aAAa,UAAU,QAAQ;oEACU,UAAU;8DAChB,UAAU,KAAK,SAAS;iBACrE,CAAC,CAAC;YACP,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,CAAC,SAAS,CAAC;0CACa,WAAW;sBAC/B,WAAW;sBACX,SAAS;sBACT,UAAU;;;6CAGa,UAAU,KAAK,SAAS,KAAK,QAAQ;;qCAE7C,WAAW,cAAc,aAAa,yCAAyC,SAAS,KAAK,UAAU,0BAA0B,UAAU;;iBAE/J,CAAC,CAAC;QACX,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/generator.js
CHANGED
|
@@ -27,14 +27,13 @@ exports.generate = generate;
|
|
|
27
27
|
const sdk_1 = require("@zenstackhq/sdk");
|
|
28
28
|
const ast_1 = require("@zenstackhq/sdk/ast");
|
|
29
29
|
const prisma_1 = require("@zenstackhq/sdk/prisma");
|
|
30
|
-
const fs_1 = __importDefault(require("fs"));
|
|
31
30
|
const lower_case_first_1 = require("lower-case-first");
|
|
32
31
|
const path_1 = __importDefault(require("path"));
|
|
33
|
-
const ts_morph_1 = require("ts-morph");
|
|
34
32
|
const upper_case_first_1 = require("upper-case-first");
|
|
35
33
|
const _1 = require(".");
|
|
36
|
-
const
|
|
34
|
+
const client_helper_1 = require("./client-helper");
|
|
37
35
|
const project_1 = require("./project");
|
|
36
|
+
const utils_1 = require("./utils");
|
|
38
37
|
function generate(model, options, dmmf) {
|
|
39
38
|
return __awaiter(this, void 0, void 0, function* () {
|
|
40
39
|
var _a;
|
|
@@ -44,8 +43,9 @@ function generate(model, options, dmmf) {
|
|
|
44
43
|
const generateModelActions = (0, sdk_1.parseOptionAsStrings)(options, 'generateModelActions', _1.name);
|
|
45
44
|
// resolve "generateClientHelpers" option
|
|
46
45
|
const generateClientHelpers = (0, sdk_1.parseOptionAsStrings)(options, 'generateClientHelpers', _1.name);
|
|
47
|
-
if (generateClientHelpers &&
|
|
48
|
-
|
|
46
|
+
if (generateClientHelpers &&
|
|
47
|
+
!generateClientHelpers.every((v) => utils_1.AllSupportedClientHelpers.includes(v))) {
|
|
48
|
+
throw new sdk_1.PluginError(_1.name, `Option "generateClientHelpers" only supports the following values: ${utils_1.AllSupportedClientHelpers.map((n) => '"' + n + '"').join(', ')}.`);
|
|
49
49
|
}
|
|
50
50
|
if (options.zodSchemasImport && typeof options.zodSchemasImport !== 'string') {
|
|
51
51
|
throw new sdk_1.PluginError(_1.name, `Option "zodSchemasImport" must be a string`);
|
|
@@ -76,7 +76,7 @@ function generate(model, options, dmmf) {
|
|
|
76
76
|
// TODO: remove this legacy code that deals with "@Gen.hide" comment syntax inherited
|
|
77
77
|
// from original code
|
|
78
78
|
const hiddenModels = [];
|
|
79
|
-
(0,
|
|
79
|
+
(0, utils_1.resolveModelsComments)(prismaClientDmmf.datamodel.models, hiddenModels);
|
|
80
80
|
const zodSchemasImport = (_a = options.zodSchemasImport) !== null && _a !== void 0 ? _a : '@zenstackhq/runtime/zod';
|
|
81
81
|
createAppRouter(outDir, modelOperations, hiddenModels, generateModelActions, generateClientHelpers, model, zodSchemasImport, options, version);
|
|
82
82
|
createHelper(outDir);
|
|
@@ -191,47 +191,10 @@ function createAppRouter(outDir, modelOperations, hiddenModels, generateModelAct
|
|
|
191
191
|
writer.write(');');
|
|
192
192
|
});
|
|
193
193
|
if (generateClientHelpers) {
|
|
194
|
-
|
|
195
|
-
name: 'ClientType',
|
|
196
|
-
typeParameters: ['AppRouter extends AnyRouter'],
|
|
197
|
-
isExported: true,
|
|
198
|
-
properties: filteredModelOperations.map(({ model }) => {
|
|
199
|
-
appRouter.addImportDeclaration({
|
|
200
|
-
namedImports: [{ name: 'ClientType', alias: `${(0, upper_case_first_1.upperCaseFirst)(model)}ClientType` }],
|
|
201
|
-
moduleSpecifier: `./${model}.router`,
|
|
202
|
-
});
|
|
203
|
-
return {
|
|
204
|
-
name: (0, lower_case_first_1.lowerCaseFirst)(model),
|
|
205
|
-
type: `${(0, upper_case_first_1.upperCaseFirst)(model)}ClientType<AppRouter>`,
|
|
206
|
-
};
|
|
207
|
-
}),
|
|
208
|
-
});
|
|
209
|
-
createClientHelpers(outDir, generateClientHelpers, version);
|
|
194
|
+
(0, client_helper_1.createClientHelperEntries)(project_1.project, outDir, generateClientHelpers, filteredModelOperations.map(({ model }) => model), version);
|
|
210
195
|
}
|
|
211
196
|
appRouter.formatText();
|
|
212
197
|
}
|
|
213
|
-
function createClientHelpers(outputDir, generateClientHelpers, version) {
|
|
214
|
-
const utils = project_1.project.createSourceFile(path_1.default.resolve(outputDir, 'client', `utils.ts`), undefined, {
|
|
215
|
-
overwrite: true,
|
|
216
|
-
});
|
|
217
|
-
utils.replaceWithText(fs_1.default.readFileSync(path_1.default.join(__dirname, `./res/client/${version}/utils.ts`), 'utf-8'));
|
|
218
|
-
for (const client of generateClientHelpers) {
|
|
219
|
-
switch (client) {
|
|
220
|
-
case 'react': {
|
|
221
|
-
const content = fs_1.default.readFileSync(path_1.default.join(__dirname, `./res/client/${version}/react.ts`), 'utf-8');
|
|
222
|
-
project_1.project.createSourceFile(path_1.default.resolve(outputDir, 'client', 'react.ts'), content, {
|
|
223
|
-
overwrite: true,
|
|
224
|
-
});
|
|
225
|
-
break;
|
|
226
|
-
}
|
|
227
|
-
case 'next': {
|
|
228
|
-
const content = fs_1.default.readFileSync(path_1.default.join(__dirname, `./res/client/${version}/next.ts`), 'utf-8');
|
|
229
|
-
project_1.project.createSourceFile(path_1.default.resolve(outputDir, 'client', 'next.ts'), content, { overwrite: true });
|
|
230
|
-
break;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
198
|
function generateModelCreateRouter(project, model, operations, outputDir, generateModelActions, generateClientHelpers, zodSchemasImport, options, zmodel, version) {
|
|
236
199
|
const modelRouter = project.createSourceFile(path_1.default.resolve(outputDir, 'routers', `${model}.router.ts`), undefined, {
|
|
237
200
|
overwrite: true,
|
|
@@ -266,13 +229,9 @@ function generateModelCreateRouter(project, model, operations, outputDir, genera
|
|
|
266
229
|
]);
|
|
267
230
|
}
|
|
268
231
|
// zod schema import
|
|
269
|
-
(0,
|
|
232
|
+
(0, utils_1.generateRouterSchemaImport)(modelRouter, zodSchemasImport);
|
|
270
233
|
// runtime helpers
|
|
271
|
-
(0,
|
|
272
|
-
// client helper imports
|
|
273
|
-
if (generateClientHelpers) {
|
|
274
|
-
(0, helpers_1.generateRouterTypingImports)(modelRouter, options, version);
|
|
275
|
-
}
|
|
234
|
+
(0, utils_1.generateHelperImport)(modelRouter);
|
|
276
235
|
const createRouterFunc = version === 'v10'
|
|
277
236
|
? modelRouter.addFunction({
|
|
278
237
|
name: 'createRouter<Config extends BaseConfig>',
|
|
@@ -288,33 +247,21 @@ function generateModelCreateRouter(project, model, operations, outputDir, genera
|
|
|
288
247
|
isExported: true,
|
|
289
248
|
isDefaultExport: true,
|
|
290
249
|
});
|
|
291
|
-
let routerTypingStructure = undefined;
|
|
292
|
-
if (generateClientHelpers) {
|
|
293
|
-
// generate an interface for precise Prisma-like typing for the router procedures
|
|
294
|
-
// which will be used to correct tRPC's typing on the client side
|
|
295
|
-
routerTypingStructure = {
|
|
296
|
-
kind: ts_morph_1.StructureKind.Interface,
|
|
297
|
-
name: 'ClientType',
|
|
298
|
-
isExported: true,
|
|
299
|
-
typeParameters: ['AppRouter extends AnyRouter', `Context = AppRouter['_def']['_config']['$types']['ctx']`],
|
|
300
|
-
properties: [],
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
250
|
const dataModel = zmodel.declarations.find((d) => (0, ast_1.isDataModel)(d) && d.name === model);
|
|
304
251
|
if (!dataModel) {
|
|
305
252
|
throw new Error(`Data model "${model}" not found`);
|
|
306
253
|
}
|
|
254
|
+
const generateOperations = [];
|
|
307
255
|
createRouterFunc.setBodyText((funcWriter) => {
|
|
308
256
|
funcWriter.write(`return ${version === 'v10' ? 'router' : 'createTRPCRouter'}(`);
|
|
309
257
|
funcWriter.block(() => {
|
|
310
|
-
var _a;
|
|
311
258
|
for (const [opType, opNameWithModel] of Object.entries(operations)) {
|
|
312
259
|
if ((0, sdk_1.isDelegateModel)(dataModel) && (opType.startsWith('create') || opType.startsWith('upsert'))) {
|
|
313
260
|
// delete models don't support create or upsert operations
|
|
314
261
|
continue;
|
|
315
262
|
}
|
|
316
263
|
const baseOpType = opType.replace('OrThrow', '');
|
|
317
|
-
const inputType = (0,
|
|
264
|
+
const inputType = (0, utils_1.getInputSchemaByOpName)(baseOpType, model);
|
|
318
265
|
const generateOpName = opType.replace(/One$/, '');
|
|
319
266
|
if (opNameWithModel &&
|
|
320
267
|
inputType &&
|
|
@@ -322,23 +269,15 @@ function generateModelCreateRouter(project, model, operations, outputDir, genera
|
|
|
322
269
|
if (generateOpName === 'createMany' && !(0, prisma_1.supportCreateMany)(zmodel)) {
|
|
323
270
|
continue;
|
|
324
271
|
}
|
|
325
|
-
(0,
|
|
326
|
-
|
|
327
|
-
(_a = routerTypingStructure.properties) === null || _a === void 0 ? void 0 : _a.push({
|
|
328
|
-
kind: ts_morph_1.StructureKind.PropertySignature,
|
|
329
|
-
name: generateOpName,
|
|
330
|
-
type: (writer) => {
|
|
331
|
-
(0, helpers_1.generateRouterTyping)(writer, generateOpName, model, baseOpType, version);
|
|
332
|
-
},
|
|
333
|
-
});
|
|
334
|
-
}
|
|
272
|
+
(0, utils_1.generateProcedure)(funcWriter, generateOpName, (0, upper_case_first_1.upperCaseFirst)(inputType), model, baseOpType);
|
|
273
|
+
generateOperations.push({ name: generateOpName, baseType: baseOpType });
|
|
335
274
|
}
|
|
336
275
|
}
|
|
337
276
|
});
|
|
338
277
|
funcWriter.write(');');
|
|
339
278
|
});
|
|
340
|
-
if (
|
|
341
|
-
|
|
279
|
+
if (generateClientHelpers) {
|
|
280
|
+
(0, client_helper_1.generateClientTypingForModel)(project, generateClientHelpers, model, options, generateOperations, version, outputDir);
|
|
342
281
|
}
|
|
343
282
|
modelRouter.formatText();
|
|
344
283
|
}
|