prisma-generator-express 1.64.2 → 1.64.4
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/generateQueryBuilderHelper.d.ts +1 -1
- package/dist/generators/generateQueryBuilderHelper.js +5 -4
- package/dist/generators/generateQueryBuilderHelper.js.map +1 -1
- package/dist/generators/generateRouteConfigType.js +2 -1
- package/dist/generators/generateRouteConfigType.js.map +1 -1
- package/dist/generators/generateRouterHono.js +132 -70
- 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/routeConfig.hono.ts +85 -0
- package/src/copy/routeConfig.ts +148 -20
- package/src/generators/generateQueryBuilderHelper.ts +9 -6
- package/src/generators/generateRouteConfigType.ts +6 -1
- package/src/generators/generateRouterHono.ts +162 -78
- package/src/guardOptions.ts +226 -0
- package/src/index.ts +19 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { GeneratorOptions } from '@prisma/generator-helper';
|
|
2
|
-
export declare function generateQueryBuilderHelper(options: GeneratorOptions): string;
|
|
2
|
+
export declare function generateQueryBuilderHelper(options: Pick<GeneratorOptions, 'schemaPath'>): string;
|
|
@@ -52,7 +52,7 @@ export function startQueryBuilder(options: QueryBuilderOptions = {}): void {
|
|
|
52
52
|
|
|
53
53
|
function doStart(options: QueryBuilderOptions): Promise<void> {
|
|
54
54
|
return new Promise<void>((resolvePromise) => {
|
|
55
|
-
const env =
|
|
55
|
+
const env = process.env
|
|
56
56
|
|
|
57
57
|
if (env.NODE_ENV === 'production') {
|
|
58
58
|
resolvePromise()
|
|
@@ -97,7 +97,7 @@ function doStart(options: QueryBuilderOptions): Promise<void> {
|
|
|
97
97
|
|
|
98
98
|
const schemaCwd = dirname(resolve(schemaPath))
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
const child = spawn(process.execPath, [cliPath], {
|
|
101
101
|
stdio: 'inherit',
|
|
102
102
|
env: {
|
|
103
103
|
...env,
|
|
@@ -110,14 +110,15 @@ function doStart(options: QueryBuilderOptions): Promise<void> {
|
|
|
110
110
|
DATABASE_URL: databaseUrl,
|
|
111
111
|
},
|
|
112
112
|
})
|
|
113
|
+
_process = child
|
|
113
114
|
|
|
114
|
-
|
|
115
|
+
child.on('error', (err) => {
|
|
115
116
|
console.error('[query-builder] Failed to start:', err.message)
|
|
116
117
|
_process = null
|
|
117
118
|
resolvePromise()
|
|
118
119
|
})
|
|
119
120
|
|
|
120
|
-
|
|
121
|
+
child.on('exit', (code) => {
|
|
121
122
|
const wasStopping = _stopping
|
|
122
123
|
_stopping = false
|
|
123
124
|
_process = null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateQueryBuilderHelper.js","sourceRoot":"","sources":["../../src/generators/generateQueryBuilderHelper.ts"],"names":[],"mappings":";;AAEA,
|
|
1
|
+
{"version":3,"file":"generateQueryBuilderHelper.js","sourceRoot":"","sources":["../../src/generators/generateQueryBuilderHelper.ts"],"names":[],"mappings":";;AAEA,gEAmKC;AAnKD,SAAgB,0BAA0B,CACxC,OAA6C;IAE7C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;QACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;QACpC,CAAC,CAAC,gDAAgD,CAAA;IAEpD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA+DsC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FxD,CAAA;AACD,CAAC"}
|
|
@@ -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,9 +108,11 @@ import { buildModelOpenApi } from '../buildModelOpenApi${ext}'
|
|
|
108
108
|
import {
|
|
109
109
|
normalizeOperation,
|
|
110
110
|
resolveOperationVariantKey,
|
|
111
|
+
resolveGuardPolicy,
|
|
111
112
|
resolveGuardShapeOnce,
|
|
112
113
|
validateCountSourceWhere,
|
|
113
114
|
validateOperationConfig,
|
|
115
|
+
validateUpdateEachConfig,
|
|
114
116
|
} from '../routeConfig${ext}'
|
|
115
117
|
import type { NormalizedOperationConfig } from '../routeConfig${ext}'
|
|
116
118
|
import { transformResult } from '../operationRuntime${ext}'
|
|
@@ -124,8 +126,9 @@ 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
|
-
// Fixed at generation time.
|
|
128
|
-
//
|
|
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.
|
|
129
132
|
const DROP_GUARD = ${dropGuard}
|
|
130
133
|
|
|
131
134
|
type JsonLike =
|
|
@@ -184,6 +187,19 @@ async function parseBodyAsQueryMiddleware(c: HandlerContext): Promise<void> {
|
|
|
184
187
|
c.set('parsedQuery', sanitizeKeys(body as Record<string, unknown>))
|
|
185
188
|
}
|
|
186
189
|
|
|
190
|
+
async function parseUpdateEachBodyMiddleware(c: HandlerContext): Promise<void> {
|
|
191
|
+
let body: unknown
|
|
192
|
+
try {
|
|
193
|
+
body = await c.req.json()
|
|
194
|
+
} catch {
|
|
195
|
+
throw new HTTPException(400, { message: 'updateEach body must be an array of { where, data } items' })
|
|
196
|
+
}
|
|
197
|
+
if (!Array.isArray(body)) {
|
|
198
|
+
throw new HTTPException(400, { message: 'updateEach body must be an array of { where, data } items' })
|
|
199
|
+
}
|
|
200
|
+
c.set('body', body)
|
|
201
|
+
}
|
|
202
|
+
|
|
187
203
|
async function parseWriteBodyMiddleware(c: HandlerContext): Promise<void> {
|
|
188
204
|
let body: unknown
|
|
189
205
|
try {
|
|
@@ -202,6 +218,17 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
|
|
|
202
218
|
opConfig: NormalizedOp<TEnv>,
|
|
203
219
|
opKind: OpKind,
|
|
204
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
|
+
|
|
205
232
|
return async (c: Context<GeneratedHonoEnv<TEnv>>): Promise<void> => {
|
|
206
233
|
const merged = mergePaginationConfig(config.pagination, opConfig.pagination)
|
|
207
234
|
if (merged) c.set('routeConfig', { pagination: merged })
|
|
@@ -229,18 +256,26 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
|
|
|
229
256
|
: undefined
|
|
230
257
|
|
|
231
258
|
/**
|
|
232
|
-
*
|
|
233
|
-
* see resolveGuardShapeOnce. Passing the function
|
|
234
|
-
* different shape when it is enforced than when it
|
|
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.
|
|
235
267
|
*/
|
|
236
|
-
|
|
237
|
-
if (
|
|
238
|
-
|
|
239
|
-
|
|
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
|
|
240
276
|
}
|
|
241
|
-
const effectiveShape = resolution.shape
|
|
242
277
|
|
|
243
|
-
if (!
|
|
278
|
+
if (!dropGuard) {
|
|
244
279
|
c.set('guardShape', effectiveShape)
|
|
245
280
|
} else {
|
|
246
281
|
await applyDroppedGuard(
|
|
@@ -386,6 +421,38 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
386
421
|
})
|
|
387
422
|
}
|
|
388
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
|
+
|
|
389
456
|
const handleRead = (
|
|
390
457
|
opConfig: NormalizedOp<TEnv>,
|
|
391
458
|
handlerFn: (c: HandlerContext) => Promise<void>,
|
|
@@ -396,41 +463,15 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
396
463
|
await parseFn(c as unknown as HandlerContext)
|
|
397
464
|
await makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig, opKind)(c)
|
|
398
465
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
*
|
|
402
|
-
* The check used to sit after \`operationBefore\`, so a hook that returned a
|
|
403
|
-
* Response — an auth gate, a cache, a short-circuit for a known caller —
|
|
404
|
-
* answered the request before anyone established which guard applied to
|
|
405
|
-
* it. A cached response served for a request whose variant could not be
|
|
406
|
-
* resolved is a response served under a guard nobody chose.
|
|
407
|
-
*
|
|
408
|
-
* Hooks that must run first belong outside the generated router, where
|
|
409
|
-
* they are visibly not part of guard resolution.
|
|
410
|
-
*/
|
|
411
|
-
const failure = c.get('guardVariantFailure')
|
|
412
|
-
if (failure) {
|
|
413
|
-
throw new HTTPException(400, {
|
|
414
|
-
message: formatGuardVariantResolutionError(failure),
|
|
415
|
-
})
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
* A shape function that returned something unusable is a DEPLOYMENT fault,
|
|
420
|
-
* not a caller fault — 500, and refused here, before any hook can answer
|
|
421
|
-
* the request and before Prisma is reached. Running unguarded because the
|
|
422
|
-
* guard failed to produce a guard is the outcome this exists to prevent.
|
|
423
|
-
*/
|
|
424
|
-
const shapeFailure = c.get('guardShapeFailure')
|
|
425
|
-
if (shapeFailure) {
|
|
426
|
-
throw new HTTPException(500, {
|
|
427
|
-
message: 'guard shape could not be resolved: ' + shapeFailure,
|
|
428
|
-
})
|
|
429
|
-
}
|
|
466
|
+
// Settled BEFORE any hook can answer the request, when asked for.
|
|
467
|
+
if (SETTLE_BEFORE_HOOKS) settleGuard(c)
|
|
430
468
|
|
|
431
469
|
const operationBefore = await runBeforeHooks<TEnv>(opConfig.operationBefore, c)
|
|
432
470
|
if (operationBefore) return operationBefore
|
|
433
471
|
|
|
472
|
+
// Upstream order: hooks first, guard failure after.
|
|
473
|
+
if (!SETTLE_BEFORE_HOOKS) settleGuard(c)
|
|
474
|
+
|
|
434
475
|
const key = c.get('guardVariantKey')
|
|
435
476
|
const variantHooks =
|
|
436
477
|
key !== undefined ? opConfig.variantHooks[key] : undefined
|
|
@@ -457,30 +498,15 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
457
498
|
await parseWriteBodyMiddleware(c as unknown as HandlerContext)
|
|
458
499
|
await makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig, opKind)(c)
|
|
459
500
|
|
|
460
|
-
// Settled
|
|
461
|
-
|
|
462
|
-
if (failure) {
|
|
463
|
-
throw new HTTPException(400, {
|
|
464
|
-
message: formatGuardVariantResolutionError(failure),
|
|
465
|
-
})
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
/**
|
|
469
|
-
* A shape function that returned something unusable is a DEPLOYMENT fault,
|
|
470
|
-
* not a caller fault — 500, and refused here, before any hook can answer
|
|
471
|
-
* the request and before Prisma is reached. Running unguarded because the
|
|
472
|
-
* guard failed to produce a guard is the outcome this exists to prevent.
|
|
473
|
-
*/
|
|
474
|
-
const shapeFailure = c.get('guardShapeFailure')
|
|
475
|
-
if (shapeFailure) {
|
|
476
|
-
throw new HTTPException(500, {
|
|
477
|
-
message: 'guard shape could not be resolved: ' + shapeFailure,
|
|
478
|
-
})
|
|
479
|
-
}
|
|
501
|
+
// Settled BEFORE any hook can answer the request, when asked for.
|
|
502
|
+
if (SETTLE_BEFORE_HOOKS) settleGuard(c)
|
|
480
503
|
|
|
481
504
|
const operationBefore = await runBeforeHooks<TEnv>(opConfig.operationBefore, c)
|
|
482
505
|
if (operationBefore) return operationBefore
|
|
483
506
|
|
|
507
|
+
// Upstream order: hooks first, guard failure after.
|
|
508
|
+
if (!SETTLE_BEFORE_HOOKS) settleGuard(c)
|
|
509
|
+
|
|
484
510
|
const key = c.get('guardVariantKey')
|
|
485
511
|
const variantHooks =
|
|
486
512
|
key !== undefined ? opConfig.variantHooks[key] : undefined
|
|
@@ -502,7 +528,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any, TEnv extend
|
|
|
502
528
|
key: K,
|
|
503
529
|
): NormalizedOp<TEnv> => {
|
|
504
530
|
const raw = config[key] as unknown as OperationConfigLike<TEnv> | undefined
|
|
505
|
-
validateOperationConfig(raw, '${modelName}.' + String(key))
|
|
531
|
+
validateOperationConfig(raw, '${modelName}.' + String(key), POLICY)
|
|
506
532
|
return normalizeHonoOperation(raw)
|
|
507
533
|
}
|
|
508
534
|
|
|
@@ -510,14 +536,50 @@ ${readOpBlocks}
|
|
|
510
536
|
|
|
511
537
|
${writeOpBlocks}
|
|
512
538
|
|
|
513
|
-
// Not registered on this target — see generateRouterHono.ts for why.
|
|
514
539
|
if (config.updateEach) {
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
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
|
+
|
|
559
|
+
const rawUpdateEach = config.updateEach as unknown as OperationConfigLike<TEnv>
|
|
560
|
+
validateUpdateEachConfig(rawUpdateEach, '${modelName}.updateEach')
|
|
561
|
+
const opConfig = normalizeHonoOperation(rawUpdateEach)
|
|
562
|
+
if (opConfig.operationBefore.length === 0 && _env.NODE_ENV !== 'production') {
|
|
563
|
+
console.warn(
|
|
564
|
+
'[${modelName}Router] updateEach is enabled without a before hook. ' +
|
|
565
|
+
'This endpoint bypasses guard shapes and should be protected by authentication middleware.',
|
|
566
|
+
)
|
|
567
|
+
}
|
|
568
|
+
const path = basePath ? \`\${basePath}/each\` : '/each'
|
|
569
|
+
app.post(path, async (c: Context<GeneratedHonoEnv<TEnv>>): Promise<Response> => {
|
|
570
|
+
try {
|
|
571
|
+
await parseUpdateEachBodyMiddleware(c as unknown as HandlerContext)
|
|
572
|
+
await makeShapeMiddleware<TCtx, TPrisma, TEnv>(config, opConfig, 'noop')(c)
|
|
573
|
+
const beforeResponse = await runBeforeHooks<TEnv>(opConfig.operationBefore, c)
|
|
574
|
+
if (beforeResponse) return beforeResponse
|
|
575
|
+
await ${modelName}UpdateEach(c as unknown as HandlerContext)
|
|
576
|
+
const afterResponse = await runAfterHooks<TEnv>(opConfig.operationAfter, c)
|
|
577
|
+
if (afterResponse) return afterResponse
|
|
578
|
+
return sendResult(c as unknown as HandlerContext)
|
|
579
|
+
} catch (error: unknown) {
|
|
580
|
+
return sendError(c as unknown as HandlerContext, error)
|
|
581
|
+
}
|
|
582
|
+
})
|
|
521
583
|
}
|
|
522
584
|
|
|
523
585
|
return app
|
|
@@ -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":";;;AAkNA,gDAeC;AA/KY,QAAA,uBAAuB,GAA0B,MAAM,CAAC,MAAM,CAAC;IAC1E,iBAAiB,EAAE,KAAK;IACxB,mBAAmB,EAAE,KAAK;IAC1B,0BAA0B,EAAE,KAAK;IACjC,gBAAgB,EAAE,IAAI;IACtB,oBAAoB,EAAE,aAAa;IACnC,mBAAmB,EAAE,IAAI;IACzB,sBAAsB,EAAE,KAAK;CAC9B,CAAC,CAAA;AAUW,QAAA,sBAAsB,GAA0B,MAAM,CAAC,MAAM,CAAC;IACzE,iBAAiB,EAAE,IAAI;IACvB,mBAAmB,EAAE,IAAI;IACzB,0BAA0B,EAAE,IAAI;IAChC,gBAAgB,EAAE,KAAK;IACvB,oBAAoB,EAAE,cAAc;IACpC,mBAAmB,EAAE,KAAK;IAC1B,sBAAsB,EAAE,IAAI;CAC7B,CAAC,CAAA;AAwBW,QAAA,qBAAqB,GAAmC,MAAM,CAAC,MAAM,CAAC;IACjF;QACE,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,+BAAuB,CAAC,iBAAiB;QAClD,QAAQ,EAAE,8BAAsB,CAAC,iBAAiB;QAClD,KAAK,EAAE,4CAA4C;QACnD,WAAW,EACT,0FAA0F;QAC5F,OAAO,EACL,sGAAsG;QACxG,MAAM,EAAE,MAAM;KACf;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,+BAAuB,CAAC,mBAAmB;QACpD,QAAQ,EAAE,8BAAsB,CAAC,mBAAmB;QACpD,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,8GAA8G;QAChH,OAAO,EACL,oHAAoH;QACtH,MAAM,EAAE,MAAM;KACf;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,+BAAuB,CAAC,0BAA0B;QAC3D,QAAQ,EAAE,8BAAsB,CAAC,0BAA0B;QAC3D,KAAK,EAAE,8CAA8C;QACrD,WAAW,EACT,8EAA8E;QAChF,OAAO,EAAE,2EAA2E;QACpF,MAAM,EAAE,MAAM;KACf;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,+BAAuB,CAAC,gBAAgB;QACjD,QAAQ,EAAE,8BAAsB,CAAC,gBAAgB;QACjD,KAAK,EAAE,qCAAqC;QAC5C,WAAW,EAAE,yEAAyE;QACtF,OAAO,EACL,4HAA4H;QAC9H,MAAM,EAAE,MAAM;KACf;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QACtD,OAAO,EAAE,+BAAuB,CAAC,oBAAoB;QACrD,QAAQ,EAAE,8BAAsB,CAAC,oBAAoB;QACrD,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,0HAA0H;QAC5H,OAAO,EACL,0GAA0G;QAC5G,MAAM,EAAE,MAAM;KACf;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,+BAAuB,CAAC,mBAAmB;QACpD,QAAQ,EAAE,8BAAsB,CAAC,mBAAmB;QACpD,KAAK,EAAE,yCAAyC;QAChD,WAAW,EAAE,oEAAoE;QACjF,OAAO,EACL,wHAAwH;QAC1H,MAAM,EAAE,MAAM;KACf;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,+BAAuB,CAAC,sBAAsB;QACvD,QAAQ,EAAE,8BAAsB,CAAC,sBAAsB;QACvD,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EACT,iIAAiI;QACnI,OAAO,EACL,iGAAiG;QACnG,MAAM,EAAE,MAAM;KACf;CACF,CAAC,CAAA;AASW,QAAA,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,kDAAkD;IAC1D,QAAQ,EAAE,KAAK;IACf,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC;QAC7B,WAAW;QACX,QAAQ;QACR,eAAe;QACf,qCAAqC;QACrC,wBAAwB;QACxB,iDAAiD;QACjD,iDAAiD;QACjD,kBAAkB;QAClB,cAAc;QACd,4CAA4C;KAC7C,CAAC;CACH,CAAC,CAAA;AAGF,SAAgB,kBAAkB,CAAC,MAAwC;IACzE,OAAO;QACL,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,IAAI,+BAAuB,CAAC,iBAAiB;QACzF,mBAAmB,EACjB,MAAM,EAAE,mBAAmB,IAAI,+BAAuB,CAAC,mBAAmB;QAC5E,0BAA0B,EACxB,MAAM,EAAE,0BAA0B,IAAI,+BAAuB,CAAC,0BAA0B;QAC1F,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,+BAAuB,CAAC,gBAAgB;QACtF,oBAAoB,EAClB,MAAM,EAAE,oBAAoB,IAAI,+BAAuB,CAAC,oBAAoB;QAC9E,mBAAmB,EACjB,MAAM,EAAE,mBAAmB,IAAI,+BAAuB,CAAC,mBAAmB;QAC5E,sBAAsB,EACpB,MAAM,EAAE,sBAAsB,IAAI,+BAAuB,CAAC,sBAAsB;KACnF,CAAA;AACH,CAAC"}
|
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.4",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"license": "MIT",
|