prisma-generator-express 1.45.1 → 1.47.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 (70) hide show
  1. package/dist/client/encodeQueryParams.js +4 -0
  2. package/dist/client/encodeQueryParams.js.map +1 -1
  3. package/dist/copy/misc.d.ts +4 -2
  4. package/dist/copy/misc.js +35 -24
  5. package/dist/copy/misc.js.map +1 -1
  6. package/dist/generators/generateFastifyHandler.js +2 -4
  7. package/dist/generators/generateFastifyHandler.js.map +1 -1
  8. package/dist/generators/generateHonoHandler.js +2 -4
  9. package/dist/generators/generateHonoHandler.js.map +1 -1
  10. package/dist/generators/generateImportPrismaStatement.d.ts +0 -1
  11. package/dist/generators/generateImportPrismaStatement.js +2 -20
  12. package/dist/generators/generateImportPrismaStatement.js.map +1 -1
  13. package/dist/generators/generateOperationCore.js +37 -1
  14. package/dist/generators/generateOperationCore.js.map +1 -1
  15. package/dist/generators/generateQueryBuilderHelper.js +9 -0
  16. package/dist/generators/generateQueryBuilderHelper.js.map +1 -1
  17. package/dist/generators/generateRelationMeta.js +0 -10
  18. package/dist/generators/generateRelationMeta.js.map +1 -1
  19. package/dist/generators/generateRouteConfigType.js +33 -12
  20. package/dist/generators/generateRouteConfigType.js.map +1 -1
  21. package/dist/generators/generateRouter.d.ts +0 -1
  22. package/dist/generators/generateRouter.js +96 -70
  23. package/dist/generators/generateRouter.js.map +1 -1
  24. package/dist/generators/generateRouterFastify.js +83 -89
  25. package/dist/generators/generateRouterFastify.js.map +1 -1
  26. package/dist/generators/generateRouterHono.js +257 -237
  27. package/dist/generators/generateRouterHono.js.map +1 -1
  28. package/dist/generators/generateUnifiedDocs.d.ts +2 -2
  29. package/dist/generators/generateUnifiedDocs.js +90 -252
  30. package/dist/generators/generateUnifiedDocs.js.map +1 -1
  31. package/dist/generators/generateUnifiedHandler.js +2 -4
  32. package/dist/generators/generateUnifiedHandler.js.map +1 -1
  33. package/dist/index.js +16 -8
  34. package/dist/index.js.map +1 -1
  35. package/dist/utils/copyFiles.js +3 -2
  36. package/dist/utils/copyFiles.js.map +1 -1
  37. package/dist/utils/strings.d.ts +0 -1
  38. package/dist/utils/strings.js +0 -9
  39. package/dist/utils/strings.js.map +1 -1
  40. package/package.json +1 -1
  41. package/src/client/encodeQueryParams.ts +7 -15
  42. package/src/copy/autoIncludePlanner.ts +4 -17
  43. package/src/copy/autoIncludeRuntime.ts +11 -19
  44. package/src/copy/buildModelOpenApi.ts +11 -14
  45. package/src/copy/docsRenderer.ts +8 -14
  46. package/src/copy/misc.ts +28 -23
  47. package/src/copy/operationRuntime.ts +61 -43
  48. package/src/copy/parseQueryParams.ts +5 -14
  49. package/src/copy/routeConfig.express.ts +24 -18
  50. package/src/copy/routeConfig.fastify.ts +1 -1
  51. package/src/copy/routeConfig.hono.ts +34 -6
  52. package/src/copy/routeConfig.ts +3 -2
  53. package/src/generators/generateFastifyHandler.ts +2 -5
  54. package/src/generators/generateHonoHandler.ts +2 -5
  55. package/src/generators/generateImportPrismaStatement.ts +3 -35
  56. package/src/generators/generateOperationCore.ts +37 -1
  57. package/src/generators/generateQueryBuilderHelper.ts +9 -0
  58. package/src/generators/generateRelationMeta.ts +0 -10
  59. package/src/generators/generateRouteConfigType.ts +34 -10
  60. package/src/generators/generateRouter.ts +96 -71
  61. package/src/generators/generateRouterFastify.ts +83 -89
  62. package/src/generators/generateRouterHono.ts +257 -237
  63. package/src/generators/generateUnifiedDocs.ts +89 -267
  64. package/src/generators/generateUnifiedHandler.ts +2 -4
  65. package/src/index.ts +45 -14
  66. package/src/utils/copyFiles.ts +2 -2
  67. package/src/utils/strings.ts +0 -8
  68. package/src/copy/createOutputValidatorMiddleware.ts +0 -47
  69. package/src/copy/createValidatorMiddleware.ts +0 -62
  70. package/src/copy/transformZod.ts +0 -139
@@ -1,16 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateRouterFunction = generateRouterFunction;
4
- const strings_1 = require("../utils/strings");
5
4
  const generateRouteConfigType_1 = require("./generateRouteConfigType");
6
5
  const importExt_1 = require("../utils/importExt");
7
6
  function generateRouterFunction({ model, enums, guardShapesImport, importStyle, }) {
8
7
  const ext = (0, importExt_1.importExt)(importStyle);
9
8
  const modelName = model.name;
10
- const prefix = (0, strings_1.toCamelCase)(modelName);
11
9
  const modelNameLower = modelName.toLowerCase();
12
10
  const delegateKey = modelName.charAt(0).toLowerCase() + modelName.slice(1);
13
- const routerFunctionName = `${prefix}Router`;
11
+ const routerFunctionName = `${modelName}Router`;
14
12
  const fieldsMeta = model.fields.map((f) => ({
15
13
  name: f.name,
16
14
  kind: f.kind,
@@ -33,29 +31,29 @@ function generateRouterFunction({ model, enums, guardShapesImport, importStyle,
33
31
  import type { Request, Response, NextFunction, RequestHandler } from 'express'
34
32
  import { startQueryBuilder } from '../queryBuilder${ext}'
35
33
  import {
36
- ${prefix}FindUnique,
37
- ${prefix}FindUniqueOrThrow,
38
- ${prefix}FindFirst,
39
- ${prefix}FindFirstOrThrow,
40
- ${prefix}FindMany,
41
- ${prefix}FindManyPaginated,
42
- ${prefix}Create,
43
- ${prefix}CreateMany,
44
- ${prefix}CreateManyAndReturn,
45
- ${prefix}Update,
46
- ${prefix}UpdateMany,
47
- ${prefix}UpdateManyAndReturn,
48
- ${prefix}Upsert,
49
- ${prefix}Delete,
50
- ${prefix}DeleteMany,
51
- ${prefix}Aggregate,
52
- ${prefix}Count,
53
- ${prefix}GroupBy,
34
+ ${modelName}FindUnique,
35
+ ${modelName}FindUniqueOrThrow,
36
+ ${modelName}FindFirst,
37
+ ${modelName}FindFirstOrThrow,
38
+ ${modelName}FindMany,
39
+ ${modelName}FindManyPaginated,
40
+ ${modelName}Create,
41
+ ${modelName}CreateMany,
42
+ ${modelName}CreateManyAndReturn,
43
+ ${modelName}Update,
44
+ ${modelName}UpdateMany,
45
+ ${modelName}UpdateManyAndReturn,
46
+ ${modelName}Upsert,
47
+ ${modelName}Delete,
48
+ ${modelName}DeleteMany,
49
+ ${modelName}Aggregate,
50
+ ${modelName}Count,
51
+ ${modelName}GroupBy,
54
52
  } from './${modelName}Handlers${ext}'
55
53
  import * as core from './${modelName}Core${ext}'
56
54
  import type { RouteConfig, QueryBuilderConfig } from '../routeConfig.target${ext}'
57
55
  import { parseQueryParams } from '../parseQueryParams${ext}'
58
- import { sanitizeKeys } from '../misc${ext}'
56
+ import { sanitizeKeys, normalizePrefix, getEnv } from '../misc${ext}'
59
57
  import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
60
58
  import type { OperationContext } from '../operationRuntime${ext}'
61
59
  import {
@@ -72,7 +70,7 @@ import { relationModels } from '../relationModels${ext}'
72
70
  import { runAutoIncludeProgressive } from '../autoIncludeRuntime${ext}'
73
71
 
74
72
  ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'RequestHandler', guardShapesImport, importStyle, 'express')}
75
- const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
73
+ const _env = getEnv()
76
74
 
77
75
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
78
76
  const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
@@ -99,19 +97,10 @@ type LocalsBag = {
99
97
  data?: unknown
100
98
  }
101
99
 
102
- const defaultOpConfig: OperationConfigLike = {
103
- before: [],
104
- after: [],
105
- }
106
-
107
- function normalizePrefix(p: string): string {
108
- if (!p) return ''
109
- let result = p
110
- if (!result.startsWith('/')) result = '/' + result
111
- while (result.length > 1 && result.endsWith('/')) result = result.slice(0, -1)
112
- if (result === '/') return ''
113
- return result
114
- }
100
+ const defaultOpConfig: OperationConfigLike = Object.freeze({
101
+ before: Object.freeze([]) as unknown as RequestHandler[],
102
+ after: Object.freeze([]) as unknown as RequestHandler[],
103
+ })
115
104
 
116
105
  function isQueryBuilderEnabled(config: { queryBuilder?: QueryBuilderConfig | false }): boolean {
117
106
  if (config.queryBuilder === false) return false
@@ -130,9 +119,8 @@ function readLocals(res: Response): LocalsBag {
130
119
  return res.locals as LocalsBag
131
120
  }
132
121
 
133
- export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteConfig<TCtx> = {}) {
122
+ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${modelName}RouteConfig<TCtx, TPrisma> = {}) {
134
123
  const router = express.Router()
135
- router.use(express.json())
136
124
 
137
125
  const customPrefix = normalizePrefix(config.customUrlPrefix || '')
138
126
  const modelPrefix = config.addModelPrefix !== false ? '/${modelNameLower}' : ''
@@ -143,6 +131,25 @@ export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteC
143
131
 
144
132
  const postReadsEnabled = !config.disablePostReads
145
133
 
134
+ const openApiJsonSpec = openApiDisabled
135
+ ? null
136
+ : buildModelOpenApi(
137
+ '${modelName}',
138
+ MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
139
+ MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
140
+ config as unknown as Parameters<typeof buildModelOpenApi>[3],
141
+ { format: 'json' },
142
+ )
143
+ const openApiYamlSpec = openApiDisabled
144
+ ? null
145
+ : buildModelOpenApi(
146
+ '${modelName}',
147
+ MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
148
+ MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
149
+ config as unknown as Parameters<typeof buildModelOpenApi>[3],
150
+ { format: 'yaml' },
151
+ )
152
+
146
153
  const qbEnabled = isQueryBuilderEnabled(config)
147
154
  if (qbEnabled) {
148
155
  const qbConfig = getQueryBuilderConfig(config)
@@ -202,7 +209,7 @@ export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteC
202
209
  }
203
210
  }
204
211
 
205
- const maybeProgressiveSSE = (
212
+ const maybeProgressiveSSE = (
206
213
  opConfig: OperationConfigLike,
207
214
  coreFn: (ctx: OperationContext) => Promise<unknown>,
208
215
  baseOp: string,
@@ -325,12 +332,10 @@ const maybeProgressiveSSE = (
325
332
  const openapiJsonPath = basePath ? \`\${basePath}/openapi.json\` : '/openapi.json'
326
333
  const openapiYamlPath = basePath ? \`\${basePath}/openapi.yaml\` : '/openapi.yaml'
327
334
  router.get(openapiJsonPath, (_req, res) => {
328
- const spec = buildModelOpenApi('${modelName}', MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1], MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2], config as unknown as Parameters<typeof buildModelOpenApi>[3], { format: 'json' })
329
- res.json(spec)
335
+ res.json(openApiJsonSpec)
330
336
  })
331
337
  router.get(openapiYamlPath, (_req, res) => {
332
- const spec = buildModelOpenApi('${modelName}', MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1], MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2], config as unknown as Parameters<typeof buildModelOpenApi>[3], { format: 'yaml' })
333
- res.type('application/yaml').send(spec as string)
338
+ res.type('application/yaml').send(openApiYamlSpec as string)
334
339
  })
335
340
  }
336
341
 
@@ -338,66 +343,66 @@ const maybeProgressiveSSE = (
338
343
  const opConfig: OperationConfigLike = (config.findFirst as OperationConfigLike | undefined) ?? defaultOpConfig
339
344
  const { before = [], after = [] } = opConfig
340
345
  const path = basePath ? \`\${basePath}/first\` : '/first'
341
- router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findFirst, 'findFirst'), ${prefix}FindFirst as RequestHandler, ...after, respond)
342
- if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindFirst as RequestHandler, ...after, respond)
346
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findFirst, 'findFirst'), ${modelName}FindFirst as RequestHandler, ...after, respond)
347
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindFirst as RequestHandler, ...after, respond)
343
348
  }
344
349
  if (config.enableAll || config.findFirstOrThrow) {
345
350
  const opConfig: OperationConfigLike = (config.findFirstOrThrow as OperationConfigLike | undefined) ?? defaultOpConfig
346
351
  const { before = [], after = [] } = opConfig
347
352
  const path = basePath ? \`\${basePath}/first/strict\` : '/first/strict'
348
- router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findFirstOrThrow, 'findFirstOrThrow'), ${prefix}FindFirstOrThrow as RequestHandler, ...after, respond)
349
- if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindFirstOrThrow as RequestHandler, ...after, respond)
353
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findFirstOrThrow, 'findFirstOrThrow'), ${modelName}FindFirstOrThrow as RequestHandler, ...after, respond)
354
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindFirstOrThrow as RequestHandler, ...after, respond)
350
355
  }
351
356
  if (config.enableAll || config.findManyPaginated) {
352
357
  const opConfig: OperationConfigLike = (config.findManyPaginated as OperationConfigLike | undefined) ?? defaultOpConfig
353
358
  const { before = [], after = [] } = opConfig
354
359
  const path = basePath ? \`\${basePath}/paginated\` : '/paginated'
355
- router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findManyPaginated, 'findManyPaginated'), ${prefix}FindManyPaginated as RequestHandler, ...after, respond)
356
- if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindManyPaginated as RequestHandler, ...after, respond)
360
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findManyPaginated, 'findManyPaginated'), ${modelName}FindManyPaginated as RequestHandler, ...after, respond)
361
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindManyPaginated as RequestHandler, ...after, respond)
357
362
  }
358
363
  if (config.enableAll || config.aggregate) {
359
364
  const opConfig: OperationConfigLike = (config.aggregate as OperationConfigLike | undefined) ?? defaultOpConfig
360
365
  const { before = [], after = [] } = opConfig
361
366
  const path = basePath ? \`\${basePath}/aggregate\` : '/aggregate'
362
- router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.aggregate, 'aggregate'), ${prefix}Aggregate as RequestHandler, ...after, respond)
363
- if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}Aggregate as RequestHandler, ...after, respond)
367
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.aggregate, 'aggregate'), ${modelName}Aggregate as RequestHandler, ...after, respond)
368
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}Aggregate as RequestHandler, ...after, respond)
364
369
  }
365
370
  if (config.enableAll || config.count) {
366
371
  const opConfig: OperationConfigLike = (config.count as OperationConfigLike | undefined) ?? defaultOpConfig
367
372
  const { before = [], after = [] } = opConfig
368
373
  const path = basePath ? \`\${basePath}/count\` : '/count'
369
- router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.count, 'count'), ${prefix}Count as RequestHandler, ...after, respond)
370
- if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}Count as RequestHandler, ...after, respond)
374
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.count, 'count'), ${modelName}Count as RequestHandler, ...after, respond)
375
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}Count as RequestHandler, ...after, respond)
371
376
  }
372
377
  if (config.enableAll || config.groupBy) {
373
378
  const opConfig: OperationConfigLike = (config.groupBy as OperationConfigLike | undefined) ?? defaultOpConfig
374
379
  const { before = [], after = [] } = opConfig
375
380
  const path = basePath ? \`\${basePath}/groupby\` : '/groupby'
376
- router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.groupBy, 'groupBy'), ${prefix}GroupBy as RequestHandler, ...after, respond)
377
- if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}GroupBy as RequestHandler, ...after, respond)
381
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.groupBy, 'groupBy'), ${modelName}GroupBy as RequestHandler, ...after, respond)
382
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}GroupBy as RequestHandler, ...after, respond)
378
383
  }
379
384
  if (config.enableAll || config.findUniqueOrThrow) {
380
385
  const opConfig: OperationConfigLike = (config.findUniqueOrThrow as OperationConfigLike | undefined) ?? defaultOpConfig
381
386
  const { before = [], after = [] } = opConfig
382
387
  const path = basePath ? \`\${basePath}/unique/strict\` : '/unique/strict'
383
- router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findUniqueOrThrow, 'findUniqueOrThrow'), ${prefix}FindUniqueOrThrow as RequestHandler, ...after, respond)
384
- if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindUniqueOrThrow as RequestHandler, ...after, respond)
388
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findUniqueOrThrow, 'findUniqueOrThrow'), ${modelName}FindUniqueOrThrow as RequestHandler, ...after, respond)
389
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindUniqueOrThrow as RequestHandler, ...after, respond)
385
390
  }
386
391
  if (config.enableAll || config.findUnique) {
387
392
  const opConfig: OperationConfigLike = (config.findUnique as OperationConfigLike | undefined) ?? defaultOpConfig
388
393
  const { before = [], after = [] } = opConfig
389
394
  const path = basePath ? \`\${basePath}/unique\` : '/unique'
390
- router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findUnique, 'findUnique'), ${prefix}FindUnique as RequestHandler, ...after, respond)
391
- if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindUnique as RequestHandler, ...after, respond)
395
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findUnique, 'findUnique'), ${modelName}FindUnique as RequestHandler, ...after, respond)
396
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindUnique as RequestHandler, ...after, respond)
392
397
  }
393
398
  if (config.enableAll || config.findMany) {
394
399
  const opConfig: OperationConfigLike = (config.findMany as OperationConfigLike | undefined) ?? defaultOpConfig
395
400
  const { before = [], after = [] } = opConfig
396
401
  const path = basePath || '/'
397
- router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findMany, 'findMany'), ${prefix}FindMany as RequestHandler, ...after, respond)
402
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findMany, 'findMany'), ${modelName}FindMany as RequestHandler, ...after, respond)
398
403
  if (postReadsEnabled) {
399
404
  const postPath = basePath ? \`\${basePath}/read\` : '/read'
400
- router.post(postPath, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindMany as RequestHandler, ...after, respond)
405
+ router.post(postPath, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindMany as RequestHandler, ...after, respond)
401
406
  }
402
407
  }
403
408
 
@@ -405,55 +410,76 @@ const maybeProgressiveSSE = (
405
410
  const opConfig: OperationConfigLike = (config.createManyAndReturn as OperationConfigLike | undefined) ?? defaultOpConfig
406
411
  const { before = [], after = [] } = opConfig
407
412
  const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
408
- router.post(path, setShape(opConfig), ...before, ${prefix}CreateManyAndReturn as RequestHandler, ...after, respondCreated)
413
+ router.post(path, setShape(opConfig), ...before, ${modelName}CreateManyAndReturn as RequestHandler, ...after, respondCreated)
409
414
  }
410
415
  if (config.enableAll || config.createMany) {
411
416
  const opConfig: OperationConfigLike = (config.createMany as OperationConfigLike | undefined) ?? defaultOpConfig
412
417
  const { before = [], after = [] } = opConfig
413
418
  const path = basePath ? \`\${basePath}/many\` : '/many'
414
- router.post(path, setShape(opConfig), ...before, ${prefix}CreateMany as RequestHandler, ...after, respondCreated)
419
+ router.post(path, setShape(opConfig), ...before, ${modelName}CreateMany as RequestHandler, ...after, respondCreated)
415
420
  }
416
421
  if (config.enableAll || config.create) {
417
422
  const opConfig: OperationConfigLike = (config.create as OperationConfigLike | undefined) ?? defaultOpConfig
418
423
  const { before = [], after = [] } = opConfig
419
424
  const path = basePath || '/'
420
- router.post(path, setShape(opConfig), ...before, ${prefix}Create as RequestHandler, ...after, respondCreated)
425
+ router.post(path, setShape(opConfig), ...before, ${modelName}Create as RequestHandler, ...after, respondCreated)
421
426
  }
422
427
  if (config.enableAll || config.updateManyAndReturn) {
423
428
  const opConfig: OperationConfigLike = (config.updateManyAndReturn as OperationConfigLike | undefined) ?? defaultOpConfig
424
429
  const { before = [], after = [] } = opConfig
425
430
  const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
426
- router.put(path, setShape(opConfig), ...before, ${prefix}UpdateManyAndReturn as RequestHandler, ...after, respond)
431
+ router.put(path, setShape(opConfig), ...before, ${modelName}UpdateManyAndReturn as RequestHandler, ...after, respond)
427
432
  }
428
433
  if (config.enableAll || config.updateMany) {
429
434
  const opConfig: OperationConfigLike = (config.updateMany as OperationConfigLike | undefined) ?? defaultOpConfig
430
435
  const { before = [], after = [] } = opConfig
431
436
  const path = basePath ? \`\${basePath}/many\` : '/many'
432
- router.put(path, setShape(opConfig), ...before, ${prefix}UpdateMany as RequestHandler, ...after, respond)
437
+ router.put(path, setShape(opConfig), ...before, ${modelName}UpdateMany as RequestHandler, ...after, respond)
433
438
  }
434
439
  if (config.enableAll || config.update) {
435
440
  const opConfig: OperationConfigLike = (config.update as OperationConfigLike | undefined) ?? defaultOpConfig
436
441
  const { before = [], after = [] } = opConfig
437
442
  const path = basePath || '/'
438
- router.put(path, setShape(opConfig), ...before, ${prefix}Update as RequestHandler, ...after, respond)
443
+ router.put(path, setShape(opConfig), ...before, ${modelName}Update as RequestHandler, ...after, respond)
439
444
  }
440
445
  if (config.enableAll || config.upsert) {
441
446
  const opConfig: OperationConfigLike = (config.upsert as OperationConfigLike | undefined) ?? defaultOpConfig
442
447
  const { before = [], after = [] } = opConfig
443
448
  const path = basePath || '/'
444
- router.patch(path, setShape(opConfig), ...before, ${prefix}Upsert as RequestHandler, ...after, respond)
449
+ router.patch(path, setShape(opConfig), ...before, ${modelName}Upsert as RequestHandler, ...after, respond)
445
450
  }
446
451
  if (config.enableAll || config.deleteMany) {
447
452
  const opConfig: OperationConfigLike = (config.deleteMany as OperationConfigLike | undefined) ?? defaultOpConfig
448
453
  const { before = [], after = [] } = opConfig
449
454
  const path = basePath ? \`\${basePath}/many\` : '/many'
450
- router.delete(path, setShape(opConfig), ...before, ${prefix}DeleteMany as RequestHandler, ...after, respond)
455
+ router.delete(path, setShape(opConfig), ...before, ${modelName}DeleteMany as RequestHandler, ...after, respond)
451
456
  }
452
457
  if (config.enableAll || config.delete) {
453
458
  const opConfig: OperationConfigLike = (config.delete as OperationConfigLike | undefined) ?? defaultOpConfig
454
459
  const { before = [], after = [] } = opConfig
455
460
  const path = basePath || '/'
456
- router.delete(path, setShape(opConfig), ...before, ${prefix}Delete as RequestHandler, ...after, respond)
461
+ router.delete(path, setShape(opConfig), ...before, ${modelName}Delete as RequestHandler, ...after, respond)
462
+ }
463
+ if (config.updateEach) {
464
+ const opConfig: OperationConfigLike = (config.batch as OperationConfigLike | undefined) ?? defaultOpConfig
465
+ const { before = [], after = [] } = opConfig
466
+ const path = basePath ? \`\${basePath}/batch\` : '/batch'
467
+ router.post(
468
+ path,
469
+ setShape(opConfig),
470
+ ...before,
471
+ async (req: Request, res: Response, next: NextFunction) => {
472
+ try {
473
+ const atomic = req.get('x-batch-atomic') === 'true'
474
+ readLocals(res).data = await core.batch(buildContext(req, res), atomic)
475
+ next()
476
+ } catch (err) {
477
+ next(mapError(err))
478
+ }
479
+ },
480
+ ...after,
481
+ respond,
482
+ )
457
483
  }
458
484
 
459
485
  router.use((err: unknown, _req: Request, res: Response, next: NextFunction) => {
@@ -1 +1 @@
1
- {"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":"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"}