prisma-generator-express 1.7.2 → 1.8.1

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 CHANGED
@@ -111,38 +111,67 @@ The `UserFindUnique` function will fetch the user details from the database, val
111
111
  The library will create functions to generate routers per each model in schema. Each route can accept middleware that will be injected right before generated handler is invoked. You can use it to modify/remove/validate request payload. The output validation can be also attached to `req` object on this step.
112
112
 
113
113
  ```ts
114
- import express from 'express'
115
- import { UserRouter } from './path/to/generated/UserRouter' // Adjust the path as necessary
116
- import { UserFindManyArgs } from './prisma-zod-generator/schemas/UserFindManyArgs.schema' // Adjust the path as necessary
114
+ import express, { json } from 'express'
115
+ import type { Response, Request, NextFunction, RequestHandler } from 'express'
116
+
117
+ import { orderItemRouter } from '../prisma/generated/express/orderItem'
118
+ import RouteConfig from '../prisma/generated/express/RouteConfig'
119
+ import { PrismaClient } from '../prisma/generated/client'
117
120
 
118
121
  const app = express()
119
122
 
120
- export const validateUserQuery = (
123
+ const prisma = new PrismaClient()
124
+
125
+ /**
126
+ * Middleware to attach Prisma client instance to the request object.
127
+ * This ensures that Prisma client is available in all subsequent middleware and route handlers.
128
+ */
129
+ const addPrisma: RequestHandler = (
121
130
  req: Request,
122
131
  res: Response,
123
132
  next: NextFunction,
124
133
  ) => {
125
- try {
126
- UserFindManyArgs.parse(req.query)
127
- next()
128
- } catch (error) {
129
- if (error instanceof ZodError) {
130
- return res.status(400).json({
131
- message: 'Validation failed',
132
- errors: error.errors,
133
- })
134
- }
135
- next(error)
136
- }
134
+ req.prisma = prisma
135
+ req.omitOutputValidation = true
136
+ next()
137
+ }
138
+
139
+ /**
140
+ * Before middleware to set a custom property on the request object.
141
+ * Demonstrates how to add custom properties to the request object to be used in later middleware or route handlers.
142
+ */
143
+ const beforeFindMany: RequestHandler = (
144
+ req: Request,
145
+ res: Response,
146
+ next: NextFunction,
147
+ ) => {
148
+ ;(req as any).passToNext = true
149
+ next()
150
+ }
151
+
152
+ /**
153
+ * After middleware placeholder for any post-processing after the main route handler.
154
+ * This example just calls next() but can be extended to perform actions like logging or response modification.
155
+ */
156
+ const afterFindMany: RequestHandler = (
157
+ req: Request,
158
+ res: Response,
159
+ next: NextFunction,
160
+ ) => {
161
+ console.log('req.locals?.data :>> ', req.locals?.data)
162
+ next()
137
163
  }
138
164
 
139
- const userRouterConfig = {
140
- findManyMiddleware: [validateUserQuery], // Add other middleware as needed
141
- findUniqueMiddleware: undefined, // This can be omitted, route won't be generated if middleware is not provided
165
+ const someRouterConfig: RouteConfig<RequestHandler> = {
166
+ findMany: {
167
+ before: [beforeFindMany],
168
+ after: [afterFindMany],
169
+ },
170
+ addModelPrefix: true,
171
+ enableAll: true,
142
172
  }
143
173
 
144
- // Use the router in your application
145
- app.use('/users', UserRouter(userRouterConfig))
174
+ app.use(addPrisma, orderItemRouter(someRouterConfig))
146
175
 
147
176
  app.listen(3000, () => {
148
177
  console.log('Server is running on http://localhost:3000')
package/dist/generator.js CHANGED
@@ -19,6 +19,7 @@ const generateDeleteMany_1 = require("./helpers/generateDeleteMany");
19
19
  const generateAggregate_1 = require("./helpers/generateAggregate");
20
20
  const generateCount_1 = require("./helpers/generateCount");
21
21
  const generateGroupBy_1 = require("./helpers/generateGroupBy");
22
+ const generateRouteConfigType_1 = require("./helpers/generateRouteConfigType");
22
23
  const { version } = require('../package.json');
23
24
  (0, generator_helper_1.generatorHandler)({
24
25
  onManifest() {
@@ -156,6 +157,11 @@ const { version } = require('../package.json');
156
157
  operation: 'index',
157
158
  });
158
159
  }
160
+ await (0, writeFileSafely_1.writeFileSafely)({
161
+ content: (0, generateRouteConfigType_1.generateRouteConfigType)(),
162
+ options,
163
+ operation: 'RouteConfig',
164
+ });
159
165
  },
160
166
  });
161
167
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRouteConfigType = void 0;
4
+ function generateRouteConfigType() {
5
+ return `import { RequestHandler } from 'express';
6
+
7
+ interface MiddlewareConfig<M> {
8
+ before?: M[];
9
+ after?: RequestHandler[];
10
+ }
11
+
12
+ export interface RouteConfig<M> {
13
+ findFirst?: MiddlewareConfig<M>;
14
+ findMany?: MiddlewareConfig<M>;
15
+ findUnique?: MiddlewareConfig<M>;
16
+ create?: MiddlewareConfig<M>;
17
+ createMany?: MiddlewareConfig<M>;
18
+ update?: MiddlewareConfig<M>;
19
+ updateMany?: MiddlewareConfig<M>;
20
+ upsert?: MiddlewareConfig<M>;
21
+ delete?: MiddlewareConfig<M>;
22
+ deleteMany?: MiddlewareConfig<M>;
23
+ aggregate?: MiddlewareConfig<M>;
24
+ count?: MiddlewareConfig<M>;
25
+ groupBy?: MiddlewareConfig<M>;
26
+ addModelPrefix?: boolean;
27
+ enableAll?: boolean;
28
+ }
29
+
30
+ export default RouteConfig;`;
31
+ }
32
+ exports.generateRouteConfigType = generateRouteConfigType;
33
+ //# sourceMappingURL=generateRouteConfigType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/helpers/generateRouteConfigType.ts"],"names":[],"mappings":";;;AAAA,SAAgB,uBAAuB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;8BAyBqB,CAAA;AAC9B,CAAC;AA3BD,0DA2BC"}
@@ -6,171 +6,146 @@ function generateRouterFunction({ model, }) {
6
6
  const routerFunctionName = `${modelName}Router`;
7
7
  return `
8
8
  import express, { RequestHandler } from 'express';
9
- import { ${modelName}FindFirst, type FindFirstMiddleware } from './${modelName}FindFirst';
10
- import { ${modelName}FindMany, type FindManyMiddleware } from './${modelName}FindMany';
11
- import { ${modelName}FindUnique, type FindUniqueMiddleware } from './${modelName}FindUnique';
12
- import { ${modelName}Create, type CreateMiddleware } from './${modelName}Create';
13
- import { ${modelName}CreateMany, type CreateManyMiddleware } from './${modelName}CreateMany';
14
- import { ${modelName}Update, type UpdateMiddleware } from './${modelName}Update';
15
- import { ${modelName}UpdateMany, type UpdateManyMiddleware } from './${modelName}UpdateMany';
16
- import { ${modelName}Upsert, type UpsertMiddleware } from './${modelName}Upsert';
17
- import { ${modelName}Delete, type DeleteMiddleware } from './${modelName}Delete';
18
- import { ${modelName}DeleteMany, type DeleteManyMiddleware } from './${modelName}DeleteMany';
19
- import { ${modelName}Aggregate, type AggregateMiddleware } from './${modelName}Aggregate';
20
- import { ${modelName}Count, type CountMiddleware } from './${modelName}Count';
21
- import { ${modelName}GroupBy, type GroupByMiddleware } from './${modelName}GroupBy';
22
-
23
- interface RouteConfig {
24
- findFirstMiddleware?: FindFirstMiddleware[]
25
- findFirstNextMiddleware?: RequestHandler[]
26
-
27
- findManyMiddleware?: FindManyMiddleware[]
28
- findManyNextMiddleware?: RequestHandler[]
29
-
30
- findUniqueMiddleware?: FindUniqueMiddleware[]
31
- findUniqueNextMiddleware?: RequestHandler[]
32
-
33
- createMiddleware?: CreateMiddleware[]
34
- createNextMiddleware?: RequestHandler[]
35
-
36
- createManyMiddleware?: CreateManyMiddleware[]
37
- createManyNextMiddleware?: RequestHandler[]
38
-
39
- updateMiddleware?: UpdateMiddleware[]
40
- updateNextMiddleware?: RequestHandler[]
41
-
42
- updateManyMiddleware?: UpdateManyMiddleware[]
43
- updateManyNextMiddleware?: RequestHandler[]
44
-
45
- upsertMiddleware?: UpsertMiddleware[]
46
- upsertNextMiddleware?: RequestHandler[]
47
-
48
- deleteMiddleware?: DeleteMiddleware[]
49
- deleteNextMiddleware?: RequestHandler[]
50
-
51
- deleteManyMiddleware?: DeleteManyMiddleware[]
52
- deleteManyNextMiddleware?: RequestHandler[]
53
-
54
- aggregateMiddleware?: AggregateMiddleware[]
55
- aggregateNextMiddleware?: RequestHandler[]
56
-
57
- countMiddleware?: CountMiddleware[]
58
- countNextMiddleware?: RequestHandler[]
59
-
60
- groupByMiddleware?: GroupByMiddleware[]
61
- groupByNextMiddleware?: RequestHandler[]
62
- }
9
+ import { ${modelName}FindFirst } from './${modelName}FindFirst';
10
+ import { ${modelName}FindMany } from './${modelName}FindMany';
11
+ import { ${modelName}FindUnique } from './${modelName}FindUnique';
12
+ import { ${modelName}Create } from './${modelName}Create';
13
+ import { ${modelName}CreateMany } from './${modelName}CreateMany';
14
+ import { ${modelName}Update } from './${modelName}Update';
15
+ import { ${modelName}UpdateMany } from './${modelName}UpdateMany';
16
+ import { ${modelName}Upsert } from './${modelName}Upsert';
17
+ import { ${modelName}Delete } from './${modelName}Delete';
18
+ import { ${modelName}DeleteMany } from './${modelName}DeleteMany';
19
+ import { ${modelName}Aggregate } from './${modelName}Aggregate';
20
+ import { ${modelName}Count } from './${modelName}Count';
21
+ import { ${modelName}GroupBy } from './${modelName}GroupBy';
22
+ import { RouteConfig } from "../RouteConfig";
23
+
24
+ const defaultBeforeAfter = {
25
+ before: [] as RequestHandler[],
26
+ after: [] as RequestHandler[],
27
+ };
63
28
 
64
29
  /**
65
30
  * Generates an Express router for ${modelName} model.
66
31
  * @param config Contains optional middleware to enable routes.
67
32
  * @returns {express.Router}
68
33
  */
69
- export function ${routerFunctionName}(config: RouteConfig) {
34
+ export function ${routerFunctionName}(config: RouteConfig<RequestHandler>) {
70
35
  const router = express.Router();
71
-
72
- if (config?.findFirstMiddleware && config?.findFirstMiddleware.length) {
73
- const middlewares = [...config.findFirstMiddleware, ${modelName}FindFirst]
74
- if (config.findFirstNextMiddleware) {
75
- middlewares.push(...config.findFirstNextMiddleware);
36
+ const basePath = config.addModelPrefix ? '/${modelName.toLowerCase()}' : '';
37
+
38
+ const setupRoute = (
39
+ path: string,
40
+ method: "all" | "get" | "post" | "put" | "delete" | "patch" | "options" | "head",
41
+ middlewares: RequestHandler[],
42
+ handler: RequestHandler
43
+ ) => {
44
+ router[method](basePath + path, ...middlewares, handler);
45
+ };
46
+
47
+ if (config.enableAll || config?.findFirst) {
48
+ const { before = [], after = [] } = config.findFirst || defaultBeforeAfter;
49
+ setupRoute('/first', 'get', before, ${modelName}FindFirst as RequestHandler);
50
+ if (after.length) {
51
+ router.use(basePath + '/first', ...after);
76
52
  }
77
- router.get('/first', ...middlewares as FindFirstMiddleware[]);
78
53
  }
79
54
 
80
- if (config?.findManyMiddleware && config?.findManyMiddleware.length) {
81
- const middlewares = [...config.findManyMiddleware, ${modelName}FindMany]
82
- if (config.findManyNextMiddleware) {
83
- middlewares.push(...config.findManyNextMiddleware);
55
+ if (config.enableAll || config?.findMany) {
56
+ const { before = [], after = [] } = config.findMany || defaultBeforeAfter;
57
+ setupRoute('/', 'get', before, ${modelName}FindMany as RequestHandler);
58
+ if (after.length) {
59
+ router.use(basePath + '/', ...after);
84
60
  }
85
- router.get('/', ...middlewares as FindManyMiddleware[]);
86
61
  }
87
62
 
88
- if (config?.findUniqueMiddleware && config?.findUniqueMiddleware.length) {
89
- const middlewares = [...config.findUniqueMiddleware, ${modelName}FindUnique]
90
- if (config.findUniqueNextMiddleware) {
91
- middlewares.push(...config.findUniqueNextMiddleware);
63
+ if (config.enableAll || config?.findUnique) {
64
+ const { before = [], after = [] } = config.findUnique || defaultBeforeAfter;
65
+ setupRoute('/:id', 'get', before, ${modelName}FindUnique as any);
66
+ if (after.length) {
67
+ router.use(basePath + '/:id', ...after);
92
68
  }
93
- router.get('/:id', ...middlewares as FindUniqueMiddleware[]);
94
69
  }
95
70
 
96
- if (config?.createMiddleware && config?.createMiddleware.length) {
97
- const middlewares = [...config.createMiddleware, ${modelName}Create]
98
- if (config.createNextMiddleware) {
99
- middlewares.push(...config.createNextMiddleware);
71
+ if (config.enableAll || config?.create) {
72
+ const { before = [], after = [] } = config.create || defaultBeforeAfter;
73
+ setupRoute('/', 'post', before, ${modelName}Create as RequestHandler);
74
+ if (after.length) {
75
+ router.use(basePath + '/', ...after);
100
76
  }
101
- router.post('/', ...middlewares as CreateMiddleware[]);
102
77
  }
103
78
 
104
- if (config?.createManyMiddleware && config?.createManyMiddleware.length) {
105
- const middlewares = [...config.createManyMiddleware, ${modelName}CreateMany]
106
- if (config.createManyNextMiddleware) {
107
- middlewares.push(...config.createManyNextMiddleware);
79
+ if (config.enableAll || config?.createMany) {
80
+ const { before = [], after = [] } = config.createMany || defaultBeforeAfter;
81
+ setupRoute('/many', 'post', before, ${modelName}CreateMany as RequestHandler);
82
+ if (after.length) {
83
+ router.use(basePath + '/many', ...after);
108
84
  }
109
- router.post('/many', ...middlewares as CreateManyMiddleware[]);
110
85
  }
111
86
 
112
- if (config?.updateMiddleware && config?.updateMiddleware.length) {
113
- const middlewares = [...config.updateMiddleware, ${modelName}Update]
114
- if (config.updateNextMiddleware) {
115
- middlewares.push(...config.updateNextMiddleware);
87
+ if (config.enableAll || config?.update) {
88
+ const { before = [], after = [] } = config.update || defaultBeforeAfter;
89
+ setupRoute('/', 'put', before, ${modelName}Update as RequestHandler);
90
+ if (after.length) {
91
+ router.use(basePath + '/', ...after);
116
92
  }
117
- router.put('/', ...middlewares as UpdateMiddleware[]);
118
93
  }
119
94
 
120
- if (config?.updateManyMiddleware && config?.updateManyMiddleware.length) {
121
- const middlewares = [...config.updateManyMiddleware, ${modelName}UpdateMany]
122
- if (config.updateManyNextMiddleware) {
123
- middlewares.push(...config.updateManyNextMiddleware);
95
+ if (config.enableAll || config?.updateMany) {
96
+ const { before = [], after = [] } = config.updateMany || defaultBeforeAfter;
97
+ setupRoute('/many', 'put', before, ${modelName}UpdateMany as RequestHandler);
98
+ if (after.length) {
99
+ router.use(basePath + '/many', ...after);
124
100
  }
125
- router.put('/many', ...middlewares as UpdateManyMiddleware[]);
126
101
  }
127
102
 
128
- if (config?.upsertMiddleware && config?.upsertMiddleware.length) {
129
- const middlewares = [...config.upsertMiddleware, ${modelName}Upsert]
130
- if (config.upsertNextMiddleware) {
131
- middlewares.push(...config.upsertNextMiddleware);
103
+ if (config.enableAll || config?.upsert) {
104
+ const { before = [], after = [] } = config.upsert || defaultBeforeAfter;
105
+ setupRoute('/', 'patch', before, ${modelName}Upsert as RequestHandler);
106
+ if (after.length) {
107
+ router.use(basePath + '/', ...after);
132
108
  }
133
- router.patch('/', ...middlewares as UpsertMiddleware[]);
134
109
  }
135
110
 
136
- if (config?.deleteMiddleware && config?.deleteMiddleware.length) {
137
- const middlewares = [...config.deleteMiddleware, ${modelName}Delete]
138
- if (config.deleteNextMiddleware) {
139
- middlewares.push(...config.deleteNextMiddleware);
111
+ if (config.enableAll || config?.delete) {
112
+ const { before = [], after = [] } = config.delete || defaultBeforeAfter;
113
+ setupRoute('/', 'delete', before, ${modelName}Delete as RequestHandler);
114
+ if (after.length) {
115
+ router.use(basePath + '/', ...after);
140
116
  }
141
- router.delete('/', ...middlewares as DeleteMiddleware[]);
142
117
  }
143
118
 
144
- if (config?.deleteManyMiddleware && config?.deleteManyMiddleware.length) {
145
- const middlewares = [...config.deleteManyMiddleware, ${modelName}DeleteMany]
146
- if (config.deleteManyNextMiddleware) {
147
- middlewares.push(...config.deleteManyNextMiddleware);
119
+ if (config.enableAll || config?.deleteMany) {
120
+ const { before = [], after = [] } = config.deleteMany || defaultBeforeAfter;
121
+ setupRoute('/many', 'delete', before, ${modelName}DeleteMany as RequestHandler);
122
+ if (after.length) {
123
+ router.use(basePath + '/many', ...after);
148
124
  }
149
- router.delete('/many', ...middlewares as DeleteManyMiddleware[]);
150
125
  }
151
126
 
152
- if (config?.aggregateMiddleware && config?.aggregateMiddleware.length) {
153
- const middlewares = [...config.aggregateMiddleware, ${modelName}Aggregate]
154
- if (config.aggregateNextMiddleware) {
155
- middlewares.push(...config.aggregateNextMiddleware);
127
+ if (config.enableAll || config?.aggregate) {
128
+ const { before = [], after = [] } = config.aggregate || defaultBeforeAfter;
129
+ setupRoute('/aggregate', 'get', before, ${modelName}Aggregate as RequestHandler);
130
+ if (after.length) {
131
+ router.use(basePath + '/aggregate', ...after);
156
132
  }
157
- router.get('/aggregate', ...middlewares as AggregateMiddleware[]);
158
133
  }
159
134
 
160
- if (config?.countMiddleware && config?.countMiddleware.length) {
161
- const middlewares = [...config.countMiddleware, ${modelName}Count]
162
- if (config.countNextMiddleware) {
163
- middlewares.push(...config.countNextMiddleware);
135
+ if (config.enableAll || config?.count) {
136
+ const { before = [], after = [] } = config.count || defaultBeforeAfter;
137
+ setupRoute('/count', 'get', before, ${modelName}Count as RequestHandler);
138
+ if (after.length) {
139
+ router.use(basePath + '/count', ...after);
164
140
  }
165
- router.get('/count', ...middlewares as CountMiddleware[]);
166
141
  }
167
142
 
168
- if (config?.groupByMiddleware && config?.groupByMiddleware.length) {
169
- const middlewares = [...config.groupByMiddleware, ${modelName}GroupBy]
170
- if (config.groupByNextMiddleware) {
171
- middlewares.push(...config.groupByNextMiddleware);
143
+ if (config.enableAll || config?.groupBy) {
144
+ const { before = [], after = [] } = config.groupBy || defaultBeforeAfter;
145
+ setupRoute('/groupby', 'get', before, ${modelName}GroupBy as RequestHandler);
146
+ if (after.length) {
147
+ router.use(basePath + '/groupby', ...after);
172
148
  }
173
- router.get('/groupby', ...middlewares as GroupByMiddleware[]);
174
149
  }
175
150
 
176
151
  return router;
@@ -1 +1 @@
1
- {"version":3,"file":"generateRouteFile.js","sourceRoot":"","sources":["../../src/helpers/generateRouteFile.ts"],"names":[],"mappings":";;;AAEA,SAAgB,sBAAsB,CAAC,EACrC,KAAK,GAGN;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;IAC5B,MAAM,kBAAkB,GAAG,GAAG,SAAS,QAAQ,CAAA;IAE/C,OAAO;;WAEE,SAAS,iDAAiD,SAAS;WACnE,SAAS,+CAA+C,SAAS;WACjE,SAAS,mDAAmD,SAAS;WACrE,SAAS,2CAA2C,SAAS;WAC7D,SAAS,mDAAmD,SAAS;WACrE,SAAS,2CAA2C,SAAS;WAC7D,SAAS,mDAAmD,SAAS;WACrE,SAAS,2CAA2C,SAAS;WAC7D,SAAS,2CAA2C,SAAS;WAC7D,SAAS,mDAAmD,SAAS;WACrE,SAAS,iDAAiD,SAAS;WACnE,SAAS,yCAAyC,SAAS;WAC3D,SAAS,6CAA6C,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCA4CrC,SAAS;;;;kBAI5B,kBAAkB;;;;0DAIsB,SAAS;;;;;;;;yDAQV,SAAS;;;;;;;;2DAQP,SAAS;;;;;;;;uDAQb,SAAS;;;;;;;;2DAQL,SAAS;;;;;;;;uDAQb,SAAS;;;;;;;;2DAQL,SAAS;;;;;;;;uDAQb,SAAS;;;;;;;;uDAQT,SAAS;;;;;;;;2DAQL,SAAS;;;;;;;;0DAQV,SAAS;;;;;;;;sDAQb,SAAS;;;;;;;;wDAQP,SAAS;;;;;;;;;CAShE,CAAA;AACD,CAAC;AApLD,wDAoLC"}
1
+ {"version":3,"file":"generateRouteFile.js","sourceRoot":"","sources":["../../src/helpers/generateRouteFile.ts"],"names":[],"mappings":";;;AAEA,SAAgB,sBAAsB,CAAC,EACrC,KAAK,GAGN;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;IAC5B,MAAM,kBAAkB,GAAG,GAAG,SAAS,QAAQ,CAAA;IAE/C,OAAO;;WAEE,SAAS,uBAAuB,SAAS;WACzC,SAAS,sBAAsB,SAAS;WACxC,SAAS,wBAAwB,SAAS;WAC1C,SAAS,oBAAoB,SAAS;WACtC,SAAS,wBAAwB,SAAS;WAC1C,SAAS,oBAAoB,SAAS;WACtC,SAAS,wBAAwB,SAAS;WAC1C,SAAS,oBAAoB,SAAS;WACtC,SAAS,oBAAoB,SAAS;WACtC,SAAS,wBAAwB,SAAS;WAC1C,SAAS,uBAAuB,SAAS;WACzC,SAAS,mBAAmB,SAAS;WACrC,SAAS,qBAAqB,SAAS;;;;;;;;;qCASb,SAAS;;;;kBAI5B,kBAAkB;;+CAEW,SAAS,CAAC,WAAW,EAAE;;;;;;;;;;;;;0CAa5B,SAAS;;;;;;;;qCAQd,SAAS;;;;;;;;wCAQN,SAAS;;;;;;;;sCAQX,SAAS;;;;;;;;0CAQL,SAAS;;;;;;;;qCAQd,SAAS;;;;;;;;yCAQL,SAAS;;;;;;;;uCAQX,SAAS;;;;;;;;wCAQR,SAAS;;;;;;;;4CAQL,SAAS;;;;;;;;8CAQP,SAAS;;;;;;;;0CAQb,SAAS;;;;;;;;4CAQP,SAAS;;;;;;;;CAQpD,CAAA;AACD,CAAC;AA3JD,wDA2JC"}
@@ -9,8 +9,8 @@ const path_1 = __importDefault(require("path"));
9
9
  const formatFile_1 = require("./formatFile");
10
10
  const writeFileSafely = async ({ model, operation, options, content, }) => {
11
11
  var _a;
12
- const fileName = operation === 'index' ? 'index' : `${model.name}${operation}`;
13
- const filePath = path_1.default.join((_a = options.generator.output) === null || _a === void 0 ? void 0 : _a.value, `${model.name}/${fileName}.ts`);
12
+ const fileName = operation === 'index' ? 'index' : `${(model === null || model === void 0 ? void 0 : model.name) || ''}${operation}`;
13
+ const filePath = path_1.default.join((_a = options.generator.output) === null || _a === void 0 ? void 0 : _a.value, model ? `${model === null || model === void 0 ? void 0 : model.name}/${fileName}.ts` : `/${fileName}.ts`);
14
14
  console.log('filePath :>> ', filePath);
15
15
  await promises_1.default.mkdir(path_1.default.dirname(filePath), {
16
16
  recursive: true,
@@ -1 +1 @@
1
- {"version":3,"file":"writeFileSafely.js","sourceRoot":"","sources":["../../src/utils/writeFileSafely.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA4B;AAC5B,gDAAuB;AACvB,6CAAyC;AAGlC,MAAM,eAAe,GAAG,KAAK,EAAE,EACpC,KAAK,EACL,SAAS,EACT,OAAO,EACP,OAAO,GAMR,EAAE,EAAE;;IACH,MAAM,QAAQ,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,EAAE,CAAA;IAC9E,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CACxB,MAAA,OAAO,CAAC,SAAS,CAAC,MAAM,0CAAE,KAAM,EAChC,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,KAAK,CAC/B,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IACtC,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACrC,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAA,uBAAU,EAAC,OAAO,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AAtBY,QAAA,eAAe,mBAsB3B"}
1
+ {"version":3,"file":"writeFileSafely.js","sourceRoot":"","sources":["../../src/utils/writeFileSafely.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA4B;AAC5B,gDAAuB;AACvB,6CAAyC;AAGlC,MAAM,eAAe,GAAG,KAAK,EAAE,EACpC,KAAK,EACL,SAAS,EACT,OAAO,EACP,OAAO,GAMR,EAAE,EAAE;;IACH,MAAM,QAAQ,GACZ,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,KAAI,EAAE,GAAG,SAAS,EAAE,CAAA;IACtE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CACxB,MAAA,OAAO,CAAC,SAAS,CAAC,MAAM,0CAAE,KAAM,EAChC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,IAAI,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,KAAK,CAC5D,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IACtC,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACrC,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAA,uBAAU,EAAC,OAAO,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AAvBY,QAAA,eAAe,mBAuB3B"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "prisma-generator-express",
3
3
  "description": "Prisma generator of Express CRUD API",
4
- "version": "1.7.2",
4
+ "version": "1.8.1",
5
5
  "main": "dist/generator.js",
6
6
  "license": "MIT",
7
7
  "bin": {
package/src/generator.ts CHANGED
@@ -17,6 +17,7 @@ import { generateDeleteManyFunction } from './helpers/generateDeleteMany'
17
17
  import { generateAggregateFunction } from './helpers/generateAggregate'
18
18
  import { generateCountFunction } from './helpers/generateCount'
19
19
  import { generateGroupByFunction } from './helpers/generateGroupBy'
20
+ import { generateRouteConfigType } from './helpers/generateRouteConfigType'
20
21
 
21
22
  const { version } = require('../package.json')
22
23
 
@@ -170,5 +171,11 @@ generatorHandler({
170
171
  operation: 'index',
171
172
  })
172
173
  }
174
+
175
+ await writeFileSafely({
176
+ content: generateRouteConfigType(),
177
+ options,
178
+ operation: 'RouteConfig',
179
+ })
173
180
  },
174
181
  })
@@ -0,0 +1,28 @@
1
+ export function generateRouteConfigType() {
2
+ return `import { RequestHandler } from 'express';
3
+
4
+ interface MiddlewareConfig<M> {
5
+ before?: M[];
6
+ after?: RequestHandler[];
7
+ }
8
+
9
+ export interface RouteConfig<M> {
10
+ findFirst?: MiddlewareConfig<M>;
11
+ findMany?: MiddlewareConfig<M>;
12
+ findUnique?: MiddlewareConfig<M>;
13
+ create?: MiddlewareConfig<M>;
14
+ createMany?: MiddlewareConfig<M>;
15
+ update?: MiddlewareConfig<M>;
16
+ updateMany?: MiddlewareConfig<M>;
17
+ upsert?: MiddlewareConfig<M>;
18
+ delete?: MiddlewareConfig<M>;
19
+ deleteMany?: MiddlewareConfig<M>;
20
+ aggregate?: MiddlewareConfig<M>;
21
+ count?: MiddlewareConfig<M>;
22
+ groupBy?: MiddlewareConfig<M>;
23
+ addModelPrefix?: boolean;
24
+ enableAll?: boolean;
25
+ }
26
+
27
+ export default RouteConfig;`
28
+ }
@@ -10,171 +10,146 @@ export function generateRouterFunction({
10
10
 
11
11
  return `
12
12
  import express, { RequestHandler } from 'express';
13
- import { ${modelName}FindFirst, type FindFirstMiddleware } from './${modelName}FindFirst';
14
- import { ${modelName}FindMany, type FindManyMiddleware } from './${modelName}FindMany';
15
- import { ${modelName}FindUnique, type FindUniqueMiddleware } from './${modelName}FindUnique';
16
- import { ${modelName}Create, type CreateMiddleware } from './${modelName}Create';
17
- import { ${modelName}CreateMany, type CreateManyMiddleware } from './${modelName}CreateMany';
18
- import { ${modelName}Update, type UpdateMiddleware } from './${modelName}Update';
19
- import { ${modelName}UpdateMany, type UpdateManyMiddleware } from './${modelName}UpdateMany';
20
- import { ${modelName}Upsert, type UpsertMiddleware } from './${modelName}Upsert';
21
- import { ${modelName}Delete, type DeleteMiddleware } from './${modelName}Delete';
22
- import { ${modelName}DeleteMany, type DeleteManyMiddleware } from './${modelName}DeleteMany';
23
- import { ${modelName}Aggregate, type AggregateMiddleware } from './${modelName}Aggregate';
24
- import { ${modelName}Count, type CountMiddleware } from './${modelName}Count';
25
- import { ${modelName}GroupBy, type GroupByMiddleware } from './${modelName}GroupBy';
26
-
27
- interface RouteConfig {
28
- findFirstMiddleware?: FindFirstMiddleware[]
29
- findFirstNextMiddleware?: RequestHandler[]
30
-
31
- findManyMiddleware?: FindManyMiddleware[]
32
- findManyNextMiddleware?: RequestHandler[]
33
-
34
- findUniqueMiddleware?: FindUniqueMiddleware[]
35
- findUniqueNextMiddleware?: RequestHandler[]
36
-
37
- createMiddleware?: CreateMiddleware[]
38
- createNextMiddleware?: RequestHandler[]
39
-
40
- createManyMiddleware?: CreateManyMiddleware[]
41
- createManyNextMiddleware?: RequestHandler[]
42
-
43
- updateMiddleware?: UpdateMiddleware[]
44
- updateNextMiddleware?: RequestHandler[]
45
-
46
- updateManyMiddleware?: UpdateManyMiddleware[]
47
- updateManyNextMiddleware?: RequestHandler[]
48
-
49
- upsertMiddleware?: UpsertMiddleware[]
50
- upsertNextMiddleware?: RequestHandler[]
51
-
52
- deleteMiddleware?: DeleteMiddleware[]
53
- deleteNextMiddleware?: RequestHandler[]
54
-
55
- deleteManyMiddleware?: DeleteManyMiddleware[]
56
- deleteManyNextMiddleware?: RequestHandler[]
57
-
58
- aggregateMiddleware?: AggregateMiddleware[]
59
- aggregateNextMiddleware?: RequestHandler[]
60
-
61
- countMiddleware?: CountMiddleware[]
62
- countNextMiddleware?: RequestHandler[]
63
-
64
- groupByMiddleware?: GroupByMiddleware[]
65
- groupByNextMiddleware?: RequestHandler[]
66
- }
13
+ import { ${modelName}FindFirst } from './${modelName}FindFirst';
14
+ import { ${modelName}FindMany } from './${modelName}FindMany';
15
+ import { ${modelName}FindUnique } from './${modelName}FindUnique';
16
+ import { ${modelName}Create } from './${modelName}Create';
17
+ import { ${modelName}CreateMany } from './${modelName}CreateMany';
18
+ import { ${modelName}Update } from './${modelName}Update';
19
+ import { ${modelName}UpdateMany } from './${modelName}UpdateMany';
20
+ import { ${modelName}Upsert } from './${modelName}Upsert';
21
+ import { ${modelName}Delete } from './${modelName}Delete';
22
+ import { ${modelName}DeleteMany } from './${modelName}DeleteMany';
23
+ import { ${modelName}Aggregate } from './${modelName}Aggregate';
24
+ import { ${modelName}Count } from './${modelName}Count';
25
+ import { ${modelName}GroupBy } from './${modelName}GroupBy';
26
+ import { RouteConfig } from "../RouteConfig";
27
+
28
+ const defaultBeforeAfter = {
29
+ before: [] as RequestHandler[],
30
+ after: [] as RequestHandler[],
31
+ };
67
32
 
68
33
  /**
69
34
  * Generates an Express router for ${modelName} model.
70
35
  * @param config Contains optional middleware to enable routes.
71
36
  * @returns {express.Router}
72
37
  */
73
- export function ${routerFunctionName}(config: RouteConfig) {
38
+ export function ${routerFunctionName}(config: RouteConfig<RequestHandler>) {
74
39
  const router = express.Router();
75
-
76
- if (config?.findFirstMiddleware && config?.findFirstMiddleware.length) {
77
- const middlewares = [...config.findFirstMiddleware, ${modelName}FindFirst]
78
- if (config.findFirstNextMiddleware) {
79
- middlewares.push(...config.findFirstNextMiddleware);
40
+ const basePath = config.addModelPrefix ? '/${modelName.toLowerCase()}' : '';
41
+
42
+ const setupRoute = (
43
+ path: string,
44
+ method: "all" | "get" | "post" | "put" | "delete" | "patch" | "options" | "head",
45
+ middlewares: RequestHandler[],
46
+ handler: RequestHandler
47
+ ) => {
48
+ router[method](basePath + path, ...middlewares, handler);
49
+ };
50
+
51
+ if (config.enableAll || config?.findFirst) {
52
+ const { before = [], after = [] } = config.findFirst || defaultBeforeAfter;
53
+ setupRoute('/first', 'get', before, ${modelName}FindFirst as RequestHandler);
54
+ if (after.length) {
55
+ router.use(basePath + '/first', ...after);
80
56
  }
81
- router.get('/first', ...middlewares as FindFirstMiddleware[]);
82
57
  }
83
58
 
84
- if (config?.findManyMiddleware && config?.findManyMiddleware.length) {
85
- const middlewares = [...config.findManyMiddleware, ${modelName}FindMany]
86
- if (config.findManyNextMiddleware) {
87
- middlewares.push(...config.findManyNextMiddleware);
59
+ if (config.enableAll || config?.findMany) {
60
+ const { before = [], after = [] } = config.findMany || defaultBeforeAfter;
61
+ setupRoute('/', 'get', before, ${modelName}FindMany as RequestHandler);
62
+ if (after.length) {
63
+ router.use(basePath + '/', ...after);
88
64
  }
89
- router.get('/', ...middlewares as FindManyMiddleware[]);
90
65
  }
91
66
 
92
- if (config?.findUniqueMiddleware && config?.findUniqueMiddleware.length) {
93
- const middlewares = [...config.findUniqueMiddleware, ${modelName}FindUnique]
94
- if (config.findUniqueNextMiddleware) {
95
- middlewares.push(...config.findUniqueNextMiddleware);
67
+ if (config.enableAll || config?.findUnique) {
68
+ const { before = [], after = [] } = config.findUnique || defaultBeforeAfter;
69
+ setupRoute('/:id', 'get', before, ${modelName}FindUnique as any);
70
+ if (after.length) {
71
+ router.use(basePath + '/:id', ...after);
96
72
  }
97
- router.get('/:id', ...middlewares as FindUniqueMiddleware[]);
98
73
  }
99
74
 
100
- if (config?.createMiddleware && config?.createMiddleware.length) {
101
- const middlewares = [...config.createMiddleware, ${modelName}Create]
102
- if (config.createNextMiddleware) {
103
- middlewares.push(...config.createNextMiddleware);
75
+ if (config.enableAll || config?.create) {
76
+ const { before = [], after = [] } = config.create || defaultBeforeAfter;
77
+ setupRoute('/', 'post', before, ${modelName}Create as RequestHandler);
78
+ if (after.length) {
79
+ router.use(basePath + '/', ...after);
104
80
  }
105
- router.post('/', ...middlewares as CreateMiddleware[]);
106
81
  }
107
82
 
108
- if (config?.createManyMiddleware && config?.createManyMiddleware.length) {
109
- const middlewares = [...config.createManyMiddleware, ${modelName}CreateMany]
110
- if (config.createManyNextMiddleware) {
111
- middlewares.push(...config.createManyNextMiddleware);
83
+ if (config.enableAll || config?.createMany) {
84
+ const { before = [], after = [] } = config.createMany || defaultBeforeAfter;
85
+ setupRoute('/many', 'post', before, ${modelName}CreateMany as RequestHandler);
86
+ if (after.length) {
87
+ router.use(basePath + '/many', ...after);
112
88
  }
113
- router.post('/many', ...middlewares as CreateManyMiddleware[]);
114
89
  }
115
90
 
116
- if (config?.updateMiddleware && config?.updateMiddleware.length) {
117
- const middlewares = [...config.updateMiddleware, ${modelName}Update]
118
- if (config.updateNextMiddleware) {
119
- middlewares.push(...config.updateNextMiddleware);
91
+ if (config.enableAll || config?.update) {
92
+ const { before = [], after = [] } = config.update || defaultBeforeAfter;
93
+ setupRoute('/', 'put', before, ${modelName}Update as RequestHandler);
94
+ if (after.length) {
95
+ router.use(basePath + '/', ...after);
120
96
  }
121
- router.put('/', ...middlewares as UpdateMiddleware[]);
122
97
  }
123
98
 
124
- if (config?.updateManyMiddleware && config?.updateManyMiddleware.length) {
125
- const middlewares = [...config.updateManyMiddleware, ${modelName}UpdateMany]
126
- if (config.updateManyNextMiddleware) {
127
- middlewares.push(...config.updateManyNextMiddleware);
99
+ if (config.enableAll || config?.updateMany) {
100
+ const { before = [], after = [] } = config.updateMany || defaultBeforeAfter;
101
+ setupRoute('/many', 'put', before, ${modelName}UpdateMany as RequestHandler);
102
+ if (after.length) {
103
+ router.use(basePath + '/many', ...after);
128
104
  }
129
- router.put('/many', ...middlewares as UpdateManyMiddleware[]);
130
105
  }
131
106
 
132
- if (config?.upsertMiddleware && config?.upsertMiddleware.length) {
133
- const middlewares = [...config.upsertMiddleware, ${modelName}Upsert]
134
- if (config.upsertNextMiddleware) {
135
- middlewares.push(...config.upsertNextMiddleware);
107
+ if (config.enableAll || config?.upsert) {
108
+ const { before = [], after = [] } = config.upsert || defaultBeforeAfter;
109
+ setupRoute('/', 'patch', before, ${modelName}Upsert as RequestHandler);
110
+ if (after.length) {
111
+ router.use(basePath + '/', ...after);
136
112
  }
137
- router.patch('/', ...middlewares as UpsertMiddleware[]);
138
113
  }
139
114
 
140
- if (config?.deleteMiddleware && config?.deleteMiddleware.length) {
141
- const middlewares = [...config.deleteMiddleware, ${modelName}Delete]
142
- if (config.deleteNextMiddleware) {
143
- middlewares.push(...config.deleteNextMiddleware);
115
+ if (config.enableAll || config?.delete) {
116
+ const { before = [], after = [] } = config.delete || defaultBeforeAfter;
117
+ setupRoute('/', 'delete', before, ${modelName}Delete as RequestHandler);
118
+ if (after.length) {
119
+ router.use(basePath + '/', ...after);
144
120
  }
145
- router.delete('/', ...middlewares as DeleteMiddleware[]);
146
121
  }
147
122
 
148
- if (config?.deleteManyMiddleware && config?.deleteManyMiddleware.length) {
149
- const middlewares = [...config.deleteManyMiddleware, ${modelName}DeleteMany]
150
- if (config.deleteManyNextMiddleware) {
151
- middlewares.push(...config.deleteManyNextMiddleware);
123
+ if (config.enableAll || config?.deleteMany) {
124
+ const { before = [], after = [] } = config.deleteMany || defaultBeforeAfter;
125
+ setupRoute('/many', 'delete', before, ${modelName}DeleteMany as RequestHandler);
126
+ if (after.length) {
127
+ router.use(basePath + '/many', ...after);
152
128
  }
153
- router.delete('/many', ...middlewares as DeleteManyMiddleware[]);
154
129
  }
155
130
 
156
- if (config?.aggregateMiddleware && config?.aggregateMiddleware.length) {
157
- const middlewares = [...config.aggregateMiddleware, ${modelName}Aggregate]
158
- if (config.aggregateNextMiddleware) {
159
- middlewares.push(...config.aggregateNextMiddleware);
131
+ if (config.enableAll || config?.aggregate) {
132
+ const { before = [], after = [] } = config.aggregate || defaultBeforeAfter;
133
+ setupRoute('/aggregate', 'get', before, ${modelName}Aggregate as RequestHandler);
134
+ if (after.length) {
135
+ router.use(basePath + '/aggregate', ...after);
160
136
  }
161
- router.get('/aggregate', ...middlewares as AggregateMiddleware[]);
162
137
  }
163
138
 
164
- if (config?.countMiddleware && config?.countMiddleware.length) {
165
- const middlewares = [...config.countMiddleware, ${modelName}Count]
166
- if (config.countNextMiddleware) {
167
- middlewares.push(...config.countNextMiddleware);
139
+ if (config.enableAll || config?.count) {
140
+ const { before = [], after = [] } = config.count || defaultBeforeAfter;
141
+ setupRoute('/count', 'get', before, ${modelName}Count as RequestHandler);
142
+ if (after.length) {
143
+ router.use(basePath + '/count', ...after);
168
144
  }
169
- router.get('/count', ...middlewares as CountMiddleware[]);
170
145
  }
171
146
 
172
- if (config?.groupByMiddleware && config?.groupByMiddleware.length) {
173
- const middlewares = [...config.groupByMiddleware, ${modelName}GroupBy]
174
- if (config.groupByNextMiddleware) {
175
- middlewares.push(...config.groupByNextMiddleware);
147
+ if (config.enableAll || config?.groupBy) {
148
+ const { before = [], after = [] } = config.groupBy || defaultBeforeAfter;
149
+ setupRoute('/groupby', 'get', before, ${modelName}GroupBy as RequestHandler);
150
+ if (after.length) {
151
+ router.use(basePath + '/groupby', ...after);
176
152
  }
177
- router.get('/groupby', ...middlewares as GroupByMiddleware[]);
178
153
  }
179
154
 
180
155
  return router;
@@ -9,15 +9,16 @@ export const writeFileSafely = async ({
9
9
  options,
10
10
  content,
11
11
  }: {
12
- model: DMMF.Model
12
+ model?: DMMF.Model
13
13
  operation: string
14
14
  options: GeneratorOptions
15
15
  content: string
16
16
  }) => {
17
- const fileName = operation === 'index' ? 'index' : `${model.name}${operation}`
17
+ const fileName =
18
+ operation === 'index' ? 'index' : `${model?.name || ''}${operation}`
18
19
  const filePath = path.join(
19
20
  options.generator.output?.value!,
20
- `${model.name}/${fileName}.ts`,
21
+ model ? `${model?.name}/${fileName}.ts` : `/${fileName}.ts`,
21
22
  )
22
23
  console.log('filePath :>> ', filePath)
23
24
  await fs.mkdir(path.dirname(filePath), {