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.
- package/README.md +444 -12
- package/dist/generators/generateOperationCore.d.ts +3 -1
- package/dist/generators/generateOperationCore.js +266 -160
- package/dist/generators/generateOperationCore.js.map +1 -1
- package/dist/generators/generateRouteConfigType.d.ts +3 -1
- package/dist/generators/generateRouteConfigType.js +36 -31
- package/dist/generators/generateRouteConfigType.js.map +1 -1
- package/dist/generators/generateRouter.d.ts +4 -2
- package/dist/generators/generateRouter.js +186 -132
- package/dist/generators/generateRouter.js.map +1 -1
- package/dist/generators/generateRouterFastify.d.ts +3 -1
- package/dist/generators/generateRouterFastify.js +12 -10
- package/dist/generators/generateRouterFastify.js.map +1 -1
- package/dist/generators/generateRouterHono.d.ts +3 -1
- package/dist/generators/generateRouterHono.js +12 -9
- package/dist/generators/generateRouterHono.js.map +1 -1
- package/dist/generators/generateUnifiedDocs.d.ts +2 -1
- package/dist/generators/generateUnifiedDocs.js +6 -4
- package/dist/generators/generateUnifiedDocs.js.map +1 -1
- package/dist/index.js +16 -21
- package/dist/index.js.map +1 -1
- package/dist/utils/copyFiles.d.ts +2 -1
- package/dist/utils/copyFiles.js +39 -34
- package/dist/utils/copyFiles.js.map +1 -1
- package/dist/utils/importExt.d.ts +2 -0
- package/dist/utils/importExt.js +11 -0
- package/dist/utils/importExt.js.map +1 -0
- package/dist/utils/resolveImportStyle.d.ts +3 -0
- package/dist/utils/resolveImportStyle.js +211 -0
- package/dist/utils/resolveImportStyle.js.map +1 -0
- package/dist/utils/writeFileSafely.js +6 -9
- package/dist/utils/writeFileSafely.js.map +1 -1
- package/package.json +1 -1
- package/src/copy/routeConfig.express.ts +39 -5
- package/src/copy/routeConfig.fastify.ts +8 -4
- package/src/copy/routeConfig.hono.ts +7 -3
- package/src/copy/routeConfig.ts +42 -2
- package/src/generators/generateOperationCore.ts +273 -169
- package/src/generators/generateRouteConfigType.ts +43 -36
- package/src/generators/generateRouter.ts +189 -133
- package/src/generators/generateRouterFastify.ts +14 -9
- package/src/generators/generateRouterHono.ts +14 -8
- package/src/generators/generateUnifiedDocs.ts +8 -3
- package/src/index.ts +25 -47
- package/src/utils/copyFiles.ts +45 -45
- package/src/utils/importExt.ts +7 -0
- package/src/utils/resolveImportStyle.ts +187 -0
- 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
|
-
'
|
|
7
|
-
'
|
|
8
|
-
'
|
|
9
|
-
'
|
|
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
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
`
|
|
62
|
-
`
|
|
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
|
-
|
|
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
|
|
70
|
+
` RouteConfig<Record<string, unknown>, TCtx>,\n` +
|
|
69
71
|
` | ${omitKeys}\n` +
|
|
70
|
-
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/generators/generateRouteConfigType.ts"],"names":[],"mappings":";;AA4CA,0DAmDC;AA9FD,kDAA8C;AAG9C,MAAM,iBAAiB,GAAG;IACxB,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,kBAAkB;IAClE,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS;IAChE,QAAQ,EAAE,YAAY,EAAE,qBAAqB;IAC7C,QAAQ,EAAE,YAAY,EAAE,qBAAqB;IAC7C,QAAQ,EAAE,QAAQ,EAAE,YAAY;CACxB,CAAA;AAIV,MAAM,eAAe,GAAiC,IAAI,GAAG,CAAkB;IAC7E,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,kBAAkB;IAClE,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS;CACjE,CAAC,CAAA;AAEF,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,EAChC,WAAwB,EACxB,MAAc;IAEd,MAAM,GAAG,GAAG,IAAA,qBAAS,EAAC,WAAW,CAAC,CAAA;IAClC,MAAM,CAAC,GAAG,SAAS,CAAA;IACnB,MAAM,mBAAmB,GAAG,MAAM,KAAK,SAAS,CAAA;IAEhD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,4EAA4E,CAAA;IACrG,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC7F,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAE5F,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,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG;YACZ,gBAAgB,eAAe,IAAI;YACnC,eAAe,eAAe,IAAI;YAClC,eAAe,CAAC,GAAG,CAAC,kBAAkB;SACvC,CAAA;QACD,IAAI,MAAM,IAAI,mBAAmB,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;YACxE,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;QAC9E,CAAC;QACD,OAAO,KAAK,QAAQ,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;IACtD,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,MAAM,qBAAqB,GAAG,mBAAmB;QAC/C,CAAC,CAAC,yFAAyF,GAAG,OAAO;QACrG,CAAC,CAAC,EAAE,CAAA;IAEN,OAAO,CACL,qBAAqB;QACrB,oBAAoB,cAAc,aAAa,iBAAiB,GAAG,GAAG,OAAO;QAC7E,eAAe,CAAC,uCAAuC;QACvD,iDAAiD;QACjD,OAAO,QAAQ,IAAI;QACnB,wBAAwB;QACxB,SAAS;QACT,mFAAmF;QACnF,GAAG,SAAS,OAAO,CACpB,CAAA;AACH,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper';
|
|
2
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
30
|
-
import type {
|
|
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
|
|
52
|
-
import {
|
|
53
|
-
import {
|
|
54
|
-
import {
|
|
55
|
-
import {
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
65
|
-
before
|
|
66
|
-
after
|
|
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 {
|
|
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
|
-
|
|
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.
|
|
179
|
+
readLocals(res).parsedQuery = sanitizeKeys(req.body as Record<string, unknown>)
|
|
130
180
|
next()
|
|
131
181
|
}
|
|
132
182
|
|
|
133
|
-
const setShape = (opConfig:
|
|
183
|
+
const setShape = (opConfig: OperationConfigLike): RequestHandler => {
|
|
134
184
|
return (req, res, next) => {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
347
|
-
const
|
|
348
|
-
const
|
|
349
|
-
|
|
350
|
-
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper';
|
|
2
|
-
|
|
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;
|