prisma-generator-express 1.40.0 → 1.42.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 (48) hide show
  1. package/README.md +444 -12
  2. package/dist/generators/generateOperationCore.d.ts +3 -1
  3. package/dist/generators/generateOperationCore.js +266 -160
  4. package/dist/generators/generateOperationCore.js.map +1 -1
  5. package/dist/generators/generateRouteConfigType.d.ts +3 -1
  6. package/dist/generators/generateRouteConfigType.js +36 -31
  7. package/dist/generators/generateRouteConfigType.js.map +1 -1
  8. package/dist/generators/generateRouter.d.ts +4 -2
  9. package/dist/generators/generateRouter.js +186 -132
  10. package/dist/generators/generateRouter.js.map +1 -1
  11. package/dist/generators/generateRouterFastify.d.ts +3 -1
  12. package/dist/generators/generateRouterFastify.js +12 -10
  13. package/dist/generators/generateRouterFastify.js.map +1 -1
  14. package/dist/generators/generateRouterHono.d.ts +3 -1
  15. package/dist/generators/generateRouterHono.js +12 -9
  16. package/dist/generators/generateRouterHono.js.map +1 -1
  17. package/dist/generators/generateUnifiedDocs.d.ts +2 -1
  18. package/dist/generators/generateUnifiedDocs.js +6 -4
  19. package/dist/generators/generateUnifiedDocs.js.map +1 -1
  20. package/dist/index.js +16 -21
  21. package/dist/index.js.map +1 -1
  22. package/dist/utils/copyFiles.d.ts +2 -1
  23. package/dist/utils/copyFiles.js +39 -34
  24. package/dist/utils/copyFiles.js.map +1 -1
  25. package/dist/utils/importExt.d.ts +2 -0
  26. package/dist/utils/importExt.js +11 -0
  27. package/dist/utils/importExt.js.map +1 -0
  28. package/dist/utils/resolveImportStyle.d.ts +3 -0
  29. package/dist/utils/resolveImportStyle.js +211 -0
  30. package/dist/utils/resolveImportStyle.js.map +1 -0
  31. package/dist/utils/writeFileSafely.js +6 -9
  32. package/dist/utils/writeFileSafely.js.map +1 -1
  33. package/package.json +1 -1
  34. package/src/copy/routeConfig.express.ts +39 -5
  35. package/src/copy/routeConfig.fastify.ts +8 -4
  36. package/src/copy/routeConfig.hono.ts +7 -3
  37. package/src/copy/routeConfig.ts +42 -2
  38. package/src/generators/generateOperationCore.ts +273 -169
  39. package/src/generators/generateRouteConfigType.ts +43 -36
  40. package/src/generators/generateRouter.ts +189 -133
  41. package/src/generators/generateRouterFastify.ts +14 -9
  42. package/src/generators/generateRouterHono.ts +14 -8
  43. package/src/generators/generateUnifiedDocs.ts +8 -3
  44. package/src/index.ts +25 -47
  45. package/src/utils/copyFiles.ts +45 -45
  46. package/src/utils/importExt.ts +7 -0
  47. package/src/utils/resolveImportStyle.ts +187 -0
  48. package/src/utils/writeFileSafely.ts +6 -22
@@ -1,26 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateRouteConfigType = generateRouteConfigType;
4
+ const importExt_1 = require("../utils/importExt");
4
5
  const ROUTER_OPERATIONS = [
5
- 'findUnique',
6
- 'findUniqueOrThrow',
7
- 'findFirst',
8
- 'findFirstOrThrow',
9
- 'findMany',
10
- 'findManyPaginated',
11
- 'count',
12
- 'aggregate',
13
- 'groupBy',
14
- 'create',
15
- 'createMany',
16
- 'createManyAndReturn',
17
- 'update',
18
- 'updateMany',
19
- 'updateManyAndReturn',
20
- 'upsert',
21
- 'delete',
22
- 'deleteMany',
6
+ 'findUnique', 'findUniqueOrThrow', 'findFirst', 'findFirstOrThrow',
7
+ 'findMany', 'findManyPaginated', 'count', 'aggregate', 'groupBy',
8
+ 'create', 'createMany', 'createManyAndReturn',
9
+ 'update', 'updateMany', 'updateManyAndReturn',
10
+ 'upsert', 'delete', 'deleteMany',
23
11
  ];
12
+ const READ_OPERATIONS = new Set([
13
+ 'findUnique', 'findUniqueOrThrow', 'findFirst', 'findFirstOrThrow',
14
+ 'findMany', 'findManyPaginated', 'count', 'aggregate', 'groupBy',
15
+ ]);
24
16
  const ROUTER_OP_TO_SHAPE_OP = {
25
17
  findUnique: 'findUnique',
26
18
  findUniqueOrThrow: 'findUniqueOrThrow',
@@ -44,29 +36,42 @@ const ROUTER_OP_TO_SHAPE_OP = {
44
36
  function capitalize(s) {
45
37
  return s.charAt(0).toUpperCase() + s.slice(1);
46
38
  }
47
- function generateRouteConfigType(modelName, hookHandlerType, guardShapesImport) {
39
+ function generateRouteConfigType(modelName, hookHandlerType, guardShapesImport, importStyle, target) {
40
+ const ext = (0, importExt_1.importExt)(importStyle);
48
41
  const m = modelName;
42
+ const supportsProgressive = target === 'express';
49
43
  if (!guardShapesImport) {
50
- return `export type ${m}RouteConfig<TCtx = unknown> = RouteConfig\n`;
44
+ return `export type ${m}RouteConfig<TCtx = unknown> = RouteConfig<Record<string, unknown>, TCtx>\n`;
51
45
  }
52
46
  const shapeOps = Object.values(ROUTER_OP_TO_SHAPE_OP).filter((v, i, a) => a.indexOf(v) === i);
53
- const opShapeImports = shapeOps
54
- .map((op) => `${m}${capitalize(op)}ShapeInput`)
55
- .join(',\n ');
47
+ const opShapeImports = shapeOps.map((op) => `${m}${capitalize(op)}ShapeInput`).join(',\n ');
56
48
  const overrides = ROUTER_OPERATIONS.map((routerOp) => {
57
49
  const shapeOp = ROUTER_OP_TO_SHAPE_OP[routerOp];
58
50
  const c = capitalize(shapeOp);
59
- return (` ${routerOp}?: {\n` +
60
- ` before?: ${hookHandlerType}[]\n` +
61
- ` after?: ${hookHandlerType}[]\n` +
62
- ` shape?: ${m}${c}ShapeInput<TCtx>\n` +
63
- ` }`);
51
+ const isRead = READ_OPERATIONS.has(routerOp);
52
+ const lines = [
53
+ ` before?: ${hookHandlerType}[]`,
54
+ ` after?: ${hookHandlerType}[]`,
55
+ ` shape?: ${m}${c}ShapeInput<TCtx>`,
56
+ ];
57
+ if (isRead && supportsProgressive) {
58
+ lines.push(` progressive?: Record<string, ProgressiveVariantConfig>`);
59
+ lines.push(` progressiveStages?: Record<string, ProgressiveStage<TCtx>>`);
60
+ }
61
+ return ` ${routerOp}?: {\n${lines.join('\n')}\n }`;
64
62
  }).join('\n');
65
63
  const omitKeys = ROUTER_OPERATIONS.map((k) => `'${k}'`).join('\n | ');
66
- return (`import type {\n ${opShapeImports}\n} from '${guardShapesImport}'\n\n` +
64
+ const progressiveTypeImport = supportsProgressive
65
+ ? `import type { ProgressiveVariantConfig, ProgressiveStage } from '../routeConfig.target${ext}'\n\n`
66
+ : '';
67
+ return (progressiveTypeImport +
68
+ `import type {\n ${opShapeImports}\n} from '${guardShapesImport}${ext}'\n\n` +
67
69
  `export type ${m}RouteConfig<TCtx = unknown> = Omit<\n` +
68
- ` RouteConfig,\n` +
70
+ ` RouteConfig<Record<string, unknown>, TCtx>,\n` +
69
71
  ` | ${omitKeys}\n` +
70
- `> & {\n${overrides}\n}\n`);
72
+ ` | 'resolveContext'\n` +
73
+ `> & {\n` +
74
+ ` resolveContext?: (request: import('express').Request) => TCtx | Promise<TCtx>\n` +
75
+ `${overrides}\n}\n`);
71
76
  }
72
77
  //# sourceMappingURL=generateRouteConfigType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/generators/generateRouteConfigType.ts"],"names":[],"mappings":";;AAgDA,0DAwCC;AAxFD,MAAM,iBAAiB,GAAG;IACxB,YAAY;IACZ,mBAAmB;IACnB,WAAW;IACX,kBAAkB;IAClB,UAAU;IACV,mBAAmB;IACnB,OAAO;IACP,WAAW;IACX,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,qBAAqB;IACrB,QAAQ;IACR,YAAY;IACZ,qBAAqB;IACrB,QAAQ;IACR,QAAQ;IACR,YAAY;CACJ,CAAA;AAIV,MAAM,qBAAqB,GAAoC;IAC7D,UAAU,EAAE,YAAY;IACxB,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,mBAAmB;IACtC,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,qBAAqB;IAC1C,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,qBAAqB;IAC1C,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;CACzB,CAAA;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,SAAgB,uBAAuB,CACrC,SAAiB,EACjB,eAAuB,EACvB,iBAAgC;IAEhC,MAAM,CAAC,GAAG,SAAS,CAAA;IAEnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,6CAA6C,CAAA;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAC1D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAChC,CAAA;IAED,MAAM,cAAc,GAAG,QAAQ;SAC5B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC;SAC9C,IAAI,CAAC,OAAO,CAAC,CAAA;IAEhB,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QAC7B,OAAO,CACL,KAAK,QAAQ,QAAQ;YACrB,gBAAgB,eAAe,MAAM;YACrC,eAAe,eAAe,MAAM;YACpC,eAAe,CAAC,GAAG,CAAC,oBAAoB;YACxC,KAAK,CACN,CAAA;IACH,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAEtE,OAAO,CACL,oBAAoB,cAAc,aAAa,iBAAiB,OAAO;QACvE,eAAe,CAAC,uCAAuC;QACvD,kBAAkB;QAClB,OAAO,QAAQ,IAAI;QACnB,UAAU,SAAS,OAAO,CAC3B,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/generators/generateRouteConfigType.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { DMMF } from '@prisma/generator-helper';
2
- export declare function generateRouterFunction({ model, enums, relativeClientPath, guardShapesImport, }: {
2
+ import { ImportStyle } from '../utils/resolveImportStyle';
3
+ export declare function generateRouterFunction({ model, enums, guardShapesImport, importStyle, }: {
3
4
  model: DMMF.Model;
4
5
  enums: DMMF.DatamodelEnum[];
5
- relativeClientPath: string;
6
+ relativeClientPath?: string;
6
7
  guardShapesImport: string | null;
8
+ importStyle: ImportStyle;
7
9
  }): string;
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateRouterFunction = generateRouterFunction;
4
4
  const strings_1 = require("../utils/strings");
5
5
  const generateRouteConfigType_1 = require("./generateRouteConfigType");
6
- function generateRouterFunction({ model, enums, relativeClientPath, guardShapesImport, }) {
6
+ const importExt_1 = require("../utils/importExt");
7
+ function generateRouterFunction({ model, enums, guardShapesImport, importStyle, }) {
8
+ const ext = (0, importExt_1.importExt)(importStyle);
7
9
  const modelName = model.name;
8
10
  const prefix = (0, strings_1.toCamelCase)(modelName);
9
11
  const modelNameLower = modelName.toLowerCase();
@@ -26,8 +28,9 @@ function generateRouterFunction({ model, enums, relativeClientPath, guardShapesI
26
28
  name: e.name,
27
29
  values: e.values.map((v) => ({ name: v.name })),
28
30
  }));
29
- return `import express, { Request, Response, NextFunction, RequestHandler } from 'express'
30
- import type { PrismaClient } from '${relativeClientPath}'
31
+ return `import express from 'express'
32
+ import type { Request, Response, NextFunction, RequestHandler } from 'express'
33
+ import { startQueryBuilder } from '../queryBuilder${ext}'
31
34
  import {
32
35
  ${prefix}FindUnique,
33
36
  ${prefix}FindUniqueOrThrow,
@@ -46,24 +49,52 @@ import {
46
49
  ${prefix}DeleteMany,
47
50
  ${prefix}Aggregate,
48
51
  ${prefix}Count,
49
- ${prefix}GroupBy
50
- } from './${modelName}Handlers'
51
- import type { RouteConfig } from '../routeConfig.target'
52
- import { parseQueryParams } from '../parseQueryParams'
53
- import { sanitizeKeys } from '../misc'
54
- import { buildModelOpenApi } from '../buildModelOpenApi'
55
- import { transformResult } from '../operationRuntime'
56
-
57
- ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'RequestHandler', guardShapesImport)}
52
+ ${prefix}GroupBy,
53
+ } from './${modelName}Handlers${ext}'
54
+ import * as core from './${modelName}Core${ext}'
55
+ import type { RouteConfig, ProgressiveVariantConfig, ProgressiveStage } from '../routeConfig.target${ext}'
56
+ import { parseQueryParams } from '../parseQueryParams${ext}'
57
+ import { sanitizeKeys } from '../misc${ext}'
58
+ import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
59
+ import type { OperationContext } from '../operationRuntime${ext}'
60
+ import {
61
+ transformResult,
62
+ acceptsEventStream,
63
+ runProgressiveEndpoint,
64
+ runSingleResultSSE,
65
+ } from '../operationRuntime${ext}'
66
+
67
+ ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'RequestHandler', guardShapesImport, importStyle, 'express')}
58
68
  const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
59
69
 
60
70
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
61
-
62
71
  const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
63
72
 
64
- const defaultOpConfig = {
65
- before: [] as RequestHandler[],
66
- after: [] as RequestHandler[],
73
+ type OperationConfigLike = {
74
+ before?: RequestHandler[]
75
+ after?: RequestHandler[]
76
+ shape?: Record<string, unknown>
77
+ progressive?: Record<string, ProgressiveVariantConfig>
78
+ progressiveStages?: Record<string, ProgressiveStage<unknown>>
79
+ }
80
+
81
+ type ExtendedRequest = Request & {
82
+ prisma?: unknown
83
+ postgres?: unknown
84
+ sqlite?: unknown
85
+ }
86
+
87
+ type LocalsBag = {
88
+ parsedQuery?: Record<string, unknown>
89
+ routeConfig?: ${modelName}RouteConfig
90
+ guardShape?: Record<string, unknown>
91
+ guardCaller?: string
92
+ data?: unknown
93
+ }
94
+
95
+ const defaultOpConfig: OperationConfigLike = {
96
+ before: [],
97
+ after: [],
67
98
  }
68
99
 
69
100
  function normalizePrefix(p: string): string {
@@ -88,9 +119,12 @@ function getQueryBuilderConfig(config: RouteConfig) {
88
119
  return {}
89
120
  }
90
121
 
122
+ function readLocals(res: Response): LocalsBag {
123
+ return res.locals as LocalsBag
124
+ }
125
+
91
126
  export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteConfig<TCtx> = {}) {
92
127
  const router = express.Router()
93
-
94
128
  router.use(express.json())
95
129
 
96
130
  const customPrefix = normalizePrefix(config.customUrlPrefix || '')
@@ -98,26 +132,42 @@ export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteC
98
132
  const basePath = customPrefix + modelPrefix
99
133
 
100
134
  const openApiDisabled = config.disableOpenApi === true
101
- || (config.disableOpenApi !== false && (
102
- _env.DISABLE_OPENAPI === 'true'
103
- || _env.NODE_ENV === 'production'
104
- ))
135
+ || (config.disableOpenApi !== false && (_env.DISABLE_OPENAPI === 'true' || _env.NODE_ENV === 'production'))
105
136
 
106
137
  const postReadsEnabled = !config.disablePostReads
107
138
 
108
139
  const qbEnabled = isQueryBuilderEnabled(config)
109
-
110
140
  if (qbEnabled) {
111
141
  const qbConfig = getQueryBuilderConfig(config)
112
142
  if (qbConfig) {
113
- try { require('../queryBuilder').startQueryBuilder(qbConfig) } catch (err) { if (_env.NODE_ENV !== 'production') console.warn('[query-builder]', err) }
143
+ try {
144
+ startQueryBuilder(qbConfig)
145
+ } catch (err) {
146
+ if (_env.NODE_ENV !== 'production') console.warn('[query-builder]', err)
147
+ }
148
+ }
149
+ }
150
+
151
+ const buildContext = (req: Request, res: Response): OperationContext => {
152
+ const extReq = req as ExtendedRequest
153
+ const locals = readLocals(res)
154
+ return {
155
+ prisma: extReq.prisma,
156
+ postgres: extReq.postgres,
157
+ sqlite: extReq.sqlite,
158
+ parsedQuery: locals.parsedQuery,
159
+ body: req.body,
160
+ guardShape: locals.guardShape,
161
+ guardCaller: locals.guardCaller,
162
+ paginationConfig: locals.routeConfig?.pagination,
114
163
  }
115
164
  }
116
165
 
117
166
  const parseQuery: RequestHandler = (req, res, next) => {
118
167
  const rawQuery = req.query
119
168
  if (rawQuery && Object.keys(rawQuery).length > 0) {
120
- res.locals.parsedQuery = parseQueryParams(rawQuery as Record<string, unknown>)
169
+ const parsed = parseQueryParams(rawQuery as Record<string, unknown>) as Record<string, unknown>
170
+ readLocals(res).parsedQuery = parsed
121
171
  }
122
172
  next()
123
173
  }
@@ -126,154 +176,167 @@ export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteC
126
176
  if (!req.body || typeof req.body !== 'object' || Array.isArray(req.body)) {
127
177
  return next({ status: 400, message: 'Request body must be a JSON object' })
128
178
  }
129
- res.locals.parsedQuery = sanitizeKeys(req.body)
179
+ readLocals(res).parsedQuery = sanitizeKeys(req.body as Record<string, unknown>)
130
180
  next()
131
181
  }
132
182
 
133
- const setShape = (opConfig: any): RequestHandler => {
183
+ const setShape = (opConfig: OperationConfigLike): RequestHandler => {
134
184
  return (req, res, next) => {
135
- res.locals.routeConfig = config
136
- if (opConfig.shape) {
137
- res.locals.guardShape = opConfig.shape
138
- const caller = config.guard?.resolveVariant?.(req)
139
- ?? req.get(config.guard?.variantHeader || 'x-api-variant')
140
- ?? undefined
141
- if (caller) {
142
- res.locals.guardCaller = caller
185
+ const locals = readLocals(res)
186
+ locals.routeConfig = config
187
+ const headerName = config.guard?.variantHeader || 'x-api-variant'
188
+ const headerValue = req.get(headerName)
189
+ const caller = config.guard?.resolveVariant?.(req) ?? headerValue ?? undefined
190
+ if (caller) locals.guardCaller = caller
191
+ if (opConfig.shape) locals.guardShape = opConfig.shape
192
+ next()
193
+ }
194
+ }
195
+
196
+ const maybeProgressiveSSE = (
197
+ opConfig: OperationConfigLike,
198
+ coreFn: (ctx: OperationContext) => Promise<unknown>,
199
+ ): RequestHandler => {
200
+ return async (req, res, next) => {
201
+ if (res.headersSent || res.writableEnded) return next()
202
+ if (req.method !== 'GET') return next()
203
+ if (!acceptsEventStream(req.headers.accept)) return next()
204
+
205
+ const locals = readLocals(res)
206
+ const variant = locals.guardCaller
207
+ const progressiveConfig = variant ? opConfig.progressive?.[variant] : undefined
208
+
209
+ try {
210
+ if (!progressiveConfig || progressiveConfig.enabled === false) {
211
+ await runSingleResultSSE({
212
+ req,
213
+ res,
214
+ coreQueryFn: () => coreFn(buildContext(req, res)),
215
+ })
216
+ return
217
+ }
218
+
219
+ if (!Array.isArray(progressiveConfig.stages)) {
220
+ return next({ status: 500, message: 'Progressive endpoint requires stages array' })
221
+ }
222
+
223
+ const stageRegistry = opConfig.progressiveStages ?? {}
224
+ const missingStage = progressiveConfig.stages.find(
225
+ (name) => typeof stageRegistry[name] !== 'function',
226
+ )
227
+ if (missingStage) {
228
+ return next({ status: 500, message: 'Missing progressive stage: ' + missingStage })
229
+ }
230
+
231
+ if (typeof config.resolveContext !== 'function') {
232
+ return next({ status: 500, message: 'Progressive endpoint requires config.resolveContext' })
233
+ }
234
+
235
+ const ctx = await config.resolveContext(req)
236
+ await runProgressiveEndpoint({
237
+ req,
238
+ res,
239
+ ctx,
240
+ prisma: (req as ExtendedRequest).prisma,
241
+ variant: variant as string,
242
+ stages: progressiveConfig.stages,
243
+ stageRegistry,
244
+ })
245
+ } catch (err) {
246
+ console.error('[progressive] dispatch error:', err)
247
+ if (!res.headersSent) {
248
+ return next({ status: 500, message: 'Internal server error' })
143
249
  }
144
250
  }
145
- next()
146
251
  }
147
252
  }
148
253
 
149
254
  const respond: RequestHandler = (_req, res) => {
150
- const data = res.locals.data
151
- if (data === undefined) {
152
- return res.status(500).json({ message: 'No data set by handler' })
153
- }
255
+ const data = readLocals(res).data
256
+ if (data === undefined) return res.status(500).json({ message: 'No data set by handler' })
154
257
  return res.json(transformResult(data))
155
258
  }
156
259
 
157
260
  const respondCreated: RequestHandler = (_req, res) => {
158
- const data = res.locals.data
159
- if (data === undefined) {
160
- return res.status(500).json({ message: 'No data set by handler' })
161
- }
261
+ const data = readLocals(res).data
262
+ if (data === undefined) return res.status(500).json({ message: 'No data set by handler' })
162
263
  return res.status(201).json(transformResult(data))
163
264
  }
164
265
 
165
266
  if (!openApiDisabled) {
166
267
  const openapiJsonPath = basePath ? \`\${basePath}/openapi.json\` : '/openapi.json'
167
268
  const openapiYamlPath = basePath ? \`\${basePath}/openapi.yaml\` : '/openapi.yaml'
168
-
169
269
  router.get(openapiJsonPath, (_req, res) => {
170
- const spec = buildModelOpenApi(
171
- '${modelName}',
172
- MODEL_FIELDS as any,
173
- MODEL_ENUMS as any,
174
- config,
175
- { format: 'json' }
176
- )
270
+ const spec = buildModelOpenApi('${modelName}', MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1], MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2], config, { format: 'json' })
177
271
  res.json(spec)
178
272
  })
179
-
180
273
  router.get(openapiYamlPath, (_req, res) => {
181
- const spec = buildModelOpenApi(
182
- '${modelName}',
183
- MODEL_FIELDS as any,
184
- MODEL_ENUMS as any,
185
- config,
186
- { format: 'yaml' }
187
- )
274
+ const spec = buildModelOpenApi('${modelName}', MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1], MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2], config, { format: 'yaml' })
188
275
  res.type('application/yaml').send(spec as string)
189
276
  })
190
277
  }
191
278
 
192
279
  if (config.enableAll || config.findFirst) {
193
- const opConfig = config.findFirst || defaultOpConfig
280
+ const opConfig: OperationConfigLike = (config.findFirst as OperationConfigLike | undefined) ?? defaultOpConfig
194
281
  const { before = [], after = [] } = opConfig
195
282
  const path = basePath ? \`\${basePath}/first\` : '/first'
196
- router.get(path, parseQuery, setShape(opConfig), ...before, ${prefix}FindFirst as RequestHandler, ...after, respond)
197
- if (postReadsEnabled) {
198
- router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindFirst as RequestHandler, ...after, respond)
199
- }
283
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findFirst), ${prefix}FindFirst as RequestHandler, ...after, respond)
284
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindFirst as RequestHandler, ...after, respond)
200
285
  }
201
-
202
286
  if (config.enableAll || config.findFirstOrThrow) {
203
- const opConfig = config.findFirstOrThrow || defaultOpConfig
287
+ const opConfig: OperationConfigLike = (config.findFirstOrThrow as OperationConfigLike | undefined) ?? defaultOpConfig
204
288
  const { before = [], after = [] } = opConfig
205
289
  const path = basePath ? \`\${basePath}/first/strict\` : '/first/strict'
206
- router.get(path, parseQuery, setShape(opConfig), ...before, ${prefix}FindFirstOrThrow as RequestHandler, ...after, respond)
207
- if (postReadsEnabled) {
208
- router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindFirstOrThrow as RequestHandler, ...after, respond)
209
- }
290
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findFirstOrThrow), ${prefix}FindFirstOrThrow as RequestHandler, ...after, respond)
291
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindFirstOrThrow as RequestHandler, ...after, respond)
210
292
  }
211
-
212
293
  if (config.enableAll || config.findManyPaginated) {
213
- const opConfig = config.findManyPaginated || defaultOpConfig
294
+ const opConfig: OperationConfigLike = (config.findManyPaginated as OperationConfigLike | undefined) ?? defaultOpConfig
214
295
  const { before = [], after = [] } = opConfig
215
296
  const path = basePath ? \`\${basePath}/paginated\` : '/paginated'
216
- router.get(path, parseQuery, setShape(opConfig), ...before, ${prefix}FindManyPaginated as RequestHandler, ...after, respond)
217
- if (postReadsEnabled) {
218
- router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindManyPaginated as RequestHandler, ...after, respond)
219
- }
297
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findManyPaginated), ${prefix}FindManyPaginated as RequestHandler, ...after, respond)
298
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindManyPaginated as RequestHandler, ...after, respond)
220
299
  }
221
-
222
300
  if (config.enableAll || config.aggregate) {
223
- const opConfig = config.aggregate || defaultOpConfig
301
+ const opConfig: OperationConfigLike = (config.aggregate as OperationConfigLike | undefined) ?? defaultOpConfig
224
302
  const { before = [], after = [] } = opConfig
225
303
  const path = basePath ? \`\${basePath}/aggregate\` : '/aggregate'
226
- router.get(path, parseQuery, setShape(opConfig), ...before, ${prefix}Aggregate as RequestHandler, ...after, respond)
227
- if (postReadsEnabled) {
228
- router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}Aggregate as RequestHandler, ...after, respond)
229
- }
304
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.aggregate), ${prefix}Aggregate as RequestHandler, ...after, respond)
305
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}Aggregate as RequestHandler, ...after, respond)
230
306
  }
231
-
232
307
  if (config.enableAll || config.count) {
233
- const opConfig = config.count || defaultOpConfig
308
+ const opConfig: OperationConfigLike = (config.count as OperationConfigLike | undefined) ?? defaultOpConfig
234
309
  const { before = [], after = [] } = opConfig
235
310
  const path = basePath ? \`\${basePath}/count\` : '/count'
236
- router.get(path, parseQuery, setShape(opConfig), ...before, ${prefix}Count as RequestHandler, ...after, respond)
237
- if (postReadsEnabled) {
238
- router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}Count as RequestHandler, ...after, respond)
239
- }
311
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.count), ${prefix}Count as RequestHandler, ...after, respond)
312
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}Count as RequestHandler, ...after, respond)
240
313
  }
241
-
242
314
  if (config.enableAll || config.groupBy) {
243
- const opConfig = config.groupBy || defaultOpConfig
315
+ const opConfig: OperationConfigLike = (config.groupBy as OperationConfigLike | undefined) ?? defaultOpConfig
244
316
  const { before = [], after = [] } = opConfig
245
317
  const path = basePath ? \`\${basePath}/groupby\` : '/groupby'
246
- router.get(path, parseQuery, setShape(opConfig), ...before, ${prefix}GroupBy as RequestHandler, ...after, respond)
247
- if (postReadsEnabled) {
248
- router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}GroupBy as RequestHandler, ...after, respond)
249
- }
318
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.groupBy), ${prefix}GroupBy as RequestHandler, ...after, respond)
319
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}GroupBy as RequestHandler, ...after, respond)
250
320
  }
251
-
252
321
  if (config.enableAll || config.findUniqueOrThrow) {
253
- const opConfig = config.findUniqueOrThrow || defaultOpConfig
322
+ const opConfig: OperationConfigLike = (config.findUniqueOrThrow as OperationConfigLike | undefined) ?? defaultOpConfig
254
323
  const { before = [], after = [] } = opConfig
255
324
  const path = basePath ? \`\${basePath}/unique/strict\` : '/unique/strict'
256
- router.get(path, parseQuery, setShape(opConfig), ...before, ${prefix}FindUniqueOrThrow as RequestHandler, ...after, respond)
257
- if (postReadsEnabled) {
258
- router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindUniqueOrThrow as RequestHandler, ...after, respond)
259
- }
325
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findUniqueOrThrow), ${prefix}FindUniqueOrThrow as RequestHandler, ...after, respond)
326
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindUniqueOrThrow as RequestHandler, ...after, respond)
260
327
  }
261
-
262
328
  if (config.enableAll || config.findUnique) {
263
- const opConfig = config.findUnique || defaultOpConfig
329
+ const opConfig: OperationConfigLike = (config.findUnique as OperationConfigLike | undefined) ?? defaultOpConfig
264
330
  const { before = [], after = [] } = opConfig
265
331
  const path = basePath ? \`\${basePath}/unique\` : '/unique'
266
- router.get(path, parseQuery, setShape(opConfig), ...before, ${prefix}FindUnique as RequestHandler, ...after, respond)
267
- if (postReadsEnabled) {
268
- router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindUnique as RequestHandler, ...after, respond)
269
- }
332
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findUnique), ${prefix}FindUnique as RequestHandler, ...after, respond)
333
+ if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindUnique as RequestHandler, ...after, respond)
270
334
  }
271
-
272
335
  if (config.enableAll || config.findMany) {
273
- const opConfig = config.findMany || defaultOpConfig
336
+ const opConfig: OperationConfigLike = (config.findMany as OperationConfigLike | undefined) ?? defaultOpConfig
274
337
  const { before = [], after = [] } = opConfig
275
338
  const path = basePath || '/'
276
- router.get(path, parseQuery, setShape(opConfig), ...before, ${prefix}FindMany as RequestHandler, ...after, respond)
339
+ router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findMany), ${prefix}FindMany as RequestHandler, ...after, respond)
277
340
  if (postReadsEnabled) {
278
341
  const postPath = basePath ? \`\${basePath}/read\` : '/read'
279
342
  router.post(postPath, parseBodyAsQuery, setShape(opConfig), ...before, ${prefix}FindMany as RequestHandler, ...after, respond)
@@ -281,74 +344,65 @@ export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteC
281
344
  }
282
345
 
283
346
  if (config.enableAll || config.createManyAndReturn) {
284
- const opConfig = config.createManyAndReturn || defaultOpConfig
347
+ const opConfig: OperationConfigLike = (config.createManyAndReturn as OperationConfigLike | undefined) ?? defaultOpConfig
285
348
  const { before = [], after = [] } = opConfig
286
349
  const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
287
350
  router.post(path, setShape(opConfig), ...before, ${prefix}CreateManyAndReturn as RequestHandler, ...after, respondCreated)
288
351
  }
289
-
290
352
  if (config.enableAll || config.createMany) {
291
- const opConfig = config.createMany || defaultOpConfig
353
+ const opConfig: OperationConfigLike = (config.createMany as OperationConfigLike | undefined) ?? defaultOpConfig
292
354
  const { before = [], after = [] } = opConfig
293
355
  const path = basePath ? \`\${basePath}/many\` : '/many'
294
356
  router.post(path, setShape(opConfig), ...before, ${prefix}CreateMany as RequestHandler, ...after, respondCreated)
295
357
  }
296
-
297
358
  if (config.enableAll || config.create) {
298
- const opConfig = config.create || defaultOpConfig
359
+ const opConfig: OperationConfigLike = (config.create as OperationConfigLike | undefined) ?? defaultOpConfig
299
360
  const { before = [], after = [] } = opConfig
300
361
  const path = basePath || '/'
301
362
  router.post(path, setShape(opConfig), ...before, ${prefix}Create as RequestHandler, ...after, respondCreated)
302
363
  }
303
-
304
364
  if (config.enableAll || config.updateManyAndReturn) {
305
- const opConfig = config.updateManyAndReturn || defaultOpConfig
365
+ const opConfig: OperationConfigLike = (config.updateManyAndReturn as OperationConfigLike | undefined) ?? defaultOpConfig
306
366
  const { before = [], after = [] } = opConfig
307
367
  const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
308
368
  router.put(path, setShape(opConfig), ...before, ${prefix}UpdateManyAndReturn as RequestHandler, ...after, respond)
309
369
  }
310
-
311
370
  if (config.enableAll || config.updateMany) {
312
- const opConfig = config.updateMany || defaultOpConfig
371
+ const opConfig: OperationConfigLike = (config.updateMany as OperationConfigLike | undefined) ?? defaultOpConfig
313
372
  const { before = [], after = [] } = opConfig
314
373
  const path = basePath ? \`\${basePath}/many\` : '/many'
315
374
  router.put(path, setShape(opConfig), ...before, ${prefix}UpdateMany as RequestHandler, ...after, respond)
316
375
  }
317
-
318
376
  if (config.enableAll || config.update) {
319
- const opConfig = config.update || defaultOpConfig
377
+ const opConfig: OperationConfigLike = (config.update as OperationConfigLike | undefined) ?? defaultOpConfig
320
378
  const { before = [], after = [] } = opConfig
321
379
  const path = basePath || '/'
322
380
  router.put(path, setShape(opConfig), ...before, ${prefix}Update as RequestHandler, ...after, respond)
323
381
  }
324
-
325
382
  if (config.enableAll || config.upsert) {
326
- const opConfig = config.upsert || defaultOpConfig
383
+ const opConfig: OperationConfigLike = (config.upsert as OperationConfigLike | undefined) ?? defaultOpConfig
327
384
  const { before = [], after = [] } = opConfig
328
385
  const path = basePath || '/'
329
386
  router.patch(path, setShape(opConfig), ...before, ${prefix}Upsert as RequestHandler, ...after, respond)
330
387
  }
331
-
332
388
  if (config.enableAll || config.deleteMany) {
333
- const opConfig = config.deleteMany || defaultOpConfig
389
+ const opConfig: OperationConfigLike = (config.deleteMany as OperationConfigLike | undefined) ?? defaultOpConfig
334
390
  const { before = [], after = [] } = opConfig
335
391
  const path = basePath ? \`\${basePath}/many\` : '/many'
336
392
  router.delete(path, setShape(opConfig), ...before, ${prefix}DeleteMany as RequestHandler, ...after, respond)
337
393
  }
338
-
339
394
  if (config.enableAll || config.delete) {
340
- const opConfig = config.delete || defaultOpConfig
395
+ const opConfig: OperationConfigLike = (config.delete as OperationConfigLike | undefined) ?? defaultOpConfig
341
396
  const { before = [], after = [] } = opConfig
342
397
  const path = basePath || '/'
343
398
  router.delete(path, setShape(opConfig), ...before, ${prefix}Delete as RequestHandler, ...after, respond)
344
399
  }
345
400
 
346
- router.use((err: any, _req: Request, res: Response, next: NextFunction) => {
347
- const status = typeof err.status === 'number' ? err.status : 500
348
- const message = err.message || 'Internal server error'
349
- if (!res.headersSent) {
350
- return res.status(status).json({ message })
351
- }
401
+ router.use((err: unknown, _req: Request, res: Response, next: NextFunction) => {
402
+ const e = err as { status?: number; message?: string }
403
+ const status = typeof e.status === 'number' ? e.status : 500
404
+ const message = e.message || 'Internal server error'
405
+ if (!res.headersSent) return res.status(status).json({ message })
352
406
  next(err)
353
407
  })
354
408
 
@@ -1 +1 @@
1
- {"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":";;AAIA,wDAgXC;AAnXD,8CAA8C;AAC9C,uEAAmE;AAEnE,SAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,KAAK,EACL,kBAAkB,EAClB,iBAAiB,GAMlB;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;IAC5B,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAA;IACrC,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;IAC9C,MAAM,kBAAkB,GAAG,GAAG,MAAM,QAAQ,CAAA;IAE5C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,eAAe,EAAE,CAAC,CAAC,eAAe;QAClC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,KAAK;QACnC,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;KACzC,CAAC,CAAC,CAAA;IAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CACjC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACjE,CAAA;IAED,MAAM,SAAS,GAAG,KAAK;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KAChD,CAAC,CAAC,CAAA;IAEL,OAAO;qCAC4B,kBAAkB;;IAEnD,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;YACE,SAAS;;;;;;;EAOnB,IAAA,iDAAuB,EAAC,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;;;uBAGlD,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;;sBAEpC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6BtC,kBAAkB,4BAA4B,SAAS;;;;;;4DAMb,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA0E/D,SAAS;;;;;;;;;;;WAWT,SAAS;;;;;;;;;;;;;;kEAc8C,MAAM;;2EAEG,MAAM;;;;;;;;kEAQf,MAAM;;2EAEG,MAAM;;;;;;;;kEAQf,MAAM;;2EAEG,MAAM;;;;;;;;kEAQf,MAAM;;2EAEG,MAAM;;;;;;;;kEAQf,MAAM;;2EAEG,MAAM;;;;;;;;kEAQf,MAAM;;2EAEG,MAAM;;;;;;;;kEAQf,MAAM;;2EAEG,MAAM;;;;;;;;kEAQf,MAAM;;2EAEG,MAAM;;;;;;;;kEAQf,MAAM;;;+EAGO,MAAM;;;;;;;;uDAQ9B,MAAM;;;;;;;uDAON,MAAM;;;;;;;uDAON,MAAM;;;;;;;sDAOP,MAAM;;;;;;;sDAON,MAAM;;;;;;;sDAON,MAAM;;;;;;;wDAOJ,MAAM;;;;;;;yDAOL,MAAM;;;;;;;yDAON,MAAM;;;;;;;;;;;;;;CAc9D,CAAA;AACD,CAAC"}
1
+ {"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":";;AAMA,wDAsaC;AA3aD,8CAA8C;AAC9C,uEAAmE;AAEnE,kDAA8C;AAE9C,SAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,WAAW,GAOZ;IACC,MAAM,GAAG,GAAG,IAAA,qBAAS,EAAC,WAAW,CAAC,CAAA;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;IAC5B,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,SAAS,CAAC,CAAA;IACrC,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;IAC9C,MAAM,kBAAkB,GAAG,GAAG,MAAM,QAAQ,CAAA;IAE5C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,eAAe,EAAE,CAAC,CAAC,eAAe;QAClC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,KAAK;QACnC,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;KACzC,CAAC,CAAC,CAAA;IAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CACjC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACjE,CAAA;IAED,MAAM,SAAS,GAAG,KAAK;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KAChD,CAAC,CAAC,CAAA;IAEL,OAAO;;oDAE2C,GAAG;;IAEnD,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;YACE,SAAS,WAAW,GAAG;2BACR,SAAS,OAAO,GAAG;qGACuD,GAAG;uDACjD,GAAG;uCACnB,GAAG;yDACe,GAAG;4DACA,GAAG;;;;;;6BAMlC,GAAG;;EAE9B,IAAA,iDAAuB,EAAC,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,CAAC;;;uBAG1E,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;sBACpC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;;kBAkBtC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAqCT,kBAAkB,4BAA4B,SAAS;;;;;4DAKb,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA2IlC,SAAS;;;;wCAIT,SAAS;;;;;;;;;iHASgE,MAAM;+FACxB,MAAM;;;;;;wHAMmB,MAAM;+FAC/B,MAAM;;;;;;yHAMoB,MAAM;+FAChC,MAAM;;;;;;iHAMY,MAAM;+FACxB,MAAM;;;;;;6GAMQ,MAAM;+FACpB,MAAM;;;;;;+GAMU,MAAM;+FACtB,MAAM;;;;;;yHAMoB,MAAM;+FAChC,MAAM;;;;;;kHAMa,MAAM;+FACzB,MAAM;;;;;;gHAMW,MAAM;;;+EAGvC,MAAM;;;;;;;;uDAQ9B,MAAM;;;;;;uDAMN,MAAM;;;;;;uDAMN,MAAM;;;;;;sDAMP,MAAM;;;;;;sDAMN,MAAM;;;;;;sDAMN,MAAM;;;;;;wDAMJ,MAAM;;;;;;yDAML,MAAM;;;;;;yDAMN,MAAM;;;;;;;;;;;;;CAa9D,CAAA;AACD,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { DMMF } from '@prisma/generator-helper';
2
- export declare function generateFastifyRouterFunction({ model, enums, guardShapesImport, }: {
2
+ import { ImportStyle } from '../utils/resolveImportStyle';
3
+ export declare function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, }: {
3
4
  model: DMMF.Model;
4
5
  enums: DMMF.DatamodelEnum[];
5
6
  guardShapesImport: string | null;
7
+ importStyle: ImportStyle;
6
8
  }): string;