prisma-generator-express 1.55.0 → 1.56.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 (39) hide show
  1. package/README.md +131 -12
  2. package/dist/constants.d.ts +1 -0
  3. package/dist/generators/generateFastifyHandler.js +3 -1
  4. package/dist/generators/generateFastifyHandler.js.map +1 -1
  5. package/dist/generators/generateHonoHandler.js +3 -1
  6. package/dist/generators/generateHonoHandler.js.map +1 -1
  7. package/dist/generators/generateOperationCore.d.ts +2 -1
  8. package/dist/generators/generateOperationCore.js +38 -36
  9. package/dist/generators/generateOperationCore.js.map +1 -1
  10. package/dist/generators/generateRouteConfigType.js +2 -1
  11. package/dist/generators/generateRouteConfigType.js.map +1 -1
  12. package/dist/generators/generateRouter.d.ts +3 -2
  13. package/dist/generators/generateRouter.js +16 -5
  14. package/dist/generators/generateRouter.js.map +1 -1
  15. package/dist/generators/generateRouterFastify.d.ts +3 -2
  16. package/dist/generators/generateRouterFastify.js +19 -7
  17. package/dist/generators/generateRouterFastify.js.map +1 -1
  18. package/dist/generators/generateRouterHono.d.ts +3 -2
  19. package/dist/generators/generateRouterHono.js +24 -14
  20. package/dist/generators/generateRouterHono.js.map +1 -1
  21. package/dist/index.js +20 -1
  22. package/dist/index.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/constants.ts +3 -1
  25. package/src/copy/autoIncludeRuntime.ts +60 -35
  26. package/src/copy/docsRenderer.ts +5 -4
  27. package/src/copy/operationRuntime.ts +94 -9
  28. package/src/copy/routeConfig.express.ts +6 -0
  29. package/src/copy/routeConfig.fastify.ts +7 -1
  30. package/src/copy/routeConfig.hono.ts +8 -2
  31. package/src/copy/routeConfig.ts +21 -5
  32. package/src/generators/generateFastifyHandler.ts +3 -1
  33. package/src/generators/generateHonoHandler.ts +3 -1
  34. package/src/generators/generateOperationCore.ts +42 -37
  35. package/src/generators/generateRouteConfigType.ts +2 -2
  36. package/src/generators/generateRouter.ts +18 -5
  37. package/src/generators/generateRouterFastify.ts +21 -7
  38. package/src/generators/generateRouterHono.ts +26 -14
  39. package/src/index.ts +24 -2
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateFastifyRouterFunction = generateFastifyRouterFunction;
4
4
  const generateRouteConfigType_1 = require("./generateRouteConfigType");
5
5
  const importExt_1 = require("../utils/importExt");
6
- function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, }) {
6
+ function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }) {
7
7
  const ext = (0, importExt_1.importExt)(importStyle);
8
8
  const modelName = model.name;
9
9
  const modelNameLower = modelName.toLowerCase();
@@ -48,16 +48,23 @@ import {
48
48
  ${modelName}Count,
49
49
  ${modelName}GroupBy,
50
50
  } from './${modelName}Handlers${ext}'
51
- import type { RouteConfig, FastifyHookHandler, WriteStrategy } from '../routeConfig.target${ext}'
51
+ import type {
52
+ RouteConfig,
53
+ FastifyHookHandler,
54
+ WriteStrategy,
55
+ FindManyPaginatedMode,
56
+ PaginationConfig,
57
+ } from '../routeConfig.target${ext}'
52
58
  import { parseQueryParams } from '../parseQueryParams${ext}'
53
59
  import { sanitizeKeys, normalizePrefix, getEnv } from '../misc${ext}'
54
60
  import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
55
- import { mapError, transformResult, HttpError, type OperationContext } from '../operationRuntime${ext}'
61
+ import { mapError, transformResult, mergePaginationConfig, HttpError, type OperationContext } from '../operationRuntime${ext}'
56
62
 
57
63
  ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'FastifyHookHandler', guardShapesImport, importStyle, 'fastify')}
58
64
  const _env = getEnv()
59
65
 
60
66
  const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
67
+ const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
61
68
 
62
69
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
63
70
 
@@ -67,6 +74,7 @@ type OperationConfigLike = {
67
74
  before?: FastifyHookHandler[]
68
75
  after?: FastifyHookHandler[]
69
76
  shape?: Record<string, unknown>
77
+ pagination?: Partial<PaginationConfig>
70
78
  }
71
79
 
72
80
  type FastifyExtended = FastifyRequest & {
@@ -74,7 +82,7 @@ type FastifyExtended = FastifyRequest & {
74
82
  postgres?: unknown
75
83
  sqlite?: unknown
76
84
  parsedQuery?: Record<string, unknown>
77
- routeConfig?: { pagination?: OperationContext['paginationConfig'] }
85
+ routeConfig?: { pagination?: PaginationConfig }
78
86
  guardShape?: Record<string, unknown>
79
87
  guardCaller?: string
80
88
  resultData?: unknown
@@ -120,9 +128,9 @@ function makeShapeHook(
120
128
  ): (request: FastifyRequest) => void {
121
129
  return (request: FastifyRequest) => {
122
130
  const fx = request as FastifyExtended
123
- const paginationConfig = (config as { pagination?: OperationContext['paginationConfig'] }).pagination
124
- if (paginationConfig) {
125
- fx.routeConfig = { pagination: paginationConfig }
131
+ const merged = mergePaginationConfig(config.pagination, opConfig.pagination)
132
+ if (merged) {
133
+ fx.routeConfig = { pagination: merged }
126
134
  }
127
135
  const headerName = (config.guard?.variantHeader || 'x-api-variant').toLowerCase()
128
136
  const headerValue = request.headers[headerName]
@@ -214,6 +222,10 @@ export async function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(
214
222
  }
215
223
  }
216
224
 
225
+ fastify.addHook('onRequest', async (request: FastifyRequest) => {
226
+ (request as FastifyExtended & { findManyPaginatedMode?: FindManyPaginatedMode }).findManyPaginatedMode = FIND_MANY_PAGINATED_MODE
227
+ })
228
+
217
229
  fastify.setErrorHandler((error: FastifyError, _request: FastifyRequest, reply: FastifyReply) => {
218
230
  const e = error as { status?: number; statusCode?: number; message?: string }
219
231
  const status = e.status ?? e.statusCode ?? 500
@@ -1 +1 @@
1
- {"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { DMMF } from '@prisma/generator-helper';
2
2
  import { ImportStyle } from '../utils/resolveImportStyle';
3
- import { WriteStrategy } from '../constants';
4
- export declare function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, }: {
3
+ import { WriteStrategy, FindManyPaginatedMode } from '../constants';
4
+ export declare function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }: {
5
5
  model: DMMF.Model;
6
6
  enums: DMMF.DatamodelEnum[];
7
7
  guardShapesImport: string | null;
8
8
  importStyle: ImportStyle;
9
9
  writeStrategy: WriteStrategy;
10
+ findManyPaginatedMode: FindManyPaginatedMode;
10
11
  }): string;
@@ -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, }) {
6
+ function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }) {
7
7
  const ext = (0, importExt_1.importExt)(importStyle);
8
8
  const modelName = model.name;
9
9
  const modelNameLower = modelName.toLowerCase();
@@ -58,16 +58,24 @@ import type {
58
58
  HonoInternalVariables,
59
59
  GeneratedHonoEnv,
60
60
  WriteStrategy,
61
+ FindManyPaginatedMode,
62
+ PaginationConfig,
61
63
  } from '../routeConfig.target${ext}'
62
64
  import { parseQueryParams } from '../parseQueryParams${ext}'
63
65
  import { sanitizeKeys, normalizePrefix, getEnv } from '../misc${ext}'
64
66
  import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
65
- import { mapError, transformResult, type OperationContext } from '../operationRuntime${ext}'
67
+ import {
68
+ mapError,
69
+ transformResult,
70
+ mergePaginationConfig,
71
+ type OperationContext,
72
+ } from '../operationRuntime${ext}'
66
73
 
67
74
  ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'HonoHookHandler', guardShapesImport, importStyle, 'hono')}
68
75
  const _env = getEnv()
69
76
 
70
77
  const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
78
+ const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
71
79
 
72
80
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
73
81
 
@@ -77,6 +85,7 @@ type OperationConfigLike<TEnv extends HonoEnvBase> = {
77
85
  before?: HonoHookHandler<TEnv>[]
78
86
  after?: HonoHookHandler<TEnv>[]
79
87
  shape?: Record<string, unknown>
88
+ pagination?: Partial<PaginationConfig>
80
89
  }
81
90
 
82
91
  const defaultOpConfig = Object.freeze({
@@ -84,7 +93,7 @@ const defaultOpConfig = Object.freeze({
84
93
  after: Object.freeze([]),
85
94
  }) as unknown as OperationConfigLike<HonoEnvBase>
86
95
 
87
- type HandlerContext = Context<{ Variables: HonoInternalVariables }>
96
+ type HandlerContext = Context<{ Variables: HonoInternalVariables & { findManyPaginatedMode?: FindManyPaginatedMode } }>
88
97
 
89
98
  function isQueryBuilderEnabled(config: RouteConfig): boolean {
90
99
  if (config.queryBuilder === false) return false
@@ -137,10 +146,11 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
137
146
  opConfig: OperationConfigLike<TEnv>,
138
147
  ) {
139
148
  return (c: Context<GeneratedHonoEnv<TEnv>>): void => {
140
- const paginationConfig = (config as { pagination?: OperationContext['paginationConfig'] }).pagination
141
- if (paginationConfig) {
142
- c.set('routeConfig', { pagination: paginationConfig })
149
+ const merged = mergePaginationConfig(config.pagination, opConfig.pagination)
150
+ if (merged) {
151
+ c.set('routeConfig', { pagination: merged })
143
152
  }
153
+ ;(c as unknown as HandlerContext).set('findManyPaginatedMode', FIND_MANY_PAGINATED_MODE)
144
154
  const headerName = config.guard?.variantHeader || 'x-api-variant'
145
155
  const headerValue = c.req.header(headerName)
146
156
  const caller = config.guard?.resolveVariant?.(c) ?? headerValue ?? undefined
@@ -257,17 +267,17 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
257
267
  parseFn: (c: HandlerContext) => Promise<void>,
258
268
  ) => async (c: Context<GeneratedHonoEnv<TEnv>>): Promise<Response> => {
259
269
  try {
260
- await parseFn(c)
270
+ await parseFn(c as unknown as HandlerContext)
261
271
  makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
262
272
  const { before = [], after = [] } = opConfig
263
273
  const beforeResp = await runHooks<TEnv>(before, c)
264
274
  if (beforeResp) return beforeResp
265
- await handlerFn(c)
275
+ await handlerFn(c as unknown as HandlerContext)
266
276
  const afterResp = await runHooks<TEnv>(after, c)
267
277
  if (afterResp) return afterResp
268
- return sendResult(c)
278
+ return sendResult(c as unknown as HandlerContext)
269
279
  } catch (error: unknown) {
270
- return sendError(c, error)
280
+ return sendError(c as unknown as HandlerContext, error)
271
281
  }
272
282
  }
273
283
 
@@ -276,17 +286,17 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
276
286
  handlerFn: (c: HandlerContext) => Promise<void>,
277
287
  ) => async (c: Context<GeneratedHonoEnv<TEnv>>): Promise<Response> => {
278
288
  try {
279
- await parseWriteBodyMiddleware(c)
289
+ await parseWriteBodyMiddleware(c as unknown as HandlerContext)
280
290
  makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
281
291
  const { before = [], after = [] } = opConfig
282
292
  const beforeResp = await runHooks<TEnv>(before, c)
283
293
  if (beforeResp) return beforeResp
284
- await handlerFn(c)
294
+ await handlerFn(c as unknown as HandlerContext)
285
295
  const afterResp = await runHooks<TEnv>(after, c)
286
296
  if (afterResp) return afterResp
287
- return sendResult(c)
297
+ return sendResult(c as unknown as HandlerContext)
288
298
  } catch (error: unknown) {
289
- return sendError(c, error)
299
+ return sendError(c as unknown as HandlerContext, error)
290
300
  }
291
301
  }
292
302
 
@@ -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
@@ -43,6 +43,15 @@ function getWriteStrategy(options) {
43
43
  return 'forceReturn';
44
44
  throw new Error(`Invalid writeStrategy "${raw}". Expected "regular", "throwOnNonReturning", or "forceReturn".`);
45
45
  }
46
+ function getFindManyPaginatedMode(options) {
47
+ const raw = String(options.generator.config.findManyPaginatedMode ?? 'promiseAll');
48
+ const lower = raw.toLowerCase();
49
+ if (lower === 'transaction')
50
+ return 'transaction';
51
+ if (lower === 'promiseall')
52
+ return 'promiseAll';
53
+ throw new Error(`Invalid findManyPaginatedMode "${raw}". Expected "transaction" or "promiseAll".`);
54
+ }
46
55
  function validateClientGeneratorPresent(options) {
47
56
  (0, generateImportPrismaStatement_1.getRelativeClientPath)(options, options.dmmf.datamodel.models[0]?.name ?? 'Model');
48
57
  }
@@ -57,6 +66,7 @@ function validateClientGeneratorPresent(options) {
57
66
  async onGenerate(options) {
58
67
  const target = getTarget(options);
59
68
  const writeStrategy = getWriteStrategy(options);
69
+ const findManyPaginatedMode = getFindManyPaginatedMode(options);
60
70
  const hasExplicitOutput = !!options.generator.output?.fromEnvVar ||
61
71
  options.generator.config.output !== undefined;
62
72
  if (!hasExplicitOutput) {
@@ -70,6 +80,7 @@ function validateClientGeneratorPresent(options) {
70
80
  console.log(` Output: ${options.generator.output?.value}`);
71
81
  console.log(` Import style: ${importStyle}`);
72
82
  console.log(` Write strategy: ${writeStrategy}`);
83
+ console.log(` findManyPaginated mode: ${findManyPaginatedMode}`);
73
84
  if (options.dmmf.datamodel.models.length > 0) {
74
85
  validateClientGeneratorPresent(options);
75
86
  }
@@ -89,7 +100,12 @@ function validateClientGeneratorPresent(options) {
89
100
  modelNames.push(model.name);
90
101
  const guardShapesImport = (0, generateImportPrismaStatement_1.getGuardShapesImport)(options, model.name);
91
102
  await (0, writeFileSafely_1.writeFileSafely)({
92
- content: (0, generateOperationCore_1.generateModelCore)({ model: model, importStyle, writeStrategy }),
103
+ content: (0, generateOperationCore_1.generateModelCore)({
104
+ model: model,
105
+ importStyle,
106
+ writeStrategy,
107
+ findManyPaginatedMode,
108
+ }),
93
109
  options,
94
110
  model: model,
95
111
  operation: 'Core',
@@ -107,6 +123,7 @@ function validateClientGeneratorPresent(options) {
107
123
  guardShapesImport,
108
124
  importStyle,
109
125
  writeStrategy,
126
+ findManyPaginatedMode,
110
127
  })
111
128
  : target === 'hono'
112
129
  ? (0, generateRouterHono_1.generateHonoRouterFunction)({
@@ -115,6 +132,7 @@ function validateClientGeneratorPresent(options) {
115
132
  guardShapesImport,
116
133
  importStyle,
117
134
  writeStrategy,
135
+ findManyPaginatedMode,
118
136
  })
119
137
  : (0, generateRouter_1.generateRouterFunction)({
120
138
  model: model,
@@ -122,6 +140,7 @@ function validateClientGeneratorPresent(options) {
122
140
  guardShapesImport,
123
141
  importStyle,
124
142
  writeStrategy,
143
+ findManyPaginatedMode,
125
144
  });
126
145
  await (0, writeFileSafely_1.writeFileSafely)({
127
146
  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":"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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.55.0",
4
+ "version": "1.56.1",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
package/src/constants.ts CHANGED
@@ -2,4 +2,6 @@ export const GENERATOR_NAME = 'prisma-generator-express'
2
2
 
3
3
  export type Target = 'express' | 'fastify' | 'hono'
4
4
 
5
- export type WriteStrategy = 'regular' | 'throwOnNonReturning' | 'forceReturn'
5
+ export type WriteStrategy = 'regular' | 'throwOnNonReturning' | 'forceReturn'
6
+
7
+ export type FindManyPaginatedMode = 'transaction' | 'promiseAll'
@@ -19,8 +19,10 @@ import {
19
19
  applyPaginationLimits,
20
20
  countForPagination,
21
21
  mapError,
22
+ HttpError,
22
23
  type OperationContext,
23
24
  type PrismaDelegate,
25
+ type FindManyPaginatedMode,
24
26
  } from './operationRuntime'
25
27
  import { isPlainObject } from './misc'
26
28
  import {
@@ -300,9 +302,7 @@ async function runOneStageSingle(options: {
300
302
 
301
303
  const parentRaw = readPath(internal, stage.parentPath)
302
304
  if (!isPlainObject(parentRaw)) {
303
- if (stage.parentPath !== '') {
304
- return
305
- }
305
+ if (stage.parentPath !== '') return
306
306
  const empty = emptyResultFor(stage.relationField.isList)
307
307
  const applied = setByPath(publicState, stage.relationPath, empty)
308
308
  if (applied) sendSSEField(res, stage.relationPath, empty)
@@ -705,36 +705,58 @@ async function processFindManyStages(args: {
705
705
  return stageErrorMessage
706
706
  }
707
707
 
708
- async function runPaginatedRoot(
709
- extended: unknown,
710
- rootDelegate: PrismaDelegate,
711
- delegateKey: string,
712
- rootArgs: Record<string, unknown>,
713
- distinctCountLimit: number | undefined,
714
- ): Promise<{ data: unknown[]; count: number }> {
715
- const txClient = extended as {
716
- $transaction?: <T>(fn: (tx: unknown) => Promise<T>) => Promise<T>
717
- }
718
-
719
- if (typeof txClient.$transaction === 'function') {
720
- try {
721
- const result = await txClient.$transaction(async (tx: unknown) => {
722
- const txDelegate = getDelegate(tx, delegateKey)
723
- const d = await txDelegate.findMany(rootArgs)
724
- const t = await countForPagination(txDelegate, rootArgs, undefined, undefined, distinctCountLimit)
725
- return { d, t }
726
- })
727
- return { data: result.d as unknown[], count: result.t }
728
- } catch (err) {
729
- const e = err as { code?: string }
730
- if (e?.code !== 'P2028') throw err
731
- console.warn('[auto-progressive] Interactive transactions not available, paginated queries are non-atomic')
708
+ async function runPaginatedRoot(args: {
709
+ extended: unknown
710
+ delegateKey: string
711
+ rootArgs: Record<string, unknown>
712
+ ctx: OperationContext
713
+ mode: FindManyPaginatedMode
714
+ }): Promise<{ data: unknown[]; count: number }> {
715
+ const { extended, delegateKey, rootArgs, ctx, mode } = args
716
+ const distinctCountLimit = ctx.paginationConfig?.distinctCountLimit
717
+ const countSource = ctx.paginationConfig?.countSource
718
+
719
+ if (mode === 'transaction') {
720
+ const txClient = extended as {
721
+ $transaction?: <T>(fn: (tx: unknown) => Promise<T>) => Promise<T>
722
+ }
723
+ if (typeof txClient.$transaction !== 'function') {
724
+ throw new HttpError(
725
+ 500,
726
+ 'findManyPaginatedMode="transaction" requires transaction support on the Prisma client',
727
+ )
732
728
  }
729
+ const result = await txClient.$transaction(async (tx: unknown) => {
730
+ const txDelegate = getDelegate(tx, delegateKey)
731
+ const [data, count] = await Promise.all([
732
+ txDelegate.findMany(rootArgs),
733
+ countForPagination(
734
+ txDelegate,
735
+ rootArgs,
736
+ undefined,
737
+ undefined,
738
+ distinctCountLimit,
739
+ countSource,
740
+ tx,
741
+ ),
742
+ ])
743
+ return { data, count }
744
+ })
745
+ return { data: result.data as unknown[], count: result.count }
733
746
  }
734
747
 
748
+ const rootDelegate = getDelegate(extended, delegateKey)
735
749
  const [data, count] = await Promise.all([
736
750
  rootDelegate.findMany(rootArgs),
737
- countForPagination(rootDelegate, rootArgs, undefined, undefined, distinctCountLimit),
751
+ countForPagination(
752
+ rootDelegate,
753
+ rootArgs,
754
+ undefined,
755
+ undefined,
756
+ distinctCountLimit,
757
+ countSource,
758
+ extended,
759
+ ),
738
760
  ])
739
761
  return { data: data as unknown[], count }
740
762
  }
@@ -826,18 +848,21 @@ async function runAutoIncludePaginated(
826
848
  const extended = await getExtendedClient(ctx)
827
849
  if (isClientGone()) return
828
850
 
829
- const rootDelegate = getDelegate(extended, delegateKey)
830
851
  const rootArgs = applyPaginationLimits(plan.rootArgs, ctx.paginationConfig)
831
- const distinctCountLimit = ctx.paginationConfig?.distinctCountLimit
852
+ const mode: FindManyPaginatedMode = ctx.findManyPaginatedMode ?? 'promiseAll'
832
853
 
833
854
  let rootRows: unknown[]
834
855
  let total: number
835
856
  try {
836
- const { data, count } = await runPaginatedRoot(
837
- extended, rootDelegate, delegateKey, rootArgs, distinctCountLimit,
838
- )
839
- rootRows = data
840
- total = count
857
+ const r = await runPaginatedRoot({
858
+ extended,
859
+ delegateKey,
860
+ rootArgs,
861
+ ctx,
862
+ mode,
863
+ })
864
+ rootRows = r.data
865
+ total = r.count
841
866
  } catch (err) {
842
867
  if (isClientGone()) return
843
868
  console.error('[auto-progressive] root findManyPaginated failed:', err)
@@ -881,7 +881,7 @@ export function renderDocs(
881
881
  return argsReferenceWriteBase
882
882
  })()
883
883
 
884
- const batchMutationNote =
884
+ const batchMutationNote =
885
885
  writeStrategy === 'forceReturn'
886
886
  ? 'Batch mutations: deleteMany returns { count }. createMany and updateMany silently invoke their returning counterparts and return arrays of records. Batch data inputs are scalar-only — nested relation writes are not supported.'
887
887
  : writeStrategy === 'throwOnNonReturning'
@@ -895,7 +895,7 @@ export function renderDocs(
895
895
  'findManyPaginated returns { data, total, hasMore }. hasMore is reliable for forward offset pagination only.',
896
896
  batchMutationNote,
897
897
  'findUnique and findFirst return null (not 404) when no record matches. Use the OrThrow variants for 404 behavior.',
898
- 'createManyAndReturn requires Prisma 5.14.0+, updateManyAndReturn requires Prisma 6.2.0+. Both are limited to PostgreSQL, CockroachDB, and SQLite.',
898
+ 'createManyAndReturn requires Prisma 5.14.0+, updateManyAndReturn requires Prisma 6.2.0+. Both are limited to PostgreSQL/CockroachDB/SQLite.',
899
899
  ]
900
900
 
901
901
  const errorRows = [
@@ -903,7 +903,7 @@ export function renderDocs(
903
903
  { status: '403', description: 'Forbidden', causes: 'Guard policy rejected the operation.' },
904
904
  { status: '404', description: 'Not found', causes: 'Record not found. Only from OrThrow operations, update, and delete.' },
905
905
  { status: '409', description: 'Conflict', causes: 'Unique constraint violation on create/update/upsert, or transaction conflict (e.g. in findManyPaginated).' },
906
- { status: '500', description: 'Internal server error', causes: 'Database error, table/column missing, raw query failure, or unhandled error.' },
906
+ { status: '500', description: 'Internal server error', causes: 'Database error, table/column missing, raw query failure, unhandled error, or findManyPaginatedMode="transaction" without transaction support on the Prisma client.' },
907
907
  { status: '501', description: 'Not implemented', causes: 'Database provider does not support the requested feature, or writeStrategy disabled the endpoint.' },
908
908
  { status: '503', description: 'Service unavailable', causes: 'Database connection pool timeout.' },
909
909
  ]
@@ -1033,7 +1033,8 @@ export function renderDocs(
1033
1033
  '<strong>POST read endpoints:</strong> All read operations accept POST as an alternative transport. The request body is a plain JSON object with the same argument structure as the GET query params — no JSON-string encoding needed. POST reads use native JSON types (numbers, booleans, objects) directly. findMany POST read is at <span class="font-mono">/read</span>; all other read operations use the same path as their GET counterpart. Disable with <span class="font-mono">disablePostReads: true</span> in route config.',
1034
1034
  '<strong>Request body validation:</strong> All write endpoints require a JSON object body. Sending <span class="font-mono">null</span>, arrays, or non-object JSON values returns 400.',
1035
1035
  '<strong>Documentation in production:</strong> Docs endpoints are disabled by default when <span class="font-mono">NODE_ENV=production</span> or <span class="font-mono">DISABLE_OPENAPI=true</span>. To enable in production, set <span class="font-mono">disableOpenApi: false</span> in the route config.',
1036
- '<strong>Paginated query atomicity:</strong> findManyPaginated wraps data + count in a database transaction when available. If interactive transactions are not supported (e.g. some edge adapters), the queries run separately and data/total may be slightly inconsistent under concurrent writes. When a guard shape is configured, the data and count queries run in parallel without a transaction to keep the guard wrapper in scope, so atomicity is not guaranteed in that mode.',
1036
+ '<strong>Paginated query execution:</strong> findManyPaginated execution is controlled by the generator option <span class="font-mono">findManyPaginatedMode</span>. The default <span class="font-mono">"promiseAll"</span> runs data and count with <span class="font-mono">Promise.all</span> faster, but not atomic under concurrent writes (data and total may be slightly inconsistent). <span class="font-mono">"transaction"</span> runs data and count inside an interactive transaction and throws <span class="font-mono">500</span> if the Prisma client does not support transactions. There is no implicit fallback in transaction mode.',
1037
+ '<strong>Materialized count source:</strong> findManyPaginated supports endpoint-level <span class="font-mono">pagination.countSource.type="materializedView"</span> for counts driven by a materialized view. The view query is used only when the request has no dynamic <span class="font-mono">where</span>, no <span class="font-mono">distinct</span>, and no guard shape — any of those falls back to the delegate count to keep the total consistent with the filtered data. The generated SQL uses PostgreSQL-style <span class="font-mono">$N</span> placeholders (PostgreSQL and CockroachDB). The optional <span class="font-mono">countSource.where</span> field supports flat equality and <span class="font-mono">null</span> only — no operators, no nested objects.',
1037
1038
  '<strong>Distinct count approximation:</strong> When findManyPaginated is used with distinct and the number of unique values exceeds 100,000, the total falls back to a non-distinct count which may overcount. When a guard shape is configured alongside distinct, the total also falls back to a non-distinct count to avoid imposing the public read shape on the internal counting query. The hasMore value is affected accordingly.',
1038
1039
  '<strong>Serialization:</strong> BigInt values are serialized as strings. Bytes/Buffer values are serialized as base64 strings. Decimal values are serialized as strings. DateTime values are serialized as ISO 8601 strings.',
1039
1040
  '<strong>Playground:</strong> The query playground embeds an iframe to a local prisma-query-builder-ui instance. It connects to your real database using the configured DATABASE_URL. It is disabled in production and when queryBuilder is set to false or queryBuilder.enabled is set to false.',