prisma-generator-express 1.64.1 → 1.64.3
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/dist/generators/generateRouteConfigType.js +2 -1
- package/dist/generators/generateRouteConfigType.js.map +1 -1
- package/dist/generators/generateRouterHono.js +116 -29
- package/dist/generators/generateRouterHono.js.map +1 -1
- package/dist/guardOptions.d.ts +30 -0
- package/dist/guardOptions.js +123 -0
- package/dist/guardOptions.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/copy/projectionDefaults.ts +6 -1
- package/src/copy/routeConfig.hono.ts +85 -0
- package/src/copy/routeConfig.ts +700 -361
- package/src/generators/generateRouteConfigType.ts +6 -1
- package/src/generators/generateRouterHono.ts +165 -29
- package/src/guardOptions.ts +226 -0
- package/src/index.ts +19 -0
|
@@ -90,9 +90,10 @@ function generateRouteConfigType(modelName, hookHandlerType, guardShapesImport,
|
|
|
90
90
|
` before?: ${beforeRef}[]\n` +
|
|
91
91
|
` after?: ${afterRef}[]\n` +
|
|
92
92
|
` }>`;
|
|
93
|
+
const allowDefault = ` allowDefaultVariant?: boolean`;
|
|
93
94
|
return (` ${routerOp}?: (${commonConfig} & (\n` +
|
|
94
95
|
` | { shape?: ${m}${c}ShapeInput<TCtx>; variants?: never }\n` +
|
|
95
|
-
` | { shape?: never; variants: ${variantsConfig} }\n` +
|
|
96
|
+
` | { shape?: never; variants: ${variantsConfig}\n${allowDefault} }\n` +
|
|
96
97
|
` )) | false`);
|
|
97
98
|
}).join('\n');
|
|
98
99
|
const omitKeys = ROUTER_OPERATIONS.map((k) => `'${k}'`).join('\n | ');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/generators/generateRouteConfigType.ts"],"names":[],"mappings":";;AA8CA,
|
|
1
|
+
{"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/generators/generateRouteConfigType.ts"],"names":[],"mappings":"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"}
|
|
@@ -108,6 +108,8 @@ import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
|
|
|
108
108
|
import {
|
|
109
109
|
normalizeOperation,
|
|
110
110
|
resolveOperationVariantKey,
|
|
111
|
+
resolveGuardPolicy,
|
|
112
|
+
resolveGuardShapeOnce,
|
|
111
113
|
validateCountSourceWhere,
|
|
112
114
|
validateOperationConfig,
|
|
113
115
|
validateUpdateEachConfig,
|
|
@@ -124,7 +126,10 @@ import { MODEL_FIELDS, MODEL_ENUMS } from './${modelName}Metadata${ext}'
|
|
|
124
126
|
${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'HonoBeforeHook', guardShapesImport, importStyle, 'hono')}
|
|
125
127
|
const _env = getEnv()
|
|
126
128
|
|
|
127
|
-
|
|
129
|
+
// Fixed at generation time. The \`allowE2EGuardBypass\` control decides whether the
|
|
130
|
+
// environment can additionally drop the guard at runtime; it defaults to true,
|
|
131
|
+
// which is upstream behaviour. See generateRouterHono.ts.
|
|
132
|
+
const DROP_GUARD = ${dropGuard}
|
|
128
133
|
|
|
129
134
|
type JsonLike =
|
|
130
135
|
| string
|
|
@@ -182,28 +187,28 @@ async function parseBodyAsQueryMiddleware(c: HandlerContext): Promise<void> {
|
|
|
182
187
|
c.set('parsedQuery', sanitizeKeys(body as Record<string, unknown>))
|
|
183
188
|
}
|
|
184
189
|
|
|
185
|
-
async function
|
|
190
|
+
async function parseUpdateEachBodyMiddleware(c: HandlerContext): Promise<void> {
|
|
186
191
|
let body: unknown
|
|
187
192
|
try {
|
|
188
193
|
body = await c.req.json()
|
|
189
194
|
} catch {
|
|
190
|
-
throw new HTTPException(400, { message: '
|
|
195
|
+
throw new HTTPException(400, { message: 'updateEach body must be an array of { where, data } items' })
|
|
191
196
|
}
|
|
192
|
-
if (!
|
|
193
|
-
throw new HTTPException(400, { message: '
|
|
197
|
+
if (!Array.isArray(body)) {
|
|
198
|
+
throw new HTTPException(400, { message: 'updateEach body must be an array of { where, data } items' })
|
|
194
199
|
}
|
|
195
200
|
c.set('body', body)
|
|
196
201
|
}
|
|
197
202
|
|
|
198
|
-
async function
|
|
203
|
+
async function parseWriteBodyMiddleware(c: HandlerContext): Promise<void> {
|
|
199
204
|
let body: unknown
|
|
200
205
|
try {
|
|
201
206
|
body = await c.req.json()
|
|
202
207
|
} catch {
|
|
203
|
-
throw new HTTPException(400, { message: '
|
|
208
|
+
throw new HTTPException(400, { message: 'Request body must be a JSON object' })
|
|
204
209
|
}
|
|
205
|
-
if (!Array.isArray(body)) {
|
|
206
|
-
throw new HTTPException(400, { message: '
|
|
210
|
+
if (!body || typeof body !== 'object' || Array.isArray(body)) {
|
|
211
|
+
throw new HTTPException(400, { message: 'Request body must be a JSON object' })
|
|
207
212
|
}
|
|
208
213
|
c.set('body', body)
|
|
209
214
|
}
|
|
@@ -213,6 +218,17 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
|
|
|
213
218
|
opConfig: NormalizedOp<TEnv>,
|
|
214
219
|
opKind: OpKind,
|
|
215
220
|
) {
|
|
221
|
+
const policy = resolveGuardPolicy(config)
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* The environment bypass, honoured unless the consumer turned it off.
|
|
225
|
+
*
|
|
226
|
+
* \`E2E=true\` downgrading enforcement in a deployed environment is a real
|
|
227
|
+
* hazard, and it is also upstream behaviour — so it is a control, not a
|
|
228
|
+
* decision made here.
|
|
229
|
+
*/
|
|
230
|
+
const dropGuard = DROP_GUARD || (policy.allowE2EGuardBypass && _env.E2E === 'true')
|
|
231
|
+
|
|
216
232
|
return async (c: Context<GeneratedHonoEnv<TEnv>>): Promise<void> => {
|
|
217
233
|
const merged = mergePaginationConfig(config.pagination, opConfig.pagination)
|
|
218
234
|
if (merged) c.set('routeConfig', { pagination: merged })
|
|
@@ -235,15 +251,35 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
|
|
|
235
251
|
if (resolvedKey !== undefined) c.set('guardVariantKey', resolvedKey)
|
|
236
252
|
|
|
237
253
|
if (opConfig.guardShape) {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
254
|
+
const resolveCtx = typeof config.resolveContext === 'function'
|
|
255
|
+
? () => (config.resolveContext as (ctx: Context<GeneratedHonoEnv<TEnv>>) => unknown | Promise<unknown>)(c)
|
|
256
|
+
: undefined
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* With \`validateResolvedShapes\`, resolved ONCE here and the validated value
|
|
260
|
+
* is what travels onward — see resolveGuardShapeOnce. Passing the function
|
|
261
|
+
* on would let it return a different shape when it is enforced than when it
|
|
262
|
+
* was checked.
|
|
263
|
+
*
|
|
264
|
+
* Without it the raw shape is passed through untouched, which is upstream
|
|
265
|
+
* behaviour: it is resolved at the point of use, and a function returning
|
|
266
|
+
* something unusable is not this router's business to refuse.
|
|
267
|
+
*/
|
|
268
|
+
let effectiveShape: unknown = opConfig.guardShape
|
|
269
|
+
if (policy.validateResolvedShapes) {
|
|
270
|
+
const resolution = await resolveGuardShapeOnce(opConfig.guardShape, resolvedKey, resolveCtx)
|
|
271
|
+
if (!resolution.ok) {
|
|
272
|
+
c.set('guardShapeFailure', resolution.problem)
|
|
273
|
+
return
|
|
274
|
+
}
|
|
275
|
+
effectiveShape = resolution.shape
|
|
276
|
+
}
|
|
244
277
|
|
|
278
|
+
if (!dropGuard) {
|
|
279
|
+
c.set('guardShape', effectiveShape)
|
|
280
|
+
} else {
|
|
245
281
|
await applyDroppedGuard(
|
|
246
|
-
|
|
282
|
+
effectiveShape,
|
|
247
283
|
resolvedKey,
|
|
248
284
|
resolveCtx,
|
|
249
285
|
opKind,
|
|
@@ -385,6 +421,38 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
385
421
|
})
|
|
386
422
|
}
|
|
387
423
|
|
|
424
|
+
const POLICY = resolveGuardPolicy(config)
|
|
425
|
+
const SETTLE_BEFORE_HOOKS = POLICY.guardResolutionOrder === 'before-hooks'
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* The guard-resolution failures, raised in one place so both handlers and both
|
|
429
|
+
* orderings share exactly one definition of what a failure is.
|
|
430
|
+
*
|
|
431
|
+
* WHERE it is called is the behavioural difference, and it is the
|
|
432
|
+
* \`guardResolutionOrder\` control. \`'before-hooks'\` runs it before any operation
|
|
433
|
+
* hook, because a hook that returns a Response — an auth gate, a cache, a
|
|
434
|
+
* short-circuit for a known caller — would otherwise answer a request whose
|
|
435
|
+
* guard was never established. \`'after-hooks'\` is upstream behaviour.
|
|
436
|
+
*
|
|
437
|
+
* \`guardShapeFailure\` is only ever set when \`validateResolvedShapes\` is on, so
|
|
438
|
+
* that branch is inert rather than merely unreached when it is off.
|
|
439
|
+
*/
|
|
440
|
+
const settleGuard = (c: Context<GeneratedHonoEnv<TEnv>>): void => {
|
|
441
|
+
const failure = c.get('guardVariantFailure')
|
|
442
|
+
if (failure) {
|
|
443
|
+
throw new HTTPException(400, {
|
|
444
|
+
message: formatGuardVariantResolutionError(failure),
|
|
445
|
+
})
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
const shapeFailure = c.get('guardShapeFailure')
|
|
449
|
+
if (shapeFailure) {
|
|
450
|
+
throw new HTTPException(500, {
|
|
451
|
+
message: 'guard shape could not be resolved: ' + shapeFailure,
|
|
452
|
+
})
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
388
456
|
const handleRead = (
|
|
389
457
|
opConfig: NormalizedOp<TEnv>,
|
|
390
458
|
handlerFn: (c: HandlerContext) => Promise<void>,
|
|
@@ -394,15 +462,15 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
394
462
|
try {
|
|
395
463
|
await parseFn(c as unknown as HandlerContext)
|
|
396
464
|
await makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig, opKind)(c)
|
|
465
|
+
|
|
466
|
+
// Settled BEFORE any hook can answer the request, when asked for.
|
|
467
|
+
if (SETTLE_BEFORE_HOOKS) settleGuard(c)
|
|
468
|
+
|
|
397
469
|
const operationBefore = await runBeforeHooks<TEnv>(opConfig.operationBefore, c)
|
|
398
470
|
if (operationBefore) return operationBefore
|
|
399
471
|
|
|
400
|
-
|
|
401
|
-
if (
|
|
402
|
-
throw new HTTPException(400, {
|
|
403
|
-
message: formatGuardVariantResolutionError(failure),
|
|
404
|
-
})
|
|
405
|
-
}
|
|
472
|
+
// Upstream order: hooks first, guard failure after.
|
|
473
|
+
if (!SETTLE_BEFORE_HOOKS) settleGuard(c)
|
|
406
474
|
|
|
407
475
|
const key = c.get('guardVariantKey')
|
|
408
476
|
const variantHooks =
|
|
@@ -429,15 +497,15 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
429
497
|
try {
|
|
430
498
|
await parseWriteBodyMiddleware(c as unknown as HandlerContext)
|
|
431
499
|
await makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig, opKind)(c)
|
|
500
|
+
|
|
501
|
+
// Settled BEFORE any hook can answer the request, when asked for.
|
|
502
|
+
if (SETTLE_BEFORE_HOOKS) settleGuard(c)
|
|
503
|
+
|
|
432
504
|
const operationBefore = await runBeforeHooks<TEnv>(opConfig.operationBefore, c)
|
|
433
505
|
if (operationBefore) return operationBefore
|
|
434
506
|
|
|
435
|
-
|
|
436
|
-
if (
|
|
437
|
-
throw new HTTPException(400, {
|
|
438
|
-
message: formatGuardVariantResolutionError(failure),
|
|
439
|
-
})
|
|
440
|
-
}
|
|
507
|
+
// Upstream order: hooks first, guard failure after.
|
|
508
|
+
if (!SETTLE_BEFORE_HOOKS) settleGuard(c)
|
|
441
509
|
|
|
442
510
|
const key = c.get('guardVariantKey')
|
|
443
511
|
const variantHooks =
|
|
@@ -460,7 +528,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
460
528
|
key: K,
|
|
461
529
|
): NormalizedOp<TEnv> => {
|
|
462
530
|
const raw = config[key] as unknown as OperationConfigLike<TEnv> | undefined
|
|
463
|
-
validateOperationConfig(raw, '${modelName}.' + String(key))
|
|
531
|
+
validateOperationConfig(raw, '${modelName}.' + String(key), POLICY)
|
|
464
532
|
return normalizeHonoOperation(raw)
|
|
465
533
|
}
|
|
466
534
|
|
|
@@ -469,6 +537,25 @@ ${readOpBlocks}
|
|
|
469
537
|
${writeOpBlocks}
|
|
470
538
|
|
|
471
539
|
if (config.updateEach) {
|
|
540
|
+
/**
|
|
541
|
+
* Refused only when \`enableUpdateEach\` is false. It bypasses guard shapes by design — the
|
|
542
|
+
* endpoint is a batch of { where, data } applied directly — and the only thing
|
|
543
|
+
* between it and an unguarded mass mutation is a console.warn suppressed in
|
|
544
|
+
* production. A warning is not a security boundary.
|
|
545
|
+
*
|
|
546
|
+
* Removing the route outright was a breaking change to a published package,
|
|
547
|
+
* so by default it registers exactly as it did, warning and all.
|
|
548
|
+
*/
|
|
549
|
+
if (!POLICY.enableUpdateEach) {
|
|
550
|
+
throw new Error(
|
|
551
|
+
'${modelName}.updateEach: enableUpdateEach is false, so this router ' +
|
|
552
|
+
'does not register updateEach. It bypasses guard shapes entirely, so ' +
|
|
553
|
+
'there is no configuration that makes it safe to expose. Perform batch ' +
|
|
554
|
+
'updates through a guarded operation, or behind your own authenticated ' +
|
|
555
|
+
'route outside the generated router.',
|
|
556
|
+
)
|
|
557
|
+
}
|
|
558
|
+
|
|
472
559
|
const rawUpdateEach = config.updateEach as unknown as OperationConfigLike<TEnv>
|
|
473
560
|
validateUpdateEachConfig(rawUpdateEach, '${modelName}.updateEach')
|
|
474
561
|
const opConfig = normalizeHonoOperation(rawUpdateEach)
|
|
@@ -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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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type GuardResolutionOrder = 'after-hooks' | 'before-hooks';
|
|
2
|
+
export type GuardPolicy = {
|
|
3
|
+
requireGuardShape: boolean;
|
|
4
|
+
validateGuardShapes: boolean;
|
|
5
|
+
requireDefaultVariantOptIn: boolean;
|
|
6
|
+
enableUpdateEach: boolean;
|
|
7
|
+
guardResolutionOrder: GuardResolutionOrder;
|
|
8
|
+
allowE2EGuardBypass: boolean;
|
|
9
|
+
validateResolvedShapes: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare const UPSTREAM_GUARD_DEFAULTS: Readonly<GuardPolicy>;
|
|
12
|
+
export declare const HARDENED_GUARD_PROFILE: Readonly<GuardPolicy>;
|
|
13
|
+
export type GuardOptionMetadata = {
|
|
14
|
+
name: keyof GuardPolicy;
|
|
15
|
+
type: 'boolean' | 'enum';
|
|
16
|
+
values?: readonly string[];
|
|
17
|
+
default: boolean | string;
|
|
18
|
+
hardened: boolean | string;
|
|
19
|
+
label: string;
|
|
20
|
+
description: string;
|
|
21
|
+
warning: string;
|
|
22
|
+
target: 'hono';
|
|
23
|
+
};
|
|
24
|
+
export declare const GUARD_OPTION_METADATA: readonly GuardOptionMetadata[];
|
|
25
|
+
export declare const GUARD_METADATA_SCOPE: Readonly<{
|
|
26
|
+
covers: "the seven M8.7 guard controls on the Hono target";
|
|
27
|
+
complete: false;
|
|
28
|
+
notDescribedYet: readonly string[];
|
|
29
|
+
}>;
|
|
30
|
+
export declare function resolveGuardPolicy(config: Partial<GuardPolicy> | undefined): GuardPolicy;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GUARD_METADATA_SCOPE = exports.GUARD_OPTION_METADATA = exports.HARDENED_GUARD_PROFILE = exports.UPSTREAM_GUARD_DEFAULTS = void 0;
|
|
4
|
+
exports.resolveGuardPolicy = resolveGuardPolicy;
|
|
5
|
+
exports.UPSTREAM_GUARD_DEFAULTS = Object.freeze({
|
|
6
|
+
requireGuardShape: false,
|
|
7
|
+
validateGuardShapes: false,
|
|
8
|
+
requireDefaultVariantOptIn: false,
|
|
9
|
+
enableUpdateEach: true,
|
|
10
|
+
guardResolutionOrder: 'after-hooks',
|
|
11
|
+
allowE2EGuardBypass: true,
|
|
12
|
+
validateResolvedShapes: false,
|
|
13
|
+
});
|
|
14
|
+
exports.HARDENED_GUARD_PROFILE = Object.freeze({
|
|
15
|
+
requireGuardShape: true,
|
|
16
|
+
validateGuardShapes: true,
|
|
17
|
+
requireDefaultVariantOptIn: true,
|
|
18
|
+
enableUpdateEach: false,
|
|
19
|
+
guardResolutionOrder: 'before-hooks',
|
|
20
|
+
allowE2EGuardBypass: false,
|
|
21
|
+
validateResolvedShapes: true,
|
|
22
|
+
});
|
|
23
|
+
exports.GUARD_OPTION_METADATA = Object.freeze([
|
|
24
|
+
{
|
|
25
|
+
name: 'requireGuardShape',
|
|
26
|
+
type: 'boolean',
|
|
27
|
+
default: exports.UPSTREAM_GUARD_DEFAULTS.requireGuardShape,
|
|
28
|
+
hardened: exports.HARDENED_GUARD_PROFILE.requireGuardShape,
|
|
29
|
+
label: 'Require a guard on every enabled operation',
|
|
30
|
+
description: 'Refuses at router construction when an operation defines neither "shape" nor "variants".',
|
|
31
|
+
warning: "Off, an operation nobody configured passes the caller's own where/select/include straight to Prisma.",
|
|
32
|
+
target: 'hono',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'validateGuardShapes',
|
|
36
|
+
type: 'boolean',
|
|
37
|
+
default: exports.UPSTREAM_GUARD_DEFAULTS.validateGuardShapes,
|
|
38
|
+
hardened: exports.HARDENED_GUARD_PROFILE.validateGuardShapes,
|
|
39
|
+
label: 'Validate guard shapes',
|
|
40
|
+
description: 'Refuses an empty shape, and one mixing guard keys with non-guard keys, at the top level and inside variants.',
|
|
41
|
+
warning: 'Off, "shape: {}" reads as guarded and constrains nothing. On, strict validation may reject existing route configs.',
|
|
42
|
+
target: 'hono',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'requireDefaultVariantOptIn',
|
|
46
|
+
type: 'boolean',
|
|
47
|
+
default: exports.UPSTREAM_GUARD_DEFAULTS.requireDefaultVariantOptIn,
|
|
48
|
+
hardened: exports.HARDENED_GUARD_PROFILE.requireDefaultVariantOptIn,
|
|
49
|
+
label: 'Require confirmation for a "default" variant',
|
|
50
|
+
description: 'A variant named "default" must set allowDefaultVariant: true to be accepted.',
|
|
51
|
+
warning: 'A "default" variant answers every unrecognised, blank and missing caller.',
|
|
52
|
+
target: 'hono',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'enableUpdateEach',
|
|
56
|
+
type: 'boolean',
|
|
57
|
+
default: exports.UPSTREAM_GUARD_DEFAULTS.enableUpdateEach,
|
|
58
|
+
hardened: exports.HARDENED_GUARD_PROFILE.enableUpdateEach,
|
|
59
|
+
label: 'Register the updateEach batch route',
|
|
60
|
+
description: 'Mounts POST <base>/each. Set false to refuse it at router construction.',
|
|
61
|
+
warning: 'updateEach bypasses guard shapes entirely; only a development-only warning stands between it and an unguarded mass update.',
|
|
62
|
+
target: 'hono',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'guardResolutionOrder',
|
|
66
|
+
type: 'enum',
|
|
67
|
+
values: Object.freeze(['after-hooks', 'before-hooks']),
|
|
68
|
+
default: exports.UPSTREAM_GUARD_DEFAULTS.guardResolutionOrder,
|
|
69
|
+
hardened: exports.HARDENED_GUARD_PROFILE.guardResolutionOrder,
|
|
70
|
+
label: 'When guard failures are raised',
|
|
71
|
+
description: 'after-hooks is the upstream behaviour; before-hooks settles variant and shape resolution before any operation hook runs.',
|
|
72
|
+
warning: 'With after-hooks, a hook that returns a Response can answer a request whose guard was never established.',
|
|
73
|
+
target: 'hono',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'allowE2EGuardBypass',
|
|
77
|
+
type: 'boolean',
|
|
78
|
+
default: exports.UPSTREAM_GUARD_DEFAULTS.allowE2EGuardBypass,
|
|
79
|
+
hardened: exports.HARDENED_GUARD_PROFILE.allowE2EGuardBypass,
|
|
80
|
+
label: 'Honour the E2E environment guard bypass',
|
|
81
|
+
description: 'Treats E2E=true in the environment as a request to drop the guard.',
|
|
82
|
+
warning: 'A runtime variable can weaken a deployed artifact after generation. On an edge runtime this is an ordinary config var.',
|
|
83
|
+
target: 'hono',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'validateResolvedShapes',
|
|
87
|
+
type: 'boolean',
|
|
88
|
+
default: exports.UPSTREAM_GUARD_DEFAULTS.validateResolvedShapes,
|
|
89
|
+
hardened: exports.HARDENED_GUARD_PROFILE.validateResolvedShapes,
|
|
90
|
+
label: 'Validate what a shape function returns',
|
|
91
|
+
description: 'Checks a dynamically resolved shape before use and fails the request with 500 if it is unusable. Also resolves it exactly once.',
|
|
92
|
+
warning: 'Off, a shape function returning {} or undefined runs the operation unguarded, once per request.',
|
|
93
|
+
target: 'hono',
|
|
94
|
+
},
|
|
95
|
+
]);
|
|
96
|
+
exports.GUARD_METADATA_SCOPE = Object.freeze({
|
|
97
|
+
covers: 'the seven M8.7 guard controls on the Hono target',
|
|
98
|
+
complete: false,
|
|
99
|
+
notDescribedYet: Object.freeze([
|
|
100
|
+
'dropGuard',
|
|
101
|
+
'target',
|
|
102
|
+
'writeStrategy',
|
|
103
|
+
'findManyPaginated / pagination mode',
|
|
104
|
+
'pagination.countSource',
|
|
105
|
+
'addModelPrefix / customUrlPrefix / specBasePath',
|
|
106
|
+
'disableOpenApi and the OpenAPI metadata options',
|
|
107
|
+
'disablePostReads',
|
|
108
|
+
'queryBuilder',
|
|
109
|
+
'guard.resolveVariant / guard.variantHeader',
|
|
110
|
+
]),
|
|
111
|
+
});
|
|
112
|
+
function resolveGuardPolicy(config) {
|
|
113
|
+
return {
|
|
114
|
+
requireGuardShape: config?.requireGuardShape ?? exports.UPSTREAM_GUARD_DEFAULTS.requireGuardShape,
|
|
115
|
+
validateGuardShapes: config?.validateGuardShapes ?? exports.UPSTREAM_GUARD_DEFAULTS.validateGuardShapes,
|
|
116
|
+
requireDefaultVariantOptIn: config?.requireDefaultVariantOptIn ?? exports.UPSTREAM_GUARD_DEFAULTS.requireDefaultVariantOptIn,
|
|
117
|
+
enableUpdateEach: config?.enableUpdateEach ?? exports.UPSTREAM_GUARD_DEFAULTS.enableUpdateEach,
|
|
118
|
+
guardResolutionOrder: config?.guardResolutionOrder ?? exports.UPSTREAM_GUARD_DEFAULTS.guardResolutionOrder,
|
|
119
|
+
allowE2EGuardBypass: config?.allowE2EGuardBypass ?? exports.UPSTREAM_GUARD_DEFAULTS.allowE2EGuardBypass,
|
|
120
|
+
validateResolvedShapes: config?.validateResolvedShapes ?? exports.UPSTREAM_GUARD_DEFAULTS.validateResolvedShapes,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=guardOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardOptions.js","sourceRoot":"","sources":["../src/guardOptions.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export { GUARD_OPTION_METADATA, GUARD_METADATA_SCOPE, UPSTREAM_GUARD_DEFAULTS, HARDENED_GUARD_PROFILE, resolveGuardPolicy, } from './guardOptions';
|
|
2
|
+
export type { GuardPolicy, GuardOptionMetadata, GuardResolutionOrder } from './guardOptions';
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolveGuardPolicy = exports.HARDENED_GUARD_PROFILE = exports.UPSTREAM_GUARD_DEFAULTS = exports.GUARD_METADATA_SCOPE = exports.GUARD_OPTION_METADATA = void 0;
|
|
7
|
+
var guardOptions_1 = require("./guardOptions");
|
|
8
|
+
Object.defineProperty(exports, "GUARD_OPTION_METADATA", { enumerable: true, get: function () { return guardOptions_1.GUARD_OPTION_METADATA; } });
|
|
9
|
+
Object.defineProperty(exports, "GUARD_METADATA_SCOPE", { enumerable: true, get: function () { return guardOptions_1.GUARD_METADATA_SCOPE; } });
|
|
10
|
+
Object.defineProperty(exports, "UPSTREAM_GUARD_DEFAULTS", { enumerable: true, get: function () { return guardOptions_1.UPSTREAM_GUARD_DEFAULTS; } });
|
|
11
|
+
Object.defineProperty(exports, "HARDENED_GUARD_PROFILE", { enumerable: true, get: function () { return guardOptions_1.HARDENED_GUARD_PROFILE; } });
|
|
12
|
+
Object.defineProperty(exports, "resolveGuardPolicy", { enumerable: true, get: function () { return guardOptions_1.resolveGuardPolicy; } });
|
|
6
13
|
const generator_helper_1 = require("@prisma/generator-helper");
|
|
7
14
|
const path_1 = __importDefault(require("path"));
|
|
8
15
|
const generateUnifiedHandler_1 = require("./generators/generateUnifiedHandler");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prisma-generator-express",
|
|
3
3
|
"description": "Prisma generator for Express, Fastify, and Hono CRUD APIs with OpenAPI documentation",
|
|
4
|
-
"version": "1.64.
|
|
4
|
+
"version": "1.64.3",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"license": "MIT",
|
|
@@ -86,7 +86,12 @@ async function callShapeFn(
|
|
|
86
86
|
return result
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
/**
|
|
90
|
+
* Exported so the router can resolve a function shape and CHECK it before use.
|
|
91
|
+
* A shape that is only resolved at the point it is applied is a shape nobody
|
|
92
|
+
* validated.
|
|
93
|
+
*/
|
|
94
|
+
export async function resolveShape(
|
|
90
95
|
input: unknown,
|
|
91
96
|
resolvedKey: string | undefined,
|
|
92
97
|
resolveContext: ContextResolver | undefined,
|
|
@@ -107,6 +107,91 @@ export type RouteConfig<
|
|
|
107
107
|
>,
|
|
108
108
|
HonoOpKeys
|
|
109
109
|
> & {
|
|
110
|
+
/**
|
|
111
|
+
* SEVEN INDEPENDENT GUARD CONTROLS. Every default reproduces the public
|
|
112
|
+
* package's pre-1.64.2 behaviour exactly.
|
|
113
|
+
*
|
|
114
|
+
* 1.64.2 shipped these behaviours ON by default, which was a breaking change
|
|
115
|
+
* to a published package. The first correction put all seven behind one
|
|
116
|
+
* `requireGuard` switch, which was also wrong: they are unrelated decisions,
|
|
117
|
+
* and bundling them means a consumer who wants a missing-guard refusal is also
|
|
118
|
+
* forced into a hook-ordering change and the removal of a route they may use.
|
|
119
|
+
*
|
|
120
|
+
* So each is its own option. An unset option means the upstream default — never
|
|
121
|
+
* an opinionated value chosen on the consumer's behalf. `HARDENED_GUARD_PROFILE`
|
|
122
|
+
* selects all seven together for those who want them, but it is a set of values
|
|
123
|
+
* to spread, not a mode: what gets stored is the individual settings.
|
|
124
|
+
*
|
|
125
|
+
* `GUARD_OPTION_METADATA` describes these machine-readably, so a UI can render
|
|
126
|
+
* them without a hand-maintained second copy of the defaults.
|
|
127
|
+
*/
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Refuse an operation that configures no guard at all. **Default `false`.**
|
|
131
|
+
*
|
|
132
|
+
* With it off — the upstream default — an unconfigured operation is emitted and
|
|
133
|
+
* passes the caller's own where/select/include straight to Prisma. On, router
|
|
134
|
+
* construction throws, which on a Worker is boot.
|
|
135
|
+
*/
|
|
136
|
+
requireGuardShape?: boolean
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Validate that a shape constrains something. **Default `false`.**
|
|
140
|
+
*
|
|
141
|
+
* On, `shape: {}` and a shape mixing guard keys with non-guard keys (usually a
|
|
142
|
+
* typo: `wheer`, `iclude`) are refused, at the top level and inside variants.
|
|
143
|
+
*/
|
|
144
|
+
validateGuardShapes?: boolean
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Require `allowDefaultVariant: true` on an operation carrying a variant named
|
|
148
|
+
* `default`. **Default `false`.**
|
|
149
|
+
*
|
|
150
|
+
* A `default` variant answers every unrecognised, blank and missing caller.
|
|
151
|
+
* That is safe when it is the most restrictive variant and dangerous when it is
|
|
152
|
+
* the most permissive, and nothing can tell which from the shape.
|
|
153
|
+
*/
|
|
154
|
+
requireDefaultVariantOptIn?: boolean
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Register the `updateEach` batch route. **Default `true`.**
|
|
158
|
+
*
|
|
159
|
+
* It bypasses guard shapes by design — a batch of `{ where, data }` applied
|
|
160
|
+
* directly — and is protected only by a development-only warning. Set `false`
|
|
161
|
+
* to refuse it at router construction.
|
|
162
|
+
*/
|
|
163
|
+
enableUpdateEach?: boolean
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* When guard failures are raised relative to operation `before` hooks.
|
|
167
|
+
* **Default `'after-hooks'`.**
|
|
168
|
+
*
|
|
169
|
+
* `'after-hooks'` is upstream behaviour: a hook may answer the request before
|
|
170
|
+
* variant resolution is settled. `'before-hooks'` settles the guard first, so a
|
|
171
|
+
* hook cannot answer a request whose guard was never established.
|
|
172
|
+
*/
|
|
173
|
+
guardResolutionOrder?: 'after-hooks' | 'before-hooks'
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Honour `E2E=true` in the environment as a guard bypass. **Default `true`.**
|
|
177
|
+
*
|
|
178
|
+
* Upstream behaviour, and a real hazard on an edge runtime where that variable
|
|
179
|
+
* is an ordinary config var — set on staging, copied forward, flagged as
|
|
180
|
+
* security-relevant nowhere. `false` makes guard behaviour a property of the
|
|
181
|
+
* artifact alone.
|
|
182
|
+
*/
|
|
183
|
+
allowE2EGuardBypass?: boolean
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Check what a shape FUNCTION returned before using it. **Default `false`.**
|
|
187
|
+
*
|
|
188
|
+
* A function shape is opaque at construction time. On, a resolved value that is
|
|
189
|
+
* empty, not an object, or carrying non-guard keys fails the request with 500 —
|
|
190
|
+
* a deployment fault, not a caller fault — instead of running unguarded. It
|
|
191
|
+
* also resolves the function exactly once and passes the validated value on.
|
|
192
|
+
*/
|
|
193
|
+
validateResolvedShapes?: boolean
|
|
194
|
+
|
|
110
195
|
findUnique?: OperationConfig<TShape, TEnv> | false
|
|
111
196
|
findUniqueOrThrow?: OperationConfig<TShape, TEnv> | false
|
|
112
197
|
findFirst?: OperationConfig<TShape, TEnv> | false
|