prisma-generator-express 1.37.1 → 1.38.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/dist/generators/generateImportPrismaStatement.d.ts +1 -0
- package/dist/generators/generateImportPrismaStatement.js +24 -0
- package/dist/generators/generateImportPrismaStatement.js.map +1 -1
- package/dist/generators/generateRouteConfigType.d.ts +1 -0
- package/dist/generators/generateRouteConfigType.js +72 -0
- package/dist/generators/generateRouteConfigType.js.map +1 -0
- package/dist/generators/generateRouter.d.ts +2 -1
- package/dist/generators/generateRouter.js +4 -2
- package/dist/generators/generateRouter.js.map +1 -1
- package/dist/generators/generateRouterFastify.d.ts +2 -1
- package/dist/generators/generateRouterFastify.js +5 -3
- package/dist/generators/generateRouterFastify.js.map +1 -1
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/copy/routeConfig.express.ts +4 -2
- package/src/copy/routeConfig.fastify.ts +4 -2
- package/src/copy/routeConfig.ts +21 -26
- package/src/generators/generateImportPrismaStatement.ts +34 -0
- package/src/generators/generateRouteConfigType.ts +89 -0
- package/src/generators/generateRouter.ts +5 -1
- package/src/generators/generateRouterFastify.ts +6 -2
- package/src/index.ts +18 -11
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { GeneratorOptions } from '@prisma/generator-helper';
|
|
2
2
|
export declare function generateImportPrismaStatement(generatorOptions: GeneratorOptions): string;
|
|
3
3
|
export declare function getRelativeClientPath(generatorOptions: GeneratorOptions, modelName: string): string;
|
|
4
|
+
export declare function getGuardShapesImport(options: GeneratorOptions, modelName: string): string | null;
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.generateImportPrismaStatement = generateImportPrismaStatement;
|
|
7
7
|
exports.getRelativeClientPath = getRelativeClientPath;
|
|
8
|
+
exports.getGuardShapesImport = getGuardShapesImport;
|
|
8
9
|
const path_1 = __importDefault(require("path"));
|
|
9
10
|
function findClientGenerator(options) {
|
|
10
11
|
const byName = options.otherGenerators.find((gen) => gen.name === 'client');
|
|
@@ -52,4 +53,27 @@ function getRelativeClientPath(generatorOptions, modelName) {
|
|
|
52
53
|
const routerDirPath = path_1.default.join(outputValue, modelName);
|
|
53
54
|
return getRelativeImportPath(routerDirPath, clientGenerator.output.value);
|
|
54
55
|
}
|
|
56
|
+
function findGuardGenerator(options) {
|
|
57
|
+
const byProvider = options.otherGenerators.find((gen) => !!gen.provider?.value && gen.provider.value.includes('prisma-guard'));
|
|
58
|
+
if (byProvider)
|
|
59
|
+
return byProvider;
|
|
60
|
+
const byConfig = options.otherGenerators.find((gen) => !!gen.config &&
|
|
61
|
+
('typedGuardShapes' in gen.config ||
|
|
62
|
+
'onInvalidZod' in gen.config ||
|
|
63
|
+
'findUniqueMode' in gen.config));
|
|
64
|
+
return byConfig || null;
|
|
65
|
+
}
|
|
66
|
+
function getGuardShapesImport(options, modelName) {
|
|
67
|
+
const guard = findGuardGenerator(options);
|
|
68
|
+
if (!guard || !guard.output?.value)
|
|
69
|
+
return null;
|
|
70
|
+
if (guard.config?.typedGuardShapes === 'false')
|
|
71
|
+
return null;
|
|
72
|
+
const outputValue = options.generator.output?.value;
|
|
73
|
+
if (!outputValue)
|
|
74
|
+
return null;
|
|
75
|
+
const fromDir = path_1.default.join(outputValue, modelName);
|
|
76
|
+
const shapesPath = path_1.default.join(guard.output.value, 'shapes');
|
|
77
|
+
return getRelativeImportPath(fromDir, shapesPath);
|
|
78
|
+
}
|
|
55
79
|
//# sourceMappingURL=generateImportPrismaStatement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateImportPrismaStatement.js","sourceRoot":"","sources":["../../src/generators/generateImportPrismaStatement.ts"],"names":[],"mappings":";;;;;AAmCA,sEAoBC;AAED,sDAoBC;
|
|
1
|
+
{"version":3,"file":"generateImportPrismaStatement.js","sourceRoot":"","sources":["../../src/generators/generateImportPrismaStatement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateRouteConfigType(modelName: string, hookHandlerType: string, guardShapesImport: string | null): string;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRouteConfigType = generateRouteConfigType;
|
|
4
|
+
const ROUTER_OPERATIONS = [
|
|
5
|
+
'findUnique',
|
|
6
|
+
'findUniqueOrThrow',
|
|
7
|
+
'findFirst',
|
|
8
|
+
'findFirstOrThrow',
|
|
9
|
+
'findMany',
|
|
10
|
+
'findManyPaginated',
|
|
11
|
+
'count',
|
|
12
|
+
'aggregate',
|
|
13
|
+
'groupBy',
|
|
14
|
+
'create',
|
|
15
|
+
'createMany',
|
|
16
|
+
'createManyAndReturn',
|
|
17
|
+
'update',
|
|
18
|
+
'updateMany',
|
|
19
|
+
'updateManyAndReturn',
|
|
20
|
+
'upsert',
|
|
21
|
+
'delete',
|
|
22
|
+
'deleteMany',
|
|
23
|
+
];
|
|
24
|
+
const ROUTER_OP_TO_SHAPE_OP = {
|
|
25
|
+
findUnique: 'findUnique',
|
|
26
|
+
findUniqueOrThrow: 'findUniqueOrThrow',
|
|
27
|
+
findFirst: 'findFirst',
|
|
28
|
+
findFirstOrThrow: 'findFirstOrThrow',
|
|
29
|
+
findMany: 'findMany',
|
|
30
|
+
findManyPaginated: 'findManyPaginated',
|
|
31
|
+
count: 'count',
|
|
32
|
+
aggregate: 'aggregate',
|
|
33
|
+
groupBy: 'groupBy',
|
|
34
|
+
create: 'create',
|
|
35
|
+
createMany: 'createMany',
|
|
36
|
+
createManyAndReturn: 'createManyAndReturn',
|
|
37
|
+
update: 'update',
|
|
38
|
+
updateMany: 'updateMany',
|
|
39
|
+
updateManyAndReturn: 'updateManyAndReturn',
|
|
40
|
+
upsert: 'upsert',
|
|
41
|
+
delete: 'delete',
|
|
42
|
+
deleteMany: 'deleteMany',
|
|
43
|
+
};
|
|
44
|
+
function capitalize(s) {
|
|
45
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
46
|
+
}
|
|
47
|
+
function generateRouteConfigType(modelName, hookHandlerType, guardShapesImport) {
|
|
48
|
+
const m = modelName;
|
|
49
|
+
if (!guardShapesImport) {
|
|
50
|
+
return `export type ${m}RouteConfig<TCtx = unknown> = RouteConfig\n`;
|
|
51
|
+
}
|
|
52
|
+
const shapeOps = Object.values(ROUTER_OP_TO_SHAPE_OP).filter((v, i, a) => a.indexOf(v) === i);
|
|
53
|
+
const opShapeImports = shapeOps
|
|
54
|
+
.map((op) => `${m}${capitalize(op)}ShapeInput`)
|
|
55
|
+
.join(',\n ');
|
|
56
|
+
const overrides = ROUTER_OPERATIONS.map((routerOp) => {
|
|
57
|
+
const shapeOp = ROUTER_OP_TO_SHAPE_OP[routerOp];
|
|
58
|
+
const c = capitalize(shapeOp);
|
|
59
|
+
return (` ${routerOp}?: {\n` +
|
|
60
|
+
` before?: ${hookHandlerType}[]\n` +
|
|
61
|
+
` after?: ${hookHandlerType}[]\n` +
|
|
62
|
+
` shape?: ${m}${c}ShapeInput<TCtx>\n` +
|
|
63
|
+
` }`);
|
|
64
|
+
}).join('\n');
|
|
65
|
+
const omitKeys = ROUTER_OPERATIONS.map((k) => `'${k}'`).join('\n | ');
|
|
66
|
+
return (`import type {\n ${opShapeImports}\n} from '${guardShapesImport}'\n\n` +
|
|
67
|
+
`export type ${m}RouteConfig<TCtx = unknown> = Omit<\n` +
|
|
68
|
+
` RouteConfig,\n` +
|
|
69
|
+
` | ${omitKeys}\n` +
|
|
70
|
+
`> & {\n${overrides}\n}\n`);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=generateRouteConfigType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/generators/generateRouteConfigType.ts"],"names":[],"mappings":";;AAgDA,0DAwCC;AAxFD,MAAM,iBAAiB,GAAG;IACxB,YAAY;IACZ,mBAAmB;IACnB,WAAW;IACX,kBAAkB;IAClB,UAAU;IACV,mBAAmB;IACnB,OAAO;IACP,WAAW;IACX,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,qBAAqB;IACrB,QAAQ;IACR,YAAY;IACZ,qBAAqB;IACrB,QAAQ;IACR,QAAQ;IACR,YAAY;CACJ,CAAA;AAIV,MAAM,qBAAqB,GAAoC;IAC7D,UAAU,EAAE,YAAY;IACxB,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,mBAAmB;IACtC,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,qBAAqB;IAC1C,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,qBAAqB;IAC1C,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;CACzB,CAAA;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,SAAgB,uBAAuB,CACrC,SAAiB,EACjB,eAAuB,EACvB,iBAAgC;IAEhC,MAAM,CAAC,GAAG,SAAS,CAAA;IAEnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,6CAA6C,CAAA;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAC1D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAChC,CAAA;IAED,MAAM,cAAc,GAAG,QAAQ;SAC5B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC;SAC9C,IAAI,CAAC,OAAO,CAAC,CAAA;IAEhB,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QAC7B,OAAO,CACL,KAAK,QAAQ,QAAQ;YACrB,gBAAgB,eAAe,MAAM;YACrC,eAAe,eAAe,MAAM;YACpC,eAAe,CAAC,GAAG,CAAC,oBAAoB;YACxC,KAAK,CACN,CAAA;IACH,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAEtE,OAAO,CACL,oBAAoB,cAAc,aAAa,iBAAiB,OAAO;QACvE,eAAe,CAAC,uCAAuC;QACvD,kBAAkB;QAClB,OAAO,QAAQ,IAAI;QACnB,UAAU,SAAS,OAAO,CAC3B,CAAA;AACH,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper';
|
|
2
|
-
export declare function generateRouterFunction({ model, enums, relativeClientPath, }: {
|
|
2
|
+
export declare function generateRouterFunction({ model, enums, relativeClientPath, guardShapesImport, }: {
|
|
3
3
|
model: DMMF.Model;
|
|
4
4
|
enums: DMMF.DatamodelEnum[];
|
|
5
5
|
relativeClientPath: string;
|
|
6
|
+
guardShapesImport: string | null;
|
|
6
7
|
}): string;
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateRouterFunction = generateRouterFunction;
|
|
4
4
|
const strings_1 = require("../utils/strings");
|
|
5
|
-
|
|
5
|
+
const generateRouteConfigType_1 = require("./generateRouteConfigType");
|
|
6
|
+
function generateRouterFunction({ model, enums, relativeClientPath, guardShapesImport, }) {
|
|
6
7
|
const modelName = model.name;
|
|
7
8
|
const prefix = (0, strings_1.toCamelCase)(modelName);
|
|
8
9
|
const modelNameLower = modelName.toLowerCase();
|
|
@@ -53,6 +54,7 @@ import { sanitizeKeys } from '../misc'
|
|
|
53
54
|
import { buildModelOpenApi } from '../buildModelOpenApi'
|
|
54
55
|
import { transformResult } from '../operationRuntime'
|
|
55
56
|
|
|
57
|
+
${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'RequestHandler', guardShapesImport)}
|
|
56
58
|
const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
|
|
57
59
|
|
|
58
60
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
@@ -86,7 +88,7 @@ function getQueryBuilderConfig(config: RouteConfig) {
|
|
|
86
88
|
return {}
|
|
87
89
|
}
|
|
88
90
|
|
|
89
|
-
export function ${routerFunctionName}(config: RouteConfig = {}) {
|
|
91
|
+
export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteConfig<TCtx> = {}) {
|
|
90
92
|
const router = express.Router()
|
|
91
93
|
|
|
92
94
|
router.use(express.json())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper';
|
|
2
|
-
export declare function generateFastifyRouterFunction({ model, enums, }: {
|
|
2
|
+
export declare function generateFastifyRouterFunction({ model, enums, guardShapesImport, }: {
|
|
3
3
|
model: DMMF.Model;
|
|
4
4
|
enums: DMMF.DatamodelEnum[];
|
|
5
|
+
guardShapesImport: string | null;
|
|
5
6
|
}): string;
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateFastifyRouterFunction = generateFastifyRouterFunction;
|
|
4
4
|
const strings_1 = require("../utils/strings");
|
|
5
|
-
|
|
5
|
+
const generateRouteConfigType_1 = require("./generateRouteConfigType");
|
|
6
|
+
function generateFastifyRouterFunction({ model, enums, guardShapesImport, }) {
|
|
6
7
|
const modelName = model.name;
|
|
7
8
|
const prefix = (0, strings_1.toCamelCase)(modelName);
|
|
8
9
|
const modelNameLower = modelName.toLowerCase();
|
|
@@ -52,6 +53,7 @@ import { sanitizeKeys } from '../misc'
|
|
|
52
53
|
import { buildModelOpenApi } from '../buildModelOpenApi'
|
|
53
54
|
import { mapError, transformResult, HttpError } from '../operationRuntime'
|
|
54
55
|
|
|
56
|
+
${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'FastifyHookHandler', guardShapesImport)}
|
|
55
57
|
const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
|
|
56
58
|
|
|
57
59
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
@@ -145,9 +147,9 @@ function sendError(reply: FastifyReply, error: unknown): void {
|
|
|
145
147
|
reply.code(httpError.status).send({ message: httpError.message })
|
|
146
148
|
}
|
|
147
149
|
|
|
148
|
-
export async function ${routerFunctionName}(
|
|
150
|
+
export async function ${routerFunctionName}<TCtx = unknown>(
|
|
149
151
|
fastify: FastifyInstance,
|
|
150
|
-
config: RouteConfig = {},
|
|
152
|
+
config: ${modelName}RouteConfig<TCtx> = {},
|
|
151
153
|
) {
|
|
152
154
|
const customPrefix = normalizePrefix(config.customUrlPrefix || '')
|
|
153
155
|
const modelPrefix = config.addModelPrefix !== false ? '/${modelNameLower}' : ''
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -51,9 +51,6 @@ function getTarget(options) {
|
|
|
51
51
|
});
|
|
52
52
|
const modelNames = [];
|
|
53
53
|
const generateHandler = target === 'fastify' ? generateFastifyHandler_1.generateFastifyHandler : generateUnifiedHandler_1.generateUnifiedHandler;
|
|
54
|
-
const generateRouter = target === 'fastify'
|
|
55
|
-
? generateRouterFastify_1.generateFastifyRouterFunction
|
|
56
|
-
: generateRouter_1.generateRouterFunction;
|
|
57
54
|
for (const model of options.dmmf.datamodel.models) {
|
|
58
55
|
if (model.documentation &&
|
|
59
56
|
model.documentation.includes('generator off')) {
|
|
@@ -62,6 +59,7 @@ function getTarget(options) {
|
|
|
62
59
|
}
|
|
63
60
|
modelNames.push(model.name);
|
|
64
61
|
const relativeClientPath = (0, generateImportPrismaStatement_1.getRelativeClientPath)(options, model.name);
|
|
62
|
+
const guardShapesImport = (0, generateImportPrismaStatement_1.getGuardShapesImport)(options, model.name);
|
|
65
63
|
await (0, writeFileSafely_1.writeFileSafely)({
|
|
66
64
|
content: (0, generateOperationCore_1.generateModelCore)({ model: model }),
|
|
67
65
|
options,
|
|
@@ -76,12 +74,20 @@ function getTarget(options) {
|
|
|
76
74
|
model: model,
|
|
77
75
|
operation: 'Handlers',
|
|
78
76
|
});
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
const routerContent = target === 'fastify'
|
|
78
|
+
? (0, generateRouterFastify_1.generateFastifyRouterFunction)({
|
|
79
|
+
model: model,
|
|
80
|
+
enums: options.dmmf.datamodel.enums,
|
|
81
|
+
guardShapesImport,
|
|
82
|
+
})
|
|
83
|
+
: (0, generateRouter_1.generateRouterFunction)({
|
|
81
84
|
model: model,
|
|
82
85
|
enums: options.dmmf.datamodel.enums,
|
|
83
86
|
relativeClientPath,
|
|
84
|
-
|
|
87
|
+
guardShapesImport,
|
|
88
|
+
});
|
|
89
|
+
await (0, writeFileSafely_1.writeFileSafely)({
|
|
90
|
+
content: routerContent,
|
|
85
91
|
options,
|
|
86
92
|
model: model,
|
|
87
93
|
operation: 'Router',
|
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,gEAAoE;AACpE,8EAAkF;AAClF,kFAA8E;AAC9E,0EAAsE;AACtE,wFAAoF;AACpF,8EAG2C;AAC3C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -9,6 +9,8 @@ import {
|
|
|
9
9
|
|
|
10
10
|
export type { QueryBuilderConfig, OpenApiServerConfig, OpenApiSecuritySchemeConfig }
|
|
11
11
|
|
|
12
|
-
export type OperationConfig =
|
|
12
|
+
export type OperationConfig<TShape = Record<string, any>> =
|
|
13
|
+
BaseOperationConfig<RequestHandler, TShape>
|
|
13
14
|
|
|
14
|
-
export type RouteConfig =
|
|
15
|
+
export type RouteConfig<TShape = Record<string, any>> =
|
|
16
|
+
BaseRouteConfig<RequestHandler, Request, TShape>
|
|
@@ -14,6 +14,8 @@ export type FastifyHookHandler = (
|
|
|
14
14
|
reply: FastifyReply,
|
|
15
15
|
) => Promise<void> | void
|
|
16
16
|
|
|
17
|
-
export type OperationConfig =
|
|
17
|
+
export type OperationConfig<TShape = Record<string, any>> =
|
|
18
|
+
BaseOperationConfig<FastifyHookHandler, TShape>
|
|
18
19
|
|
|
19
|
-
export type RouteConfig =
|
|
20
|
+
export type RouteConfig<TShape = Record<string, any>> =
|
|
21
|
+
BaseRouteConfig<FastifyHookHandler, FastifyRequest, TShape>
|
package/src/copy/routeConfig.ts
CHANGED
|
@@ -20,13 +20,13 @@ export interface OpenApiSecuritySchemeConfig {
|
|
|
20
20
|
description?: string
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export interface BaseOperationConfig<HookHandler
|
|
23
|
+
export interface BaseOperationConfig<HookHandler, TShape = Record<string, any>> {
|
|
24
24
|
before?: HookHandler[]
|
|
25
25
|
after?: HookHandler[]
|
|
26
|
-
shape?:
|
|
26
|
+
shape?: TShape
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
export interface BaseRouteConfig<HookHandler, RequestType
|
|
29
|
+
export interface BaseRouteConfig<HookHandler, RequestType, TShape = Record<string, any>> {
|
|
30
30
|
enableAll?: boolean
|
|
31
31
|
addModelPrefix?: boolean
|
|
32
32
|
customUrlPrefix?: string
|
|
@@ -34,45 +34,40 @@ export interface BaseRouteConfig<HookHandler, RequestType> {
|
|
|
34
34
|
disableOpenApi?: boolean
|
|
35
35
|
disablePostReads?: boolean
|
|
36
36
|
scalarCdnUrl?: string
|
|
37
|
-
|
|
38
37
|
openApiTitle?: string
|
|
39
38
|
openApiDescription?: string
|
|
40
39
|
openApiVersion?: string
|
|
41
40
|
openApiServers?: OpenApiServerConfig[]
|
|
42
41
|
openApiSecuritySchemes?: Record<string, OpenApiSecuritySchemeConfig>
|
|
43
42
|
openApiSecurity?: Record<string, string[]>[]
|
|
44
|
-
|
|
45
43
|
guard?: {
|
|
46
44
|
resolveVariant?: (request: RequestType) => string | undefined
|
|
47
45
|
variantHeader?: string
|
|
48
46
|
}
|
|
49
|
-
|
|
50
47
|
queryBuilder?: QueryBuilderConfig | false
|
|
51
|
-
|
|
52
48
|
pagination?: {
|
|
53
49
|
defaultLimit?: number
|
|
54
50
|
maxLimit?: number
|
|
55
51
|
distinctCountLimit?: number
|
|
56
52
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
groupBy?: BaseOperationConfig<HookHandler>
|
|
53
|
+
findUnique?: BaseOperationConfig<HookHandler, TShape>
|
|
54
|
+
findUniqueOrThrow?: BaseOperationConfig<HookHandler, TShape>
|
|
55
|
+
findFirst?: BaseOperationConfig<HookHandler, TShape>
|
|
56
|
+
findFirstOrThrow?: BaseOperationConfig<HookHandler, TShape>
|
|
57
|
+
findMany?: BaseOperationConfig<HookHandler, TShape>
|
|
58
|
+
findManyPaginated?: BaseOperationConfig<HookHandler, TShape>
|
|
59
|
+
create?: BaseOperationConfig<HookHandler, TShape>
|
|
60
|
+
createMany?: BaseOperationConfig<HookHandler, TShape>
|
|
61
|
+
createManyAndReturn?: BaseOperationConfig<HookHandler, TShape>
|
|
62
|
+
update?: BaseOperationConfig<HookHandler, TShape>
|
|
63
|
+
updateMany?: BaseOperationConfig<HookHandler, TShape>
|
|
64
|
+
updateManyAndReturn?: BaseOperationConfig<HookHandler, TShape>
|
|
65
|
+
upsert?: BaseOperationConfig<HookHandler, TShape>
|
|
66
|
+
delete?: BaseOperationConfig<HookHandler, TShape>
|
|
67
|
+
deleteMany?: BaseOperationConfig<HookHandler, TShape>
|
|
68
|
+
aggregate?: BaseOperationConfig<HookHandler, TShape>
|
|
69
|
+
count?: BaseOperationConfig<HookHandler, TShape>
|
|
70
|
+
groupBy?: BaseOperationConfig<HookHandler, TShape>
|
|
76
71
|
}
|
|
77
72
|
|
|
78
73
|
export type OperationConfig = BaseOperationConfig<any>
|
|
@@ -75,4 +75,38 @@ export function getRelativeClientPath(
|
|
|
75
75
|
const routerDirPath = path.join(outputValue, modelName)
|
|
76
76
|
|
|
77
77
|
return getRelativeImportPath(routerDirPath, clientGenerator.output.value)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function findGuardGenerator(options: GeneratorOptions) {
|
|
81
|
+
const byProvider = options.otherGenerators.find(
|
|
82
|
+
(gen) =>
|
|
83
|
+
!!gen.provider?.value && gen.provider.value.includes('prisma-guard'),
|
|
84
|
+
)
|
|
85
|
+
if (byProvider) return byProvider
|
|
86
|
+
|
|
87
|
+
const byConfig = options.otherGenerators.find(
|
|
88
|
+
(gen) =>
|
|
89
|
+
!!gen.config &&
|
|
90
|
+
('typedGuardShapes' in gen.config ||
|
|
91
|
+
'onInvalidZod' in gen.config ||
|
|
92
|
+
'findUniqueMode' in gen.config),
|
|
93
|
+
)
|
|
94
|
+
return byConfig || null
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function getGuardShapesImport(
|
|
98
|
+
options: GeneratorOptions,
|
|
99
|
+
modelName: string,
|
|
100
|
+
): string | null {
|
|
101
|
+
const guard = findGuardGenerator(options)
|
|
102
|
+
if (!guard || !guard.output?.value) return null
|
|
103
|
+
|
|
104
|
+
if (guard.config?.typedGuardShapes === 'false') return null
|
|
105
|
+
|
|
106
|
+
const outputValue = options.generator.output?.value
|
|
107
|
+
if (!outputValue) return null
|
|
108
|
+
|
|
109
|
+
const fromDir = path.join(outputValue, modelName)
|
|
110
|
+
const shapesPath = path.join(guard.output.value, 'shapes')
|
|
111
|
+
return getRelativeImportPath(fromDir, shapesPath)
|
|
78
112
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
const ROUTER_OPERATIONS = [
|
|
2
|
+
'findUnique',
|
|
3
|
+
'findUniqueOrThrow',
|
|
4
|
+
'findFirst',
|
|
5
|
+
'findFirstOrThrow',
|
|
6
|
+
'findMany',
|
|
7
|
+
'findManyPaginated',
|
|
8
|
+
'count',
|
|
9
|
+
'aggregate',
|
|
10
|
+
'groupBy',
|
|
11
|
+
'create',
|
|
12
|
+
'createMany',
|
|
13
|
+
'createManyAndReturn',
|
|
14
|
+
'update',
|
|
15
|
+
'updateMany',
|
|
16
|
+
'updateManyAndReturn',
|
|
17
|
+
'upsert',
|
|
18
|
+
'delete',
|
|
19
|
+
'deleteMany',
|
|
20
|
+
] as const
|
|
21
|
+
|
|
22
|
+
type RouterOperation = (typeof ROUTER_OPERATIONS)[number]
|
|
23
|
+
|
|
24
|
+
const ROUTER_OP_TO_SHAPE_OP: Record<RouterOperation, string> = {
|
|
25
|
+
findUnique: 'findUnique',
|
|
26
|
+
findUniqueOrThrow: 'findUniqueOrThrow',
|
|
27
|
+
findFirst: 'findFirst',
|
|
28
|
+
findFirstOrThrow: 'findFirstOrThrow',
|
|
29
|
+
findMany: 'findMany',
|
|
30
|
+
findManyPaginated: 'findManyPaginated',
|
|
31
|
+
count: 'count',
|
|
32
|
+
aggregate: 'aggregate',
|
|
33
|
+
groupBy: 'groupBy',
|
|
34
|
+
create: 'create',
|
|
35
|
+
createMany: 'createMany',
|
|
36
|
+
createManyAndReturn: 'createManyAndReturn',
|
|
37
|
+
update: 'update',
|
|
38
|
+
updateMany: 'updateMany',
|
|
39
|
+
updateManyAndReturn: 'updateManyAndReturn',
|
|
40
|
+
upsert: 'upsert',
|
|
41
|
+
delete: 'delete',
|
|
42
|
+
deleteMany: 'deleteMany',
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function capitalize(s: string): string {
|
|
46
|
+
return s.charAt(0).toUpperCase() + s.slice(1)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function generateRouteConfigType(
|
|
50
|
+
modelName: string,
|
|
51
|
+
hookHandlerType: string,
|
|
52
|
+
guardShapesImport: string | null,
|
|
53
|
+
): string {
|
|
54
|
+
const m = modelName
|
|
55
|
+
|
|
56
|
+
if (!guardShapesImport) {
|
|
57
|
+
return `export type ${m}RouteConfig<TCtx = unknown> = RouteConfig\n`
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const shapeOps = Object.values(ROUTER_OP_TO_SHAPE_OP).filter(
|
|
61
|
+
(v, i, a) => a.indexOf(v) === i,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
const opShapeImports = shapeOps
|
|
65
|
+
.map((op) => `${m}${capitalize(op)}ShapeInput`)
|
|
66
|
+
.join(',\n ')
|
|
67
|
+
|
|
68
|
+
const overrides = ROUTER_OPERATIONS.map((routerOp) => {
|
|
69
|
+
const shapeOp = ROUTER_OP_TO_SHAPE_OP[routerOp]
|
|
70
|
+
const c = capitalize(shapeOp)
|
|
71
|
+
return (
|
|
72
|
+
` ${routerOp}?: {\n` +
|
|
73
|
+
` before?: ${hookHandlerType}[]\n` +
|
|
74
|
+
` after?: ${hookHandlerType}[]\n` +
|
|
75
|
+
` shape?: ${m}${c}ShapeInput<TCtx>\n` +
|
|
76
|
+
` }`
|
|
77
|
+
)
|
|
78
|
+
}).join('\n')
|
|
79
|
+
|
|
80
|
+
const omitKeys = ROUTER_OPERATIONS.map((k) => `'${k}'`).join('\n | ')
|
|
81
|
+
|
|
82
|
+
return (
|
|
83
|
+
`import type {\n ${opShapeImports}\n} from '${guardShapesImport}'\n\n` +
|
|
84
|
+
`export type ${m}RouteConfig<TCtx = unknown> = Omit<\n` +
|
|
85
|
+
` RouteConfig,\n` +
|
|
86
|
+
` | ${omitKeys}\n` +
|
|
87
|
+
`> & {\n${overrides}\n}\n`
|
|
88
|
+
)
|
|
89
|
+
}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper'
|
|
2
2
|
import { toCamelCase } from '../utils/strings'
|
|
3
|
+
import { generateRouteConfigType } from './generateRouteConfigType'
|
|
3
4
|
|
|
4
5
|
export function generateRouterFunction({
|
|
5
6
|
model,
|
|
6
7
|
enums,
|
|
7
8
|
relativeClientPath,
|
|
9
|
+
guardShapesImport,
|
|
8
10
|
}: {
|
|
9
11
|
model: DMMF.Model
|
|
10
12
|
enums: DMMF.DatamodelEnum[]
|
|
11
13
|
relativeClientPath: string
|
|
14
|
+
guardShapesImport: string | null
|
|
12
15
|
}): string {
|
|
13
16
|
const modelName = model.name
|
|
14
17
|
const prefix = toCamelCase(modelName)
|
|
@@ -66,6 +69,7 @@ import { sanitizeKeys } from '../misc'
|
|
|
66
69
|
import { buildModelOpenApi } from '../buildModelOpenApi'
|
|
67
70
|
import { transformResult } from '../operationRuntime'
|
|
68
71
|
|
|
72
|
+
${generateRouteConfigType(modelName, 'RequestHandler', guardShapesImport)}
|
|
69
73
|
const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
|
|
70
74
|
|
|
71
75
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
@@ -99,7 +103,7 @@ function getQueryBuilderConfig(config: RouteConfig) {
|
|
|
99
103
|
return {}
|
|
100
104
|
}
|
|
101
105
|
|
|
102
|
-
export function ${routerFunctionName}(config: RouteConfig = {}) {
|
|
106
|
+
export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteConfig<TCtx> = {}) {
|
|
103
107
|
const router = express.Router()
|
|
104
108
|
|
|
105
109
|
router.use(express.json())
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { DMMF } from '@prisma/generator-helper'
|
|
2
2
|
import { toCamelCase } from '../utils/strings'
|
|
3
|
+
import { generateRouteConfigType } from './generateRouteConfigType'
|
|
3
4
|
|
|
4
5
|
export function generateFastifyRouterFunction({
|
|
5
6
|
model,
|
|
6
7
|
enums,
|
|
8
|
+
guardShapesImport,
|
|
7
9
|
}: {
|
|
8
10
|
model: DMMF.Model
|
|
9
11
|
enums: DMMF.DatamodelEnum[]
|
|
12
|
+
guardShapesImport: string | null
|
|
10
13
|
}): string {
|
|
11
14
|
const modelName = model.name
|
|
12
15
|
const prefix = toCamelCase(modelName)
|
|
@@ -63,6 +66,7 @@ import { sanitizeKeys } from '../misc'
|
|
|
63
66
|
import { buildModelOpenApi } from '../buildModelOpenApi'
|
|
64
67
|
import { mapError, transformResult, HttpError } from '../operationRuntime'
|
|
65
68
|
|
|
69
|
+
${generateRouteConfigType(modelName, 'FastifyHookHandler', guardShapesImport)}
|
|
66
70
|
const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
|
|
67
71
|
|
|
68
72
|
const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
|
|
@@ -156,9 +160,9 @@ function sendError(reply: FastifyReply, error: unknown): void {
|
|
|
156
160
|
reply.code(httpError.status).send({ message: httpError.message })
|
|
157
161
|
}
|
|
158
162
|
|
|
159
|
-
export async function ${routerFunctionName}(
|
|
163
|
+
export async function ${routerFunctionName}<TCtx = unknown>(
|
|
160
164
|
fastify: FastifyInstance,
|
|
161
|
-
config: RouteConfig = {},
|
|
165
|
+
config: ${modelName}RouteConfig<TCtx> = {},
|
|
162
166
|
) {
|
|
163
167
|
const customPrefix = normalizePrefix(config.customUrlPrefix || '')
|
|
164
168
|
const modelPrefix = config.addModelPrefix !== false ? '/${modelNameLower}' : ''
|
package/src/index.ts
CHANGED
|
@@ -16,8 +16,9 @@ import {
|
|
|
16
16
|
generateModelCore,
|
|
17
17
|
} from './generators/generateOperationCore'
|
|
18
18
|
import {
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
getRelativeClientPath,
|
|
21
|
+
getGuardShapesImport,
|
|
21
22
|
} from './generators/generateImportPrismaStatement'
|
|
22
23
|
import { writeFileSafely } from './utils/writeFileSafely'
|
|
23
24
|
import { copyFiles } from './utils/copyFiles'
|
|
@@ -69,11 +70,6 @@ generatorHandler({
|
|
|
69
70
|
const generateHandler =
|
|
70
71
|
target === 'fastify' ? generateFastifyHandler : generateUnifiedHandler
|
|
71
72
|
|
|
72
|
-
const generateRouter =
|
|
73
|
-
target === 'fastify'
|
|
74
|
-
? generateFastifyRouterFunction
|
|
75
|
-
: generateRouterFunction
|
|
76
|
-
|
|
77
73
|
for (const model of options.dmmf.datamodel.models) {
|
|
78
74
|
if (
|
|
79
75
|
model.documentation &&
|
|
@@ -86,6 +82,7 @@ generatorHandler({
|
|
|
86
82
|
modelNames.push(model.name)
|
|
87
83
|
|
|
88
84
|
const relativeClientPath = getRelativeClientPath(options, model.name)
|
|
85
|
+
const guardShapesImport = getGuardShapesImport(options, model.name)
|
|
89
86
|
|
|
90
87
|
await writeFileSafely({
|
|
91
88
|
content: generateModelCore({ model: model as DMMF.Model }),
|
|
@@ -103,12 +100,22 @@ generatorHandler({
|
|
|
103
100
|
operation: 'Handlers',
|
|
104
101
|
})
|
|
105
102
|
|
|
103
|
+
const routerContent =
|
|
104
|
+
target === 'fastify'
|
|
105
|
+
? generateFastifyRouterFunction({
|
|
106
|
+
model: model as DMMF.Model,
|
|
107
|
+
enums: options.dmmf.datamodel.enums as DMMF.DatamodelEnum[],
|
|
108
|
+
guardShapesImport,
|
|
109
|
+
})
|
|
110
|
+
: generateRouterFunction({
|
|
111
|
+
model: model as DMMF.Model,
|
|
112
|
+
enums: options.dmmf.datamodel.enums as DMMF.DatamodelEnum[],
|
|
113
|
+
relativeClientPath,
|
|
114
|
+
guardShapesImport,
|
|
115
|
+
})
|
|
116
|
+
|
|
106
117
|
await writeFileSafely({
|
|
107
|
-
content:
|
|
108
|
-
model: model as DMMF.Model,
|
|
109
|
-
enums: options.dmmf.datamodel.enums as DMMF.DatamodelEnum[],
|
|
110
|
-
relativeClientPath,
|
|
111
|
-
}),
|
|
118
|
+
content: routerContent,
|
|
112
119
|
options,
|
|
113
120
|
model: model as DMMF.Model,
|
|
114
121
|
operation: 'Router',
|