prisma-generator-express 1.56.3 → 1.57.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 +175 -0
- package/dist/generators/generateImportPrismaStatement.js +37 -0
- package/dist/generators/generateImportPrismaStatement.js.map +1 -1
- package/dist/generators/generateOperationCore.js +8 -6
- package/dist/generators/generateOperationCore.js.map +1 -1
- package/dist/generators/generateRouteConfigType.js +33 -9
- package/dist/generators/generateRouteConfigType.js.map +1 -1
- package/dist/generators/generateRouter.d.ts +2 -1
- package/dist/generators/generateRouter.js +3 -2
- package/dist/generators/generateRouter.js.map +1 -1
- package/dist/generators/generateRouterFastify.d.ts +2 -1
- package/dist/generators/generateRouterFastify.js +3 -2
- package/dist/generators/generateRouterFastify.js.map +1 -1
- package/dist/generators/generateRouterHono.d.ts +2 -1
- package/dist/generators/generateRouterHono.js +3 -2
- package/dist/generators/generateRouterHono.js.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/copy/routeConfig.ts +2 -0
- package/src/generators/generateImportPrismaStatement.ts +4 -0
- package/src/generators/generateOperationCore.ts +8 -6
- package/src/generators/generateRouteConfigType.ts +42 -12
- package/src/generators/generateRouter.ts +4 -1
- package/src/generators/generateRouterFastify.ts +4 -1
- package/src/generators/generateRouterHono.ts +4 -1
- package/src/index.ts +20 -2
package/README.md
CHANGED
|
@@ -2991,6 +2991,181 @@ UserRouter({
|
|
|
2991
2991
|
})
|
|
2992
2992
|
```
|
|
2993
2993
|
|
|
2994
|
+
## Global guard drop for E2E SQLite
|
|
2995
|
+
|
|
2996
|
+
Generated routers can globally skip Prisma guard in E2E mode.
|
|
2997
|
+
|
|
2998
|
+
This is used when the production Prisma schema and SQLite E2E schema intentionally differ. Example: production stores `normalized_skills` as `String[]`, while SQLite stores it as `Json?`. Guard shapes generated from the SQLite schema would reject scalar-list filters such as:
|
|
2999
|
+
|
|
3000
|
+
```ts
|
|
3001
|
+
{
|
|
3002
|
+
normalized_skills: {
|
|
3003
|
+
hasSome: ['typescript', 'react']
|
|
3004
|
+
}
|
|
3005
|
+
}
|
|
3006
|
+
```
|
|
3007
|
+
|
|
3008
|
+
In E2E, the generated router should skip guard and let the E2E Prisma extension rewrite supported scalar-list filters before the SQL extension runs.
|
|
3009
|
+
|
|
3010
|
+
### Behavior
|
|
3011
|
+
|
|
3012
|
+
Generated routers use this effective guard-drop flag:
|
|
3013
|
+
|
|
3014
|
+
```ts
|
|
3015
|
+
const DROP_GUARD = GENERATOR_DROP_GUARD || process.env.E2E === 'true'
|
|
3016
|
+
```
|
|
3017
|
+
|
|
3018
|
+
When `DROP_GUARD` is true:
|
|
3019
|
+
|
|
3020
|
+
```ts
|
|
3021
|
+
delegate.findMany(args)
|
|
3022
|
+
```
|
|
3023
|
+
|
|
3024
|
+
is used instead of:
|
|
3025
|
+
|
|
3026
|
+
```ts
|
|
3027
|
+
delegate.guard(shape, caller).findMany(args)
|
|
3028
|
+
```
|
|
3029
|
+
|
|
3030
|
+
This is global for generated routers. No per-router config is required.
|
|
3031
|
+
|
|
3032
|
+
### Production safety
|
|
3033
|
+
|
|
3034
|
+
Production must keep:
|
|
3035
|
+
|
|
3036
|
+
```env
|
|
3037
|
+
E2E=false
|
|
3038
|
+
```
|
|
3039
|
+
|
|
3040
|
+
or leave `E2E` unset.
|
|
3041
|
+
|
|
3042
|
+
Do not set generator config `dropGuard = true` for normal production generation unless guard should be disabled everywhere.
|
|
3043
|
+
|
|
3044
|
+
Recommended setup:
|
|
3045
|
+
|
|
3046
|
+
```prisma
|
|
3047
|
+
generator express {
|
|
3048
|
+
provider = "prisma-generator-express"
|
|
3049
|
+
target = "express"
|
|
3050
|
+
}
|
|
3051
|
+
```
|
|
3052
|
+
|
|
3053
|
+
Then generated routers drop guard only when runtime env has:
|
|
3054
|
+
|
|
3055
|
+
```env
|
|
3056
|
+
E2E=true
|
|
3057
|
+
```
|
|
3058
|
+
|
|
3059
|
+
### E2E scalar-list support
|
|
3060
|
+
|
|
3061
|
+
E2E SQLite scalar-list support is intentionally narrow in phase 1.
|
|
3062
|
+
|
|
3063
|
+
Supported:
|
|
3064
|
+
|
|
3065
|
+
```ts
|
|
3066
|
+
{
|
|
3067
|
+
normalized_skills: {
|
|
3068
|
+
hasSome: ['typescript', 'react']
|
|
3069
|
+
}
|
|
3070
|
+
}
|
|
3071
|
+
```
|
|
3072
|
+
|
|
3073
|
+
The E2E Prisma extension pre-resolves matching row IDs using SQLite `json_each`, then rewrites the query to:
|
|
3074
|
+
|
|
3075
|
+
```ts
|
|
3076
|
+
{
|
|
3077
|
+
id: {
|
|
3078
|
+
in: [...]
|
|
3079
|
+
}
|
|
3080
|
+
}
|
|
3081
|
+
```
|
|
3082
|
+
|
|
3083
|
+
This happens before the SQL extension compiles the Prisma query.
|
|
3084
|
+
|
|
3085
|
+
### Extension chain
|
|
3086
|
+
|
|
3087
|
+
E2E Prisma client chain:
|
|
3088
|
+
|
|
3089
|
+
```ts
|
|
3090
|
+
basePrisma
|
|
3091
|
+
.$extends(normalizedSkillsExtension())
|
|
3092
|
+
.$extends(guardExtension)
|
|
3093
|
+
.$extends(e2eListOpsExtension())
|
|
3094
|
+
.$extends(speed)
|
|
3095
|
+
```
|
|
3096
|
+
|
|
3097
|
+
Guard extension remains in the chain, but generated routers do not pass guard shapes when `E2E=true`.
|
|
3098
|
+
|
|
3099
|
+
### Phase 1 scope
|
|
3100
|
+
|
|
3101
|
+
Supported:
|
|
3102
|
+
|
|
3103
|
+
```text
|
|
3104
|
+
hasSome only
|
|
3105
|
+
allowlisted JSON-backed scalar-list fields only
|
|
3106
|
+
top-level where
|
|
3107
|
+
AND / OR / NOT recursion
|
|
3108
|
+
findMany / findFirst / count / aggregate / groupBy / updateMany / deleteMany
|
|
3109
|
+
```
|
|
3110
|
+
|
|
3111
|
+
Out of scope:
|
|
3112
|
+
|
|
3113
|
+
```text
|
|
3114
|
+
has
|
|
3115
|
+
hasEvery
|
|
3116
|
+
isEmpty
|
|
3117
|
+
equals
|
|
3118
|
+
nested relation where
|
|
3119
|
+
include/select nested where
|
|
3120
|
+
_count.where
|
|
3121
|
+
findUnique
|
|
3122
|
+
update
|
|
3123
|
+
delete
|
|
3124
|
+
upsert
|
|
3125
|
+
null values inside hasSome input
|
|
3126
|
+
```
|
|
3127
|
+
|
|
3128
|
+
Unsupported cases should fail loudly instead of being partially rewritten.
|
|
3129
|
+
|
|
3130
|
+
### Why not regenerate guard from SQLite schema
|
|
3131
|
+
|
|
3132
|
+
Do not depend on SQLite-generated guard output for this path.
|
|
3133
|
+
|
|
3134
|
+
The SQLite schema is a derived test schema. It may intentionally erase Postgres-only field information such as scalar-list types. Guard correctness belongs to the production schema, not the SQLite test schema.
|
|
3135
|
+
|
|
3136
|
+
For phase 1, global E2E guard drop is simpler:
|
|
3137
|
+
|
|
3138
|
+
```text
|
|
3139
|
+
production keeps guard
|
|
3140
|
+
E2E skips guard
|
|
3141
|
+
E2E list-op extension handles hasSome
|
|
3142
|
+
SQL extension receives normal id filters
|
|
3143
|
+
```
|
|
3144
|
+
|
|
3145
|
+
### Required implementation notes
|
|
3146
|
+
|
|
3147
|
+
Generated router code should compute:
|
|
3148
|
+
|
|
3149
|
+
```ts
|
|
3150
|
+
const DROP_GUARD = ${dropGuard} || process.env.E2E === 'true'
|
|
3151
|
+
```
|
|
3152
|
+
|
|
3153
|
+
Then only assign guard shape when guard is not dropped:
|
|
3154
|
+
|
|
3155
|
+
```ts
|
|
3156
|
+
if (opConfig.shape && !DROP_GUARD) {
|
|
3157
|
+
locals.guardShape = opConfig.shape
|
|
3158
|
+
}
|
|
3159
|
+
```
|
|
3160
|
+
|
|
3161
|
+
The same behavior should apply to all generated targets:
|
|
3162
|
+
|
|
3163
|
+
```text
|
|
3164
|
+
Express
|
|
3165
|
+
Fastify
|
|
3166
|
+
Hono
|
|
3167
|
+
```
|
|
3168
|
+
|
|
2994
3169
|
## Environment variables
|
|
2995
3170
|
|
|
2996
3171
|
| Variable | Default | Description |
|
|
@@ -1,10 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
exports.getRelativeClientPath = getRelativeClientPath;
|
|
7
40
|
exports.getGuardShapesImport = getGuardShapesImport;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
8
42
|
const path_1 = __importDefault(require("path"));
|
|
9
43
|
function findClientGenerator(options) {
|
|
10
44
|
const byName = options.otherGenerators.find((gen) => gen.name === 'client');
|
|
@@ -54,6 +88,9 @@ function getGuardShapesImport(options, modelName) {
|
|
|
54
88
|
const outputValue = options.generator.output?.value;
|
|
55
89
|
if (!outputValue)
|
|
56
90
|
return null;
|
|
91
|
+
const shapesFilePath = path_1.default.join(guard.output.value, 'shapes.ts');
|
|
92
|
+
if (!fs.existsSync(shapesFilePath))
|
|
93
|
+
return null;
|
|
57
94
|
const fromDir = path_1.default.join(outputValue, modelName);
|
|
58
95
|
const shapesPath = path_1.default.join(guard.output.value, 'shapes');
|
|
59
96
|
return getRelativeImportPath(fromDir, shapesPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateImportPrismaStatement.js","sourceRoot":"","sources":["../../src/generators/generateImportPrismaStatement.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateImportPrismaStatement.js","sourceRoot":"","sources":["../../src/generators/generateImportPrismaStatement.ts"],"names":[],"mappings":"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"}
|
|
@@ -173,19 +173,21 @@ export async function updateEach(
|
|
|
173
173
|
}
|
|
174
174
|
const items = body as Record<string, unknown>[]
|
|
175
175
|
const client = ctx.prisma as PrismaClientLike
|
|
176
|
-
const delegate = getDelegate(client, '${modelNameLower}')
|
|
177
176
|
|
|
178
177
|
if (atomic) {
|
|
179
178
|
if (typeof client.$transaction !== 'function') {
|
|
180
179
|
throw new HttpError(500, 'Atomic updateEach requires transaction support on the Prisma client')
|
|
181
180
|
}
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
) =>
|
|
186
|
-
|
|
181
|
+
const runInteractive = client.$transaction as unknown as <T>(
|
|
182
|
+
fn: (tx: unknown) => Promise<T>,
|
|
183
|
+
) => Promise<T>
|
|
184
|
+
return runInteractive(async (tx) => {
|
|
185
|
+
const txDelegate = getDelegate(tx, '${modelNameLower}')
|
|
186
|
+
return Promise.all(items.map((item) => txDelegate.update(item)))
|
|
187
|
+
})
|
|
187
188
|
}
|
|
188
189
|
|
|
190
|
+
const delegate = getDelegate(client, '${modelNameLower}')
|
|
189
191
|
const settled = await Promise.allSettled(
|
|
190
192
|
items.map((item) => delegate.update(item)),
|
|
191
193
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateOperationCore.js","sourceRoot":"","sources":["../../src/generators/generateOperationCore.ts"],"names":[],"mappings":";;AAyEA,
|
|
1
|
+
{"version":3,"file":"generateOperationCore.js","sourceRoot":"","sources":["../../src/generators/generateOperationCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,15 +4,35 @@ exports.generateRouteConfigType = generateRouteConfigType;
|
|
|
4
4
|
const importExt_1 = require("../utils/importExt");
|
|
5
5
|
const strings_1 = require("../utils/strings");
|
|
6
6
|
const ROUTER_OPERATIONS = [
|
|
7
|
-
'findUnique',
|
|
8
|
-
'
|
|
9
|
-
'
|
|
10
|
-
'
|
|
11
|
-
'
|
|
7
|
+
'findUnique',
|
|
8
|
+
'findUniqueOrThrow',
|
|
9
|
+
'findFirst',
|
|
10
|
+
'findFirstOrThrow',
|
|
11
|
+
'findMany',
|
|
12
|
+
'findManyPaginated',
|
|
13
|
+
'count',
|
|
14
|
+
'aggregate',
|
|
15
|
+
'groupBy',
|
|
16
|
+
'create',
|
|
17
|
+
'createMany',
|
|
18
|
+
'createManyAndReturn',
|
|
19
|
+
'update',
|
|
20
|
+
'updateMany',
|
|
21
|
+
'updateManyAndReturn',
|
|
22
|
+
'upsert',
|
|
23
|
+
'delete',
|
|
24
|
+
'deleteMany',
|
|
12
25
|
];
|
|
13
26
|
const READ_OPERATIONS = new Set([
|
|
14
|
-
'findUnique',
|
|
15
|
-
'
|
|
27
|
+
'findUnique',
|
|
28
|
+
'findUniqueOrThrow',
|
|
29
|
+
'findFirst',
|
|
30
|
+
'findFirstOrThrow',
|
|
31
|
+
'findMany',
|
|
32
|
+
'findManyPaginated',
|
|
33
|
+
'count',
|
|
34
|
+
'aggregate',
|
|
35
|
+
'groupBy',
|
|
16
36
|
]);
|
|
17
37
|
const ROUTER_OP_TO_SHAPE_OP = {
|
|
18
38
|
findUnique: 'findUnique',
|
|
@@ -73,10 +93,13 @@ function generateRouteConfigType(modelName, hookHandlerType, guardShapesImport,
|
|
|
73
93
|
? `import type { ProgressiveVariantConfig, ProgressiveStage } from '../routeConfig.target${ext}'\n`
|
|
74
94
|
: '';
|
|
75
95
|
if (!guardShapesImport) {
|
|
76
|
-
return progressiveTypeImport +
|
|
96
|
+
return (progressiveTypeImport +
|
|
97
|
+
`export type ${m}RouteConfig${generics} = ${baseConfig}\n`);
|
|
77
98
|
}
|
|
78
99
|
const shapeOps = Object.values(ROUTER_OP_TO_SHAPE_OP).filter((v, i, a) => a.indexOf(v) === i);
|
|
79
|
-
const opShapeImports = shapeOps
|
|
100
|
+
const opShapeImports = shapeOps
|
|
101
|
+
.map((op) => `${m}${(0, strings_1.capitalize)(op)}ShapeInput`)
|
|
102
|
+
.join(',\n ');
|
|
80
103
|
const overrides = ROUTER_OPERATIONS.map((routerOp) => {
|
|
81
104
|
const shapeOp = ROUTER_OP_TO_SHAPE_OP[routerOp];
|
|
82
105
|
const c = (0, strings_1.capitalize)(shapeOp);
|
|
@@ -86,6 +109,7 @@ function generateRouteConfigType(modelName, hookHandlerType, guardShapesImport,
|
|
|
86
109
|
` after?: ${hookRef}[]`,
|
|
87
110
|
` shape?: ${m}${c}ShapeInput<TCtx>`,
|
|
88
111
|
` pagination?: Partial<PaginationConfig>`,
|
|
112
|
+
` dropGuard?: boolean`,
|
|
89
113
|
];
|
|
90
114
|
if (isRead && supportsProgressive) {
|
|
91
115
|
lines.push(` progressive?: Record<string, ProgressiveVariantConfig>`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/generators/generateRouteConfigType.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/generators/generateRouteConfigType.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper';
|
|
2
2
|
import { ImportStyle } from '../utils/resolveImportStyle';
|
|
3
3
|
import { WriteStrategy, FindManyPaginatedMode } from '../constants';
|
|
4
|
-
export declare function generateRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }: {
|
|
4
|
+
export declare function generateRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, dropGuard, }: {
|
|
5
5
|
model: DMMF.Model;
|
|
6
6
|
enums: DMMF.DatamodelEnum[];
|
|
7
7
|
guardShapesImport: string | null;
|
|
8
8
|
importStyle: ImportStyle;
|
|
9
9
|
writeStrategy: WriteStrategy;
|
|
10
10
|
findManyPaginatedMode: FindManyPaginatedMode;
|
|
11
|
+
dropGuard: boolean;
|
|
11
12
|
}): string;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateRouterFunction = generateRouterFunction;
|
|
4
4
|
const generateRouteConfigType_1 = require("./generateRouteConfigType");
|
|
5
5
|
const importExt_1 = require("../utils/importExt");
|
|
6
|
-
function generateRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }) {
|
|
6
|
+
function generateRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, dropGuard, }) {
|
|
7
7
|
const ext = (0, importExt_1.importExt)(importStyle);
|
|
8
8
|
const modelName = model.name;
|
|
9
9
|
const modelNameLower = modelName.toLowerCase();
|
|
@@ -81,6 +81,7 @@ const _env = getEnv()
|
|
|
81
81
|
|
|
82
82
|
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
83
83
|
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
84
|
+
const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
|
|
84
85
|
|
|
85
86
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
86
87
|
const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
|
|
@@ -217,7 +218,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
217
218
|
const headerValue = req.get(headerName)
|
|
218
219
|
const caller = config.guard?.resolveVariant?.(req) ?? headerValue ?? undefined
|
|
219
220
|
if (caller) locals.guardCaller = caller
|
|
220
|
-
if (opConfig.shape) locals.guardShape = opConfig.shape
|
|
221
|
+
if (opConfig.shape && !DROP_GUARD) locals.guardShape = opConfig.shape
|
|
221
222
|
next()
|
|
222
223
|
}
|
|
223
224
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper';
|
|
2
2
|
import { ImportStyle } from '../utils/resolveImportStyle';
|
|
3
3
|
import { WriteStrategy, FindManyPaginatedMode } from '../constants';
|
|
4
|
-
export declare function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }: {
|
|
4
|
+
export declare function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, dropGuard, }: {
|
|
5
5
|
model: DMMF.Model;
|
|
6
6
|
enums: DMMF.DatamodelEnum[];
|
|
7
7
|
guardShapesImport: string | null;
|
|
8
8
|
importStyle: ImportStyle;
|
|
9
9
|
writeStrategy: WriteStrategy;
|
|
10
10
|
findManyPaginatedMode: FindManyPaginatedMode;
|
|
11
|
+
dropGuard: boolean;
|
|
11
12
|
}): string;
|
|
@@ -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, writeStrategy, findManyPaginatedMode, }) {
|
|
6
|
+
function generateFastifyRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, dropGuard, }) {
|
|
7
7
|
const ext = (0, importExt_1.importExt)(importStyle);
|
|
8
8
|
const modelName = model.name;
|
|
9
9
|
const modelNameLower = modelName.toLowerCase();
|
|
@@ -65,6 +65,7 @@ const _env = getEnv()
|
|
|
65
65
|
|
|
66
66
|
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
67
67
|
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
68
|
+
const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
|
|
68
69
|
|
|
69
70
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
70
71
|
|
|
@@ -140,7 +141,7 @@ function makeShapeHook(
|
|
|
140
141
|
if (caller) {
|
|
141
142
|
fx.guardCaller = caller
|
|
142
143
|
}
|
|
143
|
-
if (opConfig.shape) {
|
|
144
|
+
if (opConfig.shape && !DROP_GUARD) {
|
|
144
145
|
fx.guardShape = opConfig.shape
|
|
145
146
|
}
|
|
146
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper';
|
|
2
2
|
import { ImportStyle } from '../utils/resolveImportStyle';
|
|
3
3
|
import { WriteStrategy, FindManyPaginatedMode } from '../constants';
|
|
4
|
-
export declare function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, }: {
|
|
4
|
+
export declare function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, dropGuard, }: {
|
|
5
5
|
model: DMMF.Model;
|
|
6
6
|
enums: DMMF.DatamodelEnum[];
|
|
7
7
|
guardShapesImport: string | null;
|
|
8
8
|
importStyle: ImportStyle;
|
|
9
9
|
writeStrategy: WriteStrategy;
|
|
10
10
|
findManyPaginatedMode: FindManyPaginatedMode;
|
|
11
|
+
dropGuard: boolean;
|
|
11
12
|
}): string;
|
|
@@ -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, writeStrategy, findManyPaginatedMode, }) {
|
|
6
|
+
function generateHonoRouterFunction({ model, enums, guardShapesImport, importStyle, writeStrategy, findManyPaginatedMode, dropGuard, }) {
|
|
7
7
|
const ext = (0, importExt_1.importExt)(importStyle);
|
|
8
8
|
const modelName = model.name;
|
|
9
9
|
const modelNameLower = modelName.toLowerCase();
|
|
@@ -76,6 +76,7 @@ const _env = getEnv()
|
|
|
76
76
|
|
|
77
77
|
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
78
78
|
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
79
|
+
const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
|
|
79
80
|
|
|
80
81
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
81
82
|
|
|
@@ -155,7 +156,7 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
|
|
|
155
156
|
const headerValue = c.req.header(headerName)
|
|
156
157
|
const caller = config.guard?.resolveVariant?.(c) ?? headerValue ?? undefined
|
|
157
158
|
if (caller) c.set('guardCaller', caller)
|
|
158
|
-
if (opConfig.shape) {
|
|
159
|
+
if (opConfig.shape && !DROP_GUARD) {
|
|
159
160
|
c.set('guardShape', opConfig.shape)
|
|
160
161
|
}
|
|
161
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouterHono.js","sourceRoot":"","sources":["../../src/generators/generateRouterHono.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"generateRouterHono.js","sourceRoot":"","sources":["../../src/generators/generateRouterHono.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -54,6 +54,17 @@ function getFindManyPaginatedMode(options) {
|
|
|
54
54
|
return 'promiseAll';
|
|
55
55
|
throw new Error(`Invalid findManyPaginatedMode "${raw}". Expected "transaction" or "promiseAll".`);
|
|
56
56
|
}
|
|
57
|
+
function getDropGuard(options) {
|
|
58
|
+
const raw = options.generator.config.dropGuard;
|
|
59
|
+
if (raw === undefined || raw === null || raw === '')
|
|
60
|
+
return false;
|
|
61
|
+
const lower = String(raw).toLowerCase();
|
|
62
|
+
if (lower === 'true' || lower === '1')
|
|
63
|
+
return true;
|
|
64
|
+
if (lower === 'false' || lower === '0')
|
|
65
|
+
return false;
|
|
66
|
+
throw new Error(`Invalid dropGuard "${raw}". Expected "true" or "false".`);
|
|
67
|
+
}
|
|
57
68
|
function validateClientGeneratorPresent(options) {
|
|
58
69
|
(0, generateImportPrismaStatement_1.getRelativeClientPath)(options, options.dmmf.datamodel.models[0]?.name ?? 'Model');
|
|
59
70
|
}
|
|
@@ -69,6 +80,7 @@ function validateClientGeneratorPresent(options) {
|
|
|
69
80
|
const target = getTarget(options);
|
|
70
81
|
const writeStrategy = getWriteStrategy(options);
|
|
71
82
|
const findManyPaginatedMode = getFindManyPaginatedMode(options);
|
|
83
|
+
const dropGuard = getDropGuard(options);
|
|
72
84
|
const manifestDefaultAbs = path_1.default.resolve(__dirname, '..', 'generated', target);
|
|
73
85
|
const currentOutput = options.generator.output?.value;
|
|
74
86
|
const isUnsetOrManifestDefault = !currentOutput || path_1.default.resolve(currentOutput) === manifestDefaultAbs;
|
|
@@ -84,6 +96,7 @@ function validateClientGeneratorPresent(options) {
|
|
|
84
96
|
console.log(` Import style: ${importStyle}`);
|
|
85
97
|
console.log(` Write strategy: ${writeStrategy}`);
|
|
86
98
|
console.log(` findManyPaginated mode: ${findManyPaginatedMode}`);
|
|
99
|
+
console.log(` Drop guard: ${dropGuard}`);
|
|
87
100
|
if (options.dmmf.datamodel.models.length > 0) {
|
|
88
101
|
validateClientGeneratorPresent(options);
|
|
89
102
|
}
|
|
@@ -101,7 +114,9 @@ function validateClientGeneratorPresent(options) {
|
|
|
101
114
|
continue;
|
|
102
115
|
}
|
|
103
116
|
modelNames.push(model.name);
|
|
104
|
-
const guardShapesImport =
|
|
117
|
+
const guardShapesImport = dropGuard
|
|
118
|
+
? null
|
|
119
|
+
: (0, generateImportPrismaStatement_1.getGuardShapesImport)(options, model.name);
|
|
105
120
|
await (0, writeFileSafely_1.writeFileSafely)({
|
|
106
121
|
content: (0, generateOperationCore_1.generateModelCore)({
|
|
107
122
|
model: model,
|
|
@@ -127,6 +142,7 @@ function validateClientGeneratorPresent(options) {
|
|
|
127
142
|
importStyle,
|
|
128
143
|
writeStrategy,
|
|
129
144
|
findManyPaginatedMode,
|
|
145
|
+
dropGuard,
|
|
130
146
|
})
|
|
131
147
|
: target === 'hono'
|
|
132
148
|
? (0, generateRouterHono_1.generateHonoRouterFunction)({
|
|
@@ -136,6 +152,7 @@ function validateClientGeneratorPresent(options) {
|
|
|
136
152
|
importStyle,
|
|
137
153
|
writeStrategy,
|
|
138
154
|
findManyPaginatedMode,
|
|
155
|
+
dropGuard,
|
|
139
156
|
})
|
|
140
157
|
: (0, generateRouter_1.generateRouterFunction)({
|
|
141
158
|
model: model,
|
|
@@ -144,6 +161,7 @@ function validateClientGeneratorPresent(options) {
|
|
|
144
161
|
importStyle,
|
|
145
162
|
writeStrategy,
|
|
146
163
|
findManyPaginatedMode,
|
|
164
|
+
dropGuard,
|
|
147
165
|
});
|
|
148
166
|
await (0, writeFileSafely_1.writeFileSafely)({
|
|
149
167
|
content: routerContent,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,+DAIiC;AACjC,gDAAuB;AACvB,gFAA4E;AAC5E,gFAA4E;AAC5E,0EAAsE;AACtE,gEAAoE;AACpE,8EAAkF;AAClF,wEAA4E;AAC5E,kFAA8E;AAC9E,0EAAsE;AACtE,wFAAoF;AACpF,8EAAsE;AACtE,4EAG0C;AAC1C,8FAGmD;AACnD,6DAAyD;AACzD,iDAA6C;AAC7C,mEAA4E;AAC5E,2CAKoB;AAEpB,MAAM,gBAAgB,GAAG,mBAAmB,CAAA;AAE5C,SAAS,SAAS,CAAC,OAAyB;IAC1C,MAAM,GAAG,GAAG,MAAM,CACf,OAAO,CAAC,SAAS,CAAC,MAAkC,CAAC,MAAM,IAAI,SAAS,CAC1E,CAAC,WAAW,EAAE,CAAA;IACf,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,GAAG,CAAA;IACxE,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,8CAA8C,CACrE,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAyB;IACjD,MAAM,GAAG,GAAG,MAAM,CACf,OAAO,CAAC,SAAS,CAAC,MAAkC,CAAC,aAAa;QACjE,SAAS,CACZ,CAAA;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,IAAI,KAAK,KAAK,qBAAqB;QAAE,OAAO,qBAAqB,CAAA;IACjE,IAAI,KAAK,KAAK,gBAAgB,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CACV,6GAA6G,CAC9G,CAAA;QACD,OAAO,qBAAqB,CAAA;IAC9B,CAAC;IACD,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,aAAa,CAAA;IACjD,MAAM,IAAI,KAAK,CACb,0BAA0B,GAAG,iEAAiE,CAC/F,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAyB;IAEzB,MAAM,GAAG,GAAG,MAAM,CACf,OAAO,CAAC,SAAS,CAAC,MAAkC;SAClD,qBAAqB,IAAI,YAAY,CACzC,CAAA;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,aAAa,CAAA;IACjD,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,YAAY,CAAA;IAC/C,MAAM,IAAI,KAAK,CACb,kCAAkC,GAAG,4CAA4C,CAClF,CAAA;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAyB;IAC/D,IAAA,qDAAqB,EACnB,OAAO,EACP,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,OAAO,CAClD,CAAA;AACH,CAAC;AAED,IAAA,mCAAgB,EAAC;IACf,UAAU;QACR,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO;YAC3C,aAAa,EAAE,sBAAsB;YACrC,UAAU,EAAE,0BAAc;SAC3B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAyB;QACxC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;QACjC,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAC/C,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;
|
|
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.
|
|
4
|
+
"version": "1.57.0",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"license": "MIT",
|
package/src/copy/routeConfig.ts
CHANGED
|
@@ -91,6 +91,7 @@ export interface BaseOperationConfig<HookHandler, TShape = Record<string, unknow
|
|
|
91
91
|
before?: HookHandler[]
|
|
92
92
|
after?: HookHandler[]
|
|
93
93
|
shape?: TShape
|
|
94
|
+
dropGuard?: boolean
|
|
94
95
|
pagination?: Partial<PaginationConfig>
|
|
95
96
|
}
|
|
96
97
|
|
|
@@ -105,6 +106,7 @@ export interface BaseRouteConfig<
|
|
|
105
106
|
customUrlPrefix?: string
|
|
106
107
|
specBasePath?: string
|
|
107
108
|
disableOpenApi?: boolean
|
|
109
|
+
dropGuard?: boolean
|
|
108
110
|
disablePostReads?: boolean
|
|
109
111
|
scalarCdnUrl?: string
|
|
110
112
|
openApiTitle?: string
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GeneratorOptions } from '@prisma/generator-helper'
|
|
2
|
+
import * as fs from 'fs'
|
|
2
3
|
import path from 'path'
|
|
3
4
|
|
|
4
5
|
function findClientGenerator(options: GeneratorOptions) {
|
|
@@ -74,6 +75,9 @@ export function getGuardShapesImport(
|
|
|
74
75
|
const outputValue = options.generator.output?.value
|
|
75
76
|
if (!outputValue) return null
|
|
76
77
|
|
|
78
|
+
const shapesFilePath = path.join(guard.output.value, 'shapes.ts')
|
|
79
|
+
if (!fs.existsSync(shapesFilePath)) return null
|
|
80
|
+
|
|
77
81
|
const fromDir = path.join(outputValue, modelName)
|
|
78
82
|
const shapesPath = path.join(guard.output.value, 'shapes')
|
|
79
83
|
return getRelativeImportPath(fromDir, shapesPath)
|
|
@@ -199,19 +199,21 @@ export async function updateEach(
|
|
|
199
199
|
}
|
|
200
200
|
const items = body as Record<string, unknown>[]
|
|
201
201
|
const client = ctx.prisma as PrismaClientLike
|
|
202
|
-
const delegate = getDelegate(client, '${modelNameLower}')
|
|
203
202
|
|
|
204
203
|
if (atomic) {
|
|
205
204
|
if (typeof client.$transaction !== 'function') {
|
|
206
205
|
throw new HttpError(500, 'Atomic updateEach requires transaction support on the Prisma client')
|
|
207
206
|
}
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
) =>
|
|
212
|
-
|
|
207
|
+
const runInteractive = client.$transaction as unknown as <T>(
|
|
208
|
+
fn: (tx: unknown) => Promise<T>,
|
|
209
|
+
) => Promise<T>
|
|
210
|
+
return runInteractive(async (tx) => {
|
|
211
|
+
const txDelegate = getDelegate(tx, '${modelNameLower}')
|
|
212
|
+
return Promise.all(items.map((item) => txDelegate.update(item)))
|
|
213
|
+
})
|
|
213
214
|
}
|
|
214
215
|
|
|
216
|
+
const delegate = getDelegate(client, '${modelNameLower}')
|
|
215
217
|
const settled = await Promise.allSettled(
|
|
216
218
|
items.map((item) => delegate.update(item)),
|
|
217
219
|
)
|
|
@@ -4,18 +4,38 @@ import type { Target } from '../constants'
|
|
|
4
4
|
import { capitalize } from '../utils/strings'
|
|
5
5
|
|
|
6
6
|
const ROUTER_OPERATIONS = [
|
|
7
|
-
'findUnique',
|
|
8
|
-
'
|
|
9
|
-
'
|
|
10
|
-
'
|
|
11
|
-
'
|
|
7
|
+
'findUnique',
|
|
8
|
+
'findUniqueOrThrow',
|
|
9
|
+
'findFirst',
|
|
10
|
+
'findFirstOrThrow',
|
|
11
|
+
'findMany',
|
|
12
|
+
'findManyPaginated',
|
|
13
|
+
'count',
|
|
14
|
+
'aggregate',
|
|
15
|
+
'groupBy',
|
|
16
|
+
'create',
|
|
17
|
+
'createMany',
|
|
18
|
+
'createManyAndReturn',
|
|
19
|
+
'update',
|
|
20
|
+
'updateMany',
|
|
21
|
+
'updateManyAndReturn',
|
|
22
|
+
'upsert',
|
|
23
|
+
'delete',
|
|
24
|
+
'deleteMany',
|
|
12
25
|
] as const
|
|
13
26
|
|
|
14
27
|
type RouterOperation = (typeof ROUTER_OPERATIONS)[number]
|
|
15
28
|
|
|
16
29
|
const READ_OPERATIONS: ReadonlySet<RouterOperation> = new Set<RouterOperation>([
|
|
17
|
-
'findUnique',
|
|
18
|
-
'
|
|
30
|
+
'findUnique',
|
|
31
|
+
'findUniqueOrThrow',
|
|
32
|
+
'findFirst',
|
|
33
|
+
'findFirstOrThrow',
|
|
34
|
+
'findMany',
|
|
35
|
+
'findManyPaginated',
|
|
36
|
+
'count',
|
|
37
|
+
'aggregate',
|
|
38
|
+
'groupBy',
|
|
19
39
|
])
|
|
20
40
|
|
|
21
41
|
const ROUTER_OP_TO_SHAPE_OP: Record<RouterOperation, string> = {
|
|
@@ -88,11 +108,18 @@ export function generateRouteConfigType(
|
|
|
88
108
|
: ''
|
|
89
109
|
|
|
90
110
|
if (!guardShapesImport) {
|
|
91
|
-
return
|
|
111
|
+
return (
|
|
112
|
+
progressiveTypeImport +
|
|
113
|
+
`export type ${m}RouteConfig${generics} = ${baseConfig}\n`
|
|
114
|
+
)
|
|
92
115
|
}
|
|
93
116
|
|
|
94
|
-
const shapeOps = Object.values(ROUTER_OP_TO_SHAPE_OP).filter(
|
|
95
|
-
|
|
117
|
+
const shapeOps = Object.values(ROUTER_OP_TO_SHAPE_OP).filter(
|
|
118
|
+
(v, i, a) => a.indexOf(v) === i,
|
|
119
|
+
)
|
|
120
|
+
const opShapeImports = shapeOps
|
|
121
|
+
.map((op) => `${m}${capitalize(op)}ShapeInput`)
|
|
122
|
+
.join(',\n ')
|
|
96
123
|
|
|
97
124
|
const overrides = ROUTER_OPERATIONS.map((routerOp) => {
|
|
98
125
|
const shapeOp = ROUTER_OP_TO_SHAPE_OP[routerOp]
|
|
@@ -103,10 +130,13 @@ export function generateRouteConfigType(
|
|
|
103
130
|
` after?: ${hookRef}[]`,
|
|
104
131
|
` shape?: ${m}${c}ShapeInput<TCtx>`,
|
|
105
132
|
` pagination?: Partial<PaginationConfig>`,
|
|
133
|
+
` dropGuard?: boolean`,
|
|
106
134
|
]
|
|
107
135
|
if (isRead && supportsProgressive) {
|
|
108
136
|
lines.push(` progressive?: Record<string, ProgressiveVariantConfig>`)
|
|
109
|
-
lines.push(
|
|
137
|
+
lines.push(
|
|
138
|
+
` progressiveStages?: Record<string, ProgressiveStage<TCtx, TPrisma>>`,
|
|
139
|
+
)
|
|
110
140
|
}
|
|
111
141
|
return ` ${routerOp}?: {\n${lines.join('\n')}\n }`
|
|
112
142
|
}).join('\n')
|
|
@@ -124,4 +154,4 @@ export function generateRouteConfigType(
|
|
|
124
154
|
` resolveContext?: (request: ${requestType}) => TCtx | Promise<TCtx>\n` +
|
|
125
155
|
`${overrides}\n}\n`
|
|
126
156
|
)
|
|
127
|
-
}
|
|
157
|
+
}
|
|
@@ -11,6 +11,7 @@ export function generateRouterFunction({
|
|
|
11
11
|
importStyle,
|
|
12
12
|
writeStrategy,
|
|
13
13
|
findManyPaginatedMode,
|
|
14
|
+
dropGuard,
|
|
14
15
|
}: {
|
|
15
16
|
model: DMMF.Model
|
|
16
17
|
enums: DMMF.DatamodelEnum[]
|
|
@@ -18,6 +19,7 @@ export function generateRouterFunction({
|
|
|
18
19
|
importStyle: ImportStyle
|
|
19
20
|
writeStrategy: WriteStrategy
|
|
20
21
|
findManyPaginatedMode: FindManyPaginatedMode
|
|
22
|
+
dropGuard: boolean
|
|
21
23
|
}): string {
|
|
22
24
|
const ext = importExt(importStyle)
|
|
23
25
|
const modelName = model.name
|
|
@@ -102,6 +104,7 @@ const _env = getEnv()
|
|
|
102
104
|
|
|
103
105
|
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
104
106
|
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
107
|
+
const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
|
|
105
108
|
|
|
106
109
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
107
110
|
const MODEL_ENUMS = ${JSON.stringify(enumsMeta, null, 2)} as const
|
|
@@ -238,7 +241,7 @@ export function ${routerFunctionName}<TCtx = unknown, TPrisma = any>(config: ${m
|
|
|
238
241
|
const headerValue = req.get(headerName)
|
|
239
242
|
const caller = config.guard?.resolveVariant?.(req) ?? headerValue ?? undefined
|
|
240
243
|
if (caller) locals.guardCaller = caller
|
|
241
|
-
if (opConfig.shape) locals.guardShape = opConfig.shape
|
|
244
|
+
if (opConfig.shape && !DROP_GUARD) locals.guardShape = opConfig.shape
|
|
242
245
|
next()
|
|
243
246
|
}
|
|
244
247
|
}
|
|
@@ -11,6 +11,7 @@ export function generateFastifyRouterFunction({
|
|
|
11
11
|
importStyle,
|
|
12
12
|
writeStrategy,
|
|
13
13
|
findManyPaginatedMode,
|
|
14
|
+
dropGuard,
|
|
14
15
|
}: {
|
|
15
16
|
model: DMMF.Model
|
|
16
17
|
enums: DMMF.DatamodelEnum[]
|
|
@@ -18,6 +19,7 @@ export function generateFastifyRouterFunction({
|
|
|
18
19
|
importStyle: ImportStyle
|
|
19
20
|
writeStrategy: WriteStrategy
|
|
20
21
|
findManyPaginatedMode: FindManyPaginatedMode
|
|
22
|
+
dropGuard: boolean
|
|
21
23
|
}): string {
|
|
22
24
|
const ext = importExt(importStyle)
|
|
23
25
|
const modelName = model.name
|
|
@@ -86,6 +88,7 @@ const _env = getEnv()
|
|
|
86
88
|
|
|
87
89
|
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
88
90
|
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
91
|
+
const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
|
|
89
92
|
|
|
90
93
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
91
94
|
|
|
@@ -161,7 +164,7 @@ function makeShapeHook(
|
|
|
161
164
|
if (caller) {
|
|
162
165
|
fx.guardCaller = caller
|
|
163
166
|
}
|
|
164
|
-
if (opConfig.shape) {
|
|
167
|
+
if (opConfig.shape && !DROP_GUARD) {
|
|
165
168
|
fx.guardShape = opConfig.shape
|
|
166
169
|
}
|
|
167
170
|
}
|
|
@@ -11,6 +11,7 @@ export function generateHonoRouterFunction({
|
|
|
11
11
|
importStyle,
|
|
12
12
|
writeStrategy,
|
|
13
13
|
findManyPaginatedMode,
|
|
14
|
+
dropGuard,
|
|
14
15
|
}: {
|
|
15
16
|
model: DMMF.Model
|
|
16
17
|
enums: DMMF.DatamodelEnum[]
|
|
@@ -18,6 +19,7 @@ export function generateHonoRouterFunction({
|
|
|
18
19
|
importStyle: ImportStyle
|
|
19
20
|
writeStrategy: WriteStrategy
|
|
20
21
|
findManyPaginatedMode: FindManyPaginatedMode
|
|
22
|
+
dropGuard: boolean
|
|
21
23
|
}): string {
|
|
22
24
|
const ext = importExt(importStyle)
|
|
23
25
|
const modelName = model.name
|
|
@@ -97,6 +99,7 @@ const _env = getEnv()
|
|
|
97
99
|
|
|
98
100
|
const WRITE_STRATEGY: WriteStrategy = '${writeStrategy}'
|
|
99
101
|
const FIND_MANY_PAGINATED_MODE: FindManyPaginatedMode = '${findManyPaginatedMode}'
|
|
102
|
+
const DROP_GUARD = ${dropGuard} || _env.E2E === 'true'
|
|
100
103
|
|
|
101
104
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
102
105
|
|
|
@@ -176,7 +179,7 @@ function makeShapeMiddleware<TCtx, TPrisma, TEnv extends HonoEnvBase>(
|
|
|
176
179
|
const headerValue = c.req.header(headerName)
|
|
177
180
|
const caller = config.guard?.resolveVariant?.(c) ?? headerValue ?? undefined
|
|
178
181
|
if (caller) c.set('guardCaller', caller)
|
|
179
|
-
if (opConfig.shape) {
|
|
182
|
+
if (opConfig.shape && !DROP_GUARD) {
|
|
180
183
|
c.set('guardShape', opConfig.shape)
|
|
181
184
|
}
|
|
182
185
|
}
|
package/src/index.ts
CHANGED
|
@@ -79,6 +79,17 @@ function getFindManyPaginatedMode(
|
|
|
79
79
|
)
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
function getDropGuard(options: GeneratorOptions): boolean {
|
|
83
|
+
const raw = (options.generator.config as Record<string, unknown>).dropGuard
|
|
84
|
+
if (raw === undefined || raw === null || raw === '') return false
|
|
85
|
+
const lower = String(raw).toLowerCase()
|
|
86
|
+
if (lower === 'true' || lower === '1') return true
|
|
87
|
+
if (lower === 'false' || lower === '0') return false
|
|
88
|
+
throw new Error(
|
|
89
|
+
`Invalid dropGuard "${raw}". Expected "true" or "false".`,
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
|
|
82
93
|
function validateClientGeneratorPresent(options: GeneratorOptions): void {
|
|
83
94
|
getRelativeClientPath(
|
|
84
95
|
options,
|
|
@@ -99,6 +110,7 @@ generatorHandler({
|
|
|
99
110
|
const target = getTarget(options)
|
|
100
111
|
const writeStrategy = getWriteStrategy(options)
|
|
101
112
|
const findManyPaginatedMode = getFindManyPaginatedMode(options)
|
|
113
|
+
const dropGuard = getDropGuard(options)
|
|
102
114
|
|
|
103
115
|
const manifestDefaultAbs = path.resolve(
|
|
104
116
|
__dirname,
|
|
@@ -124,6 +136,7 @@ generatorHandler({
|
|
|
124
136
|
console.log(` Import style: ${importStyle}`)
|
|
125
137
|
console.log(` Write strategy: ${writeStrategy}`)
|
|
126
138
|
console.log(` findManyPaginated mode: ${findManyPaginatedMode}`)
|
|
139
|
+
console.log(` Drop guard: ${dropGuard}`)
|
|
127
140
|
|
|
128
141
|
if (options.dmmf.datamodel.models.length > 0) {
|
|
129
142
|
validateClientGeneratorPresent(options)
|
|
@@ -151,7 +164,9 @@ generatorHandler({
|
|
|
151
164
|
}
|
|
152
165
|
modelNames.push(model.name)
|
|
153
166
|
|
|
154
|
-
const guardShapesImport =
|
|
167
|
+
const guardShapesImport = dropGuard
|
|
168
|
+
? null
|
|
169
|
+
: getGuardShapesImport(options, model.name)
|
|
155
170
|
|
|
156
171
|
await writeFileSafely({
|
|
157
172
|
content: generateModelCore({
|
|
@@ -181,6 +196,7 @@ generatorHandler({
|
|
|
181
196
|
importStyle,
|
|
182
197
|
writeStrategy,
|
|
183
198
|
findManyPaginatedMode,
|
|
199
|
+
dropGuard,
|
|
184
200
|
})
|
|
185
201
|
: target === 'hono'
|
|
186
202
|
? generateHonoRouterFunction({
|
|
@@ -190,6 +206,7 @@ generatorHandler({
|
|
|
190
206
|
importStyle,
|
|
191
207
|
writeStrategy,
|
|
192
208
|
findManyPaginatedMode,
|
|
209
|
+
dropGuard,
|
|
193
210
|
})
|
|
194
211
|
: generateRouterFunction({
|
|
195
212
|
model: model as DMMF.Model,
|
|
@@ -198,6 +215,7 @@ generatorHandler({
|
|
|
198
215
|
importStyle,
|
|
199
216
|
writeStrategy,
|
|
200
217
|
findManyPaginatedMode,
|
|
218
|
+
dropGuard,
|
|
201
219
|
})
|
|
202
220
|
|
|
203
221
|
await writeFileSafely({
|
|
@@ -258,4 +276,4 @@ generatorHandler({
|
|
|
258
276
|
console.log(`✓ ${modelNames.length} models (${target})`)
|
|
259
277
|
console.log('')
|
|
260
278
|
},
|
|
261
|
-
})
|
|
279
|
+
})
|