prisma-generator-express 1.62.3 → 1.63.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.
@@ -11,21 +11,77 @@ function pathExpr(basePath, suffix) {
11
11
  return `'${suffix}'`;
12
12
  return `\`\${basePath}${suffix}\``;
13
13
  }
14
+ function opKindFor(opName) {
15
+ switch (opName) {
16
+ case 'findUnique':
17
+ case 'findUniqueOrThrow':
18
+ return 'readUnique';
19
+ case 'findMany':
20
+ case 'findFirst':
21
+ case 'findFirstOrThrow':
22
+ case 'findManyPaginated':
23
+ case 'count':
24
+ case 'aggregate':
25
+ case 'groupBy':
26
+ return 'read';
27
+ case 'create':
28
+ return 'create';
29
+ case 'createMany':
30
+ case 'createManyAndReturn':
31
+ return 'createMany';
32
+ case 'update':
33
+ return 'update';
34
+ case 'updateMany':
35
+ case 'updateManyAndReturn':
36
+ return 'updateMany';
37
+ case 'upsert':
38
+ return 'upsert';
39
+ case 'delete':
40
+ return 'delete';
41
+ case 'deleteMany':
42
+ return 'deleteMany';
43
+ default:
44
+ return 'noop';
45
+ }
46
+ }
14
47
  function emitReadOp(meta, modelName) {
15
48
  const c = meta.name.charAt(0).toUpperCase() + meta.name.slice(1);
16
49
  const handlerName = `${modelName}${c}`;
17
50
  const pathValue = pathExpr('basePath', meta.pathSuffix);
51
+ const opKind = opKindFor(meta.name);
18
52
  const postReadBlock = meta.supportsPostRead
19
53
  ? ` if (postReadsEnabled) {
20
54
  const postPath = ${meta.name === 'findMany' ? "basePath ? `${basePath}/read` : '/read'" : `path`}
21
- router.post(postPath, parseBodyAsQuery, setShape(opConfig, 'read'), ...before, ${handlerName} as RequestHandler, ...after, respond)
55
+ router.post(
56
+ postPath,
57
+ parseBodyAsQuery,
58
+ setShape(opConfig, '${opKind}'),
59
+ ...opConfig.operationBefore,
60
+ requireVariantKey(),
61
+ variantBeforeDispatcher(opConfig),
62
+ ${handlerName} as RequestHandler,
63
+ variantAfterDispatcher(opConfig),
64
+ ...opConfig.operationAfter,
65
+ respond,
66
+ )
22
67
  }`
23
68
  : '';
24
69
  return ` if (isEnabled(config.${meta.configKey})) {
25
- const opConfig: OperationConfigLike = (config.${meta.configKey} as OperationConfigLike | undefined) ?? defaultOpConfig
26
- const { before = [], after = [] } = opConfig
70
+ const opConfig = opFor('${meta.configKey}')
27
71
  const path = ${pathValue}
28
- router.get(path, parseQuery, setShape(opConfig, 'read'), ...before, maybeProgressiveSSE(opConfig, core.${meta.coreName}, '${meta.name}'), ${handlerName} as RequestHandler, ...after, respond)
72
+ router.get(
73
+ path,
74
+ parseQuery,
75
+ setShape(opConfig, '${opKind}'),
76
+ ...opConfig.operationBefore,
77
+ requireVariantKey(),
78
+ variantBeforeDispatcher(opConfig),
79
+ maybeProgressiveSSE(opConfig, core.${meta.coreName}, '${meta.name}'),
80
+ ${handlerName} as RequestHandler,
81
+ variantAfterDispatcher(opConfig),
82
+ ...opConfig.operationAfter,
83
+ respond,
84
+ )
29
85
  ${postReadBlock}
30
86
  }`;
31
87
  }
@@ -34,11 +90,21 @@ function emitWriteOp(meta, modelName) {
34
90
  const handlerName = `${modelName}${c}`;
35
91
  const pathValue = pathExpr('basePath', meta.pathSuffix);
36
92
  const respondFn = meta.successStatus === 201 ? 'respondCreated' : 'respond';
93
+ const opKind = opKindFor(meta.name);
37
94
  return ` if (isEnabled(config.${meta.configKey})) {
38
- const opConfig: OperationConfigLike = (config.${meta.configKey} as OperationConfigLike | undefined) ?? defaultOpConfig
39
- const { before = [], after = [] } = opConfig
95
+ const opConfig = opFor('${meta.configKey}')
40
96
  const path = ${pathValue}
41
- router.${meta.method}(path, setShape(opConfig, 'write'), ...before, ${handlerName} as RequestHandler, ...after, ${respondFn})
97
+ router.${meta.method}(
98
+ path,
99
+ setShape(opConfig, '${opKind}'),
100
+ ...opConfig.operationBefore,
101
+ requireVariantKey(),
102
+ variantBeforeDispatcher(opConfig),
103
+ ${handlerName} as RequestHandler,
104
+ variantAfterDispatcher(opConfig),
105
+ ...opConfig.operationAfter,
106
+ ${respondFn},
107
+ )
42
108
  }`;
43
109
  }
44
110
  function generateRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, dropGuard, }) {
@@ -72,10 +138,19 @@ import type {
72
138
  import { parseQueryParams } from '../parseQueryParams${ext}'
73
139
  import { sanitizeKeys, normalizePrefix, getEnv, isPlainObject } from '../misc${ext}'
74
140
  import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
75
- import { validateCountSourceWhere } from '../routeConfig${ext}'
141
+ import {
142
+ normalizeOperation,
143
+ resolveOperationVariantKey,
144
+ validateCountSourceWhere,
145
+ validateOperationConfig,
146
+ validateUpdateEachConfig,
147
+ } from '../routeConfig${ext}'
148
+ import type { NormalizedOperationConfig } from '../routeConfig${ext}'
76
149
  import type { OperationContext } from '../operationRuntime${ext}'
77
150
  import { transformResult } from '../operationRuntime${ext}'
78
151
  import { HttpError, mapError } from '../errorMapper${ext}'
152
+ import { formatGuardVariantResolutionError } from '../guardVariantError${ext}'
153
+ import type { GuardVariantResolution } from '../guardVariantRouting${ext}'
79
154
  import { mergePaginationConfig } from '../pagination${ext}'
80
155
  import {
81
156
  acceptsEventStream,
@@ -86,10 +161,8 @@ import {
86
161
  } from '../sse${ext}'
87
162
  import { relationModels } from '../relationModels${ext}'
88
163
  import { runAutoIncludeProgressive } from '../autoIncludeRuntime${ext}'
89
- import {
90
- resolveDroppedGuardProjection,
91
- applyProjectionToTarget,
92
- } from '../projectionDefaults${ext}'
164
+ import { applyDroppedGuard } from '../projectionDefaults${ext}'
165
+ import type { OpKind } from '../projectionDefaults${ext}'
93
166
  import { MODEL_FIELDS, MODEL_ENUMS } from './${modelName}Metadata${ext}'
94
167
 
95
168
  ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'RequestHandler', guardShapesImport, importStyle, 'express')}
@@ -101,12 +174,25 @@ const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
101
174
  type OperationConfigLike = {
102
175
  before?: RequestHandler[]
103
176
  after?: RequestHandler[]
104
- shape?: Record<string, unknown>
177
+ shape?: unknown
178
+ variants?: Record<
179
+ string,
180
+ {
181
+ shape?: unknown
182
+ before?: RequestHandler[]
183
+ after?: RequestHandler[]
184
+ }
185
+ >
105
186
  pagination?: Partial<PaginationConfig>
106
187
  progressive?: Record<string, ProgressiveVariantConfig>
107
188
  progressiveStages?: Record<string, ProgressiveStage<unknown>>
108
189
  }
109
190
 
191
+ type NormalizedOp = NormalizedOperationConfig<RequestHandler, RequestHandler> & {
192
+ progressive?: Record<string, ProgressiveVariantConfig>
193
+ progressiveStages?: Record<string, ProgressiveStage<unknown>>
194
+ }
195
+
110
196
  type ExtendedRequest = Request & {
111
197
  prisma?: unknown
112
198
  postgres?: unknown
@@ -118,13 +204,20 @@ type LocalsBag = {
118
204
  routeConfig?: { pagination?: PaginationConfig }
119
205
  guardShape?: Record<string, unknown>
120
206
  guardCaller?: string
207
+ guardVariantKey?: string
208
+ guardVariantFailure?: Extract<GuardVariantResolution, { ok: false }>
121
209
  data?: unknown
122
210
  }
123
211
 
124
- const defaultOpConfig: OperationConfigLike = Object.freeze({
125
- before: Object.freeze([]) as unknown as RequestHandler[],
126
- after: Object.freeze([]) as unknown as RequestHandler[],
127
- })
212
+ function normalizeExpressOperation(
213
+ config: OperationConfigLike | undefined,
214
+ ): NormalizedOp {
215
+ return {
216
+ ...normalizeOperation<RequestHandler, RequestHandler>(config),
217
+ progressive: config?.progressive,
218
+ progressiveStages: config?.progressiveStages,
219
+ }
220
+ }
128
221
 
129
222
  function isQueryBuilderEnabled(config: { queryBuilder?: QueryBuilderConfig | false }): boolean {
130
223
  if (config.queryBuilder === false) return false
@@ -143,6 +236,87 @@ function readLocals(res: Response): LocalsBag {
143
236
  return res.locals as LocalsBag
144
237
  }
145
238
 
239
+ function runHandlerSequence(
240
+ handlers: readonly RequestHandler[],
241
+ req: Request,
242
+ res: Response,
243
+ done: (error?: unknown) => void,
244
+ ): void {
245
+ let index = 0
246
+
247
+ const dispatch = (error?: unknown): void => {
248
+ if (error !== undefined) {
249
+ done(error)
250
+ return
251
+ }
252
+
253
+ if (res.writableEnded || res.destroyed) return
254
+
255
+ const handler = handlers[index++]
256
+ if (!handler) {
257
+ done()
258
+ return
259
+ }
260
+
261
+ let settled = false
262
+ const next = (nextError?: unknown): void => {
263
+ if (settled) return
264
+ settled = true
265
+ dispatch(nextError)
266
+ }
267
+
268
+ try {
269
+ const result = handler(req, res, next)
270
+ if (result && typeof (result as Promise<unknown>).then === 'function') {
271
+ void (result as Promise<unknown>).catch((promiseError) => {
272
+ if (settled) return
273
+ settled = true
274
+ dispatch(promiseError)
275
+ })
276
+ }
277
+ } catch (handlerError) {
278
+ if (settled) return
279
+ settled = true
280
+ dispatch(handlerError)
281
+ }
282
+ }
283
+
284
+ dispatch()
285
+ }
286
+
287
+ function variantBeforeDispatcher(opConfig: NormalizedOp): RequestHandler {
288
+ return (req, res, next) => {
289
+ const key = readLocals(res).guardVariantKey
290
+ const hooks =
291
+ key !== undefined
292
+ ? (opConfig.variantHooks[key]?.before ?? [])
293
+ : []
294
+ runHandlerSequence(hooks, req, res, next)
295
+ }
296
+ }
297
+
298
+ function variantAfterDispatcher(opConfig: NormalizedOp): RequestHandler {
299
+ return (req, res, next) => {
300
+ const key = readLocals(res).guardVariantKey
301
+ const hooks =
302
+ key !== undefined
303
+ ? (opConfig.variantHooks[key]?.after ?? [])
304
+ : []
305
+ runHandlerSequence(hooks, req, res, next)
306
+ }
307
+ }
308
+
309
+ function requireVariantKey(): RequestHandler {
310
+ return (_req, res, next) => {
311
+ const failure = readLocals(res).guardVariantFailure
312
+ if (!failure) {
313
+ next()
314
+ return
315
+ }
316
+ next(new HttpError(400, formatGuardVariantResolutionError(failure)))
317
+ }
318
+ }
319
+
146
320
  export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${modelName}RouteConfig<TCtx, TPrisma> = {}) {
147
321
  validateCountSourceWhere(config.pagination?.countSource, '${modelName} pagination')
148
322
  validateCountSourceWhere(
@@ -154,6 +328,12 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
154
328
 
155
329
  const isEnabled = (value: unknown): boolean => value !== false && !!(config.enableAll || value)
156
330
 
331
+ const opFor = (key: string): NormalizedOp => {
332
+ const raw = (config as unknown as Record<string, unknown>)[key] as OperationConfigLike | undefined
333
+ validateOperationConfig(raw, '${modelName}.' + key)
334
+ return normalizeExpressOperation(raw)
335
+ }
336
+
157
337
  const customPrefix = normalizePrefix(config.customUrlPrefix || '')
158
338
  const modelPrefix = config.addModelPrefix !== false ? '/${modelNameLower}' : ''
159
339
  const basePath = customPrefix + modelPrefix
@@ -240,7 +420,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
240
420
  next()
241
421
  }
242
422
 
243
- const setShape = (opConfig: OperationConfigLike, kind: 'read' | 'write'): RequestHandler => {
423
+ const setShape = (opConfig: NormalizedOp, opKind: OpKind): RequestHandler => {
244
424
  return async (req, res, next) => {
245
425
  try {
246
426
  const locals = readLocals(res)
@@ -248,35 +428,54 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
248
428
  if (merged) {
249
429
  locals.routeConfig = { pagination: merged }
250
430
  }
431
+
251
432
  const headerName = config.guard?.variantHeader || 'x-api-variant'
252
433
  const headerValue = req.get(headerName)
253
434
  const caller = config.guard?.resolveVariant?.(req) ?? headerValue ?? undefined
254
- if (caller) locals.guardCaller = caller
255
- if (opConfig.shape) {
435
+ if (typeof caller === 'string') locals.guardCaller = caller
436
+
437
+ const resolution = resolveOperationVariantKey(opConfig.guardRouting, caller)
438
+ if (!resolution.ok) {
439
+ locals.guardVariantFailure = resolution
440
+ next()
441
+ return
442
+ }
443
+
444
+ const resolvedKey =
445
+ opConfig.guardRouting.kind === 'named'
446
+ ? resolution.key
447
+ : undefined
448
+ if (resolvedKey !== undefined) locals.guardVariantKey = resolvedKey
449
+
450
+ if (opConfig.guardShape) {
256
451
  if (!DROP_GUARD) {
257
- locals.guardShape = opConfig.shape
452
+ locals.guardShape = opConfig.guardShape
258
453
  } else {
259
- const projection = await resolveDroppedGuardProjection(
260
- opConfig.shape,
261
- caller,
454
+ await applyDroppedGuard(
455
+ opConfig.guardShape,
456
+ resolvedKey,
262
457
  buildResolveContext(req),
263
- )
264
- if (projection) {
265
- if (kind === 'read') {
458
+ opKind,
459
+ {
460
+ readQuery: locals.parsedQuery,
461
+ writeBody: isPlainObject(req.body)
462
+ ? (req.body as Record<string, unknown>)
463
+ : undefined,
464
+ },
465
+ () => {
266
466
  if (!locals.parsedQuery) locals.parsedQuery = {}
267
- applyProjectionToTarget(locals.parsedQuery, projection)
268
- } else {
467
+ return locals.parsedQuery
468
+ },
469
+ () => {
269
470
  if (!isPlainObject(req.body)) {
270
471
  req.body = {}
271
472
  }
272
- applyProjectionToTarget(
273
- req.body as Record<string, unknown>,
274
- projection,
275
- )
276
- }
277
- }
473
+ return req.body as Record<string, unknown>
474
+ },
475
+ )
278
476
  }
279
477
  }
478
+
280
479
  next()
281
480
  } catch (err) {
282
481
  next(mapError(err))
@@ -285,7 +484,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
285
484
  }
286
485
 
287
486
  const maybeProgressiveSSE = (
288
- opConfig: OperationConfigLike,
487
+ opConfig: NormalizedOp,
289
488
  coreFn: (ctx: OperationContext) => Promise<unknown>,
290
489
  baseOp: string,
291
490
  ): RequestHandler => {
@@ -295,8 +494,9 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
295
494
  if (!acceptsEventStream(req.headers.accept)) return next()
296
495
 
297
496
  const locals = readLocals(res)
298
- const variant = locals.guardCaller
299
- const progressiveConfig = variant ? opConfig.progressive?.[variant] : undefined
497
+ const variant = locals.guardVariantKey ?? locals.guardCaller
498
+ const progressiveConfig =
499
+ variant !== undefined ? opConfig.progressive?.[variant] : undefined
300
500
 
301
501
  try {
302
502
  if (!progressiveConfig || progressiveConfig.enabled === false) {
@@ -424,19 +624,20 @@ ${readOpBlocks}
424
624
  ${writeOpBlocks}
425
625
 
426
626
  if (config.updateEach) {
427
- const opConfig: OperationConfigLike = (config.updateEach as OperationConfigLike | undefined) ?? defaultOpConfig
428
- if ((!opConfig.before || opConfig.before.length === 0) && _env.NODE_ENV !== 'production') {
627
+ const rawUpdateEach = config.updateEach as unknown as OperationConfigLike
628
+ validateUpdateEachConfig(rawUpdateEach, '${modelName}.updateEach')
629
+ const opConfig = normalizeExpressOperation(rawUpdateEach)
630
+ if (opConfig.operationBefore.length === 0 && _env.NODE_ENV !== 'production') {
429
631
  console.warn(
430
632
  '[${modelName}Router] updateEach is enabled without a before hook. ' +
431
633
  'This endpoint bypasses guard shapes and should be protected by authentication middleware.',
432
634
  )
433
635
  }
434
- const { before = [], after = [] } = opConfig
435
636
  const path = basePath ? \`\${basePath}/each\` : '/each'
436
637
  router.post(
437
638
  path,
438
- setShape(opConfig, 'write'),
439
- ...before,
639
+ setShape(opConfig, 'noop'),
640
+ ...opConfig.operationBefore,
440
641
  async (req: Request, res: Response, next: NextFunction) => {
441
642
  try {
442
643
  if (!Array.isArray(req.body)) {
@@ -449,7 +650,7 @@ ${writeOpBlocks}
449
650
  next(mapError(err))
450
651
  }
451
652
  },
452
- ...after,
653
+ ...opConfig.operationAfter,
453
654
  respond,
454
655
  )
455
656
  }
@@ -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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"}