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.
- package/README.md +286 -29
- package/dist/copy/misc.js +25 -6
- package/dist/copy/misc.js.map +1 -1
- package/dist/generators/generateFastifyHandler.js +11 -0
- package/dist/generators/generateFastifyHandler.js.map +1 -1
- package/dist/generators/generateHonoHandler.js +14 -20
- package/dist/generators/generateHonoHandler.js.map +1 -1
- package/dist/generators/generateImportPrismaStatement.js +43 -0
- package/dist/generators/generateImportPrismaStatement.js.map +1 -1
- package/dist/generators/generateOperationCore.js +58 -17
- package/dist/generators/generateOperationCore.js.map +1 -1
- package/dist/generators/generateRouteConfigType.js +44 -15
- package/dist/generators/generateRouteConfigType.js.map +1 -1
- package/dist/generators/generateRouter.d.ts +2 -1
- package/dist/generators/generateRouter.js +60 -34
- package/dist/generators/generateRouter.js.map +1 -1
- package/dist/generators/generateRouterFastify.d.ts +2 -1
- package/dist/generators/generateRouterFastify.js +238 -193
- package/dist/generators/generateRouterFastify.js.map +1 -1
- package/dist/generators/generateRouterHono.d.ts +2 -1
- package/dist/generators/generateRouterHono.js +124 -89
- package/dist/generators/generateRouterHono.js.map +1 -1
- package/dist/index.js +22 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/copy/autoIncludeRuntime.ts +9 -5
- package/src/copy/buildModelOpenApi.ts +96 -0
- package/src/copy/docsRenderer.ts +577 -174
- package/src/copy/materializedRouter.ts +40 -1
- package/src/copy/misc.ts +23 -6
- package/src/copy/operationDefinitions.ts +10 -0
- package/src/copy/operationRuntime.ts +28 -9
- package/src/copy/routeConfig.express.ts +9 -9
- package/src/copy/routeConfig.hono.ts +63 -5
- package/src/copy/routeConfig.ts +44 -20
- package/src/generators/generateFastifyHandler.ts +12 -0
- package/src/generators/generateHonoHandler.ts +15 -20
- package/src/generators/generateImportPrismaStatement.ts +13 -0
- package/src/generators/generateOperationCore.ts +58 -17
- package/src/generators/generateRouteConfigType.ts +52 -17
- package/src/generators/generateRouter.ts +61 -33
- package/src/generators/generateRouterFastify.ts +239 -192
- package/src/generators/generateRouterHono.ts +125 -88
- package/src/index.ts +25 -5
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateRouterFunction = generateRouterFunction;
|
|
4
4
|
const generateRouteConfigType_1 = require("./generateRouteConfigType");
|
|
5
5
|
const importExt_1 = require("../utils/importExt");
|
|
6
|
-
function generateRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }) {
|
|
6
|
+
function generateRouterFunction({ 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();
|
|
@@ -61,6 +61,7 @@ import type {
|
|
|
61
61
|
import { parseQueryParams } from '../parseQueryParams${ext}'
|
|
62
62
|
import { sanitizeKeys, normalizePrefix, getEnv } from '../misc${ext}'
|
|
63
63
|
import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
|
|
64
|
+
import { validateCountSourceWhere } from '../routeConfig${ext}'
|
|
64
65
|
import type { OperationContext } from '../operationRuntime${ext}'
|
|
65
66
|
import {
|
|
66
67
|
transformResult,
|
|
@@ -81,6 +82,7 @@ const _env = getEnv()
|
|
|
81
82
|
|
|
82
83
|
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
83
84
|
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
85
|
+
const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
|
|
84
86
|
|
|
85
87
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
86
88
|
const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
|
|
@@ -131,8 +133,16 @@ function readLocals(res: Response): LocalsBag {
|
|
|
131
133
|
}
|
|
132
134
|
|
|
133
135
|
export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${modelName}RouteConfig<TCtx, TPrisma> = {}) {
|
|
136
|
+
validateCountSourceWhere(config.pagination?.countSource, '${modelName} pagination')
|
|
137
|
+
validateCountSourceWhere(
|
|
138
|
+
(config.findManyPaginated && typeof config.findManyPaginated === 'object' ? config.findManyPaginated : undefined)?.pagination?.countSource,
|
|
139
|
+
'${modelName} findManyPaginated pagination',
|
|
140
|
+
)
|
|
141
|
+
|
|
134
142
|
const router = express.Router()
|
|
135
143
|
|
|
144
|
+
const isEnabled = (value: unknown): boolean => value !== false && !!(config.enableAll || value)
|
|
145
|
+
|
|
136
146
|
const customPrefix = normalizePrefix(config.customUrlPrefix || '')
|
|
137
147
|
const modelPrefix = config.addModelPrefix !== false ? '/${modelNameLower}' : ''
|
|
138
148
|
const basePath = customPrefix + modelPrefix
|
|
@@ -142,24 +152,32 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
142
152
|
|
|
143
153
|
const postReadsEnabled = !config.disablePostReads
|
|
144
154
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
155
|
+
let _openApiJsonCache: unknown = undefined
|
|
156
|
+
const getOpenApiJson = (): unknown => {
|
|
157
|
+
if (_openApiJsonCache === undefined) {
|
|
158
|
+
_openApiJsonCache = buildModelOpenApi(
|
|
148
159
|
'${modelName}',
|
|
149
160
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
150
161
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
151
162
|
config as unknown as Parameters<typeof buildModelOpenApi>[3],
|
|
152
163
|
{ format: 'json', writeStrategy: WRITE_STRATEGY },
|
|
153
164
|
)
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
165
|
+
}
|
|
166
|
+
return _openApiJsonCache
|
|
167
|
+
}
|
|
168
|
+
let _openApiYamlCache: string | undefined = undefined
|
|
169
|
+
const getOpenApiYaml = (): string => {
|
|
170
|
+
if (_openApiYamlCache === undefined) {
|
|
171
|
+
_openApiYamlCache = buildModelOpenApi(
|
|
157
172
|
'${modelName}',
|
|
158
173
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
159
174
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
160
175
|
config as unknown as Parameters<typeof buildModelOpenApi>[3],
|
|
161
176
|
{ format: 'yaml', writeStrategy: WRITE_STRATEGY },
|
|
162
|
-
)
|
|
177
|
+
) as string
|
|
178
|
+
}
|
|
179
|
+
return _openApiYamlCache
|
|
180
|
+
}
|
|
163
181
|
|
|
164
182
|
const qbEnabled = isQueryBuilderEnabled(config)
|
|
165
183
|
if (qbEnabled) {
|
|
@@ -200,7 +218,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
200
218
|
|
|
201
219
|
const parseBodyAsQuery: RequestHandler = (req, res, next) => {
|
|
202
220
|
if (!req.body || typeof req.body !== 'object' || Array.isArray(req.body)) {
|
|
203
|
-
return next(
|
|
221
|
+
return next(new HttpError(400, 'Request body must be a JSON object'))
|
|
204
222
|
}
|
|
205
223
|
readLocals(res).parsedQuery = sanitizeKeys(req.body as Record<string, unknown>)
|
|
206
224
|
next()
|
|
@@ -217,7 +235,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
217
235
|
const headerValue = req.get(headerName)
|
|
218
236
|
const caller = config.guard?.resolveVariant?.(req) ?? headerValue ?? undefined
|
|
219
237
|
if (caller) locals.guardCaller = caller
|
|
220
|
-
if (opConfig.shape) locals.guardShape = opConfig.shape
|
|
238
|
+
if (opConfig.shape && !DROP_GUARD) locals.guardShape = opConfig.shape
|
|
221
239
|
next()
|
|
222
240
|
}
|
|
223
241
|
}
|
|
@@ -304,11 +322,13 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
304
322
|
(name: string) => typeof stageRegistry[name] !== 'function',
|
|
305
323
|
)
|
|
306
324
|
if (missingStage) {
|
|
307
|
-
|
|
325
|
+
emitTerminalSSEError(res, 'Missing progressive stage: ' + missingStage)
|
|
326
|
+
return
|
|
308
327
|
}
|
|
309
328
|
|
|
310
329
|
if (typeof config.resolveContext !== 'function') {
|
|
311
|
-
|
|
330
|
+
emitTerminalSSEError(res, 'Progressive endpoint requires config.resolveContext')
|
|
331
|
+
return
|
|
312
332
|
}
|
|
313
333
|
|
|
314
334
|
const ctx = await config.resolveContext(req)
|
|
@@ -323,8 +343,8 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
323
343
|
})
|
|
324
344
|
} catch (err) {
|
|
325
345
|
console.error('[progressive] dispatch error:', err)
|
|
326
|
-
if (!res.headersSent) {
|
|
327
|
-
|
|
346
|
+
if (!res.headersSent && !res.writableEnded) {
|
|
347
|
+
emitTerminalSSEError(res, 'Internal server error')
|
|
328
348
|
}
|
|
329
349
|
}
|
|
330
350
|
}
|
|
@@ -346,70 +366,70 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
346
366
|
const openapiJsonPath = basePath ? \`\${basePath}/openapi.json\` : '/openapi.json'
|
|
347
367
|
const openapiYamlPath = basePath ? \`\${basePath}/openapi.yaml\` : '/openapi.yaml'
|
|
348
368
|
router.get(openapiJsonPath, (_req, res) => {
|
|
349
|
-
res.json(
|
|
369
|
+
res.json(getOpenApiJson())
|
|
350
370
|
})
|
|
351
371
|
router.get(openapiYamlPath, (_req, res) => {
|
|
352
|
-
res.type('application/yaml').send(
|
|
372
|
+
res.type('application/yaml').send(getOpenApiYaml())
|
|
353
373
|
})
|
|
354
374
|
}
|
|
355
375
|
|
|
356
|
-
if (config.
|
|
376
|
+
if (isEnabled(config.findFirst)) {
|
|
357
377
|
const opConfig: OperationConfigLike = (config.findFirst as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
358
378
|
const { before = [], after = [] } = opConfig
|
|
359
379
|
const path = basePath ? \`\${basePath}/first\` : '/first'
|
|
360
380
|
router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findFirst, 'findFirst'), ${modelName}FindFirst as RequestHandler, ...after, respond)
|
|
361
381
|
if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindFirst as RequestHandler, ...after, respond)
|
|
362
382
|
}
|
|
363
|
-
if (config.
|
|
383
|
+
if (isEnabled(config.findFirstOrThrow)) {
|
|
364
384
|
const opConfig: OperationConfigLike = (config.findFirstOrThrow as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
365
385
|
const { before = [], after = [] } = opConfig
|
|
366
386
|
const path = basePath ? \`\${basePath}/first/strict\` : '/first/strict'
|
|
367
387
|
router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findFirstOrThrow, 'findFirstOrThrow'), ${modelName}FindFirstOrThrow as RequestHandler, ...after, respond)
|
|
368
388
|
if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindFirstOrThrow as RequestHandler, ...after, respond)
|
|
369
389
|
}
|
|
370
|
-
if (config.
|
|
390
|
+
if (isEnabled(config.findManyPaginated)) {
|
|
371
391
|
const opConfig: OperationConfigLike = (config.findManyPaginated as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
372
392
|
const { before = [], after = [] } = opConfig
|
|
373
393
|
const path = basePath ? \`\${basePath}/paginated\` : '/paginated'
|
|
374
394
|
router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findManyPaginated, 'findManyPaginated'), ${modelName}FindManyPaginated as RequestHandler, ...after, respond)
|
|
375
395
|
if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindManyPaginated as RequestHandler, ...after, respond)
|
|
376
396
|
}
|
|
377
|
-
if (config.
|
|
397
|
+
if (isEnabled(config.aggregate)) {
|
|
378
398
|
const opConfig: OperationConfigLike = (config.aggregate as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
379
399
|
const { before = [], after = [] } = opConfig
|
|
380
400
|
const path = basePath ? \`\${basePath}/aggregate\` : '/aggregate'
|
|
381
401
|
router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.aggregate, 'aggregate'), ${modelName}Aggregate as RequestHandler, ...after, respond)
|
|
382
402
|
if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}Aggregate as RequestHandler, ...after, respond)
|
|
383
403
|
}
|
|
384
|
-
if (config.
|
|
404
|
+
if (isEnabled(config.count)) {
|
|
385
405
|
const opConfig: OperationConfigLike = (config.count as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
386
406
|
const { before = [], after = [] } = opConfig
|
|
387
407
|
const path = basePath ? \`\${basePath}/count\` : '/count'
|
|
388
408
|
router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.count, 'count'), ${modelName}Count as RequestHandler, ...after, respond)
|
|
389
409
|
if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}Count as RequestHandler, ...after, respond)
|
|
390
410
|
}
|
|
391
|
-
if (config.
|
|
411
|
+
if (isEnabled(config.groupBy)) {
|
|
392
412
|
const opConfig: OperationConfigLike = (config.groupBy as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
393
413
|
const { before = [], after = [] } = opConfig
|
|
394
414
|
const path = basePath ? \`\${basePath}/groupby\` : '/groupby'
|
|
395
415
|
router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.groupBy, 'groupBy'), ${modelName}GroupBy as RequestHandler, ...after, respond)
|
|
396
416
|
if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}GroupBy as RequestHandler, ...after, respond)
|
|
397
417
|
}
|
|
398
|
-
if (config.
|
|
418
|
+
if (isEnabled(config.findUniqueOrThrow)) {
|
|
399
419
|
const opConfig: OperationConfigLike = (config.findUniqueOrThrow as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
400
420
|
const { before = [], after = [] } = opConfig
|
|
401
421
|
const path = basePath ? \`\${basePath}/unique/strict\` : '/unique/strict'
|
|
402
422
|
router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findUniqueOrThrow, 'findUniqueOrThrow'), ${modelName}FindUniqueOrThrow as RequestHandler, ...after, respond)
|
|
403
423
|
if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindUniqueOrThrow as RequestHandler, ...after, respond)
|
|
404
424
|
}
|
|
405
|
-
if (config.
|
|
425
|
+
if (isEnabled(config.findUnique)) {
|
|
406
426
|
const opConfig: OperationConfigLike = (config.findUnique as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
407
427
|
const { before = [], after = [] } = opConfig
|
|
408
428
|
const path = basePath ? \`\${basePath}/unique\` : '/unique'
|
|
409
429
|
router.get(path, parseQuery, setShape(opConfig), ...before, maybeProgressiveSSE(opConfig, core.findUnique, 'findUnique'), ${modelName}FindUnique as RequestHandler, ...after, respond)
|
|
410
430
|
if (postReadsEnabled) router.post(path, parseBodyAsQuery, setShape(opConfig), ...before, ${modelName}FindUnique as RequestHandler, ...after, respond)
|
|
411
431
|
}
|
|
412
|
-
if (config.
|
|
432
|
+
if (isEnabled(config.findMany)) {
|
|
413
433
|
const opConfig: OperationConfigLike = (config.findMany as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
414
434
|
const { before = [], after = [] } = opConfig
|
|
415
435
|
const path = basePath || '/'
|
|
@@ -420,55 +440,55 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
420
440
|
}
|
|
421
441
|
}
|
|
422
442
|
|
|
423
|
-
if (config.
|
|
443
|
+
if (isEnabled(config.createManyAndReturn)) {
|
|
424
444
|
const opConfig: OperationConfigLike = (config.createManyAndReturn as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
425
445
|
const { before = [], after = [] } = opConfig
|
|
426
446
|
const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
|
|
427
447
|
router.post(path, setShape(opConfig), ...before, ${modelName}CreateManyAndReturn as RequestHandler, ...after, respondCreated)
|
|
428
448
|
}
|
|
429
|
-
if (config.
|
|
449
|
+
if (isEnabled(config.createMany)) {
|
|
430
450
|
const opConfig: OperationConfigLike = (config.createMany as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
431
451
|
const { before = [], after = [] } = opConfig
|
|
432
452
|
const path = basePath ? \`\${basePath}/many\` : '/many'
|
|
433
453
|
router.post(path, setShape(opConfig), ...before, ${modelName}CreateMany as RequestHandler, ...after, respondCreated)
|
|
434
454
|
}
|
|
435
|
-
if (config.
|
|
455
|
+
if (isEnabled(config.create)) {
|
|
436
456
|
const opConfig: OperationConfigLike = (config.create as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
437
457
|
const { before = [], after = [] } = opConfig
|
|
438
458
|
const path = basePath || '/'
|
|
439
459
|
router.post(path, setShape(opConfig), ...before, ${modelName}Create as RequestHandler, ...after, respondCreated)
|
|
440
460
|
}
|
|
441
|
-
if (config.
|
|
461
|
+
if (isEnabled(config.updateManyAndReturn)) {
|
|
442
462
|
const opConfig: OperationConfigLike = (config.updateManyAndReturn as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
443
463
|
const { before = [], after = [] } = opConfig
|
|
444
464
|
const path = basePath ? \`\${basePath}/many/return\` : '/many/return'
|
|
445
465
|
router.put(path, setShape(opConfig), ...before, ${modelName}UpdateManyAndReturn as RequestHandler, ...after, respond)
|
|
446
466
|
}
|
|
447
|
-
if (config.
|
|
467
|
+
if (isEnabled(config.updateMany)) {
|
|
448
468
|
const opConfig: OperationConfigLike = (config.updateMany as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
449
469
|
const { before = [], after = [] } = opConfig
|
|
450
470
|
const path = basePath ? \`\${basePath}/many\` : '/many'
|
|
451
471
|
router.put(path, setShape(opConfig), ...before, ${modelName}UpdateMany as RequestHandler, ...after, respond)
|
|
452
472
|
}
|
|
453
|
-
if (config.
|
|
473
|
+
if (isEnabled(config.update)) {
|
|
454
474
|
const opConfig: OperationConfigLike = (config.update as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
455
475
|
const { before = [], after = [] } = opConfig
|
|
456
476
|
const path = basePath || '/'
|
|
457
477
|
router.put(path, setShape(opConfig), ...before, ${modelName}Update as RequestHandler, ...after, respond)
|
|
458
478
|
}
|
|
459
|
-
if (config.
|
|
479
|
+
if (isEnabled(config.upsert)) {
|
|
460
480
|
const opConfig: OperationConfigLike = (config.upsert as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
461
481
|
const { before = [], after = [] } = opConfig
|
|
462
482
|
const path = basePath || '/'
|
|
463
483
|
router.patch(path, setShape(opConfig), ...before, ${modelName}Upsert as RequestHandler, ...after, respond)
|
|
464
484
|
}
|
|
465
|
-
if (config.
|
|
485
|
+
if (isEnabled(config.deleteMany)) {
|
|
466
486
|
const opConfig: OperationConfigLike = (config.deleteMany as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
467
487
|
const { before = [], after = [] } = opConfig
|
|
468
488
|
const path = basePath ? \`\${basePath}/many\` : '/many'
|
|
469
489
|
router.delete(path, setShape(opConfig), ...before, ${modelName}DeleteMany as RequestHandler, ...after, respond)
|
|
470
490
|
}
|
|
471
|
-
if (config.
|
|
491
|
+
if (isEnabled(config.delete)) {
|
|
472
492
|
const opConfig: OperationConfigLike = (config.delete as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
473
493
|
const { before = [], after = [] } = opConfig
|
|
474
494
|
const path = basePath || '/'
|
|
@@ -476,6 +496,12 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
476
496
|
}
|
|
477
497
|
if (config.updateEach) {
|
|
478
498
|
const opConfig: OperationConfigLike = (config.updateEach as OperationConfigLike | undefined) ?? defaultOpConfig
|
|
499
|
+
if ((!opConfig.before || opConfig.before.length === 0) && _env.NODE_ENV !== 'production') {
|
|
500
|
+
console.warn(
|
|
501
|
+
'[${modelName}Router] updateEach is enabled without a before hook. ' +
|
|
502
|
+
'This endpoint bypasses guard shapes and should be protected by authentication middleware.',
|
|
503
|
+
)
|
|
504
|
+
}
|
|
479
505
|
const { before = [], after = [] } = opConfig
|
|
480
506
|
const path = basePath ? \`\${basePath}/each\` : '/each'
|
|
481
507
|
router.post(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":";;AAMA,wDA8iBC;AAnjBD,uEAAmE;AAEnE,kDAA8C;AAG9C,SAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,SAAS,GASV;IACC,MAAM,GAAG,GAAG,IAAA,qBAAS,EAAC,WAAW,CAAC,CAAA;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;IAC5B,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;IAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC1E,MAAM,kBAAkB,GAAG,GAAG,SAAS,QAAQ,CAAA;IAE/C,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,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;YACD,SAAS,WAAW,GAAG;2BACR,SAAS,OAAO,GAAG;;;;;;;+BAOf,GAAG;uDACqB,GAAG;gEACM,GAAG;yDACV,GAAG;0DACF,GAAG;4DACD,GAAG;;;;;;;;;;;6BAWlC,GAAG;mDACmB,GAAG;kEACY,GAAG;;EAEnE,IAAA,iDAAuB,EAAC,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,CAAC;;;yCAGxD,aAAa;2DACK,qBAAqB;qBAC3D,SAAS;;uBAEP,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;sBACpC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA+CtC,kBAAkB,2CAA2C,SAAS;8DAC1B,SAAS;;;OAGhE,SAAS;;;;;;;;4DAQ4C,cAAc;;;;;;;;;;;;WAY/D,SAAS;;;;;;;;;;;;;WAaT,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA8HQ,SAAS;8BACP,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8HAiFqF,SAAS;+FACxC,SAAS;;;;;;4IAMoC,SAAS;+FACtD,SAAS;;;;;;8IAMsC,SAAS;+FACxD,SAAS;;;;;;8HAMsB,SAAS;+FACxC,SAAS;;;;;;sHAMc,SAAS;+FAChC,SAAS;;;;;;0HAMkB,SAAS;+FACpC,SAAS;;;;;;8IAMsC,SAAS;+FACxD,SAAS;;;;;;gIAMwB,SAAS;+FAC1C,SAAS;;;;;;4HAMoB,SAAS;;;+EAGtD,SAAS;;;;;;;;uDAQjC,SAAS;;;;;;uDAMT,SAAS;;;;;;uDAMT,SAAS;;;;;;sDAMV,SAAS;;;;;;sDAMT,SAAS;;;;;;sDAMT,SAAS;;;;;;wDAMP,SAAS;;;;;;yDAMR,SAAS;;;;;;yDAMT,SAAS;;;;;;YAMtD,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCpB,CAAA;AACD,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper';
|
|
2
2
|
import { ImportStyle } from '../utils/resolveImportStyle';
|
|
3
3
|
import { WriteStrategy, FindManyPaginatedMode } from '../constants';
|
|
4
|
-
export declare function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }: {
|
|
4
|
+
export declare function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, dropGuard, }: {
|
|
5
5
|
model: DMMF.Model;
|
|
6
6
|
enums: DMMF.DatamodelEnum[];
|
|
7
7
|
guardShapesImport: string | null;
|
|
8
8
|
importStyle: ImportStyle;
|
|
9
9
|
writeStrategy: WriteStrategy;
|
|
10
10
|
findManyPaginatedMode: FindManyPaginatedMode;
|
|
11
|
+
dropGuard: boolean;
|
|
11
12
|
}): string;
|