prisma-generator-express 1.54.0 → 1.56.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 +186 -11
- package/dist/constants.d.ts +2 -0
- package/dist/generators/generateFastifyHandler.js +3 -1
- package/dist/generators/generateFastifyHandler.js.map +1 -1
- package/dist/generators/generateHonoHandler.js +3 -1
- package/dist/generators/generateHonoHandler.js.map +1 -1
- package/dist/generators/generateOperationCore.d.ts +3 -0
- package/dist/generators/generateOperationCore.js +68 -39
- package/dist/generators/generateOperationCore.js.map +1 -1
- package/dist/generators/generateRouteConfigType.js +4 -1
- package/dist/generators/generateRouteConfigType.js.map +1 -1
- package/dist/generators/generateRouter.d.ts +4 -1
- package/dist/generators/generateRouter.js +20 -7
- package/dist/generators/generateRouter.js.map +1 -1
- package/dist/generators/generateRouterFastify.d.ts +4 -1
- package/dist/generators/generateRouterFastify.js +23 -9
- package/dist/generators/generateRouterFastify.js.map +1 -1
- package/dist/generators/generateRouterHono.d.ts +4 -1
- package/dist/generators/generateRouterHono.js +29 -16
- package/dist/generators/generateRouterHono.js.map +1 -1
- package/dist/generators/generateUnifiedScalarUI.d.ts +2 -1
- package/dist/generators/generateUnifiedScalarUI.js +13 -10
- package/dist/generators/generateUnifiedScalarUI.js.map +1 -1
- package/dist/index.js +42 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/constants.ts +5 -1
- package/src/copy/autoIncludeRuntime.ts +60 -35
- package/src/copy/buildModelOpenApi.ts +144 -23
- package/src/copy/docsRenderer.ts +125 -98
- package/src/copy/operationRuntime.ts +94 -9
- package/src/copy/routeConfig.express.ts +8 -0
- package/src/copy/routeConfig.fastify.ts +8 -0
- package/src/copy/routeConfig.hono.ts +9 -1
- package/src/copy/routeConfig.ts +23 -5
- package/src/generators/generateFastifyHandler.ts +3 -1
- package/src/generators/generateHonoHandler.ts +3 -1
- package/src/generators/generateOperationCore.ts +84 -39
- package/src/generators/generateRouteConfigType.ts +5 -2
- package/src/generators/generateRouter.ts +24 -6
- package/src/generators/generateRouterFastify.ts +27 -8
- package/src/generators/generateRouterHono.ts +33 -15
- package/src/generators/generateUnifiedScalarUI.ts +15 -11
- package/src/index.ts +49 -7
|
@@ -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, }) {
|
|
6
|
+
function generateRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }) {
|
|
7
7
|
const ext = (0, importExt_1.importExt)(importStyle);
|
|
8
8
|
const modelName = model.name;
|
|
9
9
|
const modelNameLower = modelName.toLowerCase();
|
|
@@ -51,7 +51,13 @@ import {
|
|
|
51
51
|
${modelName}GroupBy,
|
|
52
52
|
} from './${modelName}Handlers${ext}'
|
|
53
53
|
import * as core from './${modelName}Core${ext}'
|
|
54
|
-
import type {
|
|
54
|
+
import type {
|
|
55
|
+
RouteConfig,
|
|
56
|
+
QueryBuilderConfig,
|
|
57
|
+
WriteStrategy,
|
|
58
|
+
FindManyPaginatedMode,
|
|
59
|
+
PaginationConfig,
|
|
60
|
+
} from '../routeConfig.target${ext}'
|
|
55
61
|
import { parseQueryParams } from '../parseQueryParams${ext}'
|
|
56
62
|
import { sanitizeKeys, normalizePrefix, getEnv } from '../misc${ext}'
|
|
57
63
|
import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
|
|
@@ -63,6 +69,7 @@ import {
|
|
|
63
69
|
runSingleResultSSE,
|
|
64
70
|
emitTerminalSSEError,
|
|
65
71
|
removeReqCloseListener,
|
|
72
|
+
mergePaginationConfig,
|
|
66
73
|
mapError,
|
|
67
74
|
HttpError,
|
|
68
75
|
} from '../operationRuntime${ext}'
|
|
@@ -72,6 +79,9 @@ import { runAutoIncludeProgressive } from '../autoIncludeRuntime${ext}'
|
|
|
72
79
|
${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'RequestHandler', guardShapesImport, importStyle, 'express')}
|
|
73
80
|
const _env = getEnv()
|
|
74
81
|
|
|
82
|
+
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
83
|
+
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
84
|
+
|
|
75
85
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
76
86
|
const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
|
|
77
87
|
|
|
@@ -79,6 +89,7 @@ type OperationConfigLike = {
|
|
|
79
89
|
before?: RequestHandler[]
|
|
80
90
|
after?: RequestHandler[]
|
|
81
91
|
shape?: Record<string, unknown>
|
|
92
|
+
pagination?: Partial<PaginationConfig>
|
|
82
93
|
progressive?: Record<string, ProgressiveVariantConfig>
|
|
83
94
|
progressiveStages?: Record<string, ProgressiveStage<unknown>>
|
|
84
95
|
}
|
|
@@ -91,7 +102,7 @@ type ExtendedRequest = Request & {
|
|
|
91
102
|
|
|
92
103
|
type LocalsBag = {
|
|
93
104
|
parsedQuery?: Record<string, unknown>
|
|
94
|
-
routeConfig?: { pagination?:
|
|
105
|
+
routeConfig?: { pagination?: PaginationConfig }
|
|
95
106
|
guardShape?: Record<string, unknown>
|
|
96
107
|
guardCaller?: string
|
|
97
108
|
data?: unknown
|
|
@@ -138,7 +149,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
138
149
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
139
150
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
140
151
|
config as unknown as Parameters<typeof buildModelOpenApi>[3],
|
|
141
|
-
{ format: 'json' },
|
|
152
|
+
{ format: 'json', writeStrategy: WRITE_STRATEGY },
|
|
142
153
|
)
|
|
143
154
|
const openApiYamlSpec = openApiDisabled
|
|
144
155
|
? null
|
|
@@ -147,7 +158,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
147
158
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
148
159
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
149
160
|
config as unknown as Parameters<typeof buildModelOpenApi>[3],
|
|
150
|
-
{ format: 'yaml' },
|
|
161
|
+
{ format: 'yaml', writeStrategy: WRITE_STRATEGY },
|
|
151
162
|
)
|
|
152
163
|
|
|
153
164
|
const qbEnabled = isQueryBuilderEnabled(config)
|
|
@@ -174,6 +185,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
174
185
|
guardShape: locals.guardShape,
|
|
175
186
|
guardCaller: locals.guardCaller,
|
|
176
187
|
paginationConfig: locals.routeConfig?.pagination,
|
|
188
|
+
findManyPaginatedMode: FIND_MANY_PAGINATED_MODE,
|
|
177
189
|
}
|
|
178
190
|
}
|
|
179
191
|
|
|
@@ -197,8 +209,9 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
197
209
|
const setShape = (opConfig: OperationConfigLike): RequestHandler => {
|
|
198
210
|
return (req, res, next) => {
|
|
199
211
|
const locals = readLocals(res)
|
|
200
|
-
|
|
201
|
-
|
|
212
|
+
const merged = mergePaginationConfig(config.pagination, opConfig.pagination)
|
|
213
|
+
if (merged) {
|
|
214
|
+
locals.routeConfig = { pagination: merged }
|
|
202
215
|
}
|
|
203
216
|
const headerName = config.guard?.variantHeader || 'x-api-variant'
|
|
204
217
|
const headerValue = req.get(headerName)
|
|
@@ -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,8 +1,11 @@
|
|
|
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
5
|
model: DMMF.Model;
|
|
5
6
|
enums: DMMF.DatamodelEnum[];
|
|
6
7
|
guardShapesImport: string | null;
|
|
7
8
|
importStyle: ImportStyle;
|
|
9
|
+
writeStrategy: WriteStrategy;
|
|
10
|
+
findManyPaginatedMode: FindManyPaginatedMode;
|
|
8
11
|
}): string;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateFastifyRouterFunction = generateFastifyRouterFunction;
|
|
4
4
|
const generateRouteConfigType_1 = require("./generateRouteConfigType");
|
|
5
5
|
const importExt_1 = require("../utils/importExt");
|
|
6
|
-
function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, }) {
|
|
6
|
+
function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }) {
|
|
7
7
|
const ext = (0, importExt_1.importExt)(importStyle);
|
|
8
8
|
const modelName = model.name;
|
|
9
9
|
const modelNameLower = modelName.toLowerCase();
|
|
@@ -48,15 +48,24 @@ import {
|
|
|
48
48
|
${modelName}Count,
|
|
49
49
|
${modelName}GroupBy,
|
|
50
50
|
} from './${modelName}Handlers${ext}'
|
|
51
|
-
import type {
|
|
51
|
+
import type {
|
|
52
|
+
RouteConfig,
|
|
53
|
+
FastifyHookHandler,
|
|
54
|
+
WriteStrategy,
|
|
55
|
+
FindManyPaginatedMode,
|
|
56
|
+
PaginationConfig,
|
|
57
|
+
} from '../routeConfig.target${ext}'
|
|
52
58
|
import { parseQueryParams } from '../parseQueryParams${ext}'
|
|
53
59
|
import { sanitizeKeys, normalizePrefix, getEnv } from '../misc${ext}'
|
|
54
60
|
import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
|
|
55
|
-
import { mapError, transformResult, HttpError, type OperationContext } from '../operationRuntime${ext}'
|
|
61
|
+
import { mapError, transformResult, mergePaginationConfig, HttpError, type OperationContext } from '../operationRuntime${ext}'
|
|
56
62
|
|
|
57
63
|
${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'FastifyHookHandler', guardShapesImport, importStyle, 'fastify')}
|
|
58
64
|
const _env = getEnv()
|
|
59
65
|
|
|
66
|
+
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
67
|
+
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
68
|
+
|
|
60
69
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
61
70
|
|
|
62
71
|
const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
|
|
@@ -65,6 +74,7 @@ type OperationConfigLike = {
|
|
|
65
74
|
before?: FastifyHookHandler[]
|
|
66
75
|
after?: FastifyHookHandler[]
|
|
67
76
|
shape?: Record<string, unknown>
|
|
77
|
+
pagination?: Partial<PaginationConfig>
|
|
68
78
|
}
|
|
69
79
|
|
|
70
80
|
type FastifyExtended = FastifyRequest & {
|
|
@@ -72,7 +82,7 @@ type FastifyExtended = FastifyRequest & {
|
|
|
72
82
|
postgres?: unknown
|
|
73
83
|
sqlite?: unknown
|
|
74
84
|
parsedQuery?: Record<string, unknown>
|
|
75
|
-
routeConfig?: { pagination?:
|
|
85
|
+
routeConfig?: { pagination?: PaginationConfig }
|
|
76
86
|
guardShape?: Record<string, unknown>
|
|
77
87
|
guardCaller?: string
|
|
78
88
|
resultData?: unknown
|
|
@@ -118,9 +128,9 @@ function makeShapeHook(
|
|
|
118
128
|
): (request: FastifyRequest) => void {
|
|
119
129
|
return (request: FastifyRequest) => {
|
|
120
130
|
const fx = request as FastifyExtended
|
|
121
|
-
const
|
|
122
|
-
if (
|
|
123
|
-
fx.routeConfig = { pagination:
|
|
131
|
+
const merged = mergePaginationConfig(config.pagination, opConfig.pagination)
|
|
132
|
+
if (merged) {
|
|
133
|
+
fx.routeConfig = { pagination: merged }
|
|
124
134
|
}
|
|
125
135
|
const headerName = (config.guard?.variantHeader || 'x-api-variant').toLowerCase()
|
|
126
136
|
const headerValue = request.headers[headerName]
|
|
@@ -187,7 +197,7 @@ export async function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(
|
|
|
187
197
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
188
198
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
189
199
|
config,
|
|
190
|
-
{ format: 'json' },
|
|
200
|
+
{ format: 'json', writeStrategy: WRITE_STRATEGY },
|
|
191
201
|
)
|
|
192
202
|
const openApiYamlSpec = openApiDisabled
|
|
193
203
|
? null
|
|
@@ -196,7 +206,7 @@ export async function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(
|
|
|
196
206
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
197
207
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
198
208
|
config,
|
|
199
|
-
{ format: 'yaml' },
|
|
209
|
+
{ format: 'yaml', writeStrategy: WRITE_STRATEGY },
|
|
200
210
|
)
|
|
201
211
|
|
|
202
212
|
const qbEnabled = isQueryBuilderEnabled(config)
|
|
@@ -212,6 +222,10 @@ export async function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(
|
|
|
212
222
|
}
|
|
213
223
|
}
|
|
214
224
|
|
|
225
|
+
fastify.addHook('onRequest', async (request: FastifyRequest) => {
|
|
226
|
+
(request as FastifyExtended & { findManyPaginatedMode?: FindManyPaginatedMode }).findManyPaginatedMode = FIND_MANY_PAGINATED_MODE
|
|
227
|
+
})
|
|
228
|
+
|
|
215
229
|
fastify.setErrorHandler((error: FastifyError, _request: FastifyRequest, reply: FastifyReply) => {
|
|
216
230
|
const e = error as { status?: number; statusCode?: number; message?: string }
|
|
217
231
|
const status = e.status ?? e.statusCode ?? 500
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
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 generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }: {
|
|
4
5
|
model: DMMF.Model;
|
|
5
6
|
enums: DMMF.DatamodelEnum[];
|
|
6
7
|
guardShapesImport: string | null;
|
|
7
8
|
importStyle: ImportStyle;
|
|
9
|
+
writeStrategy: WriteStrategy;
|
|
10
|
+
findManyPaginatedMode: FindManyPaginatedMode;
|
|
8
11
|
}): string;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateHonoRouterFunction = generateHonoRouterFunction;
|
|
4
4
|
const generateRouteConfigType_1 = require("./generateRouteConfigType");
|
|
5
5
|
const importExt_1 = require("../utils/importExt");
|
|
6
|
-
function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, }) {
|
|
6
|
+
function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }) {
|
|
7
7
|
const ext = (0, importExt_1.importExt)(importStyle);
|
|
8
8
|
const modelName = model.name;
|
|
9
9
|
const modelNameLower = modelName.toLowerCase();
|
|
@@ -57,15 +57,26 @@ import type {
|
|
|
57
57
|
HonoEnvBase,
|
|
58
58
|
HonoInternalVariables,
|
|
59
59
|
GeneratedHonoEnv,
|
|
60
|
+
WriteStrategy,
|
|
61
|
+
FindManyPaginatedMode,
|
|
62
|
+
PaginationConfig,
|
|
60
63
|
} from '../routeConfig.target${ext}'
|
|
61
64
|
import { parseQueryParams } from '../parseQueryParams${ext}'
|
|
62
65
|
import { sanitizeKeys, normalizePrefix, getEnv } from '../misc${ext}'
|
|
63
66
|
import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
|
|
64
|
-
import {
|
|
67
|
+
import {
|
|
68
|
+
mapError,
|
|
69
|
+
transformResult,
|
|
70
|
+
mergePaginationConfig,
|
|
71
|
+
type OperationContext,
|
|
72
|
+
} from '../operationRuntime${ext}'
|
|
65
73
|
|
|
66
74
|
${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'HonoHookHandler', guardShapesImport, importStyle, 'hono')}
|
|
67
75
|
const _env = getEnv()
|
|
68
76
|
|
|
77
|
+
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
78
|
+
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
79
|
+
|
|
69
80
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
70
81
|
|
|
71
82
|
const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
|
|
@@ -74,6 +85,7 @@ type OperationConfigLike<TEnv extends HonoEnvBase> = {
|
|
|
74
85
|
before?: HonoHookHandler<TEnv>[]
|
|
75
86
|
after?: HonoHookHandler<TEnv>[]
|
|
76
87
|
shape?: Record<string, unknown>
|
|
88
|
+
pagination?: Partial<PaginationConfig>
|
|
77
89
|
}
|
|
78
90
|
|
|
79
91
|
const defaultOpConfig = Object.freeze({
|
|
@@ -81,7 +93,7 @@ const defaultOpConfig = Object.freeze({
|
|
|
81
93
|
after: Object.freeze([]),
|
|
82
94
|
}) as unknown as OperationConfigLike<HonoEnvBase>
|
|
83
95
|
|
|
84
|
-
type HandlerContext = Context<{ Variables: HonoInternalVariables }>
|
|
96
|
+
type HandlerContext = Context<{ Variables: HonoInternalVariables & { findManyPaginatedMode?: FindManyPaginatedMode } }>
|
|
85
97
|
|
|
86
98
|
function isQueryBuilderEnabled(config: RouteConfig): boolean {
|
|
87
99
|
if (config.queryBuilder === false) return false
|
|
@@ -134,10 +146,11 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
|
|
|
134
146
|
opConfig: OperationConfigLike<TEnv>,
|
|
135
147
|
) {
|
|
136
148
|
return (c: Context<GeneratedHonoEnv<TEnv>>): void => {
|
|
137
|
-
const
|
|
138
|
-
if (
|
|
139
|
-
c.set('routeConfig', { pagination:
|
|
149
|
+
const merged = mergePaginationConfig(config.pagination, opConfig.pagination)
|
|
150
|
+
if (merged) {
|
|
151
|
+
c.set('routeConfig', { pagination: merged })
|
|
140
152
|
}
|
|
153
|
+
;(c as unknown as HandlerContext).set('findManyPaginatedMode', FIND_MANY_PAGINATED_MODE)
|
|
141
154
|
const headerName = config.guard?.variantHeader || 'x-api-variant'
|
|
142
155
|
const headerValue = c.req.header(headerName)
|
|
143
156
|
const caller = config.guard?.resolveVariant?.(c) ?? headerValue ?? undefined
|
|
@@ -208,7 +221,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
208
221
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
209
222
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
210
223
|
config as RouteConfig,
|
|
211
|
-
{ format: 'json' },
|
|
224
|
+
{ format: 'json', writeStrategy: WRITE_STRATEGY },
|
|
212
225
|
)
|
|
213
226
|
const openApiYamlSpec = openApiDisabled
|
|
214
227
|
? null
|
|
@@ -217,7 +230,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
217
230
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
218
231
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
219
232
|
config as RouteConfig,
|
|
220
|
-
{ format: 'yaml' },
|
|
233
|
+
{ format: 'yaml', writeStrategy: WRITE_STRATEGY },
|
|
221
234
|
)
|
|
222
235
|
|
|
223
236
|
if (isQueryBuilderEnabled(config as RouteConfig)) {
|
|
@@ -254,17 +267,17 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
254
267
|
parseFn: (c: HandlerContext) => Promise<void>,
|
|
255
268
|
) => async (c: Context<GeneratedHonoEnv<TEnv>>): Promise<Response> => {
|
|
256
269
|
try {
|
|
257
|
-
await parseFn(c)
|
|
270
|
+
await parseFn(c as unknown as HandlerContext)
|
|
258
271
|
makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
|
|
259
272
|
const { before = [], after = [] } = opConfig
|
|
260
273
|
const beforeResp = await runHooks<TEnv>(before, c)
|
|
261
274
|
if (beforeResp) return beforeResp
|
|
262
|
-
await handlerFn(c)
|
|
275
|
+
await handlerFn(c as unknown as HandlerContext)
|
|
263
276
|
const afterResp = await runHooks<TEnv>(after, c)
|
|
264
277
|
if (afterResp) return afterResp
|
|
265
|
-
return sendResult(c)
|
|
278
|
+
return sendResult(c as unknown as HandlerContext)
|
|
266
279
|
} catch (error: unknown) {
|
|
267
|
-
return sendError(c, error)
|
|
280
|
+
return sendError(c as unknown as HandlerContext, error)
|
|
268
281
|
}
|
|
269
282
|
}
|
|
270
283
|
|
|
@@ -273,17 +286,17 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
273
286
|
handlerFn: (c: HandlerContext) => Promise<void>,
|
|
274
287
|
) => async (c: Context<GeneratedHonoEnv<TEnv>>): Promise<Response> => {
|
|
275
288
|
try {
|
|
276
|
-
await parseWriteBodyMiddleware(c)
|
|
289
|
+
await parseWriteBodyMiddleware(c as unknown as HandlerContext)
|
|
277
290
|
makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig)(c)
|
|
278
291
|
const { before = [], after = [] } = opConfig
|
|
279
292
|
const beforeResp = await runHooks<TEnv>(before, c)
|
|
280
293
|
if (beforeResp) return beforeResp
|
|
281
|
-
await handlerFn(c)
|
|
294
|
+
await handlerFn(c as unknown as HandlerContext)
|
|
282
295
|
const afterResp = await runHooks<TEnv>(after, c)
|
|
283
296
|
if (afterResp) return afterResp
|
|
284
|
-
return sendResult(c)
|
|
297
|
+
return sendResult(c as unknown as HandlerContext)
|
|
285
298
|
} catch (error: unknown) {
|
|
286
|
-
return sendError(c, error)
|
|
299
|
+
return sendError(c as unknown as HandlerContext, error)
|
|
287
300
|
}
|
|
288
301
|
}
|
|
289
302
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouterHono.js","sourceRoot":"","sources":["../../src/generators/generateRouterHono.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generateRouterHono.js","sourceRoot":"","sources":["../../src/generators/generateRouterHono.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper';
|
|
2
|
-
import { Target } from '../constants';
|
|
2
|
+
import { Target, WriteStrategy } from '../constants';
|
|
3
3
|
import { ImportStyle } from '../utils/resolveImportStyle';
|
|
4
4
|
export declare function generateScalarUIHandler(options: {
|
|
5
5
|
model: DMMF.Model;
|
|
6
6
|
enums: DMMF.DatamodelEnum[];
|
|
7
7
|
target?: Target;
|
|
8
8
|
importStyle: ImportStyle;
|
|
9
|
+
writeStrategy: WriteStrategy;
|
|
9
10
|
}): string;
|
|
@@ -49,7 +49,7 @@ function generateExpressDocsExport(modelName) {
|
|
|
49
49
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
50
50
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
51
51
|
config,
|
|
52
|
-
{ format: 'yaml' }
|
|
52
|
+
{ format: 'yaml', writeStrategy: WRITE_STRATEGY }
|
|
53
53
|
)
|
|
54
54
|
return res.type('application/yaml').send(yaml as string)
|
|
55
55
|
}
|
|
@@ -59,7 +59,7 @@ function generateExpressDocsExport(modelName) {
|
|
|
59
59
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
60
60
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
61
61
|
config,
|
|
62
|
-
{ format: 'json' }
|
|
62
|
+
{ format: 'json', writeStrategy: WRITE_STRATEGY }
|
|
63
63
|
)
|
|
64
64
|
|
|
65
65
|
if (ui === 'json') return res.json(spec)
|
|
@@ -70,7 +70,7 @@ function generateExpressDocsExport(modelName) {
|
|
|
70
70
|
return res.type('html').send(renderScalar('${modelName}', spec, pageTitle, config.scalarCdnUrl))
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
const html = renderDocs('${modelName}', config, MODEL_CONTEXT)
|
|
73
|
+
const html = renderDocs('${modelName}', config, MODEL_CONTEXT, WRITE_STRATEGY)
|
|
74
74
|
return res.type('html').send(html)
|
|
75
75
|
}
|
|
76
76
|
}`;
|
|
@@ -99,7 +99,7 @@ function generateFastifyDocsExport(modelName) {
|
|
|
99
99
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
100
100
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
101
101
|
config,
|
|
102
|
-
{ format: 'yaml' }
|
|
102
|
+
{ format: 'yaml', writeStrategy: WRITE_STRATEGY }
|
|
103
103
|
)
|
|
104
104
|
reply.type('application/yaml').send(yaml as string); return
|
|
105
105
|
}
|
|
@@ -109,7 +109,7 @@ function generateFastifyDocsExport(modelName) {
|
|
|
109
109
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
110
110
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
111
111
|
config,
|
|
112
|
-
{ format: 'json' }
|
|
112
|
+
{ format: 'json', writeStrategy: WRITE_STRATEGY }
|
|
113
113
|
)
|
|
114
114
|
|
|
115
115
|
if (ui === 'json') { reply.send(spec); return }
|
|
@@ -120,7 +120,7 @@ function generateFastifyDocsExport(modelName) {
|
|
|
120
120
|
reply.type('text/html').send(renderScalar('${modelName}', spec, pageTitle, config.scalarCdnUrl)); return
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
const html = renderDocs('${modelName}', config, MODEL_CONTEXT)
|
|
123
|
+
const html = renderDocs('${modelName}', config, MODEL_CONTEXT, WRITE_STRATEGY)
|
|
124
124
|
reply.type('text/html').send(html)
|
|
125
125
|
}
|
|
126
126
|
}`;
|
|
@@ -148,7 +148,7 @@ function generateHonoDocsExport(modelName) {
|
|
|
148
148
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
149
149
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
150
150
|
config,
|
|
151
|
-
{ format: 'yaml' }
|
|
151
|
+
{ format: 'yaml', writeStrategy: WRITE_STRATEGY }
|
|
152
152
|
) as string
|
|
153
153
|
return c.body(yaml, 200, { 'Content-Type': 'application/yaml' })
|
|
154
154
|
}
|
|
@@ -158,7 +158,7 @@ function generateHonoDocsExport(modelName) {
|
|
|
158
158
|
MODEL_FIELDS as unknown as Parameters<typeof buildModelOpenApi>[1],
|
|
159
159
|
MODEL_ENUMS as unknown as Parameters<typeof buildModelOpenApi>[2],
|
|
160
160
|
config,
|
|
161
|
-
{ format: 'json' }
|
|
161
|
+
{ format: 'json', writeStrategy: WRITE_STRATEGY }
|
|
162
162
|
)
|
|
163
163
|
|
|
164
164
|
if (ui === 'json') return c.json(spec as Record<string, unknown>)
|
|
@@ -169,13 +169,13 @@ function generateHonoDocsExport(modelName) {
|
|
|
169
169
|
return c.html(renderScalar('${modelName}', spec, pageTitle, config.scalarCdnUrl))
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
const html = renderDocs('${modelName}', config, MODEL_CONTEXT)
|
|
172
|
+
const html = renderDocs('${modelName}', config, MODEL_CONTEXT, WRITE_STRATEGY)
|
|
173
173
|
return c.html(html)
|
|
174
174
|
}
|
|
175
175
|
}`;
|
|
176
176
|
}
|
|
177
177
|
function generateScalarUIHandler(options) {
|
|
178
|
-
const { model, enums } = options;
|
|
178
|
+
const { model, enums, writeStrategy } = options;
|
|
179
179
|
const target = options.target || 'express';
|
|
180
180
|
const ext = (0, importExt_1.importExt)(options.importStyle);
|
|
181
181
|
const modelName = model.name;
|
|
@@ -229,6 +229,7 @@ function generateScalarUIHandler(options) {
|
|
|
229
229
|
: generateExpressDocsExport(modelName);
|
|
230
230
|
return `${frameworkImport}
|
|
231
231
|
import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
|
|
232
|
+
import type { WriteStrategy } from '../routeConfig${ext}'
|
|
232
233
|
import {
|
|
233
234
|
renderDocs,
|
|
234
235
|
renderScalar,
|
|
@@ -242,6 +243,8 @@ import {
|
|
|
242
243
|
type DocsModelContext,
|
|
243
244
|
} from '../docsRenderer${ext}'
|
|
244
245
|
|
|
246
|
+
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
247
|
+
|
|
245
248
|
export const MODEL_FIELDS: FieldMeta[] = ${JSON.stringify(fieldsMeta, null, 2)}
|
|
246
249
|
|
|
247
250
|
export const MODEL_ENUMS: EnumMeta[] = ${JSON.stringify(enumsMeta, null, 2)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateUnifiedScalarUI.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedScalarUI.ts"],"names":[],"mappings":";;AAqLA,
|
|
1
|
+
{"version":3,"file":"generateUnifiedScalarUI.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedScalarUI.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,30 @@ function getTarget(options) {
|
|
|
28
28
|
return raw;
|
|
29
29
|
throw new Error(`Invalid target "${raw}". Expected "express", "fastify", or "hono".`);
|
|
30
30
|
}
|
|
31
|
+
function getWriteStrategy(options) {
|
|
32
|
+
const raw = String(options.generator.config.writeStrategy ?? 'regular');
|
|
33
|
+
const lower = raw.toLowerCase();
|
|
34
|
+
if (lower === 'regular')
|
|
35
|
+
return 'regular';
|
|
36
|
+
if (lower === 'throwonnonreturning')
|
|
37
|
+
return 'throwOnNonReturning';
|
|
38
|
+
if (lower === 'throwonregular') {
|
|
39
|
+
console.warn('[prisma-generator-express] writeStrategy="throwOnRegular" is deprecated. Use "throwOnNonReturning" instead.');
|
|
40
|
+
return 'throwOnNonReturning';
|
|
41
|
+
}
|
|
42
|
+
if (lower === 'forcereturn')
|
|
43
|
+
return 'forceReturn';
|
|
44
|
+
throw new Error(`Invalid writeStrategy "${raw}". Expected "regular", "throwOnNonReturning", or "forceReturn".`);
|
|
45
|
+
}
|
|
46
|
+
function getFindManyPaginatedMode(options) {
|
|
47
|
+
const raw = String(options.generator.config.findManyPaginatedMode ?? 'promiseAll');
|
|
48
|
+
const lower = raw.toLowerCase();
|
|
49
|
+
if (lower === 'transaction')
|
|
50
|
+
return 'transaction';
|
|
51
|
+
if (lower === 'promiseall')
|
|
52
|
+
return 'promiseAll';
|
|
53
|
+
throw new Error(`Invalid findManyPaginatedMode "${raw}". Expected "transaction" or "promiseAll".`);
|
|
54
|
+
}
|
|
31
55
|
function validateClientGeneratorPresent(options) {
|
|
32
56
|
(0, generateImportPrismaStatement_1.getRelativeClientPath)(options, options.dmmf.datamodel.models[0]?.name ?? 'Model');
|
|
33
57
|
}
|
|
@@ -41,6 +65,8 @@ function validateClientGeneratorPresent(options) {
|
|
|
41
65
|
},
|
|
42
66
|
async onGenerate(options) {
|
|
43
67
|
const target = getTarget(options);
|
|
68
|
+
const writeStrategy = getWriteStrategy(options);
|
|
69
|
+
const findManyPaginatedMode = getFindManyPaginatedMode(options);
|
|
44
70
|
const hasExplicitOutput = !!options.generator.output?.fromEnvVar ||
|
|
45
71
|
options.generator.config.output !== undefined;
|
|
46
72
|
if (!hasExplicitOutput) {
|
|
@@ -53,6 +79,8 @@ function validateClientGeneratorPresent(options) {
|
|
|
53
79
|
console.log(` Target: ${target}`);
|
|
54
80
|
console.log(` Output: ${options.generator.output?.value}`);
|
|
55
81
|
console.log(` Import style: ${importStyle}`);
|
|
82
|
+
console.log(` Write strategy: ${writeStrategy}`);
|
|
83
|
+
console.log(` findManyPaginated mode: ${findManyPaginatedMode}`);
|
|
56
84
|
if (options.dmmf.datamodel.models.length > 0) {
|
|
57
85
|
validateClientGeneratorPresent(options);
|
|
58
86
|
}
|
|
@@ -65,15 +93,19 @@ function validateClientGeneratorPresent(options) {
|
|
|
65
93
|
: generateUnifiedHandler_1.generateUnifiedHandler;
|
|
66
94
|
const allModels = options.dmmf.datamodel.models;
|
|
67
95
|
for (const model of options.dmmf.datamodel.models) {
|
|
68
|
-
if (model.documentation &&
|
|
69
|
-
GENERATOR_OFF_RE.test(model.documentation)) {
|
|
96
|
+
if (model.documentation && GENERATOR_OFF_RE.test(model.documentation)) {
|
|
70
97
|
console.log(` Skipping: ${model.name} (generator off)`);
|
|
71
98
|
continue;
|
|
72
99
|
}
|
|
73
100
|
modelNames.push(model.name);
|
|
74
101
|
const guardShapesImport = (0, generateImportPrismaStatement_1.getGuardShapesImport)(options, model.name);
|
|
75
102
|
await (0, writeFileSafely_1.writeFileSafely)({
|
|
76
|
-
content: (0, generateOperationCore_1.generateModelCore)({
|
|
103
|
+
content: (0, generateOperationCore_1.generateModelCore)({
|
|
104
|
+
model: model,
|
|
105
|
+
importStyle,
|
|
106
|
+
writeStrategy,
|
|
107
|
+
findManyPaginatedMode,
|
|
108
|
+
}),
|
|
77
109
|
options,
|
|
78
110
|
model: model,
|
|
79
111
|
operation: 'Core',
|
|
@@ -90,6 +122,8 @@ function validateClientGeneratorPresent(options) {
|
|
|
90
122
|
enums: options.dmmf.datamodel.enums,
|
|
91
123
|
guardShapesImport,
|
|
92
124
|
importStyle,
|
|
125
|
+
writeStrategy,
|
|
126
|
+
findManyPaginatedMode,
|
|
93
127
|
})
|
|
94
128
|
: target === 'hono'
|
|
95
129
|
? (0, generateRouterHono_1.generateHonoRouterFunction)({
|
|
@@ -97,12 +131,16 @@ function validateClientGeneratorPresent(options) {
|
|
|
97
131
|
enums: options.dmmf.datamodel.enums,
|
|
98
132
|
guardShapesImport,
|
|
99
133
|
importStyle,
|
|
134
|
+
writeStrategy,
|
|
135
|
+
findManyPaginatedMode,
|
|
100
136
|
})
|
|
101
137
|
: (0, generateRouter_1.generateRouterFunction)({
|
|
102
138
|
model: model,
|
|
103
139
|
enums: options.dmmf.datamodel.enums,
|
|
104
140
|
guardShapesImport,
|
|
105
141
|
importStyle,
|
|
142
|
+
writeStrategy,
|
|
143
|
+
findManyPaginatedMode,
|
|
106
144
|
});
|
|
107
145
|
await (0, writeFileSafely_1.writeFileSafely)({
|
|
108
146
|
content: routerContent,
|
|
@@ -116,6 +154,7 @@ function validateClientGeneratorPresent(options) {
|
|
|
116
154
|
enums: options.dmmf.datamodel.enums,
|
|
117
155
|
target,
|
|
118
156
|
importStyle,
|
|
157
|
+
writeStrategy,
|
|
119
158
|
}),
|
|
120
159
|
options,
|
|
121
160
|
model: model,
|