prisma-generator-express 1.57.0 → 1.58.1

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 (42) hide show
  1. package/README.md +111 -29
  2. package/dist/copy/misc.js +25 -6
  3. package/dist/copy/misc.js.map +1 -1
  4. package/dist/generators/generateFastifyHandler.js +11 -0
  5. package/dist/generators/generateFastifyHandler.js.map +1 -1
  6. package/dist/generators/generateHonoHandler.js +14 -20
  7. package/dist/generators/generateHonoHandler.js.map +1 -1
  8. package/dist/generators/generateImportPrismaStatement.js +7 -1
  9. package/dist/generators/generateImportPrismaStatement.js.map +1 -1
  10. package/dist/generators/generateOperationCore.js +58 -17
  11. package/dist/generators/generateOperationCore.js.map +1 -1
  12. package/dist/generators/generateRouteConfigType.js +12 -7
  13. package/dist/generators/generateRouteConfigType.js.map +1 -1
  14. package/dist/generators/generateRouter.js +57 -32
  15. package/dist/generators/generateRouter.js.map +1 -1
  16. package/dist/generators/generateRouterFastify.js +235 -191
  17. package/dist/generators/generateRouterFastify.js.map +1 -1
  18. package/dist/generators/generateRouterHono.d.ts +2 -3
  19. package/dist/generators/generateRouterHono.js +131 -89
  20. package/dist/generators/generateRouterHono.js.map +1 -1
  21. package/dist/index.js +8 -6
  22. package/dist/index.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/copy/autoIncludeRuntime.ts +9 -5
  25. package/src/copy/buildModelOpenApi.ts +96 -0
  26. package/src/copy/docsRenderer.ts +577 -174
  27. package/src/copy/materializedRouter.ts +40 -1
  28. package/src/copy/misc.ts +23 -6
  29. package/src/copy/operationDefinitions.ts +10 -0
  30. package/src/copy/operationRuntime.ts +28 -9
  31. package/src/copy/routeConfig.express.ts +9 -9
  32. package/src/copy/routeConfig.hono.ts +63 -5
  33. package/src/copy/routeConfig.ts +44 -22
  34. package/src/generators/generateFastifyHandler.ts +12 -0
  35. package/src/generators/generateHonoHandler.ts +15 -20
  36. package/src/generators/generateImportPrismaStatement.ts +10 -1
  37. package/src/generators/generateOperationCore.ts +58 -17
  38. package/src/generators/generateRouteConfigType.ts +13 -8
  39. package/src/generators/generateRouter.ts +57 -32
  40. package/src/generators/generateRouterFastify.ts +235 -191
  41. package/src/generators/generateRouterHono.ts +131 -91
  42. package/src/index.ts +11 -7
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateHonoRouterFunction = generateHonoRouterFunction;
4
4
  const generateRouteConfigType_1 = require("./generateRouteConfigType");
5
5
  const importExt_1 = require("../utils/importExt");
6
- function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, dropGuard, }) {
6
+ function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, dropGuard, }) {
7
7
  const ext = (0, importExt_1.importExt)(importStyle);
8
8
  const modelName = model.name;
9
9
  const modelNameLower = modelName.toLowerCase();
@@ -27,10 +27,9 @@ function generateHonoRouterFunction({ model, enums, guardShapesImport, importSty
27
27
  values: e.values.map((v) => ({ name: v.name })),
28
28
  }));
29
29
  return `import { Hono } from 'hono'
30
- import type { Context, Next } from 'hono'
30
+ import type { Context } from 'hono'
31
31
  import type { ContentfulStatusCode } from 'hono/utils/http-status'
32
32
  import { HTTPException } from 'hono/http-exception'
33
- import { startQueryBuilder } from '../queryBuilder${ext}'
34
33
  import {
35
34
  ${modelName}FindUnique,
36
35
  ${modelName}FindUniqueOrThrow,
@@ -50,41 +49,49 @@ import {
50
49
  ${modelName}Aggregate,
51
50
  ${modelName}Count,
52
51
  ${modelName}GroupBy,
52
+ ${modelName}UpdateEach,
53
53
  } from './${modelName}Handlers${ext}'
54
54
  import type {
55
55
  RouteConfig,
56
- HonoHookHandler,
56
+ HonoBeforeHook,
57
+ HonoAfterHook,
57
58
  HonoEnvBase,
58
59
  HonoInternalVariables,
59
60
  GeneratedHonoEnv,
60
61
  WriteStrategy,
61
- FindManyPaginatedMode,
62
62
  PaginationConfig,
63
63
  } from '../routeConfig.target${ext}'
64
64
  import { parseQueryParams } from '../parseQueryParams${ext}'
65
- import { sanitizeKeys, normalizePrefix, getEnv } from '../misc${ext}'
65
+ import { normalizePrefix, getEnv, sanitizeKeys } from '../misc${ext}'
66
66
  import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
67
+ import { validateCountSourceWhere } from '../routeConfig${ext}'
67
68
  import {
68
69
  mapError,
69
70
  transformResult,
70
71
  mergePaginationConfig,
71
- type OperationContext,
72
72
  } from '../operationRuntime${ext}'
73
73
 
74
- ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'HonoHookHandler', guardShapesImport, importStyle, 'hono')}
74
+ ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'HonoBeforeHook', guardShapesImport, importStyle, 'hono')}
75
75
  const _env = getEnv()
76
76
 
77
77
  const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
78
- const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
79
78
  const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
80
79
 
80
+ type JsonLike =
81
+ | string
82
+ | number
83
+ | boolean
84
+ | null
85
+ | JsonLike[]
86
+ | { [k: string]: JsonLike }
87
+
81
88
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
82
89
 
83
90
  const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
84
91
 
85
92
  type OperationConfigLike<TEnv extends HonoEnvBase> = {
86
- before?: HonoHookHandler<TEnv>[]
87
- after?: HonoHookHandler<TEnv>[]
93
+ before?: HonoBeforeHook<TEnv>[]
94
+ after?: HonoAfterHook<TEnv>[]
88
95
  shape?: Record<string, unknown>
89
96
  pagination?: Partial<PaginationConfig>
90
97
  }
@@ -94,20 +101,7 @@ const defaultOpConfig = Object.freeze({
94
101
  after: Object.freeze([]),
95
102
  }) as unknown as OperationConfigLike<HonoEnvBase>
96
103
 
97
- type HandlerContext = Context<{ Variables: HonoInternalVariables & { findManyPaginatedMode?: FindManyPaginatedMode } }>
98
-
99
- function isQueryBuilderEnabled(config: RouteConfig): boolean {
100
- if (config.queryBuilder === false) return false
101
- if (typeof config.queryBuilder === 'object' && config.queryBuilder.enabled === false) return false
102
- if (_env.NODE_ENV === 'production') return false
103
- return true
104
- }
105
-
106
- function getQueryBuilderConfig(config: RouteConfig) {
107
- if (config.queryBuilder === false) return null
108
- if (typeof config.queryBuilder === 'object') return config.queryBuilder
109
- return {}
110
- }
104
+ type HandlerContext = Context<{ Variables: HonoInternalVariables }>
111
105
 
112
106
  async function parseQueryMiddleware(c: HandlerContext): Promise<void> {
113
107
  const raw = c.req.query() as Record<string, unknown>
@@ -139,7 +133,20 @@ async function parseWriteBodyMiddleware(c: HandlerContext): Promise<void> {
139
133
  if (!body || typeof body !== 'object' || Array.isArray(body)) {
140
134
  throw new HTTPException(400, { message: 'Request body must be a JSON object' })
141
135
  }
142
- c.set('body', sanitizeKeys(body as Record<string, unknown>))
136
+ c.set('body', body)
137
+ }
138
+
139
+ async function parseUpdateEachBodyMiddleware(c: HandlerContext): Promise<void> {
140
+ let body: unknown
141
+ try {
142
+ body = await c.req.json()
143
+ } catch {
144
+ throw new HTTPException(400, { message: 'updateEach body must be an array of { where, data } items' })
145
+ }
146
+ if (!Array.isArray(body)) {
147
+ throw new HTTPException(400, { message: 'updateEach body must be an array of { where, data } items' })
148
+ }
149
+ c.set('body', body)
143
150
  }
144
151
 
145
152
  function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
@@ -151,7 +158,6 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
151
158
  if (merged) {
152
159
  c.set('routeConfig', { pagination: merged })
153
160
  }
154
- ;(c as unknown as HandlerContext).set('findManyPaginatedMode', FIND_MANY_PAGINATED_MODE)
155
161
  const headerName = config.guard?.variantHeader || 'x-api-variant'
156
162
  const headerValue = c.req.header(headerName)
157
163
  const caller = config.guard?.resolveVariant?.(c) ?? headerValue ?? undefined
@@ -162,26 +168,24 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
162
168
  }
163
169
  }
164
170
 
165
- async function runHooks<TEnv extends HonoEnvBase>(
166
- hooks: HonoHookHandler<TEnv>[],
171
+ async function runBeforeHooks<TEnv extends HonoEnvBase>(
172
+ hooks: HonoBeforeHook<TEnv>[],
167
173
  c: Context<GeneratedHonoEnv<TEnv>>,
168
174
  ): Promise<Response | undefined> {
169
175
  for (const hook of hooks) {
170
- let advanced = false
171
- const next: Next = async () => {
172
- advanced = true
173
- }
174
- const result = await hook(c, next)
176
+ const result = await hook(c)
177
+ if (result instanceof Response) return result
178
+ }
179
+ return undefined
180
+ }
181
+
182
+ async function runAfterHooks<TEnv extends HonoEnvBase>(
183
+ hooks: HonoAfterHook<TEnv>[],
184
+ c: Context<GeneratedHonoEnv<TEnv>>,
185
+ ): Promise<Response | undefined> {
186
+ for (const hook of hooks) {
187
+ const result = await hook(c)
175
188
  if (result instanceof Response) return result
176
- if (!advanced) {
177
- if (_env.NODE_ENV !== 'production') {
178
- console.warn(
179
- '[hono-router] Hook returned without calling next() or returning a Response. ' +
180
- 'Use \`return c.json(...)\` to short-circuit, or \`await next()\` to continue.',
181
- )
182
- }
183
- return c.body(null) ?? undefined
184
- }
185
189
  }
186
190
  return undefined
187
191
  }
@@ -192,73 +196,85 @@ function sendResult(c: HandlerContext): Response {
192
196
  if (data === undefined) {
193
197
  throw new HTTPException(500, { message: 'No data set by handler' })
194
198
  }
195
- return c.json(transformResult(data) as Record<string, unknown>, status as ContentfulStatusCode)
199
+ return c.json(transformResult(data) as JsonLike, status as ContentfulStatusCode)
196
200
  }
197
201
 
198
202
  function sendError(c: HandlerContext, error: unknown): Response {
203
+ if (error instanceof HTTPException) {
204
+ return c.json({ message: error.message }, error.status as ContentfulStatusCode)
205
+ }
199
206
  const httpError = mapError(error)
200
207
  return c.json({ message: httpError.message }, httpError.status as ContentfulStatusCode)
201
208
  }
202
209
 
203
210
  export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extends HonoEnvBase = HonoEnvBase>(config: ${modelName}RouteConfig<TCtx, TPrisma, TEnv> = {}): Hono<GeneratedHonoEnv<TEnv>> {
211
+ validateCountSourceWhere(config.pagination?.countSource, '${modelName} pagination')
212
+ validateCountSourceWhere(
213
+ (config.findManyPaginated && typeof config.findManyPaginated === 'object' ? config.findManyPaginated : undefined)?.pagination?.countSource,
214
+ '${modelName} findManyPaginated pagination',
215
+ )
216
+
204
217
  const app = new Hono<GeneratedHonoEnv<TEnv>>()
205
218
 
219
+ const isEnabled = (value: unknown): boolean => value !== false && !!(config.enableAll || value)
220
+
206
221
  const customPrefix = normalizePrefix(config.customUrlPrefix || '')
207
222
  const modelPrefix = config.addModelPrefix !== false ? '/${modelNameLower}' : ''
208
223
  const basePath = customPrefix + modelPrefix
209
224
 
210
225
  const openApiDisabled = config.disableOpenApi === true
211
226
  || (config.disableOpenApi !== false && (
212
- _env.DISABLE_OPENAPI === 'true'
213
- || _env.NODE_ENV === 'production'
227
+ _env.NODE_ENV === 'production'
228
+ || _env.DISABLE_OPENAPI === 'true'
214
229
  ))
215
230
 
216
231
  const postReadsEnabled = !config.disablePostReads
217
232
 
218
- const openApiJsonSpec = openApiDisabled
219
- ? null
220
- : buildModelOpenApi(
233
+ let _openApiJsonCache: unknown = undefined
234
+ const getOpenApiJson = (): unknown => {
235
+ if (_openApiJsonCache === undefined) {
236
+ _openApiJsonCache = buildModelOpenApi(
221
237
  '${modelName}',
222
238
  MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
223
239
  MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
224
240
  config as RouteConfig,
225
241
  { format: 'json', writeStrategy: WRITE_STRATEGY },
226
242
  )
227
- const openApiYamlSpec = openApiDisabled
228
- ? null
229
- : buildModelOpenApi(
243
+ }
244
+ return _openApiJsonCache
245
+ }
246
+ let _openApiYamlCache: string | undefined = undefined
247
+ const getOpenApiYaml = (): string => {
248
+ if (_openApiYamlCache === undefined) {
249
+ _openApiYamlCache = buildModelOpenApi(
230
250
  '${modelName}',
231
251
  MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
232
252
  MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
233
253
  config as RouteConfig,
234
254
  { format: 'yaml', writeStrategy: WRITE_STRATEGY },
235
- )
236
-
237
- if (isQueryBuilderEnabled(config as RouteConfig)) {
238
- const qbConfig = getQueryBuilderConfig(config as RouteConfig)
239
- if (qbConfig) {
240
- try {
241
- startQueryBuilder(qbConfig)
242
- } catch (err) {
243
- if (_env.NODE_ENV !== 'production') console.warn('[query-builder]', err)
244
- }
255
+ ) as string
245
256
  }
257
+ return _openApiYamlCache
258
+ }
259
+
260
+ if (config.queryBuilder && config.queryBuilder !== false && _env.NODE_ENV !== 'production') {
261
+ console.warn(
262
+ '[${modelName}Router] queryBuilder config is present but Hono target does not auto-start it. ' +
263
+ 'Run \`npx prisma-query-builder-ui\` in a separate process.',
264
+ )
246
265
  }
247
266
 
248
267
  app.onError((err, c) => {
249
- if (err instanceof HTTPException) {
250
- return c.json({ message: err.message }, err.status as ContentfulStatusCode)
251
- }
252
268
  return sendError(c as HandlerContext, err)
253
269
  })
254
270
 
255
271
  if (!openApiDisabled) {
256
272
  const openapiJsonPath = basePath ? \`\${basePath}/openapi.json\` : '/openapi.json'
257
273
  const openapiYamlPath = basePath ? \`\${basePath}/openapi.yaml\` : '/openapi.yaml'
258
- app.get(openapiJsonPath, (c) => c.json(openApiJsonSpec as Record<string, unknown>))
274
+ app.get(openapiJsonPath, (c) => c.json(getOpenApiJson() as JsonLike))
259
275
  app.get(openapiYamlPath, (c) => {
260
276
  c.header('Content-Type', 'application/yaml')
261
- return c.body(openApiYamlSpec as string)
277
+ return c.body(getOpenApiYaml())
262
278
  })
263
279
  }
264
280
 
@@ -271,10 +287,10 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
271
287
  await parseFn(c as unknown as HandlerContext)
272
288
  makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
273
289
  const { before = [], after = [] } = opConfig
274
- const beforeResp = await runHooks<TEnv>(before, c)
290
+ const beforeResp = await runBeforeHooks<TEnv>(before, c)
275
291
  if (beforeResp) return beforeResp
276
292
  await handlerFn(c as unknown as HandlerContext)
277
- const afterResp = await runHooks<TEnv>(after, c)
293
+ const afterResp = await runAfterHooks<TEnv>(after, c)
278
294
  if (afterResp) return afterResp
279
295
  return sendResult(c as unknown as HandlerContext)
280
296
  } catch (error: unknown) {
@@ -290,10 +306,10 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
290
306
  await parseWriteBodyMiddleware(c as unknown as HandlerContext)
291
307
  makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
292
308
  const { before = [], after = [] } = opConfig
293
- const beforeResp = await runHooks<TEnv>(before, c)
309
+ const beforeResp = await runBeforeHooks<TEnv>(before, c)
294
310
  if (beforeResp) return beforeResp
295
311
  await handlerFn(c as unknown as HandlerContext)
296
- const afterResp = await runHooks<TEnv>(after, c)
312
+ const afterResp = await runAfterHooks<TEnv>(after, c)
297
313
  if (afterResp) return afterResp
298
314
  return sendResult(c as unknown as HandlerContext)
299
315
  } catch (error: unknown) {
@@ -306,55 +322,55 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
306
322
  ?? (defaultOpConfig as OperationConfigLike<TEnv>)
307
323
  }
308
324
 
309
- if (config.enableAll || config.findFirst) {
325
+ if (isEnabled(config.findFirst)) {
310
326
  const opConfig = opFor('findFirst')
311
327
  const path = basePath ? \`\${basePath}/first\` : '/first'
312
328
  app.get(path, handleRead(opConfig, ${modelName}FindFirst, parseQueryMiddleware))
313
329
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindFirst, parseBodyAsQueryMiddleware))
314
330
  }
315
- if (config.enableAll || config.findFirstOrThrow) {
331
+ if (isEnabled(config.findFirstOrThrow)) {
316
332
  const opConfig = opFor('findFirstOrThrow')
317
333
  const path = basePath ? \`\${basePath}/first/strict\` : '/first/strict'
318
334
  app.get(path, handleRead(opConfig, ${modelName}FindFirstOrThrow, parseQueryMiddleware))
319
335
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindFirstOrThrow, parseBodyAsQueryMiddleware))
320
336
  }
321
- if (config.enableAll || config.findManyPaginated) {
337
+ if (isEnabled(config.findManyPaginated)) {
322
338
  const opConfig = opFor('findManyPaginated')
323
339
  const path = basePath ? \`\${basePath}/paginated\` : '/paginated'
324
340
  app.get(path, handleRead(opConfig, ${modelName}FindManyPaginated, parseQueryMiddleware))
325
341
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindManyPaginated, parseBodyAsQueryMiddleware))
326
342
  }
327
- if (config.enableAll || config.aggregate) {
343
+ if (isEnabled(config.aggregate)) {
328
344
  const opConfig = opFor('aggregate')
329
345
  const path = basePath ? \`\${basePath}/aggregate\` : '/aggregate'
330
346
  app.get(path, handleRead(opConfig, ${modelName}Aggregate, parseQueryMiddleware))
331
347
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}Aggregate, parseBodyAsQueryMiddleware))
332
348
  }
333
- if (config.enableAll || config.count) {
349
+ if (isEnabled(config.count)) {
334
350
  const opConfig = opFor('count')
335
351
  const path = basePath ? \`\${basePath}/count\` : '/count'
336
352
  app.get(path, handleRead(opConfig, ${modelName}Count, parseQueryMiddleware))
337
353
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}Count, parseBodyAsQueryMiddleware))
338
354
  }
339
- if (config.enableAll || config.groupBy) {
355
+ if (isEnabled(config.groupBy)) {
340
356
  const opConfig = opFor('groupBy')
341
357
  const path = basePath ? \`\${basePath}/groupby\` : '/groupby'
342
358
  app.get(path, handleRead(opConfig, ${modelName}GroupBy, parseQueryMiddleware))
343
359
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}GroupBy, parseBodyAsQueryMiddleware))
344
360
  }
345
- if (config.enableAll || config.findUniqueOrThrow) {
361
+ if (isEnabled(config.findUniqueOrThrow)) {
346
362
  const opConfig = opFor('findUniqueOrThrow')
347
363
  const path = basePath ? \`\${basePath}/unique/strict\` : '/unique/strict'
348
364
  app.get(path, handleRead(opConfig, ${modelName}FindUniqueOrThrow, parseQueryMiddleware))
349
365
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindUniqueOrThrow, parseBodyAsQueryMiddleware))
350
366
  }
351
- if (config.enableAll || config.findUnique) {
367
+ if (isEnabled(config.findUnique)) {
352
368
  const opConfig = opFor('findUnique')
353
369
  const path = basePath ? \`\${basePath}/unique\` : '/unique'
354
370
  app.get(path, handleRead(opConfig, ${modelName}FindUnique, parseQueryMiddleware))
355
371
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindUnique, parseBodyAsQueryMiddleware))
356
372
  }
357
- if (config.enableAll || config.findMany) {
373
+ if (isEnabled(config.findMany)) {
358
374
  const opConfig = opFor('findMany')
359
375
  const path = basePath || '/'
360
376
  app.get(path, handleRead(opConfig, ${modelName}FindMany, parseQueryMiddleware))
@@ -364,52 +380,78 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
364
380
  }
365
381
  }
366
382
 
367
- if (config.enableAll || config.createManyAndReturn) {
383
+ if (isEnabled(config.createManyAndReturn)) {
368
384
  const opConfig = opFor('createManyAndReturn')
369
385
  const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
370
386
  app.post(path, handleWrite(opConfig, ${modelName}CreateManyAndReturn))
371
387
  }
372
- if (config.enableAll || config.createMany) {
388
+ if (isEnabled(config.createMany)) {
373
389
  const opConfig = opFor('createMany')
374
390
  const path = basePath ? \`\${basePath}/many\` : '/many'
375
391
  app.post(path, handleWrite(opConfig, ${modelName}CreateMany))
376
392
  }
377
- if (config.enableAll || config.create) {
393
+ if (isEnabled(config.create)) {
378
394
  const opConfig = opFor('create')
379
395
  const path = basePath || '/'
380
396
  app.post(path, handleWrite(opConfig, ${modelName}Create))
381
397
  }
382
- if (config.enableAll || config.updateManyAndReturn) {
398
+ if (isEnabled(config.updateManyAndReturn)) {
383
399
  const opConfig = opFor('updateManyAndReturn')
384
400
  const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
385
401
  app.put(path, handleWrite(opConfig, ${modelName}UpdateManyAndReturn))
386
402
  }
387
- if (config.enableAll || config.updateMany) {
403
+ if (isEnabled(config.updateMany)) {
388
404
  const opConfig = opFor('updateMany')
389
405
  const path = basePath ? \`\${basePath}/many\` : '/many'
390
406
  app.put(path, handleWrite(opConfig, ${modelName}UpdateMany))
391
407
  }
392
- if (config.enableAll || config.update) {
408
+ if (isEnabled(config.update)) {
393
409
  const opConfig = opFor('update')
394
410
  const path = basePath || '/'
395
411
  app.put(path, handleWrite(opConfig, ${modelName}Update))
396
412
  }
397
- if (config.enableAll || config.upsert) {
413
+ if (isEnabled(config.upsert)) {
398
414
  const opConfig = opFor('upsert')
399
415
  const path = basePath || '/'
400
416
  app.patch(path, handleWrite(opConfig, ${modelName}Upsert))
401
417
  }
402
- if (config.enableAll || config.deleteMany) {
418
+ if (isEnabled(config.deleteMany)) {
403
419
  const opConfig = opFor('deleteMany')
404
420
  const path = basePath ? \`\${basePath}/many\` : '/many'
405
421
  app.delete(path, handleWrite(opConfig, ${modelName}DeleteMany))
406
422
  }
407
- if (config.enableAll || config.delete) {
423
+ if (isEnabled(config.delete)) {
408
424
  const opConfig = opFor('delete')
409
425
  const path = basePath || '/'
410
426
  app.delete(path, handleWrite(opConfig, ${modelName}Delete))
411
427
  }
412
428
 
429
+ if (config.updateEach) {
430
+ const opConfig = (config.updateEach as unknown as OperationConfigLike<TEnv> | undefined) ?? (defaultOpConfig as OperationConfigLike<TEnv>)
431
+ if ((!opConfig.before || opConfig.before.length === 0) && _env.NODE_ENV !== 'production') {
432
+ console.warn(
433
+ '[${modelName}Router] updateEach is enabled without a before hook. ' +
434
+ 'This endpoint bypasses guard shapes and should be protected by authentication middleware.',
435
+ )
436
+ }
437
+ const path = basePath ? \`\${basePath}/each\` : '/each'
438
+ app.post(path, async (c: Context<GeneratedHonoEnv<TEnv>>): Promise<Response> => {
439
+ try {
440
+ await parseUpdateEachBodyMiddleware(c as unknown as HandlerContext)
441
+ makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
442
+ const { before = [], after = [] } = opConfig
443
+ const beforeResp = await runBeforeHooks<TEnv>(before, c)
444
+ if (beforeResp) return beforeResp
445
+ await ${modelName}UpdateEach(c as unknown as HandlerContext)
446
+ const afterResp = await runAfterHooks<TEnv>(after, c)
447
+ if (afterResp) return afterResp
448
+ return sendResult(c as unknown as HandlerContext)
449
+ } catch (error: unknown) {
450
+ return sendError(c as unknown as HandlerContext, error)
451
+ }
452
+ })
453
+ }
454
+
413
455
  return app
414
456
  }
415
457
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"generateRouterHono.js","sourceRoot":"","sources":["../../src/generators/generateRouterHono.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateRouterHono.js","sourceRoot":"","sources":["../../src/generators/generateRouterHono.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ const writeFileSafely_1 = require("./utils/writeFileSafely");
21
21
  const copyFiles_1 = require("./utils/copyFiles");
22
22
  const resolveImportStyle_1 = require("./utils/resolveImportStyle");
23
23
  const constants_1 = require("./constants");
24
- const GENERATOR_OFF_RE = /\bgenerator off\b/;
24
+ const GENERATOR_OFF_RE = /^\s*generator off\s*$/m;
25
25
  function getTarget(options) {
26
26
  const raw = String(options.generator.config.target ?? 'express').toLowerCase();
27
27
  if (raw === 'express' || raw === 'fastify' || raw === 'hono')
@@ -63,7 +63,10 @@ function getDropGuard(options) {
63
63
  return true;
64
64
  if (lower === 'false' || lower === '0')
65
65
  return false;
66
- throw new Error(`Invalid dropGuard "${raw}". Expected "true" or "false".`);
66
+ console.warn(`[prisma-generator-express] dropGuard="${raw}" is not a recognized boolean value. ` +
67
+ `Treating as false. Expected "true", "false", "1", "0", or "" (unset). ` +
68
+ `If you used env("VAR_NAME"), set VAR_NAME to "true" or "false".`);
69
+ return false;
67
70
  }
68
71
  function validateClientGeneratorPresent(options) {
69
72
  (0, generateImportPrismaStatement_1.getRelativeClientPath)(options, options.dmmf.datamodel.models[0]?.name ?? 'Model');
@@ -72,7 +75,7 @@ function validateClientGeneratorPresent(options) {
72
75
  onManifest() {
73
76
  return {
74
77
  version: require('../package.json').version,
75
- defaultOutput: '../generated/express',
78
+ defaultOutput: '../generated/output',
76
79
  prettyName: constants_1.GENERATOR_NAME,
77
80
  };
78
81
  },
@@ -81,7 +84,7 @@ function validateClientGeneratorPresent(options) {
81
84
  const writeStrategy = getWriteStrategy(options);
82
85
  const findManyPaginatedMode = getFindManyPaginatedMode(options);
83
86
  const dropGuard = getDropGuard(options);
84
- const manifestDefaultAbs = path_1.default.resolve(__dirname, '..', 'generated', target);
87
+ const manifestDefaultAbs = path_1.default.resolve(__dirname, '..', 'generated', 'output');
85
88
  const currentOutput = options.generator.output?.value;
86
89
  const isUnsetOrManifestDefault = !currentOutput || path_1.default.resolve(currentOutput) === manifestDefaultAbs;
87
90
  if (isUnsetOrManifestDefault) {
@@ -96,7 +99,7 @@ function validateClientGeneratorPresent(options) {
96
99
  console.log(` Import style: ${importStyle}`);
97
100
  console.log(` Write strategy: ${writeStrategy}`);
98
101
  console.log(` findManyPaginated mode: ${findManyPaginatedMode}`);
99
- console.log(` Drop guard: ${dropGuard}`);
102
+ console.log(` Drop guard (generator): ${dropGuard}${dropGuard ? '' : ' (runtime E2E=true will also drop guard)'}`);
100
103
  if (options.dmmf.datamodel.models.length > 0) {
101
104
  validateClientGeneratorPresent(options);
102
105
  }
@@ -151,7 +154,6 @@ function validateClientGeneratorPresent(options) {
151
154
  guardShapesImport,
152
155
  importStyle,
153
156
  writeStrategy,
154
- findManyPaginatedMode,
155
157
  dropGuard,
156
158
  })
157
159
  : (0, generateRouter_1.generateRouterFunction)({
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "prisma-generator-express",
3
3
  "description": "Prisma generator for Express, Fastify, and Hono CRUD APIs with OpenAPI documentation",
4
- "version": "1.57.0",
4
+ "version": "1.58.1",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
@@ -393,11 +393,13 @@ async function runAutoIncludeSingle(
393
393
  const publicState: Record<string, unknown> = { ...publicRoot }
394
394
  for (const [k, v] of Object.entries(publicRoot)) {
395
395
  if (isClientGone()) return
396
- sendSSEField(res, k, v)
396
+ const okField = sendSSEField(res, k, v)
397
+ if (!okField) return
397
398
  }
398
399
 
399
400
  if (isClientGone()) return
400
- sendSSEProgress(res, 'root', 0, plan.stages.length)
401
+ const okStart = sendSSEProgress(res, 'root', 0, plan.stages.length)
402
+ if (!okStart) return
401
403
 
402
404
  const groups = groupStagesByDepth(plan.stages)
403
405
  let completed = 0
@@ -433,7 +435,8 @@ async function runAutoIncludeSingle(
433
435
  }
434
436
  if (isAborted()) return
435
437
  completed++
436
- sendSSEProgress(res, stage.relationPath, completed, plan.stages.length)
438
+ const ok = sendSSEProgress(res, stage.relationPath, completed, plan.stages.length)
439
+ if (!ok) return
437
440
  })
438
441
  }
439
442
 
@@ -699,7 +702,8 @@ async function processFindManyStages(args: {
699
702
  }
700
703
  if (isAborted()) return
701
704
  completed++
702
- sendSSEProgress(res, stage.relationPath, completed, plan.stages.length)
705
+ const ok = sendSSEProgress(res, stage.relationPath, completed, plan.stages.length)
706
+ if (!ok) return
703
707
  })
704
708
  }
705
709
  return stageErrorMessage
@@ -875,7 +879,7 @@ async function runAutoIncludePaginated(
875
879
  const skip = typeof rootArgs.skip === 'number' ? rootArgs.skip : 0
876
880
  const takeRaw = typeof rootArgs.take === 'number' ? rootArgs.take : rootRows.length
877
881
  const absTake = Math.abs(takeRaw)
878
- const hasMore = rootRows.length >= absTake && skip + rootRows.length < total
882
+ const hasMore = absTake > 0 && rootRows.length >= absTake && skip + rootRows.length < total
879
883
 
880
884
  const { publicRows, rootPairs } = buildRootPairs(rootRows, plan.internalFieldPaths)
881
885