prisma-generator-express 1.7.1 → 1.8.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.
Files changed (65) hide show
  1. package/README.md +50 -21
  2. package/package.json +2 -2
  3. package/{dist → src}/bin.js +0 -1
  4. package/{dist → src}/constants.js +0 -1
  5. package/src/generator.js +195 -0
  6. package/src/generator.ts +7 -0
  7. package/{dist → src}/helpers/generateAggregate.js +14 -4
  8. package/src/helpers/generateAggregate.ts +7 -3
  9. package/{dist → src}/helpers/generateCount.js +14 -4
  10. package/src/helpers/generateCount.ts +7 -3
  11. package/{dist → src}/helpers/generateCreate.js +13 -4
  12. package/src/helpers/generateCreate.ts +7 -3
  13. package/{dist → src}/helpers/generateCreateMany.js +12 -3
  14. package/src/helpers/generateCreateMany.ts +6 -2
  15. package/{dist → src}/helpers/generateDelete.js +13 -3
  16. package/src/helpers/generateDelete.ts +6 -2
  17. package/{dist → src}/helpers/generateDeleteMany.js +13 -3
  18. package/src/helpers/generateDeleteMany.ts +6 -2
  19. package/{dist → src}/helpers/generateFindFirst.js +12 -3
  20. package/src/helpers/generateFindFirst.ts +6 -2
  21. package/{dist → src}/helpers/generateFindMany.js +12 -3
  22. package/src/helpers/generateFindMany.ts +6 -2
  23. package/{dist → src}/helpers/generateFindUnique.js +13 -4
  24. package/src/helpers/generateFindUnique.ts +7 -3
  25. package/{dist → src}/helpers/generateGroupBy.js +13 -3
  26. package/src/helpers/generateGroupBy.ts +6 -2
  27. package/{dist → src}/helpers/generateImportPrismaStatement.js +1 -1
  28. package/src/helpers/generateRouteConfigType.js +32 -0
  29. package/src/helpers/generateRouteConfigType.ts +28 -0
  30. package/src/helpers/generateRouteFile.js +155 -0
  31. package/src/helpers/generateRouteFile.ts +96 -121
  32. package/{dist → src}/helpers/generateUpdate.js +12 -3
  33. package/src/helpers/generateUpdate.ts +6 -2
  34. package/{dist → src}/helpers/generateUpdateMany.js +12 -3
  35. package/src/helpers/generateUpdateMany.ts +6 -2
  36. package/{dist → src}/helpers/generateUpsert.js +13 -3
  37. package/src/helpers/generateUpsert.ts +6 -2
  38. package/{dist → src}/utils/formatFile.js +2 -6
  39. package/{dist → src}/utils/strings.js +0 -1
  40. package/src/utils/writeFileSafely.js +29 -0
  41. package/src/utils/writeFileSafely.ts +4 -3
  42. package/dist/bin.js.map +0 -1
  43. package/dist/constants.js.map +0 -1
  44. package/dist/generator.js +0 -161
  45. package/dist/generator.js.map +0 -1
  46. package/dist/helpers/generateAggregate.js.map +0 -1
  47. package/dist/helpers/generateCount.js.map +0 -1
  48. package/dist/helpers/generateCreate.js.map +0 -1
  49. package/dist/helpers/generateCreateMany.js.map +0 -1
  50. package/dist/helpers/generateDelete.js.map +0 -1
  51. package/dist/helpers/generateDeleteMany.js.map +0 -1
  52. package/dist/helpers/generateFindFirst.js.map +0 -1
  53. package/dist/helpers/generateFindMany.js.map +0 -1
  54. package/dist/helpers/generateFindUnique.js.map +0 -1
  55. package/dist/helpers/generateGroupBy.js.map +0 -1
  56. package/dist/helpers/generateImportPrismaStatement.js.map +0 -1
  57. package/dist/helpers/generateRouteFile.js +0 -181
  58. package/dist/helpers/generateRouteFile.js.map +0 -1
  59. package/dist/helpers/generateUpdate.js.map +0 -1
  60. package/dist/helpers/generateUpdateMany.js.map +0 -1
  61. package/dist/helpers/generateUpsert.js.map +0 -1
  62. package/dist/utils/formatFile.js.map +0 -1
  63. package/dist/utils/strings.js.map +0 -1
  64. package/dist/utils/writeFileSafely.js +0 -21
  65. package/dist/utils/writeFileSafely.js.map +0 -1
@@ -2,6 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateFindFirstFunction = void 0;
4
4
  const strings_1 = require("../utils/strings");
5
+ /**
6
+ * Generates an Express middleware function that includes conditional output validation with Zod.
7
+ * This version dynamically includes the correct type for the query parameter based on the Prisma model.
8
+ * @param options - The options containing the model name and the import statement for Prisma types.
9
+ * @returns {string} - The generated middleware function as a string.
10
+ */
5
11
  const generateFindFirstFunction = (options) => {
6
12
  const { model, prismaImportStatement } = options;
7
13
  const modelName = model.name;
@@ -51,12 +57,15 @@ export async function ${functionName}(req: FindFirstRequest, res: Response, next
51
57
  } else {
52
58
  res.status(200).json(data);
53
59
  }
54
- } catch (error) {
60
+ } catch (error: unknown) {
55
61
  console.error('Error in handling request:', error);
56
- res.status(500).json({ error: error.message });
62
+ if (error instanceof Error) {
63
+ res.status(500).json({ error: error.message });
64
+ } else {
65
+ res.status(500).json({ error: "Unknown error occurred" });
66
+ }
57
67
  next(error);
58
68
  }
59
69
  }`;
60
70
  };
61
71
  exports.generateFindFirstFunction = generateFindFirstFunction;
62
- //# sourceMappingURL=generateFindFirst.js.map
@@ -59,9 +59,13 @@ export async function ${functionName}(req: FindFirstRequest, res: Response, next
59
59
  } else {
60
60
  res.status(200).json(data);
61
61
  }
62
- } catch (error) {
62
+ } catch (error: unknown) {
63
63
  console.error('Error in handling request:', error);
64
- res.status(500).json({ error: error.message });
64
+ if (error instanceof Error) {
65
+ res.status(500).json({ error: error.message });
66
+ } else {
67
+ res.status(500).json({ error: "Unknown error occurred" });
68
+ }
65
69
  next(error);
66
70
  }
67
71
  }`
@@ -2,6 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateFindManyFunction = void 0;
4
4
  const strings_1 = require("../utils/strings");
5
+ /**
6
+ * Generates an Express middleware function that handles multiple record retrieval with optional output validation using Zod.
7
+ * This version dynamically includes the correct type for the query parameter based on the Prisma model.
8
+ * @param options - The options containing the model name and the import statement for Prisma types.
9
+ * @returns {string} - The generated middleware function as a string.
10
+ */
5
11
  const generateFindManyFunction = (options) => {
6
12
  const { model, prismaImportStatement } = options;
7
13
  const modelName = model.name;
@@ -51,12 +57,15 @@ export async function ${functionName}(req: FindManyRequest, res: Response, next:
51
57
  } else {
52
58
  res.status(200).json(data);
53
59
  }
54
- } catch (error) {
60
+ } catch (error: unknown) {
55
61
  console.error('Error in handling request:', error);
56
- res.status(500).json({ error: error.message });
62
+ if (error instanceof Error) {
63
+ res.status(500).json({ error: error.message });
64
+ } else {
65
+ res.status(500).json({ error: "Unknown error occurred" });
66
+ }
57
67
  next(error);
58
68
  }
59
69
  }`;
60
70
  };
61
71
  exports.generateFindManyFunction = generateFindManyFunction;
62
- //# sourceMappingURL=generateFindMany.js.map
@@ -59,9 +59,13 @@ export async function ${functionName}(req: FindManyRequest, res: Response, next:
59
59
  } else {
60
60
  res.status(200).json(data);
61
61
  }
62
- } catch (error) {
62
+ } catch (error: unknown) {
63
63
  console.error('Error in handling request:', error);
64
- res.status(500).json({ error: error.message });
64
+ if (error instanceof Error) {
65
+ res.status(500).json({ error: error.message });
66
+ } else {
67
+ res.status(500).json({ error: "Unknown error occurred" });
68
+ }
65
69
  next(error);
66
70
  }
67
71
  }`
@@ -2,6 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateFindUniqueFunction = void 0;
4
4
  const strings_1 = require("../utils/strings");
5
+ /**
6
+ * Generates an Express middleware function that includes conditional output validation with Zod.
7
+ * This version dynamically includes the correct type for the query parameter based on the Prisma model.
8
+ * @param options - The options containing the model name and the import statement for Prisma types.
9
+ * @returns {string} - The generated middleware function as a string.
10
+ */
5
11
  const generateFindUniqueFunction = (options) => {
6
12
  const { model, prismaImportStatement } = options;
7
13
  const modelName = model.name;
@@ -51,12 +57,15 @@ export async function ${functionName}(req: FindUniqueRequest, res: Response, nex
51
57
  } else {
52
58
  res.status(200).json(data);
53
59
  }
54
- } catch (error) {
55
- console.error('Error in handling request:', error);
56
- res.status(500).json({ error: error.message });
60
+ } catch (error: unknown) {
61
+ console.error("Error in handling findUnique request:", error);
62
+ if (error instanceof Error) {
63
+ res.status(500).json({ error: error.message });
64
+ } else {
65
+ res.status(500).json({ error: "Unknown error occurred" });
66
+ }
57
67
  next(error);
58
68
  }
59
69
  }`;
60
70
  };
61
71
  exports.generateFindUniqueFunction = generateFindUniqueFunction;
62
- //# sourceMappingURL=generateFindUnique.js.map
@@ -59,9 +59,13 @@ export async function ${functionName}(req: FindUniqueRequest, res: Response, nex
59
59
  } else {
60
60
  res.status(200).json(data);
61
61
  }
62
- } catch (error) {
63
- console.error('Error in handling request:', error);
64
- res.status(500).json({ error: error.message });
62
+ } catch (error: unknown) {
63
+ console.error("Error in handling findUnique request:", error);
64
+ if (error instanceof Error) {
65
+ res.status(500).json({ error: error.message });
66
+ } else {
67
+ res.status(500).json({ error: "Unknown error occurred" });
68
+ }
65
69
  next(error);
66
70
  }
67
71
  }`
@@ -2,6 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateGroupByFunction = void 0;
4
4
  const strings_1 = require("../utils/strings");
5
+ /**
6
+ * Generates an Express middleware function that handles groupBy queries
7
+ * and includes conditional output validation with Zod.
8
+ * This version dynamically includes the correct type for the arguments based on the Prisma model.
9
+ * @param options - The options containing the model name and the import statement for Prisma types.
10
+ * @returns {string} - The generated middleware function as a string.
11
+ */
5
12
  const generateGroupByFunction = (options) => {
6
13
  const { model, prismaImportStatement } = options;
7
14
  const modelName = model.name;
@@ -42,12 +49,15 @@ export async function ${functionName}(req: GroupByRequest, res: Response, next:
42
49
  } else {
43
50
  res.status(200).json(result);
44
51
  }
45
- } catch (error) {
52
+ } catch (error: unknown) {
46
53
  console.error('Error in handling groupBy request:', error);
47
- res.status(500).json({ error: error.message });
54
+ if (error instanceof Error) {
55
+ res.status(500).json({ error: error.message });
56
+ } else {
57
+ res.status(500).json({ error: "Unknown error occurred" });
58
+ }
48
59
  next(error);
49
60
  }
50
61
  }`;
51
62
  };
52
63
  exports.generateGroupByFunction = generateGroupByFunction;
53
- //# sourceMappingURL=generateGroupBy.js.map
@@ -53,9 +53,13 @@ export async function ${functionName}(req: GroupByRequest, res: Response, next:
53
53
  } else {
54
54
  res.status(200).json(result);
55
55
  }
56
- } catch (error) {
56
+ } catch (error: unknown) {
57
57
  console.error('Error in handling groupBy request:', error);
58
- res.status(500).json({ error: error.message });
58
+ if (error instanceof Error) {
59
+ res.status(500).json({ error: error.message });
60
+ } else {
61
+ res.status(500).json({ error: "Unknown error occurred" });
62
+ }
59
63
  next(error);
60
64
  }
61
65
  }`
@@ -20,7 +20,7 @@ function getImportGeneratorOptions(options) {
20
20
  }
21
21
  function generateImportPrismaStatement(generatorOptions) {
22
22
  const options = getImportGeneratorOptions(generatorOptions);
23
+ // console.log('options.outputPath :>> ', options.outputPath)
23
24
  return `import type { Prisma } from '${options.outputPath}';\nimport type { PrismaClient } from '${options.outputPath}';\n`;
24
25
  }
25
26
  exports.generateImportPrismaStatement = generateImportPrismaStatement;
26
- //# sourceMappingURL=generateImportPrismaStatement.js.map
@@ -0,0 +1,32 @@
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;
@@ -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
+ }
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRouterFunction = void 0;
4
+ function generateRouterFunction({ model, }) {
5
+ const modelName = model.name;
6
+ const routerFunctionName = `${modelName}Router`;
7
+ return `
8
+ import express, { RequestHandler } from 'express';
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
+ };
28
+
29
+ /**
30
+ * Generates an Express router for ${modelName} model.
31
+ * @param config Contains optional middleware to enable routes.
32
+ * @returns {express.Router}
33
+ */
34
+ export function ${routerFunctionName}(config: RouteConfig<RequestHandler>) {
35
+ const router = express.Router();
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);
52
+ }
53
+ }
54
+
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);
60
+ }
61
+ }
62
+
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);
68
+ }
69
+ }
70
+
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);
76
+ }
77
+ }
78
+
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);
84
+ }
85
+ }
86
+
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);
92
+ }
93
+ }
94
+
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);
100
+ }
101
+ }
102
+
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);
108
+ }
109
+ }
110
+
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);
116
+ }
117
+ }
118
+
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);
124
+ }
125
+ }
126
+
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);
132
+ }
133
+ }
134
+
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);
140
+ }
141
+ }
142
+
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);
148
+ }
149
+ }
150
+
151
+ return router;
152
+ }
153
+ `;
154
+ }
155
+ exports.generateRouterFunction = generateRouterFunction;