prisma-generator-express 1.56.4 → 1.58.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 (44) hide show
  1. package/README.md +286 -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 +43 -0
  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 +44 -15
  13. package/dist/generators/generateRouteConfigType.js.map +1 -1
  14. package/dist/generators/generateRouter.d.ts +2 -1
  15. package/dist/generators/generateRouter.js +60 -34
  16. package/dist/generators/generateRouter.js.map +1 -1
  17. package/dist/generators/generateRouterFastify.d.ts +2 -1
  18. package/dist/generators/generateRouterFastify.js +238 -193
  19. package/dist/generators/generateRouterFastify.js.map +1 -1
  20. package/dist/generators/generateRouterHono.d.ts +2 -1
  21. package/dist/generators/generateRouterHono.js +124 -89
  22. package/dist/generators/generateRouterHono.js.map +1 -1
  23. package/dist/index.js +22 -4
  24. package/dist/index.js.map +1 -1
  25. package/package.json +1 -1
  26. package/src/copy/autoIncludeRuntime.ts +9 -5
  27. package/src/copy/buildModelOpenApi.ts +96 -0
  28. package/src/copy/docsRenderer.ts +577 -174
  29. package/src/copy/materializedRouter.ts +40 -1
  30. package/src/copy/misc.ts +23 -6
  31. package/src/copy/operationDefinitions.ts +10 -0
  32. package/src/copy/operationRuntime.ts +28 -9
  33. package/src/copy/routeConfig.express.ts +9 -9
  34. package/src/copy/routeConfig.hono.ts +63 -5
  35. package/src/copy/routeConfig.ts +44 -20
  36. package/src/generators/generateFastifyHandler.ts +12 -0
  37. package/src/generators/generateHonoHandler.ts +15 -20
  38. package/src/generators/generateImportPrismaStatement.ts +13 -0
  39. package/src/generators/generateOperationCore.ts +58 -17
  40. package/src/generators/generateRouteConfigType.ts +52 -17
  41. package/src/generators/generateRouter.ts +61 -33
  42. package/src/generators/generateRouterFastify.ts +239 -192
  43. package/src/generators/generateRouterHono.ts +125 -88
  44. package/src/index.ts +25 -5
@@ -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, }) {
6
+ function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, 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,40 +49,41 @@ 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}'
78
+ const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
79
79
 
80
80
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
81
81
 
82
82
  const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
83
83
 
84
84
  type OperationConfigLike<TEnv extends HonoEnvBase> = {
85
- before?: HonoHookHandler<TEnv>[]
86
- after?: HonoHookHandler<TEnv>[]
85
+ before?: HonoBeforeHook<TEnv>[]
86
+ after?: HonoAfterHook<TEnv>[]
87
87
  shape?: Record<string, unknown>
88
88
  pagination?: Partial<PaginationConfig>
89
89
  }
@@ -93,20 +93,7 @@ const defaultOpConfig = Object.freeze({
93
93
  after: Object.freeze([]),
94
94
  }) as unknown as OperationConfigLike<HonoEnvBase>
95
95
 
96
- type HandlerContext = Context<{ Variables: HonoInternalVariables & { findManyPaginatedMode?: FindManyPaginatedMode } }>
97
-
98
- function isQueryBuilderEnabled(config: RouteConfig): boolean {
99
- if (config.queryBuilder === false) return false
100
- if (typeof config.queryBuilder === 'object' && config.queryBuilder.enabled === false) return false
101
- if (_env.NODE_ENV === 'production') return false
102
- return true
103
- }
104
-
105
- function getQueryBuilderConfig(config: RouteConfig) {
106
- if (config.queryBuilder === false) return null
107
- if (typeof config.queryBuilder === 'object') return config.queryBuilder
108
- return {}
109
- }
96
+ type HandlerContext = Context<{ Variables: HonoInternalVariables }>
110
97
 
111
98
  async function parseQueryMiddleware(c: HandlerContext): Promise<void> {
112
99
  const raw = c.req.query() as Record<string, unknown>
@@ -138,7 +125,20 @@ async function parseWriteBodyMiddleware(c: HandlerContext): Promise<void> {
138
125
  if (!body || typeof body !== 'object' || Array.isArray(body)) {
139
126
  throw new HTTPException(400, { message: 'Request body must be a JSON object' })
140
127
  }
141
- c.set('body', sanitizeKeys(body as Record<string, unknown>))
128
+ c.set('body', body)
129
+ }
130
+
131
+ async function parseUpdateEachBodyMiddleware(c: HandlerContext): Promise<void> {
132
+ let body: unknown
133
+ try {
134
+ body = await c.req.json()
135
+ } catch {
136
+ throw new HTTPException(400, { message: 'updateEach body must be an array of { where, data } items' })
137
+ }
138
+ if (!Array.isArray(body)) {
139
+ throw new HTTPException(400, { message: 'updateEach body must be an array of { where, data } items' })
140
+ }
141
+ c.set('body', body)
142
142
  }
143
143
 
144
144
  function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
@@ -150,37 +150,34 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
150
150
  if (merged) {
151
151
  c.set('routeConfig', { pagination: merged })
152
152
  }
153
- ;(c as unknown as HandlerContext).set('findManyPaginatedMode', FIND_MANY_PAGINATED_MODE)
154
153
  const headerName = config.guard?.variantHeader || 'x-api-variant'
155
154
  const headerValue = c.req.header(headerName)
156
155
  const caller = config.guard?.resolveVariant?.(c) ?? headerValue ?? undefined
157
156
  if (caller) c.set('guardCaller', caller)
158
- if (opConfig.shape) {
157
+ if (opConfig.shape && !DROP_GUARD) {
159
158
  c.set('guardShape', opConfig.shape)
160
159
  }
161
160
  }
162
161
  }
163
162
 
164
- async function runHooks<TEnv extends HonoEnvBase>(
165
- hooks: HonoHookHandler<TEnv>[],
163
+ async function runBeforeHooks<TEnv extends HonoEnvBase>(
164
+ hooks: HonoBeforeHook<TEnv>[],
166
165
  c: Context<GeneratedHonoEnv<TEnv>>,
167
166
  ): Promise<Response | undefined> {
168
167
  for (const hook of hooks) {
169
- let advanced = false
170
- const next: Next = async () => {
171
- advanced = true
172
- }
173
- const result = await hook(c, next)
168
+ const result = await hook(c)
169
+ if (result instanceof Response) return result
170
+ }
171
+ return undefined
172
+ }
173
+
174
+ async function runAfterHooks<TEnv extends HonoEnvBase>(
175
+ hooks: HonoAfterHook<TEnv>[],
176
+ c: Context<GeneratedHonoEnv<TEnv>>,
177
+ ): Promise<Response | undefined> {
178
+ for (const hook of hooks) {
179
+ const result = await hook(c)
174
180
  if (result instanceof Response) return result
175
- if (!advanced) {
176
- if (_env.NODE_ENV !== 'production') {
177
- console.warn(
178
- '[hono-router] Hook returned without calling next() or returning a Response. ' +
179
- 'Use \`return c.json(...)\` to short-circuit, or \`await next()\` to continue.',
180
- )
181
- }
182
- return c.body(null) ?? undefined
183
- }
184
181
  }
185
182
  return undefined
186
183
  }
@@ -195,69 +192,81 @@ function sendResult(c: HandlerContext): Response {
195
192
  }
196
193
 
197
194
  function sendError(c: HandlerContext, error: unknown): Response {
195
+ if (error instanceof HTTPException) {
196
+ return c.json({ message: error.message }, error.status as ContentfulStatusCode)
197
+ }
198
198
  const httpError = mapError(error)
199
199
  return c.json({ message: httpError.message }, httpError.status as ContentfulStatusCode)
200
200
  }
201
201
 
202
202
  export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extends HonoEnvBase = HonoEnvBase>(config: ${modelName}RouteConfig<TCtx, TPrisma, TEnv> = {}): Hono<GeneratedHonoEnv<TEnv>> {
203
+ validateCountSourceWhere(config.pagination?.countSource, '${modelName} pagination')
204
+ validateCountSourceWhere(
205
+ (config.findManyPaginated && typeof config.findManyPaginated === 'object' ? config.findManyPaginated : undefined)?.pagination?.countSource,
206
+ '${modelName} findManyPaginated pagination',
207
+ )
208
+
203
209
  const app = new Hono<GeneratedHonoEnv<TEnv>>()
204
210
 
211
+ const isEnabled = (value: unknown): boolean => value !== false && !!(config.enableAll || value)
212
+
205
213
  const customPrefix = normalizePrefix(config.customUrlPrefix || '')
206
214
  const modelPrefix = config.addModelPrefix !== false ? '/${modelNameLower}' : ''
207
215
  const basePath = customPrefix + modelPrefix
208
216
 
209
217
  const openApiDisabled = config.disableOpenApi === true
210
218
  || (config.disableOpenApi !== false && (
211
- _env.DISABLE_OPENAPI === 'true'
212
- || _env.NODE_ENV === 'production'
219
+ _env.NODE_ENV === 'production'
220
+ || _env.DISABLE_OPENAPI === 'true'
213
221
  ))
214
222
 
215
223
  const postReadsEnabled = !config.disablePostReads
216
224
 
217
- const openApiJsonSpec = openApiDisabled
218
- ? null
219
- : buildModelOpenApi(
225
+ let _openApiJsonCache: unknown = undefined
226
+ const getOpenApiJson = (): unknown => {
227
+ if (_openApiJsonCache === undefined) {
228
+ _openApiJsonCache = buildModelOpenApi(
220
229
  '${modelName}',
221
230
  MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
222
231
  MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
223
232
  config as RouteConfig,
224
233
  { format: 'json', writeStrategy: WRITE_STRATEGY },
225
234
  )
226
- const openApiYamlSpec = openApiDisabled
227
- ? null
228
- : buildModelOpenApi(
235
+ }
236
+ return _openApiJsonCache
237
+ }
238
+ let _openApiYamlCache: string | undefined = undefined
239
+ const getOpenApiYaml = (): string => {
240
+ if (_openApiYamlCache === undefined) {
241
+ _openApiYamlCache = buildModelOpenApi(
229
242
  '${modelName}',
230
243
  MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
231
244
  MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
232
245
  config as RouteConfig,
233
246
  { format: 'yaml', writeStrategy: WRITE_STRATEGY },
234
- )
235
-
236
- if (isQueryBuilderEnabled(config as RouteConfig)) {
237
- const qbConfig = getQueryBuilderConfig(config as RouteConfig)
238
- if (qbConfig) {
239
- try {
240
- startQueryBuilder(qbConfig)
241
- } catch (err) {
242
- if (_env.NODE_ENV !== 'production') console.warn('[query-builder]', err)
243
- }
247
+ ) as string
244
248
  }
249
+ return _openApiYamlCache
250
+ }
251
+
252
+ if (config.queryBuilder && config.queryBuilder !== false && _env.NODE_ENV !== 'production') {
253
+ console.warn(
254
+ '[${modelName}Router] queryBuilder config is present but Hono target does not auto-start it. ' +
255
+ 'Run \`npx prisma-query-builder-ui\` in a separate process.',
256
+ )
245
257
  }
246
258
 
247
259
  app.onError((err, c) => {
248
- if (err instanceof HTTPException) {
249
- return c.json({ message: err.message }, err.status as ContentfulStatusCode)
250
- }
251
260
  return sendError(c as HandlerContext, err)
252
261
  })
253
262
 
254
263
  if (!openApiDisabled) {
255
264
  const openapiJsonPath = basePath ? \`\${basePath}/openapi.json\` : '/openapi.json'
256
265
  const openapiYamlPath = basePath ? \`\${basePath}/openapi.yaml\` : '/openapi.yaml'
257
- app.get(openapiJsonPath, (c) => c.json(openApiJsonSpec as Record<string, unknown>))
266
+ app.get(openapiJsonPath, (c) => c.json(getOpenApiJson() as Record<string, unknown>))
258
267
  app.get(openapiYamlPath, (c) => {
259
268
  c.header('Content-Type', 'application/yaml')
260
- return c.body(openApiYamlSpec as string)
269
+ return c.body(getOpenApiYaml())
261
270
  })
262
271
  }
263
272
 
@@ -270,10 +279,10 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
270
279
  await parseFn(c as unknown as HandlerContext)
271
280
  makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
272
281
  const { before = [], after = [] } = opConfig
273
- const beforeResp = await runHooks<TEnv>(before, c)
282
+ const beforeResp = await runBeforeHooks<TEnv>(before, c)
274
283
  if (beforeResp) return beforeResp
275
284
  await handlerFn(c as unknown as HandlerContext)
276
- const afterResp = await runHooks<TEnv>(after, c)
285
+ const afterResp = await runAfterHooks<TEnv>(after, c)
277
286
  if (afterResp) return afterResp
278
287
  return sendResult(c as unknown as HandlerContext)
279
288
  } catch (error: unknown) {
@@ -289,10 +298,10 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
289
298
  await parseWriteBodyMiddleware(c as unknown as HandlerContext)
290
299
  makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
291
300
  const { before = [], after = [] } = opConfig
292
- const beforeResp = await runHooks<TEnv>(before, c)
301
+ const beforeResp = await runBeforeHooks<TEnv>(before, c)
293
302
  if (beforeResp) return beforeResp
294
303
  await handlerFn(c as unknown as HandlerContext)
295
- const afterResp = await runHooks<TEnv>(after, c)
304
+ const afterResp = await runAfterHooks<TEnv>(after, c)
296
305
  if (afterResp) return afterResp
297
306
  return sendResult(c as unknown as HandlerContext)
298
307
  } catch (error: unknown) {
@@ -305,55 +314,55 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
305
314
  ?? (defaultOpConfig as OperationConfigLike<TEnv>)
306
315
  }
307
316
 
308
- if (config.enableAll || config.findFirst) {
317
+ if (isEnabled(config.findFirst)) {
309
318
  const opConfig = opFor('findFirst')
310
319
  const path = basePath ? \`\${basePath}/first\` : '/first'
311
320
  app.get(path, handleRead(opConfig, ${modelName}FindFirst, parseQueryMiddleware))
312
321
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindFirst, parseBodyAsQueryMiddleware))
313
322
  }
314
- if (config.enableAll || config.findFirstOrThrow) {
323
+ if (isEnabled(config.findFirstOrThrow)) {
315
324
  const opConfig = opFor('findFirstOrThrow')
316
325
  const path = basePath ? \`\${basePath}/first/strict\` : '/first/strict'
317
326
  app.get(path, handleRead(opConfig, ${modelName}FindFirstOrThrow, parseQueryMiddleware))
318
327
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindFirstOrThrow, parseBodyAsQueryMiddleware))
319
328
  }
320
- if (config.enableAll || config.findManyPaginated) {
329
+ if (isEnabled(config.findManyPaginated)) {
321
330
  const opConfig = opFor('findManyPaginated')
322
331
  const path = basePath ? \`\${basePath}/paginated\` : '/paginated'
323
332
  app.get(path, handleRead(opConfig, ${modelName}FindManyPaginated, parseQueryMiddleware))
324
333
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindManyPaginated, parseBodyAsQueryMiddleware))
325
334
  }
326
- if (config.enableAll || config.aggregate) {
335
+ if (isEnabled(config.aggregate)) {
327
336
  const opConfig = opFor('aggregate')
328
337
  const path = basePath ? \`\${basePath}/aggregate\` : '/aggregate'
329
338
  app.get(path, handleRead(opConfig, ${modelName}Aggregate, parseQueryMiddleware))
330
339
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}Aggregate, parseBodyAsQueryMiddleware))
331
340
  }
332
- if (config.enableAll || config.count) {
341
+ if (isEnabled(config.count)) {
333
342
  const opConfig = opFor('count')
334
343
  const path = basePath ? \`\${basePath}/count\` : '/count'
335
344
  app.get(path, handleRead(opConfig, ${modelName}Count, parseQueryMiddleware))
336
345
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}Count, parseBodyAsQueryMiddleware))
337
346
  }
338
- if (config.enableAll || config.groupBy) {
347
+ if (isEnabled(config.groupBy)) {
339
348
  const opConfig = opFor('groupBy')
340
349
  const path = basePath ? \`\${basePath}/groupby\` : '/groupby'
341
350
  app.get(path, handleRead(opConfig, ${modelName}GroupBy, parseQueryMiddleware))
342
351
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}GroupBy, parseBodyAsQueryMiddleware))
343
352
  }
344
- if (config.enableAll || config.findUniqueOrThrow) {
353
+ if (isEnabled(config.findUniqueOrThrow)) {
345
354
  const opConfig = opFor('findUniqueOrThrow')
346
355
  const path = basePath ? \`\${basePath}/unique/strict\` : '/unique/strict'
347
356
  app.get(path, handleRead(opConfig, ${modelName}FindUniqueOrThrow, parseQueryMiddleware))
348
357
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindUniqueOrThrow, parseBodyAsQueryMiddleware))
349
358
  }
350
- if (config.enableAll || config.findUnique) {
359
+ if (isEnabled(config.findUnique)) {
351
360
  const opConfig = opFor('findUnique')
352
361
  const path = basePath ? \`\${basePath}/unique\` : '/unique'
353
362
  app.get(path, handleRead(opConfig, ${modelName}FindUnique, parseQueryMiddleware))
354
363
  if (postReadsEnabled) app.post(path, handleRead(opConfig, ${modelName}FindUnique, parseBodyAsQueryMiddleware))
355
364
  }
356
- if (config.enableAll || config.findMany) {
365
+ if (isEnabled(config.findMany)) {
357
366
  const opConfig = opFor('findMany')
358
367
  const path = basePath || '/'
359
368
  app.get(path, handleRead(opConfig, ${modelName}FindMany, parseQueryMiddleware))
@@ -363,52 +372,78 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
363
372
  }
364
373
  }
365
374
 
366
- if (config.enableAll || config.createManyAndReturn) {
375
+ if (isEnabled(config.createManyAndReturn)) {
367
376
  const opConfig = opFor('createManyAndReturn')
368
377
  const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
369
378
  app.post(path, handleWrite(opConfig, ${modelName}CreateManyAndReturn))
370
379
  }
371
- if (config.enableAll || config.createMany) {
380
+ if (isEnabled(config.createMany)) {
372
381
  const opConfig = opFor('createMany')
373
382
  const path = basePath ? \`\${basePath}/many\` : '/many'
374
383
  app.post(path, handleWrite(opConfig, ${modelName}CreateMany))
375
384
  }
376
- if (config.enableAll || config.create) {
385
+ if (isEnabled(config.create)) {
377
386
  const opConfig = opFor('create')
378
387
  const path = basePath || '/'
379
388
  app.post(path, handleWrite(opConfig, ${modelName}Create))
380
389
  }
381
- if (config.enableAll || config.updateManyAndReturn) {
390
+ if (isEnabled(config.updateManyAndReturn)) {
382
391
  const opConfig = opFor('updateManyAndReturn')
383
392
  const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
384
393
  app.put(path, handleWrite(opConfig, ${modelName}UpdateManyAndReturn))
385
394
  }
386
- if (config.enableAll || config.updateMany) {
395
+ if (isEnabled(config.updateMany)) {
387
396
  const opConfig = opFor('updateMany')
388
397
  const path = basePath ? \`\${basePath}/many\` : '/many'
389
398
  app.put(path, handleWrite(opConfig, ${modelName}UpdateMany))
390
399
  }
391
- if (config.enableAll || config.update) {
400
+ if (isEnabled(config.update)) {
392
401
  const opConfig = opFor('update')
393
402
  const path = basePath || '/'
394
403
  app.put(path, handleWrite(opConfig, ${modelName}Update))
395
404
  }
396
- if (config.enableAll || config.upsert) {
405
+ if (isEnabled(config.upsert)) {
397
406
  const opConfig = opFor('upsert')
398
407
  const path = basePath || '/'
399
408
  app.patch(path, handleWrite(opConfig, ${modelName}Upsert))
400
409
  }
401
- if (config.enableAll || config.deleteMany) {
410
+ if (isEnabled(config.deleteMany)) {
402
411
  const opConfig = opFor('deleteMany')
403
412
  const path = basePath ? \`\${basePath}/many\` : '/many'
404
413
  app.delete(path, handleWrite(opConfig, ${modelName}DeleteMany))
405
414
  }
406
- if (config.enableAll || config.delete) {
415
+ if (isEnabled(config.delete)) {
407
416
  const opConfig = opFor('delete')
408
417
  const path = basePath || '/'
409
418
  app.delete(path, handleWrite(opConfig, ${modelName}Delete))
410
419
  }
411
420
 
421
+ if (config.updateEach) {
422
+ const opConfig = (config.updateEach as unknown as OperationConfigLike<TEnv> | undefined) ?? (defaultOpConfig as OperationConfigLike<TEnv>)
423
+ if ((!opConfig.before || opConfig.before.length === 0) && _env.NODE_ENV !== 'production') {
424
+ console.warn(
425
+ '[${modelName}Router] updateEach is enabled without a before hook. ' +
426
+ 'This endpoint bypasses guard shapes and should be protected by authentication middleware.',
427
+ )
428
+ }
429
+ const path = basePath ? \`\${basePath}/each\` : '/each'
430
+ app.post(path, async (c: Context<GeneratedHonoEnv<TEnv>>): Promise<Response> => {
431
+ try {
432
+ await parseUpdateEachBodyMiddleware(c as unknown as HandlerContext)
433
+ makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
434
+ const { before = [], after = [] } = opConfig
435
+ const beforeResp = await runBeforeHooks<TEnv>(before, c)
436
+ if (beforeResp) return beforeResp
437
+ await ${modelName}UpdateEach(c as unknown as HandlerContext)
438
+ const afterResp = await runAfterHooks<TEnv>(after, c)
439
+ if (afterResp) return afterResp
440
+ return sendResult(c as unknown as HandlerContext)
441
+ } catch (error: unknown) {
442
+ return sendError(c as unknown as HandlerContext, error)
443
+ }
444
+ })
445
+ }
446
+
412
447
  return app
413
448
  }
414
449
  `;
@@ -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')
@@ -54,6 +54,17 @@ function getFindManyPaginatedMode(options) {
54
54
  return 'promiseAll';
55
55
  throw new Error(`Invalid findManyPaginatedMode "${raw}". Expected "transaction" or "promiseAll".`);
56
56
  }
57
+ function getDropGuard(options) {
58
+ const raw = options.generator.config.dropGuard;
59
+ if (raw === undefined || raw === null || raw === '')
60
+ return false;
61
+ const lower = String(raw).toLowerCase();
62
+ if (lower === 'true' || lower === '1')
63
+ return true;
64
+ if (lower === 'false' || lower === '0')
65
+ return false;
66
+ throw new Error(`Invalid dropGuard "${raw}". Expected "true" or "false".`);
67
+ }
57
68
  function validateClientGeneratorPresent(options) {
58
69
  (0, generateImportPrismaStatement_1.getRelativeClientPath)(options, options.dmmf.datamodel.models[0]?.name ?? 'Model');
59
70
  }
@@ -61,7 +72,7 @@ function validateClientGeneratorPresent(options) {
61
72
  onManifest() {
62
73
  return {
63
74
  version: require('../package.json').version,
64
- defaultOutput: '../generated/express',
75
+ defaultOutput: '../generated/output',
65
76
  prettyName: constants_1.GENERATOR_NAME,
66
77
  };
67
78
  },
@@ -69,7 +80,8 @@ function validateClientGeneratorPresent(options) {
69
80
  const target = getTarget(options);
70
81
  const writeStrategy = getWriteStrategy(options);
71
82
  const findManyPaginatedMode = getFindManyPaginatedMode(options);
72
- const manifestDefaultAbs = path_1.default.resolve(__dirname, '..', 'generated', target);
83
+ const dropGuard = getDropGuard(options);
84
+ const manifestDefaultAbs = path_1.default.resolve(__dirname, '..', 'generated', 'output');
73
85
  const currentOutput = options.generator.output?.value;
74
86
  const isUnsetOrManifestDefault = !currentOutput || path_1.default.resolve(currentOutput) === manifestDefaultAbs;
75
87
  if (isUnsetOrManifestDefault) {
@@ -84,6 +96,7 @@ function validateClientGeneratorPresent(options) {
84
96
  console.log(` Import style: ${importStyle}`);
85
97
  console.log(` Write strategy: ${writeStrategy}`);
86
98
  console.log(` findManyPaginated mode: ${findManyPaginatedMode}`);
99
+ console.log(` Drop guard (generator): ${dropGuard}${dropGuard ? '' : ' (runtime E2E=true will also drop guard)'}`);
87
100
  if (options.dmmf.datamodel.models.length > 0) {
88
101
  validateClientGeneratorPresent(options);
89
102
  }
@@ -101,7 +114,9 @@ function validateClientGeneratorPresent(options) {
101
114
  continue;
102
115
  }
103
116
  modelNames.push(model.name);
104
- const guardShapesImport = (0, generateImportPrismaStatement_1.getGuardShapesImport)(options, model.name);
117
+ const guardShapesImport = dropGuard
118
+ ? null
119
+ : (0, generateImportPrismaStatement_1.getGuardShapesImport)(options, model.name);
105
120
  await (0, writeFileSafely_1.writeFileSafely)({
106
121
  content: (0, generateOperationCore_1.generateModelCore)({
107
122
  model: model,
@@ -127,6 +142,7 @@ function validateClientGeneratorPresent(options) {
127
142
  importStyle,
128
143
  writeStrategy,
129
144
  findManyPaginatedMode,
145
+ dropGuard,
130
146
  })
131
147
  : target === 'hono'
132
148
  ? (0, generateRouterHono_1.generateHonoRouterFunction)({
@@ -136,6 +152,7 @@ function validateClientGeneratorPresent(options) {
136
152
  importStyle,
137
153
  writeStrategy,
138
154
  findManyPaginatedMode,
155
+ dropGuard,
139
156
  })
140
157
  : (0, generateRouter_1.generateRouterFunction)({
141
158
  model: model,
@@ -144,6 +161,7 @@ function validateClientGeneratorPresent(options) {
144
161
  importStyle,
145
162
  writeStrategy,
146
163
  findManyPaginatedMode,
164
+ dropGuard,
147
165
  });
148
166
  await (0, writeFileSafely_1.writeFileSafely)({
149
167
  content: routerContent,
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":";;;;;AAAA,+DAIiC;AACjC,gDAAuB;AACvB,gFAA4E;AAC5E,gFAA4E;AAC5E,0EAAsE;AACtE,gEAAoE;AACpE,8EAAkF;AAClF,wEAA4E;AAC5E,kFAA8E;AAC9E,0EAAsE;AACtE,wFAAoF;AACpF,8EAAsE;AACtE,4EAG0C;AAC1C,8FAGmD;AACnD,6DAAyD;AACzD,iDAA6C;AAC7C,mEAA4E;AAC5E,2CAKoB;AAEpB,MAAM,gBAAgB,GAAG,wBAAwB,CAAA;AAEjD,SAAS,SAAS,CAAC,OAAyB;IAC1C,MAAM,GAAG,GAAG,MAAM,CACf,OAAO,CAAC,SAAS,CAAC,MAAkC,CAAC,MAAM,IAAI,SAAS,CAC1E,CAAC,WAAW,EAAE,CAAA;IACf,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,GAAG,CAAA;IACxE,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,8CAA8C,CACrE,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAyB;IACjD,MAAM,GAAG,GAAG,MAAM,CACf,OAAO,CAAC,SAAS,CAAC,MAAkC,CAAC,aAAa;QACjE,SAAS,CACZ,CAAA;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,IAAI,KAAK,KAAK,qBAAqB;QAAE,OAAO,qBAAqB,CAAA;IACjE,IAAI,KAAK,KAAK,gBAAgB,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CACV,6GAA6G,CAC9G,CAAA;QACD,OAAO,qBAAqB,CAAA;IAC9B,CAAC;IACD,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,aAAa,CAAA;IACjD,MAAM,IAAI,KAAK,CACb,0BAA0B,GAAG,iEAAiE,CAC/F,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAyB;IAEzB,MAAM,GAAG,GAAG,MAAM,CACf,OAAO,CAAC,SAAS,CAAC,MAAkC;SAClD,qBAAqB,IAAI,YAAY,CACzC,CAAA;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,aAAa,CAAA;IACjD,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,YAAY,CAAA;IAC/C,MAAM,IAAI,KAAK,CACb,kCAAkC,GAAG,4CAA4C,CAClF,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAyB;IAC7C,MAAM,GAAG,GAAI,OAAO,CAAC,SAAS,CAAC,MAAkC,CAAC,SAAS,CAAA;IAC3E,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IACvC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAClD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,KAAK,CAAA;IACpD,MAAM,IAAI,KAAK,CACb,sBAAsB,GAAG,gCAAgC,CAC1D,CAAA;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAyB;IAC/D,IAAA,qDAAqB,EACnB,OAAO,EACP,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,OAAO,CAClD,CAAA;AACH,CAAC;AAED,IAAA,mCAAgB,EAAC;IACf,UAAU;QACR,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO;YAC3C,aAAa,EAAE,qBAAqB;YACpC,UAAU,EAAE,0BAAc;SAC3B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAyB;QACxC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;QACjC,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAC/C,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;QAC/D,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;QAEvC,MAAM,kBAAkB,GAAG,cAAI,CAAC,OAAO,CACrC,SAAS,EACT,IAAI,EACJ,WAAW,EACX,QAAQ,CACT,CAAA;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAA;QACrD,MAAM,wBAAwB,GAC5B,CAAC,aAAa,IAAI,cAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,kBAAkB,CAAA;QAEtE,IAAI,wBAAwB,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YAClD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;YAC5D,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;QACpE,CAAC;QAED,MAAM,WAAW,GAAG,IAAA,uCAAkB,EAAC,OAAO,CAAC,CAAA;QAE/C,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACnE,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,EAAE,CAAC,CAAA;QAClC,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAA;QACjD,OAAO,CAAC,GAAG,CAAC,6BAA6B,qBAAqB,EAAE,CAAC,CAAA;QACjE,OAAO,CAAC,GAAG,CACT,6BAA6B,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0CAA0C,EAAE,CACvG,CAAA;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,8BAA8B,CAAC,OAAO,CAAC,CAAA;QACzC,CAAC;QAED,MAAM,IAAA,qBAAS,EAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;QAE7C,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,MAAM,eAAe,GAInB,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,+CAAsB;YACxB,CAAC,CAAC,MAAM,KAAK,MAAM;gBACjB,CAAC,CAAC,yCAAmB;gBACrB,CAAC,CAAC,+CAAsB,CAAA;QAE9B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAsB,CAAA;QAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,aAAa,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,kBAAkB,CAAC,CAAA;gBACxD,SAAQ;YACV,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAE3B,MAAM,iBAAiB,GAAG,SAAS;gBACjC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAA,oDAAoB,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAE7C,MAAM,IAAA,iCAAe,EAAC;gBACpB,OAAO,EAAE,IAAA,yCAAiB,EAAC;oBACzB,KAAK,EAAE,KAAmB;oBAC1B,WAAW;oBACX,aAAa;oBACb,qBAAqB;iBACtB,CAAC;gBACF,OAAO;gBACP,KAAK,EAAE,KAAmB;gBAC1B,SAAS,EAAE,MAAM;aAClB,CAAC,CAAA;YAEF,MAAM,IAAA,iCAAe,EAAC;gBACpB,OAAO,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,KAAmB,EAAE,WAAW,EAAE,CAAC;gBACrE,OAAO;gBACP,KAAK,EAAE,KAAmB;gBAC1B,SAAS,EAAE,UAAU;aACtB,CAAC,CAAA;YAEF,MAAM,aAAa,GACjB,MAAM,KAAK,SAAS;gBAClB,CAAC,CAAC,IAAA,qDAA6B,EAAC;oBAC5B,KAAK,EAAE,KAAmB;oBAC1B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAA6B;oBAC3D,iBAAiB;oBACjB,WAAW;oBACX,aAAa;oBACb,qBAAqB;oBACrB,SAAS;iBACV,CAAC;gBACJ,CAAC,CAAC,MAAM,KAAK,MAAM;oBACjB,CAAC,CAAC,IAAA,+CAA0B,EAAC;wBACzB,KAAK,EAAE,KAAmB;wBAC1B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAA6B;wBAC3D,iBAAiB;wBACjB,WAAW;wBACX,aAAa;wBACb,qBAAqB;wBACrB,SAAS;qBACV,CAAC;oBACJ,CAAC,CAAC,IAAA,uCAAsB,EAAC;wBACrB,KAAK,EAAE,KAAmB;wBAC1B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAA6B;wBAC3D,iBAAiB;wBACjB,WAAW;wBACX,aAAa;wBACb,qBAAqB;wBACrB,SAAS;qBACV,CAAC,CAAA;YAEV,MAAM,IAAA,iCAAe,EAAC;gBACpB,OAAO,EAAE,aAAa;gBACtB,OAAO;gBACP,KAAK,EAAE,KAAmB;gBAC1B,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAA;YAEF,MAAM,IAAA,iCAAe,EAAC;gBACpB,OAAO,EAAE,IAAA,iDAAuB,EAAC;oBAC/B,KAAK,EAAE,KAAmB;oBAC1B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAA6B;oBAC3D,MAAM;oBACN,WAAW;oBACX,aAAa;iBACd,CAAC;gBACF,OAAO;gBACP,KAAK,EAAE,KAAmB;gBAC1B,SAAS,EAAE,MAAM;aAClB,CAAC,CAAA;YAEF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAA,iCAAe,EAAC;oBACpB,OAAO,EAAE,IAAA,2CAAoB,EAAC;wBAC5B,KAAK,EAAE,KAAmB;wBAC1B,SAAS;wBACT,WAAW;qBACZ,CAAC;oBACF,OAAO;oBACP,KAAK,EAAE,KAAmB;oBAC1B,SAAS,EAAE,WAAW;iBACvB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAA,iCAAe,EAAC;gBACpB,OAAO,EAAE,IAAA,kDAA2B,EAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;gBACjE,OAAO;gBACP,SAAS,EAAE,qBAAqB;aACjC,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,IAAA,iCAAe,EAAC;YACpB,OAAO,EAAE,IAAA,yCAAmB,EAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC;YAC7D,OAAO;YACP,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAA;QAEF,MAAM,IAAA,iCAAe,EAAC;YACpB,OAAO,EAAE,IAAA,uDAA0B,EAAC,OAAO,CAAC;YAC5C,OAAO;YACP,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAA;QAEF,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAA;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,MAAM,YAAY,MAAM,GAAG,CAAC,CAAA;QACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;CACF,CAAC,CAAA"}
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.56.4",
4
+ "version": "1.58.0",
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