prisma-generator-express 1.18.0 → 1.20.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.
Files changed (76) hide show
  1. package/README.md +399 -194
  2. package/dist/bin.d.ts +2 -0
  3. package/dist/bin.js +1 -1
  4. package/dist/bin.js.map +1 -1
  5. package/dist/client/encodeQueryParams.d.ts +1 -0
  6. package/dist/client/encodeQueryParams.js +33 -0
  7. package/dist/client/encodeQueryParams.js.map +1 -0
  8. package/dist/constants.d.ts +1 -0
  9. package/dist/copy/misc.d.ts +5 -0
  10. package/dist/copy/misc.js +52 -0
  11. package/dist/copy/misc.js.map +1 -0
  12. package/dist/generators/generateImportPrismaStatement.d.ts +3 -0
  13. package/dist/generators/generateImportPrismaStatement.js +55 -0
  14. package/dist/generators/generateImportPrismaStatement.js.map +1 -0
  15. package/dist/generators/generateQueryBuilderHelper.d.ts +2 -0
  16. package/dist/generators/generateQueryBuilderHelper.js +139 -0
  17. package/dist/generators/generateQueryBuilderHelper.js.map +1 -0
  18. package/dist/generators/generateRouter.d.ts +6 -0
  19. package/dist/generators/generateRouter.js +340 -0
  20. package/dist/generators/generateRouter.js.map +1 -0
  21. package/dist/generators/generateUnifiedDocs.d.ts +1 -0
  22. package/dist/generators/generateUnifiedDocs.js +171 -0
  23. package/dist/generators/generateUnifiedDocs.js.map +1 -0
  24. package/dist/generators/generateUnifiedHandler.d.ts +6 -0
  25. package/dist/generators/generateUnifiedHandler.js +444 -0
  26. package/dist/generators/generateUnifiedHandler.js.map +1 -0
  27. package/dist/generators/generateUnifiedScalarUI.d.ts +5 -0
  28. package/dist/generators/generateUnifiedScalarUI.js +1390 -0
  29. package/dist/generators/generateUnifiedScalarUI.js.map +1 -0
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.js +80 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/utils/copyFiles.d.ts +6 -0
  34. package/dist/utils/copyFiles.js +123 -21
  35. package/dist/utils/copyFiles.js.map +1 -1
  36. package/dist/utils/strings.d.ts +2 -0
  37. package/dist/utils/writeFileSafely.d.ts +10 -0
  38. package/dist/utils/writeFileSafely.js +86 -14
  39. package/dist/utils/writeFileSafely.js.map +1 -1
  40. package/package.json +59 -28
  41. package/src/bin.ts +1 -1
  42. package/src/client/encodeQueryParams.ts +56 -0
  43. package/src/copy/buildModelOpenApi.ts +1569 -0
  44. package/src/copy/misc.ts +21 -0
  45. package/src/copy/operationDefinitions.ts +96 -0
  46. package/src/copy/parseQueryParams.ts +36 -21
  47. package/src/copy/routeConfig.ts +68 -28
  48. package/src/generators/generateImportPrismaStatement.ts +78 -0
  49. package/src/generators/generateQueryBuilderHelper.ts +138 -0
  50. package/src/generators/generateRouter.ts +352 -0
  51. package/src/generators/generateUnifiedDocs.ts +168 -0
  52. package/src/generators/generateUnifiedHandler.ts +469 -0
  53. package/src/generators/generateUnifiedScalarUI.ts +1409 -0
  54. package/src/index.ts +100 -0
  55. package/src/utils/copyFiles.ts +123 -16
  56. package/src/utils/writeFileSafely.ts +79 -25
  57. package/dist/generator.js +0 -47
  58. package/dist/generator.js.map +0 -1
  59. package/dist/helpers/generateImportPrismaStatement.js +0 -25
  60. package/dist/helpers/generateImportPrismaStatement.js.map +0 -1
  61. package/dist/helpers/generateOperation.js +0 -471
  62. package/dist/helpers/generateOperation.js.map +0 -1
  63. package/dist/helpers/generateRouteFile.js +0 -210
  64. package/dist/helpers/generateRouteFile.js.map +0 -1
  65. package/dist/utils/formatFile.js +0 -26
  66. package/dist/utils/formatFile.js.map +0 -1
  67. package/src/copy/encodeQueryParams.spec.ts +0 -303
  68. package/src/copy/encodeQueryParams.ts +0 -44
  69. package/src/copy/misc.spec.ts +0 -62
  70. package/src/copy/parseQueryParams.spec.ts +0 -187
  71. package/src/copy/transformZod.spec.ts +0 -763
  72. package/src/generator.ts +0 -54
  73. package/src/helpers/generateImportPrismaStatement.ts +0 -38
  74. package/src/helpers/generateOperation.ts +0 -515
  75. package/src/helpers/generateRouteFile.ts +0 -213
  76. package/src/utils/formatFile.ts +0 -22
@@ -1,471 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OPERATION_CONFIGS = void 0;
4
- exports.generateOperationFunction = generateOperationFunction;
5
- const strings_1 = require("../utils/strings");
6
- exports.OPERATION_CONFIGS = [
7
- {
8
- operation: 'FindUnique',
9
- prismaMethod: 'findUnique',
10
- source: 'query',
11
- successStatus: 200,
12
- resultVar: 'data',
13
- exportInterface: true,
14
- hasPassToNext: true,
15
- importsModel: true,
16
- argsPartial: false,
17
- useCapitalizeForArgs: false,
18
- tsIgnoreCall: false,
19
- noCastInCall: false,
20
- wrapCount: false,
21
- useResLocalsValidator: false,
22
- importValidatorConfig: false,
23
- localsDataType: 'nullable',
24
- validatorLocalsType: 'ZodType',
25
- zodTypeGeneric: null,
26
- middlewareType: 'queryFull',
27
- },
28
- {
29
- operation: 'FindFirst',
30
- prismaMethod: 'findFirst',
31
- source: 'query',
32
- successStatus: 200,
33
- resultVar: 'data',
34
- exportInterface: true,
35
- hasPassToNext: true,
36
- importsModel: true,
37
- argsPartial: false,
38
- useCapitalizeForArgs: false,
39
- tsIgnoreCall: false,
40
- noCastInCall: false,
41
- wrapCount: false,
42
- useResLocalsValidator: false,
43
- importValidatorConfig: false,
44
- localsDataType: 'nullable',
45
- validatorLocalsType: 'ZodType',
46
- zodTypeGeneric: null,
47
- middlewareType: 'queryFull',
48
- },
49
- {
50
- operation: 'FindMany',
51
- prismaMethod: 'findMany',
52
- source: 'query',
53
- successStatus: 200,
54
- resultVar: 'data',
55
- exportInterface: true,
56
- hasPassToNext: true,
57
- importsModel: true,
58
- argsPartial: false,
59
- useCapitalizeForArgs: false,
60
- tsIgnoreCall: false,
61
- noCastInCall: false,
62
- wrapCount: false,
63
- useResLocalsValidator: false,
64
- importValidatorConfig: false,
65
- localsDataType: 'array',
66
- validatorLocalsType: 'ZodType',
67
- zodTypeGeneric: null,
68
- middlewareType: 'queryFull',
69
- },
70
- {
71
- operation: 'Create',
72
- prismaMethod: 'create',
73
- source: 'body',
74
- successStatus: 201,
75
- resultVar: 'data',
76
- exportInterface: false,
77
- hasPassToNext: false,
78
- importsModel: false,
79
- argsPartial: false,
80
- useCapitalizeForArgs: false,
81
- tsIgnoreCall: false,
82
- noCastInCall: false,
83
- wrapCount: false,
84
- useResLocalsValidator: false,
85
- importValidatorConfig: false,
86
- localsDataType: null,
87
- validatorLocalsType: 'ZodType',
88
- zodTypeGeneric: null,
89
- middlewareType: 'bodyArgs',
90
- },
91
- {
92
- operation: 'CreateMany',
93
- prismaMethod: 'createMany',
94
- source: 'body',
95
- successStatus: 201,
96
- resultVar: 'data',
97
- exportInterface: false,
98
- hasPassToNext: false,
99
- importsModel: false,
100
- argsPartial: false,
101
- useCapitalizeForArgs: false,
102
- tsIgnoreCall: false,
103
- noCastInCall: false,
104
- wrapCount: false,
105
- useResLocalsValidator: false,
106
- importValidatorConfig: false,
107
- localsDataType: null,
108
- validatorLocalsType: 'ZodType',
109
- zodTypeGeneric: null,
110
- middlewareType: 'bodyArgs',
111
- },
112
- {
113
- operation: 'Update',
114
- prismaMethod: 'update',
115
- source: 'body',
116
- successStatus: 200,
117
- resultVar: 'data',
118
- exportInterface: false,
119
- hasPassToNext: false,
120
- importsModel: false,
121
- argsPartial: false,
122
- useCapitalizeForArgs: false,
123
- tsIgnoreCall: false,
124
- noCastInCall: false,
125
- wrapCount: false,
126
- useResLocalsValidator: false,
127
- importValidatorConfig: false,
128
- localsDataType: null,
129
- validatorLocalsType: 'ZodType',
130
- zodTypeGeneric: null,
131
- middlewareType: 'bodyArgs',
132
- },
133
- {
134
- operation: 'UpdateMany',
135
- prismaMethod: 'updateMany',
136
- source: 'body',
137
- successStatus: 200,
138
- resultVar: 'data',
139
- exportInterface: false,
140
- hasPassToNext: false,
141
- importsModel: false,
142
- argsPartial: false,
143
- useCapitalizeForArgs: false,
144
- tsIgnoreCall: false,
145
- noCastInCall: false,
146
- wrapCount: true,
147
- useResLocalsValidator: false,
148
- importValidatorConfig: false,
149
- localsDataType: null,
150
- validatorLocalsType: 'ZodType',
151
- zodTypeGeneric: 'UpdateManyResult',
152
- middlewareType: 'bodyArgs',
153
- },
154
- {
155
- operation: 'Upsert',
156
- prismaMethod: 'upsert',
157
- source: 'body',
158
- successStatus: 200,
159
- resultVar: 'data',
160
- exportInterface: false,
161
- hasPassToNext: false,
162
- importsModel: false,
163
- argsPartial: false,
164
- useCapitalizeForArgs: false,
165
- tsIgnoreCall: false,
166
- noCastInCall: false,
167
- wrapCount: false,
168
- useResLocalsValidator: false,
169
- importValidatorConfig: false,
170
- localsDataType: null,
171
- validatorLocalsType: 'ZodType',
172
- zodTypeGeneric: null,
173
- middlewareType: 'bodyArgs',
174
- },
175
- {
176
- operation: 'Delete',
177
- prismaMethod: 'delete',
178
- source: 'body',
179
- successStatus: 200,
180
- resultVar: 'data',
181
- exportInterface: false,
182
- hasPassToNext: false,
183
- importsModel: false,
184
- argsPartial: false,
185
- useCapitalizeForArgs: false,
186
- tsIgnoreCall: false,
187
- noCastInCall: false,
188
- wrapCount: false,
189
- useResLocalsValidator: false,
190
- importValidatorConfig: false,
191
- localsDataType: null,
192
- validatorLocalsType: 'ZodType',
193
- zodTypeGeneric: null,
194
- middlewareType: 'bodyArgs',
195
- },
196
- {
197
- operation: 'DeleteMany',
198
- prismaMethod: 'deleteMany',
199
- source: 'body',
200
- successStatus: 200,
201
- resultVar: 'result',
202
- exportInterface: false,
203
- hasPassToNext: false,
204
- importsModel: false,
205
- argsPartial: false,
206
- useCapitalizeForArgs: false,
207
- tsIgnoreCall: false,
208
- noCastInCall: false,
209
- wrapCount: false,
210
- useResLocalsValidator: false,
211
- importValidatorConfig: false,
212
- localsDataType: null,
213
- validatorLocalsType: 'ZodType',
214
- zodTypeGeneric: null,
215
- middlewareType: 'bodyArgs',
216
- },
217
- {
218
- operation: 'Aggregate',
219
- prismaMethod: 'aggregate',
220
- source: 'query',
221
- successStatus: 200,
222
- resultVar: 'result',
223
- exportInterface: false,
224
- hasPassToNext: false,
225
- importsModel: false,
226
- argsPartial: true,
227
- useCapitalizeForArgs: true,
228
- tsIgnoreCall: false,
229
- noCastInCall: false,
230
- wrapCount: false,
231
- useResLocalsValidator: true,
232
- importValidatorConfig: true,
233
- localsDataType: null,
234
- validatorLocalsType: 'ValidatorConfig',
235
- zodTypeGeneric: null,
236
- middlewareType: 'partialArgs',
237
- },
238
- {
239
- operation: 'Count',
240
- prismaMethod: 'count',
241
- source: 'query',
242
- successStatus: 200,
243
- resultVar: 'result',
244
- exportInterface: false,
245
- hasPassToNext: false,
246
- importsModel: false,
247
- argsPartial: true,
248
- useCapitalizeForArgs: false,
249
- tsIgnoreCall: false,
250
- noCastInCall: false,
251
- wrapCount: false,
252
- useResLocalsValidator: false,
253
- importValidatorConfig: false,
254
- localsDataType: null,
255
- validatorLocalsType: 'ZodType',
256
- zodTypeGeneric: null,
257
- middlewareType: 'emptyParsedQs',
258
- },
259
- {
260
- operation: 'GroupBy',
261
- prismaMethod: 'groupBy',
262
- source: 'query',
263
- successStatus: 200,
264
- resultVar: 'result',
265
- exportInterface: false,
266
- hasPassToNext: false,
267
- importsModel: false,
268
- argsPartial: true,
269
- useCapitalizeForArgs: false,
270
- tsIgnoreCall: true,
271
- noCastInCall: true,
272
- wrapCount: false,
273
- useResLocalsValidator: false,
274
- importValidatorConfig: false,
275
- localsDataType: null,
276
- validatorLocalsType: 'ZodType',
277
- zodTypeGeneric: null,
278
- middlewareType: 'emptyParsedQs',
279
- },
280
- {
281
- operation: 'CreateManyAndReturn',
282
- prismaMethod: 'createManyAndReturn',
283
- source: 'body',
284
- successStatus: 201,
285
- resultVar: 'data',
286
- exportInterface: false,
287
- hasPassToNext: false,
288
- importsModel: false,
289
- argsPartial: false,
290
- useCapitalizeForArgs: false,
291
- tsIgnoreCall: false,
292
- noCastInCall: false,
293
- wrapCount: false,
294
- useResLocalsValidator: false,
295
- importValidatorConfig: false,
296
- localsDataType: null,
297
- validatorLocalsType: 'ZodType',
298
- zodTypeGeneric: null,
299
- middlewareType: 'bodyArgs',
300
- },
301
- {
302
- operation: 'UpdateManyAndReturn',
303
- prismaMethod: 'updateManyAndReturn',
304
- source: 'body',
305
- successStatus: 200,
306
- resultVar: 'data',
307
- exportInterface: false,
308
- hasPassToNext: false,
309
- importsModel: false,
310
- argsPartial: false,
311
- useCapitalizeForArgs: false,
312
- tsIgnoreCall: false,
313
- noCastInCall: false,
314
- wrapCount: false,
315
- useResLocalsValidator: false,
316
- importValidatorConfig: false,
317
- localsDataType: null,
318
- validatorLocalsType: 'ZodType',
319
- zodTypeGeneric: null,
320
- middlewareType: 'bodyArgs',
321
- },
322
- ];
323
- function generateOperationFunction(cfg, model, prismaImportStatement) {
324
- const modelName = model.name;
325
- const functionName = `${modelName}${cfg.operation}`;
326
- const interfaceName = `${cfg.operation}Request`;
327
- const middlewareTypeName = `${cfg.operation}Middleware`;
328
- const argsTypeName = cfg.useCapitalizeForArgs
329
- ? `Prisma.${(0, strings_1.capitalize)(modelName)}${cfg.operation}Args`
330
- : `Prisma.${modelName}${cfg.operation}Args`;
331
- const zodType = cfg.zodTypeGeneric ? `ZodType<${cfg.zodTypeGeneric}>` : 'ZodType';
332
- const prismaImport = cfg.importsModel
333
- ? prismaImportStatement.replace('{ Prisma }', `{ Prisma, ${modelName} }`)
334
- : prismaImportStatement;
335
- const importLines = [
336
- prismaImport,
337
- `import { Request, Response, NextFunction } from 'express';`,
338
- `import { RequestHandler, ParamsDictionary } from 'express-serve-static-core';`,
339
- ];
340
- if (cfg.source === 'query') {
341
- importLines.push(`import { ParsedQs } from 'qs';`);
342
- }
343
- importLines.push(`import { ZodType } from 'zod';`);
344
- if (cfg.importValidatorConfig) {
345
- importLines.push(`import { ValidatorConfig } from '../routeConfig';`);
346
- }
347
- const extraTypes = cfg.wrapCount ? `\ntype UpdateManyResult = { count: number };\n` : '';
348
- const queryType = cfg.argsPartial
349
- ? `Partial<${argsTypeName}> & ParsedQs`
350
- : `${argsTypeName} & ParsedQs`;
351
- let interfaceBody;
352
- if (cfg.source === 'query') {
353
- const localsEntries = [];
354
- if (cfg.localsDataType === 'nullable') {
355
- localsEntries.push(` data?: ${modelName} | null`);
356
- }
357
- else if (cfg.localsDataType === 'array') {
358
- localsEntries.push(` data?: ${modelName}[]`);
359
- }
360
- localsEntries.push(` outputValidator?: ${cfg.validatorLocalsType};`);
361
- interfaceBody = [
362
- ` prisma: PrismaClient;`,
363
- ` query: ${queryType};`,
364
- ` outputValidation?: ${zodType};`,
365
- ...(cfg.hasPassToNext ? [` passToNext?: boolean;`] : []),
366
- ` locals?: {`,
367
- ...localsEntries,
368
- ` }`,
369
- ].join('\n');
370
- }
371
- else {
372
- interfaceBody = [
373
- ` prisma: PrismaClient;`,
374
- ` body: ${argsTypeName};`,
375
- ` outputValidation?: ${zodType};`,
376
- ` locals?: {`,
377
- ` outputValidator?: ${zodType};`,
378
- ` };`,
379
- ].join('\n');
380
- }
381
- const exportKw = cfg.exportInterface ? 'export ' : '';
382
- const interfaceDecl = `${exportKw}interface ${interfaceName} extends Request {\n${interfaceBody}\n}`;
383
- let middlewareTypeDecl;
384
- switch (cfg.middlewareType) {
385
- case 'queryFull':
386
- middlewareTypeDecl = `export type ${middlewareTypeName} = RequestHandler<ParamsDictionary, any, any, ${argsTypeName} & ParsedQs, Record<string, any>>`;
387
- break;
388
- case 'bodyArgs':
389
- middlewareTypeDecl = `export type ${middlewareTypeName} = RequestHandler<ParamsDictionary, any, ${argsTypeName}, Record<string, any>>`;
390
- break;
391
- case 'partialArgs':
392
- middlewareTypeDecl = `export type ${middlewareTypeName} = RequestHandler<ParamsDictionary, any, Partial<${argsTypeName}>, Record<string, any>>`;
393
- break;
394
- case 'emptyParsedQs':
395
- middlewareTypeDecl = `export type ${middlewareTypeName} = RequestHandler<ParamsDictionary, any, {}, ParsedQs>`;
396
- break;
397
- }
398
- const validatorLine = cfg.useResLocalsValidator
399
- ? `const outputValidator = res.locals.outputValidator?.schema || req.outputValidation;`
400
- : `const outputValidator = req.locals?.outputValidator || req.outputValidation;`;
401
- const v = cfg.resultVar;
402
- const callArg = cfg.source === 'body'
403
- ? 'req.body'
404
- : cfg.noCastInCall
405
- ? 'req.query'
406
- : `req.query as ${argsTypeName}`;
407
- const prismaCall = [
408
- cfg.tsIgnoreCall ? ' // @ts-ignore' : '',
409
- ` const ${v} = await req.prisma.${(0, strings_1.toPascalCase)(modelName)}.${cfg.prismaMethod}(${callArg});`,
410
- ].filter(Boolean).join('\n');
411
- const successJson = cfg.wrapCount
412
- ? `{ count: validationResult.data.count }`
413
- : `validationResult.data`;
414
- const elseJson = cfg.wrapCount
415
- ? `{ count: ${v}.count }`
416
- : v;
417
- let bodyLines;
418
- if (cfg.hasPassToNext) {
419
- bodyLines = [
420
- ` ${validatorLine}`,
421
- ``,
422
- prismaCall,
423
- ` if (req.passToNext) {`,
424
- ` if (req.locals) req.locals.data = ${v};`,
425
- ` next();`,
426
- ` } else if (outputValidator) {`,
427
- ` const validationResult = outputValidator.safeParse(${v});`,
428
- ` if (validationResult.success) {`,
429
- ` return res.status(${cfg.successStatus}).json(${successJson});`,
430
- ` } else {`,
431
- ` return res.status(400).json({ error: 'Invalid data format', details: validationResult.error });`,
432
- ` }`,
433
- ` } else {`,
434
- ` return res.status(${cfg.successStatus}).json(${elseJson});`,
435
- ` }`,
436
- ];
437
- }
438
- else {
439
- bodyLines = [
440
- ` ${validatorLine}`,
441
- ``,
442
- prismaCall,
443
- ``,
444
- ` if (outputValidator) {`,
445
- ` const validationResult = outputValidator.safeParse(${v});`,
446
- ` if (validationResult.success) {`,
447
- ` return res.status(${cfg.successStatus}).json(${successJson});`,
448
- ` } else {`,
449
- ` return res.status(400).json({ error: 'Invalid data format', details: validationResult.error });`,
450
- ` }`,
451
- ` } else {`,
452
- ` return res.status(${cfg.successStatus}).json(${elseJson});`,
453
- ` }`,
454
- ];
455
- }
456
- return `
457
- ${importLines.join('\n')}
458
- ${extraTypes}
459
- ${interfaceDecl}
460
-
461
- ${middlewareTypeDecl}
462
-
463
- export async function ${functionName}(req: ${interfaceName}, res: Response, next: NextFunction) {
464
- try {
465
- ${bodyLines.join('\n')}
466
- } catch(error: unknown) {
467
- next(error)
468
- }
469
- }`;
470
- }
471
- //# sourceMappingURL=generateOperation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generateOperation.js","sourceRoot":"","sources":["../../src/helpers/generateOperation.ts"],"names":[],"mappings":"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"}