@zenstackhq/trpc 2.6.1 → 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/helpers.js DELETED
@@ -1,380 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getProcedureTypeByOpName = exports.getInputSchemaByOpName = void 0;
4
- exports.generateProcedure = generateProcedure;
5
- exports.generateRouterTyping = generateRouterTyping;
6
- exports.generateRouterTypingImports = generateRouterTypingImports;
7
- exports.generateRouterSchemaImport = generateRouterSchemaImport;
8
- exports.generateHelperImport = generateHelperImport;
9
- exports.resolveModelsComments = resolveModelsComments;
10
- const sdk_1 = require("@zenstackhq/sdk");
11
- const prisma_1 = require("@zenstackhq/sdk/prisma");
12
- const lower_case_first_1 = require("lower-case-first");
13
- const upper_case_first_1 = require("upper-case-first");
14
- const _1 = require(".");
15
- function generateProcedure(writer, opType, typeName, modelName, baseOpType) {
16
- const procType = (0, exports.getProcedureTypeByOpName)(baseOpType);
17
- const prismaMethod = opType.replace('One', '');
18
- if (procType === 'query') {
19
- // the cast "as any" is to circumvent a TS compiler misfired error in certain cases
20
- writer.write(`
21
- ${opType}: procedure.input(${typeName}).query(({ctx, input}) => checkRead(db(ctx).${(0, lower_case_first_1.lowerCaseFirst)(modelName)}.${prismaMethod}(input as any))),
22
- `);
23
- }
24
- else if (procType === 'mutation') {
25
- // the cast "as any" is to circumvent a TS compiler misfired error in certain cases
26
- writer.write(`
27
- ${opType}: procedure.input(${typeName}).mutation(async ({ctx, input}) => checkMutate(db(ctx).${(0, lower_case_first_1.lowerCaseFirst)(modelName)}.${prismaMethod}(input as any))),
28
- `);
29
- }
30
- }
31
- /**
32
- * Given a model and Prisma operation, returns related TS types.
33
- */
34
- function getPrismaOperationTypes(model, operation) {
35
- // TODO: find a way to derive from Prisma Client API's generic types
36
- // instead of duplicating them
37
- const capModel = (0, upper_case_first_1.upperCaseFirst)(model);
38
- const capOperation = (0, upper_case_first_1.upperCaseFirst)(operation);
39
- let genericBase = `Prisma.${capModel}${capOperation}Args`;
40
- const getPayload = `Prisma.${capModel}GetPayload<T>`;
41
- const selectSubset = `Prisma.SelectSubset<T, ${genericBase}>`;
42
- let argsType;
43
- let resultType;
44
- const argsOptional = ['findMany', 'findFirst', 'findFirstOrThrow', 'createMany', 'deleteMany', 'count'].includes(operation);
45
- switch (operation) {
46
- case 'findUnique':
47
- case 'findUniqueOrThrow':
48
- case 'findFirst':
49
- case 'findFirstOrThrow':
50
- argsType = selectSubset;
51
- resultType = getPayload;
52
- break;
53
- case 'findMany':
54
- argsType = selectSubset;
55
- resultType = `Array<${getPayload}>`;
56
- break;
57
- case 'create':
58
- argsType = selectSubset;
59
- resultType = getPayload;
60
- break;
61
- case 'createMany':
62
- argsType = selectSubset;
63
- resultType = `Prisma.BatchPayload`;
64
- break;
65
- case 'update':
66
- argsType = selectSubset;
67
- resultType = getPayload;
68
- break;
69
- case 'updateMany':
70
- argsType = selectSubset;
71
- resultType = `Prisma.BatchPayload`;
72
- break;
73
- case 'upsert':
74
- argsType = selectSubset;
75
- resultType = getPayload;
76
- break;
77
- case 'delete':
78
- argsType = selectSubset;
79
- resultType = getPayload;
80
- break;
81
- case 'deleteMany':
82
- argsType = selectSubset;
83
- resultType = `Prisma.BatchPayload`;
84
- break;
85
- case 'count':
86
- argsType = `Prisma.Subset<T, ${genericBase}>`;
87
- resultType = `'select' extends keyof T
88
- ? T['select'] extends true
89
- ? number
90
- : Prisma.GetScalarType<T['select'], Prisma.${capModel}CountAggregateOutputType>
91
- : number`;
92
- break;
93
- case 'aggregate':
94
- argsType = `Prisma.Subset<T, ${genericBase}>`;
95
- resultType = `Prisma.Get${capModel}AggregateType<T>`;
96
- break;
97
- case 'groupBy':
98
- genericBase = `Prisma.${capModel}GroupByArgs,
99
- HasSelectOrTake extends Prisma.Or<
100
- Prisma.Extends<'skip', Prisma.Keys<T>>,
101
- Prisma.Extends<'take', Prisma.Keys<T>>
102
- >,
103
- OrderByArg extends Prisma.True extends HasSelectOrTake
104
- ? { orderBy: Prisma.${capModel}GroupByArgs['orderBy'] }
105
- : { orderBy?: Prisma.${capModel}GroupByArgs['orderBy'] },
106
- OrderFields extends Prisma.ExcludeUnderscoreKeys<Prisma.Keys<Prisma.MaybeTupleToUnion<T['orderBy']>>>,
107
- ByFields extends Prisma.MaybeTupleToUnion<T['by']>,
108
- ByValid extends Prisma.Has<ByFields, OrderFields>,
109
- HavingFields extends Prisma.GetHavingFields<T['having']>,
110
- HavingValid extends Prisma.Has<ByFields, HavingFields>,
111
- ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False,
112
- InputErrors extends ByEmpty extends Prisma.True
113
- ? \`Error: "by" must not be empty.\`
114
- : HavingValid extends Prisma.False
115
- ? {
116
- [P in HavingFields]: P extends ByFields
117
- ? never
118
- : P extends string
119
- ? \`Error: Field "\${P}" used in "having" needs to be provided in "by".\`
120
- : [
121
- Error,
122
- 'Field ',
123
- P,
124
- \` in "having" needs to be provided in "by"\`,
125
- ]
126
- }[HavingFields]
127
- : 'take' extends Prisma.Keys<T>
128
- ? 'orderBy' extends Prisma.Keys<T>
129
- ? ByValid extends Prisma.True
130
- ? {}
131
- : {
132
- [P in OrderFields]: P extends ByFields
133
- ? never
134
- : \`Error: Field "\${P}" in "orderBy" needs to be provided in "by"\`
135
- }[OrderFields]
136
- : 'Error: If you provide "take", you also need to provide "orderBy"'
137
- : 'skip' extends Prisma.Keys<T>
138
- ? 'orderBy' extends Prisma.Keys<T>
139
- ? ByValid extends Prisma.True
140
- ? {}
141
- : {
142
- [P in OrderFields]: P extends ByFields
143
- ? never
144
- : \`Error: Field "\${P}" in "orderBy" needs to be provided in "by"\`
145
- }[OrderFields]
146
- : 'Error: If you provide "skip", you also need to provide "orderBy"'
147
- : ByValid extends Prisma.True
148
- ? {}
149
- : {
150
- [P in OrderFields]: P extends ByFields
151
- ? never
152
- : \`Error: Field "\${P}" in "orderBy" needs to be provided in "by"\`
153
- }[OrderFields]
154
- `;
155
- argsType = `Prisma.SubsetIntersection<T, Prisma.${capModel}GroupByArgs, OrderByArg> & InputErrors`;
156
- resultType = `{} extends InputErrors ? Prisma.Get${capModel}GroupByPayload<T> : InputErrors`;
157
- break;
158
- default:
159
- throw new sdk_1.PluginError(_1.name, `Unsupported operation: "${operation}"`);
160
- }
161
- return { genericBase, argsType, resultType, argsOptional };
162
- }
163
- /**
164
- * Generate precise Prisma-like typing for router procedures.
165
- */
166
- function generateRouterTyping(writer, opType, modelName, baseOpType, version) {
167
- const procType = (0, exports.getProcedureTypeByOpName)(baseOpType);
168
- const { genericBase, argsType, argsOptional, resultType } = getPrismaOperationTypes(modelName, opType);
169
- const errorType = `TRPCClientErrorLike<AppRouter>`;
170
- const inputOptional = argsOptional ? '?' : '';
171
- writer.block(() => {
172
- if (procType === 'query') {
173
- if (version === 'v10') {
174
- writer.writeLine(`
175
- useQuery: <T extends ${genericBase}, TData = ${resultType}>(
176
- input${inputOptional}: ${argsType},
177
- opts?: UseTRPCQueryOptions<string, T, ${resultType}, TData, Error>
178
- ) => UseTRPCQueryResult<
179
- TData,
180
- ${errorType}
181
- >;
182
- useInfiniteQuery: <T extends ${genericBase}>(
183
- input${inputOptional}: Omit<${argsType}, 'cursor'>,
184
- opts?: UseTRPCInfiniteQueryOptions<string, T, ${resultType}, Error>
185
- ) => UseTRPCInfiniteQueryResult<
186
- ${resultType},
187
- ${errorType}
188
- >;
189
- `);
190
- }
191
- else {
192
- writer.writeLine(`
193
- useQuery: <T extends ${genericBase}, TData = ${resultType}>(
194
- input${inputOptional}: ${argsType},
195
- opts?: UseTRPCQueryOptions<${resultType}, TData, Error>
196
- ) => UseTRPCQueryResult<
197
- TData,
198
- ${errorType}
199
- >;
200
- useInfiniteQuery: <T extends ${genericBase}>(
201
- input${inputOptional}: Omit<${argsType}, 'cursor'>,
202
- opts?: UseTRPCInfiniteQueryOptions<T, ${resultType}, Error>
203
- ) => UseTRPCInfiniteQueryResult<
204
- ${resultType},
205
- ${errorType},
206
- T
207
- >;
208
- useSuspenseQuery: <T extends ${genericBase}, TData = ${resultType}>(
209
- input${inputOptional}: ${argsType},
210
- opts?: UseTRPCSuspenseQueryOptions<${resultType}, TData, Error>
211
- ) => UseTRPCSuspenseQueryResult<TData, ${errorType}>;
212
- useSuspenseInfiniteQuery: <T extends ${genericBase}>(
213
- input${inputOptional}: Omit<${argsType}, 'cursor'>,
214
- opts?: UseTRPCSuspenseInfiniteQueryOptions<T, ${resultType}, Error>
215
- ) => UseTRPCSuspenseInfiniteQueryResult<${resultType}, ${errorType}, T>;
216
- `);
217
- }
218
- }
219
- else if (procType === 'mutation') {
220
- writer.writeLine(`
221
- useMutation: <T extends ${genericBase}>(opts?: UseTRPCMutationOptions<
222
- ${genericBase},
223
- ${errorType},
224
- ${resultType},
225
- Context
226
- >,) =>
227
- Omit<UseTRPCMutationResult<${resultType}, ${errorType}, ${argsType}, Context>, 'mutateAsync'> & {
228
- mutateAsync:
229
- <T extends ${genericBase}>(variables: T, opts?: UseTRPCMutationOptions<T, ${errorType}, ${resultType}, Context>) => Promise<${resultType}>
230
- };
231
- `);
232
- }
233
- });
234
- }
235
- function generateRouterTypingImports(sourceFile, options, version) {
236
- const importingDir = sourceFile.getDirectoryPath();
237
- const prismaImport = (0, prisma_1.getPrismaClientImportSpec)(importingDir, options);
238
- sourceFile.addStatements([
239
- `import type { Prisma } from '${prismaImport}';`,
240
- `import type { UseTRPCMutationOptions, UseTRPCMutationResult, UseTRPCQueryOptions, UseTRPCQueryResult, UseTRPCInfiniteQueryOptions, UseTRPCInfiniteQueryResult } from '@trpc/react-query/shared';`,
241
- `import type { TRPCClientErrorLike } from '@trpc/client';`,
242
- ]);
243
- if (version === 'v10') {
244
- sourceFile.addStatements([`import type { AnyRouter } from '@trpc/server';`]);
245
- }
246
- else {
247
- sourceFile.addStatements([
248
- `import type { AnyTRPCRouter as AnyRouter } from '@trpc/server';`,
249
- `import type { UseTRPCSuspenseQueryOptions, UseTRPCSuspenseQueryResult, UseTRPCSuspenseInfiniteQueryOptions, UseTRPCSuspenseInfiniteQueryResult } from '@trpc/react-query/shared';`,
250
- ]);
251
- }
252
- }
253
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
254
- function generateRouterSchemaImport(sourceFile, zodSchemasImport) {
255
- sourceFile.addStatements([
256
- `import * as _Schema from '${zodSchemasImport}/input';`,
257
- // temporary solution for dealing with the issue that Node.js wraps named exports under a `default`
258
- // key when importing from a CJS module
259
- `const $Schema: typeof _Schema = (_Schema as any).default ?? _Schema;`,
260
- ]);
261
- }
262
- function generateHelperImport(sourceFile) {
263
- sourceFile.addStatements(`import { checkRead, checkMutate } from '../helper';`);
264
- }
265
- const getInputSchemaByOpName = (opName, modelName) => {
266
- let inputType;
267
- const capModelName = (0, upper_case_first_1.upperCaseFirst)(modelName);
268
- switch (opName) {
269
- case 'findUnique':
270
- inputType = `$Schema.${capModelName}InputSchema.findUnique`;
271
- break;
272
- case 'findFirst':
273
- inputType = `$Schema.${capModelName}InputSchema.findFirst.optional()`;
274
- break;
275
- case 'findMany':
276
- inputType = `$Schema.${capModelName}InputSchema.findMany.optional()`;
277
- break;
278
- case 'findRaw':
279
- inputType = `$Schema.${capModelName}InputSchema.findRawObject`;
280
- break;
281
- case 'createOne':
282
- inputType = `$Schema.${capModelName}InputSchema.create`;
283
- break;
284
- case 'createMany':
285
- inputType = `$Schema.${capModelName}InputSchema.createMany.optional()`;
286
- break;
287
- case 'deleteOne':
288
- inputType = `$Schema.${capModelName}InputSchema.delete`;
289
- break;
290
- case 'updateOne':
291
- inputType = `$Schema.${capModelName}InputSchema.update`;
292
- break;
293
- case 'deleteMany':
294
- inputType = `$Schema.${capModelName}InputSchema.deleteMany.optional()`;
295
- break;
296
- case 'updateMany':
297
- inputType = `$Schema.${capModelName}InputSchema.updateMany`;
298
- break;
299
- case 'upsertOne':
300
- inputType = `$Schema.${capModelName}InputSchema.upsert`;
301
- break;
302
- case 'aggregate':
303
- inputType = `$Schema.${capModelName}InputSchema.aggregate`;
304
- break;
305
- case 'aggregateRaw':
306
- inputType = `$Schema.${capModelName}InputSchema.aggregateRawObject`;
307
- break;
308
- case 'groupBy':
309
- inputType = `$Schema.${capModelName}InputSchema.groupBy`;
310
- break;
311
- case 'count':
312
- inputType = `$Schema.${capModelName}InputSchema.count.optional()`;
313
- break;
314
- default:
315
- break;
316
- }
317
- return inputType;
318
- };
319
- exports.getInputSchemaByOpName = getInputSchemaByOpName;
320
- const getProcedureTypeByOpName = (opName) => {
321
- let procType;
322
- switch (opName) {
323
- case 'findUnique':
324
- case 'findFirst':
325
- case 'findMany':
326
- case 'findRaw':
327
- case 'aggregate':
328
- case 'aggregateRaw':
329
- case 'groupBy':
330
- case 'count':
331
- procType = 'query';
332
- break;
333
- case 'createOne':
334
- case 'createMany':
335
- case 'deleteOne':
336
- case 'updateOne':
337
- case 'deleteMany':
338
- case 'updateMany':
339
- case 'upsertOne':
340
- procType = 'mutation';
341
- break;
342
- default:
343
- console.log('getProcedureTypeByOpName: ', { opName });
344
- }
345
- return procType;
346
- };
347
- exports.getProcedureTypeByOpName = getProcedureTypeByOpName;
348
- function resolveModelsComments(models, hiddenModels) {
349
- var _a, _b, _c, _d, _e, _f;
350
- const modelAttributeRegex = /(@@Gen\.)+([A-z])+(\()+(.+)+(\))+/;
351
- const attributeNameRegex = /(?:\.)+([A-Za-z])+(?:\()+/;
352
- const attributeArgsRegex = /(?:\()+([A-Za-z])+:+(.+)+(?:\))+/;
353
- for (const model of models) {
354
- if (model.documentation) {
355
- const attribute = (_b = (_a = model.documentation) === null || _a === void 0 ? void 0 : _a.match(modelAttributeRegex)) === null || _b === void 0 ? void 0 : _b[0];
356
- const attributeName = (_d = (_c = attribute === null || attribute === void 0 ? void 0 : attribute.match(attributeNameRegex)) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.slice(1, -1);
357
- if (attributeName !== 'model')
358
- continue;
359
- const rawAttributeArgs = (_f = (_e = attribute === null || attribute === void 0 ? void 0 : attribute.match(attributeArgsRegex)) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.slice(1, -1);
360
- const parsedAttributeArgs = {};
361
- if (rawAttributeArgs) {
362
- const rawAttributeArgsParts = rawAttributeArgs
363
- .split(':')
364
- .map((it) => it.trim())
365
- .map((part) => (part.startsWith('[') ? part : part.split(',')))
366
- .flat()
367
- .map((it) => it.trim());
368
- for (let i = 0; i < rawAttributeArgsParts.length; i += 2) {
369
- const key = rawAttributeArgsParts[i];
370
- const value = rawAttributeArgsParts[i + 1];
371
- parsedAttributeArgs[key] = JSON.parse(value);
372
- }
373
- }
374
- if (parsedAttributeArgs.hide) {
375
- hiddenModels.push(model.name);
376
- }
377
- }
378
- }
379
- }
380
- //# sourceMappingURL=helpers.js.map
package/helpers.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}