@rapidd/build 1.2.3 → 2.0.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 (71) hide show
  1. package/README.md +219 -68
  2. package/dist/bin/cli.d.ts +3 -0
  3. package/dist/bin/cli.d.ts.map +1 -0
  4. package/dist/bin/cli.js +31 -0
  5. package/dist/bin/cli.js.map +1 -0
  6. package/dist/index.d.ts +18 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +32 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/src/commands/build.d.ts +17 -0
  11. package/dist/src/commands/build.d.ts.map +1 -0
  12. package/dist/src/commands/build.js +236 -0
  13. package/dist/src/commands/build.js.map +1 -0
  14. package/dist/src/generators/aclGenerator.d.ts +6 -0
  15. package/dist/src/generators/aclGenerator.d.ts.map +1 -0
  16. package/dist/src/generators/aclGenerator.js +384 -0
  17. package/dist/src/generators/aclGenerator.js.map +1 -0
  18. package/dist/src/generators/index.d.ts +4 -0
  19. package/dist/src/generators/index.d.ts.map +1 -0
  20. package/dist/src/generators/index.js +13 -0
  21. package/dist/src/generators/index.js.map +1 -0
  22. package/dist/src/generators/modelGenerator.d.ts +10 -0
  23. package/dist/src/generators/modelGenerator.d.ts.map +1 -0
  24. package/dist/src/generators/modelGenerator.js +143 -0
  25. package/dist/src/generators/modelGenerator.js.map +1 -0
  26. package/dist/src/generators/routeGenerator.d.ts +10 -0
  27. package/dist/src/generators/routeGenerator.d.ts.map +1 -0
  28. package/dist/src/generators/routeGenerator.js +172 -0
  29. package/dist/src/generators/routeGenerator.js.map +1 -0
  30. package/dist/src/parsers/datasourceParser.d.ts +11 -0
  31. package/dist/src/parsers/datasourceParser.d.ts.map +1 -0
  32. package/dist/src/parsers/datasourceParser.js +131 -0
  33. package/dist/src/parsers/datasourceParser.js.map +1 -0
  34. package/dist/src/parsers/deepSQLAnalyzer.d.ts +85 -0
  35. package/dist/src/parsers/deepSQLAnalyzer.d.ts.map +1 -0
  36. package/dist/src/parsers/deepSQLAnalyzer.js +482 -0
  37. package/dist/src/parsers/deepSQLAnalyzer.js.map +1 -0
  38. package/dist/src/parsers/enhancedRLSConverter.d.ts +14 -0
  39. package/dist/src/parsers/enhancedRLSConverter.d.ts.map +1 -0
  40. package/dist/src/parsers/enhancedRLSConverter.js +168 -0
  41. package/dist/src/parsers/enhancedRLSConverter.js.map +1 -0
  42. package/dist/src/parsers/functionAnalyzer.d.ts +55 -0
  43. package/dist/src/parsers/functionAnalyzer.d.ts.map +1 -0
  44. package/dist/src/parsers/functionAnalyzer.js +274 -0
  45. package/dist/src/parsers/functionAnalyzer.js.map +1 -0
  46. package/dist/src/parsers/index.d.ts +13 -0
  47. package/dist/src/parsers/index.d.ts.map +1 -0
  48. package/dist/src/parsers/index.js +20 -0
  49. package/dist/src/parsers/index.js.map +1 -0
  50. package/dist/src/parsers/prismaFilterBuilder.d.ts +79 -0
  51. package/dist/src/parsers/prismaFilterBuilder.d.ts.map +1 -0
  52. package/dist/src/parsers/prismaFilterBuilder.js +322 -0
  53. package/dist/src/parsers/prismaFilterBuilder.js.map +1 -0
  54. package/dist/src/parsers/prismaParser.d.ts +14 -0
  55. package/dist/src/parsers/prismaParser.d.ts.map +1 -0
  56. package/dist/src/parsers/prismaParser.js +263 -0
  57. package/dist/src/parsers/prismaParser.js.map +1 -0
  58. package/package.json +21 -13
  59. package/bin/cli.js +0 -33
  60. package/index.js +0 -11
  61. package/src/commands/build.js +0 -638
  62. package/src/generators/aclGenerator.js +0 -394
  63. package/src/generators/modelGenerator.js +0 -174
  64. package/src/generators/relationshipsGenerator.js +0 -200
  65. package/src/generators/routeGenerator.js +0 -119
  66. package/src/parsers/datasourceParser.js +0 -121
  67. package/src/parsers/deepSQLAnalyzer.js +0 -554
  68. package/src/parsers/enhancedRLSConverter.js +0 -181
  69. package/src/parsers/functionAnalyzer.js +0 -302
  70. package/src/parsers/prismaFilterBuilder.js +0 -422
  71. package/src/parsers/prismaParser.js +0 -287
@@ -0,0 +1,4 @@
1
+ export { generateModelFile, generateAllModels } from './modelGenerator';
2
+ export { generateRouteFile, generateAllRoutes } from './routeGenerator';
3
+ export { generateACL } from './aclGenerator';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateACL = exports.generateAllRoutes = exports.generateRouteFile = exports.generateAllModels = exports.generateModelFile = void 0;
4
+ // Re-export all generators
5
+ var modelGenerator_1 = require("./modelGenerator");
6
+ Object.defineProperty(exports, "generateModelFile", { enumerable: true, get: function () { return modelGenerator_1.generateModelFile; } });
7
+ Object.defineProperty(exports, "generateAllModels", { enumerable: true, get: function () { return modelGenerator_1.generateAllModels; } });
8
+ var routeGenerator_1 = require("./routeGenerator");
9
+ Object.defineProperty(exports, "generateRouteFile", { enumerable: true, get: function () { return routeGenerator_1.generateRouteFile; } });
10
+ Object.defineProperty(exports, "generateAllRoutes", { enumerable: true, get: function () { return routeGenerator_1.generateAllRoutes; } });
11
+ var aclGenerator_1 = require("./aclGenerator");
12
+ Object.defineProperty(exports, "generateACL", { enumerable: true, get: function () { return aclGenerator_1.generateACL; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/index.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AAC3B,mDAAwE;AAA/D,mHAAA,iBAAiB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAC7C,mDAAwE;AAA/D,mHAAA,iBAAiB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAC7C,+CAA6C;AAApC,2GAAA,WAAW,OAAA"}
@@ -0,0 +1,10 @@
1
+ import type { ModelInfo } from '../parsers/prismaFilterBuilder';
2
+ /**
3
+ * Generate a single model file (TypeScript)
4
+ */
5
+ export declare function generateModelFile(modelName: string, _modelInfo: ModelInfo): string;
6
+ /**
7
+ * Generate all model files
8
+ */
9
+ export declare function generateAllModels(models: Record<string, ModelInfo>, modelDir: string): void;
10
+ //# sourceMappingURL=modelGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelGenerator.d.ts","sourceRoot":"","sources":["../../../src/generators/modelGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAahE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,GAAG,MAAM,CAwDlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAmB3F"}
@@ -0,0 +1,143 @@
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateModelFile = generateModelFile;
37
+ exports.generateAllModels = generateAllModels;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ /**
41
+ * Convert model name to PascalCase class name
42
+ */
43
+ function toClassName(modelName) {
44
+ return modelName
45
+ .split(/[^a-zA-Z0-9]+/)
46
+ .filter(Boolean)
47
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
48
+ .join('');
49
+ }
50
+ /**
51
+ * Generate a single model file (TypeScript)
52
+ */
53
+ function generateModelFile(modelName, _modelInfo) {
54
+ const className = toClassName(modelName);
55
+ return `import { Model } from '../orm/Model';
56
+ import { QueryBuilder, prisma } from '../orm/QueryBuilder';
57
+ import type { ModelOptions, GetManyResult } from '../types';
58
+
59
+ export class ${className} extends Model {
60
+ constructor(options?: ModelOptions) {
61
+ super('${modelName}', options);
62
+ }
63
+
64
+ async getMany(
65
+ q: Record<string, unknown> = {},
66
+ include: string | Record<string, unknown> = '',
67
+ limit: number = 25,
68
+ offset: number = 0,
69
+ sortBy: string = 'id',
70
+ sortOrder: 'asc' | 'desc' = 'asc'
71
+ ): Promise<GetManyResult> {
72
+ return await this._getMany(q, include, Number(limit), Number(offset), sortBy, sortOrder);
73
+ }
74
+
75
+ async get(id: string | number, include?: string | Record<string, unknown>): Promise<Record<string, unknown>> {
76
+ return await this._get(id, include);
77
+ }
78
+
79
+ async create(data: Record<string, unknown>): Promise<Record<string, unknown>> {
80
+ return await this._create(data);
81
+ }
82
+
83
+ async update(id: string | number, data: Record<string, unknown>): Promise<Record<string, unknown>> {
84
+ return await this._update(id, data);
85
+ }
86
+
87
+ async upsert(data: Record<string, unknown>, unique_key: string = this.primaryKey): Promise<Record<string, unknown>> {
88
+ return await this._upsert(data, unique_key);
89
+ }
90
+
91
+ async delete(id: string | number): Promise<Record<string, unknown>> {
92
+ return await this._delete(id);
93
+ }
94
+
95
+ filter(include: string | Record<string, unknown>): Record<string, unknown> {
96
+ return { ...this._filter(include), ...this.getAccessFilter() };
97
+ }
98
+
99
+ include(include: string | Record<string, unknown>): Record<string, unknown> {
100
+ return this._include(include);
101
+ }
102
+
103
+ static override QueryBuilder = new QueryBuilder('${modelName}');
104
+ }
105
+
106
+ export { QueryBuilder, prisma };
107
+ `;
108
+ }
109
+ /**
110
+ * Generate all model files
111
+ */
112
+ function generateAllModels(models, modelDir) {
113
+ // Create model directory if it doesn't exist
114
+ if (!fs.existsSync(modelDir)) {
115
+ fs.mkdirSync(modelDir, { recursive: true });
116
+ }
117
+ // Generate individual model files
118
+ for (const [modelName, modelInfo] of Object.entries(models)) {
119
+ const modelCode = generateModelFile(modelName, modelInfo);
120
+ const className = toClassName(modelName);
121
+ const modelPath = path.join(modelDir, `${className}.ts`);
122
+ fs.writeFileSync(modelPath, modelCode);
123
+ console.log(`Generated model: ${className}.ts`);
124
+ }
125
+ // Generate index.ts for models
126
+ const indexContent = generateModelsIndex(models);
127
+ fs.writeFileSync(path.join(modelDir, 'index.ts'), indexContent);
128
+ console.log('Generated models/index.ts');
129
+ }
130
+ /**
131
+ * Generate index.ts that exports all models
132
+ */
133
+ function generateModelsIndex(models) {
134
+ const exports = [];
135
+ for (const modelName of Object.keys(models)) {
136
+ const className = toClassName(modelName);
137
+ exports.push(`export { ${className} } from './${className}';`);
138
+ }
139
+ exports.push('');
140
+ exports.push("export { QueryBuilder, prisma } from '../orm/QueryBuilder';");
141
+ return exports.join('\n');
142
+ }
143
+ //# sourceMappingURL=modelGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelGenerator.js","sourceRoot":"","sources":["../../../src/generators/modelGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,8CAwDC;AAKD,8CAmBC;AAlGD,uCAAyB;AACzB,2CAA6B;AAG7B;;GAEG;AACH,SAAS,WAAW,CAAC,SAAiB;IACpC,OAAO,SAAS;SACb,KAAK,CAAC,eAAe,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,SAAiB,EAAE,UAAqB;IACxE,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAEzC,OAAO;;;;eAIM,SAAS;;iBAEP,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDA0C6B,SAAS;;;;CAI/D,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,MAAiC,EAAE,QAAgB;IACnF,6CAA6C;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,kCAAkC;IAClC,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;QACzD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,+BAA+B;IAC/B,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACjD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,MAAiC;IAC5D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,YAAY,SAAS,cAAc,SAAS,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAE5E,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ModelInfo } from '../parsers/prismaFilterBuilder';
2
+ /**
3
+ * Generate Fastify route for a single model (TypeScript)
4
+ */
5
+ export declare function generateRouteFile(modelName: string): string;
6
+ /**
7
+ * Generate all route files
8
+ */
9
+ export declare function generateAllRoutes(models: Record<string, ModelInfo>, routesDir: string): void;
10
+ //# sourceMappingURL=routeGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeGenerator.d.ts","sourceRoot":"","sources":["../../../src/generators/routeGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAahE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA+E3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAkB5F"}
@@ -0,0 +1,172 @@
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateRouteFile = generateRouteFile;
37
+ exports.generateAllRoutes = generateAllRoutes;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ /**
41
+ * Convert model name to PascalCase class name
42
+ */
43
+ function toClassName(modelName) {
44
+ return modelName
45
+ .split(/[^a-zA-Z0-9]+/)
46
+ .filter(Boolean)
47
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
48
+ .join('');
49
+ }
50
+ /**
51
+ * Generate Fastify route for a single model (TypeScript)
52
+ */
53
+ function generateRouteFile(modelName) {
54
+ const className = toClassName(modelName);
55
+ return `import { FastifyPluginAsync, FastifyRequest, FastifyReply } from 'fastify';
56
+ import { ${className}, QueryBuilder } from '../../../src/models/${className}';
57
+
58
+ const ${modelName}Routes: FastifyPluginAsync = async (fastify) => {
59
+ fastify.addHook('preHandler', async (request, reply) => {
60
+ if (!request.user) {
61
+ return reply.sendError(401, 'no_valid_session');
62
+ }
63
+ (request as any).${className} = new ${className}({ user: request.user });
64
+ });
65
+
66
+ fastify.get('/', async (request: FastifyRequest, reply: FastifyReply) => {
67
+ try {
68
+ const { q = {}, include = '', limit = '25', offset = '0', sortBy = 'id', sortOrder = 'asc' } = request.query as Record<string, string>;
69
+ const model = (request as any).${className} as ${className};
70
+ const results = await model.getMany(q, include, Number(limit), Number(offset), sortBy, sortOrder as 'asc' | 'desc');
71
+ return reply.sendList(results.data, results.meta);
72
+ } catch (error: any) {
73
+ const response = QueryBuilder.errorHandler(error);
74
+ return reply.code(response.status_code).send(response);
75
+ }
76
+ });
77
+
78
+ fastify.get('/:id', async (request: FastifyRequest, reply: FastifyReply) => {
79
+ try {
80
+ const { id } = request.params as { id: string };
81
+ const { include = '' } = request.query as { include?: string };
82
+ const model = (request as any).${className} as ${className};
83
+ const response = await model.get(id, include);
84
+ return reply.send(response);
85
+ } catch (error: any) {
86
+ const response = QueryBuilder.errorHandler(error);
87
+ return reply.code(response.status_code).send(response);
88
+ }
89
+ });
90
+
91
+ fastify.post('/', async (request: FastifyRequest, reply: FastifyReply) => {
92
+ const payload = request.body as Record<string, unknown>;
93
+ try {
94
+ const model = (request as any).${className} as ${className};
95
+ const response = await model.create(payload);
96
+ return reply.code(201).send(response);
97
+ } catch (error: any) {
98
+ const response = QueryBuilder.errorHandler(error, payload);
99
+ return reply.code(response.status_code).send(response);
100
+ }
101
+ });
102
+
103
+ fastify.patch('/:id', async (request: FastifyRequest, reply: FastifyReply) => {
104
+ const { id } = request.params as { id: string };
105
+ const payload = request.body as Record<string, unknown>;
106
+ try {
107
+ const model = (request as any).${className} as ${className};
108
+ const response = await model.update(id, payload);
109
+ return reply.send(response);
110
+ } catch (error: any) {
111
+ const response = QueryBuilder.errorHandler(error, payload);
112
+ return reply.code(response.status_code).send(response);
113
+ }
114
+ });
115
+
116
+ fastify.delete('/:id', async (request: FastifyRequest, reply: FastifyReply) => {
117
+ try {
118
+ const { id } = request.params as { id: string };
119
+ const model = (request as any).${className} as ${className};
120
+ await model.delete(id);
121
+ return reply.sendResponse(200, 'object_deleted_successfully', { modelName: '${className}' });
122
+ } catch (error: any) {
123
+ const response = QueryBuilder.errorHandler(error);
124
+ return reply.code(response.status_code).send(response);
125
+ }
126
+ });
127
+ };
128
+
129
+ export default ${modelName}Routes;
130
+ `;
131
+ }
132
+ /**
133
+ * Generate all route files
134
+ */
135
+ function generateAllRoutes(models, routesDir) {
136
+ // Create routes directory if it doesn't exist
137
+ if (!fs.existsSync(routesDir)) {
138
+ fs.mkdirSync(routesDir, { recursive: true });
139
+ }
140
+ // Generate individual route files
141
+ for (const modelName of Object.keys(models)) {
142
+ const routeCode = generateRouteFile(modelName);
143
+ const routePath = path.join(routesDir, `${modelName}.ts`);
144
+ fs.writeFileSync(routePath, routeCode);
145
+ console.log(`Generated route: ${modelName}.ts`);
146
+ }
147
+ // Generate index.ts for routes
148
+ const indexContent = generateRoutesIndex(models);
149
+ fs.writeFileSync(path.join(routesDir, 'index.ts'), indexContent);
150
+ console.log('Generated routes/index.ts');
151
+ }
152
+ /**
153
+ * Generate index.ts that exports all routes
154
+ */
155
+ function generateRoutesIndex(models) {
156
+ const imports = [];
157
+ const exports = [];
158
+ for (const modelName of Object.keys(models)) {
159
+ const varName = `${modelName}Routes`;
160
+ imports.push(`import ${varName} from './${modelName}';`);
161
+ exports.push(` '${modelName}': ${varName},`);
162
+ }
163
+ return `${imports.join('\n')}
164
+
165
+ export const routes = {
166
+ ${exports.join('\n')}
167
+ };
168
+
169
+ export default routes;
170
+ `;
171
+ }
172
+ //# sourceMappingURL=routeGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeGenerator.js","sourceRoot":"","sources":["../../../src/generators/routeGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,8CA+EC;AAKD,8CAkBC;AAxHD,uCAAyB;AACzB,2CAA6B;AAG7B;;GAEG;AACH,SAAS,WAAW,CAAC,SAAiB;IACpC,OAAO,SAAS;SACb,KAAK,CAAC,eAAe,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAEzC,OAAO;WACE,SAAS,8CAA8C,SAAS;;QAEnE,SAAS;;;;;2BAKU,SAAS,UAAU,SAAS;;;;;;6CAMV,SAAS,OAAO,SAAS;;;;;;;;;;;;;6CAazB,SAAS,OAAO,SAAS;;;;;;;;;;;;6CAYzB,SAAS,OAAO,SAAS;;;;;;;;;;;;;6CAazB,SAAS,OAAO,SAAS;;;;;;;;;;;;6CAYzB,SAAS,OAAO,SAAS;;0FAEoB,SAAS;;;;;;;;iBAQlF,SAAS;CACzB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,MAAiC,EAAE,SAAiB;IACpF,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,kCAAkC;IAClC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;QAC1D,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,+BAA+B;IAC/B,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACjD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,MAAiC;IAC5D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,GAAG,SAAS,QAAQ,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,UAAU,OAAO,YAAY,SAAS,IAAI,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,QAAQ,SAAS,MAAM,OAAO,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;;CAInB,CAAC;AACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface DatasourceConfig {
2
+ provider: string | null;
3
+ url: string | null;
4
+ isPostgreSQL: boolean;
5
+ isMySQL: boolean;
6
+ }
7
+ /**
8
+ * Parse datasource configuration from Prisma schema
9
+ */
10
+ export declare function parseDatasource(schemaPath: string): DatasourceConfig;
11
+ //# sourceMappingURL=datasourceParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasourceParser.d.ts","sourceRoot":"","sources":["../../../src/parsers/datasourceParser.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAkCD;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAmEpE"}
@@ -0,0 +1,131 @@
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseDatasource = parseDatasource;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ // Load .env file if it exists
40
+ try {
41
+ require('dotenv').config({ path: path.join(process.cwd(), '.env') });
42
+ }
43
+ catch (_e) {
44
+ // dotenv not available, skip
45
+ }
46
+ /**
47
+ * Try to load DATABASE_URL from prisma.config.ts (Prisma 7)
48
+ */
49
+ function loadUrlFromPrismaConfig() {
50
+ const configPath = path.join(process.cwd(), 'prisma.config.ts');
51
+ if (!fs.existsSync(configPath)) {
52
+ return null;
53
+ }
54
+ try {
55
+ const configContent = fs.readFileSync(configPath, 'utf-8');
56
+ // Look for env('DATABASE_URL') or similar patterns
57
+ const envMatch = configContent.match(/env\(['"]([^'"]+)['"]\)/);
58
+ if (envMatch) {
59
+ const envVar = envMatch[1];
60
+ return process.env[envVar] || null;
61
+ }
62
+ // Look for direct URL assignment
63
+ const urlMatch = configContent.match(/url:\s*['"]([^'"]+)['"]/);
64
+ if (urlMatch) {
65
+ return urlMatch[1];
66
+ }
67
+ }
68
+ catch (_e) {
69
+ // Failed to read config, return null
70
+ }
71
+ return null;
72
+ }
73
+ /**
74
+ * Parse datasource configuration from Prisma schema
75
+ */
76
+ function parseDatasource(schemaPath) {
77
+ const schemaContent = fs.readFileSync(schemaPath, 'utf-8');
78
+ // Extract datasource block
79
+ const datasourceRegex = /datasource\s+\w+\s*{([^}]*)}/;
80
+ const match = schemaContent.match(datasourceRegex);
81
+ if (!match) {
82
+ throw new Error('No datasource block found in Prisma schema');
83
+ }
84
+ const datasourceBlock = match[1];
85
+ // Extract provider
86
+ const providerMatch = datasourceBlock.match(/provider\s*=\s*"([^"]+)"/);
87
+ const provider = providerMatch ? providerMatch[1] : null;
88
+ // Try to extract url from schema first
89
+ let url = null;
90
+ const urlMatch = datasourceBlock.match(/url\s*=\s*(.+)/);
91
+ if (urlMatch) {
92
+ url = urlMatch[1].trim();
93
+ // Handle env() function
94
+ const envMatch = url.match(/env\(["']([^"']+)["']\)/);
95
+ if (envMatch) {
96
+ const envVar = envMatch[1];
97
+ url = process.env[envVar] || null;
98
+ }
99
+ else {
100
+ // Remove quotes if present
101
+ url = url.replace(/^["']|["']$/g, '');
102
+ }
103
+ }
104
+ // If no URL in schema, try prisma.config.ts (Prisma 7)
105
+ if (!url) {
106
+ url = loadUrlFromPrismaConfig();
107
+ }
108
+ // If still no URL, check DATABASE_URL environment variable directly
109
+ if (!url) {
110
+ url = process.env.DATABASE_URL || null;
111
+ }
112
+ // Detect PostgreSQL from provider OR from the actual connection URL
113
+ let isPostgreSQL = provider === 'postgresql' || provider === 'postgres';
114
+ if (!isPostgreSQL && url) {
115
+ // Check if URL starts with postgresql:// or postgres://
116
+ isPostgreSQL = url.startsWith('postgresql://') || url.startsWith('postgres://');
117
+ }
118
+ // Explicitly detect MySQL to avoid false PostgreSQL detection
119
+ const isMySQL = provider === 'mysql' || (!!url && url.startsWith('mysql://'));
120
+ // If it's MySQL, ensure isPostgreSQL is false
121
+ if (isMySQL) {
122
+ isPostgreSQL = false;
123
+ }
124
+ return {
125
+ provider,
126
+ url,
127
+ isPostgreSQL,
128
+ isMySQL
129
+ };
130
+ }
131
+ //# sourceMappingURL=datasourceParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasourceParser.js","sourceRoot":"","sources":["../../../src/parsers/datasourceParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Deep SQL Analyzer for PostgreSQL RLS Policies
3
+ * Uses extensive regex patterns to extract meaning from SQL expressions
4
+ */
5
+ export interface SQLFilter {
6
+ type: string;
7
+ field?: string;
8
+ value?: string;
9
+ values?: string[];
10
+ userField?: string;
11
+ prisma: string;
12
+ subquery?: string;
13
+ }
14
+ export interface SQLCondition {
15
+ type: string;
16
+ roles?: string[];
17
+ role?: string;
18
+ javascript?: string;
19
+ table?: string;
20
+ field?: string;
21
+ condition?: string;
22
+ conditions?: Array<{
23
+ condition: string;
24
+ result: string;
25
+ }>;
26
+ subquery?: string;
27
+ prisma?: string;
28
+ }
29
+ export interface SQLAnalysis {
30
+ filters: SQLFilter[];
31
+ conditions: SQLCondition[];
32
+ userContext: Record<string, boolean>;
33
+ sql?: string;
34
+ }
35
+ export declare class DeepSQLAnalyzer {
36
+ functionMappings: Record<string, string>;
37
+ sessionMappings: Record<string, string>;
38
+ constructor();
39
+ /**
40
+ * Analyze SQL expression and extract Prisma filters
41
+ */
42
+ analyzeSQLForFilters(sql: string): SQLAnalysis;
43
+ /**
44
+ * Normalize SQL for easier parsing
45
+ */
46
+ normalizeSql(sql: string): string;
47
+ /**
48
+ * Remove EXISTS subqueries with proper parentheses matching
49
+ */
50
+ removeExistsSubqueries(sql: string): string;
51
+ /**
52
+ * Extract direct field comparisons
53
+ */
54
+ extractDirectComparisons(sql: string, analysis: SQLAnalysis): void;
55
+ /**
56
+ * Extract function-based comparisons
57
+ */
58
+ extractFunctionComparisons(sql: string, analysis: SQLAnalysis): void;
59
+ /**
60
+ * Extract session variable comparisons
61
+ */
62
+ extractSessionVariableComparisons(sql: string, analysis: SQLAnalysis): void;
63
+ /**
64
+ * Extract IN clauses
65
+ */
66
+ extractInClauses(sql: string, analysis: SQLAnalysis): void;
67
+ /**
68
+ * Extract EXISTS subqueries
69
+ */
70
+ extractExistsSubqueries(sql: string, analysis: SQLAnalysis): void;
71
+ /**
72
+ * Extract CASE WHEN conditions
73
+ */
74
+ extractCaseWhenConditions(sql: string, analysis: SQLAnalysis): void;
75
+ /**
76
+ * Extract role-based checks
77
+ */
78
+ extractRoleChecks(sql: string, analysis: SQLAnalysis): void;
79
+ /**
80
+ * Extract complex JOIN conditions
81
+ */
82
+ extractComplexJoins(sql: string, analysis: SQLAnalysis): void;
83
+ }
84
+ export default DeepSQLAnalyzer;
85
+ //# sourceMappingURL=deepSQLAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepSQLAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/parsers/deepSQLAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,eAAe;IAC1B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;IAiExC;;OAEG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IAkC9C;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAoCjC;;OAEG;IACH,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA8B3C;;OAEG;IACH,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IA2ElE;;OAEG;IACH,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAiFpE;;OAEG;IACH,iCAAiC,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IA4C3E;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IA2C1D;;OAEG;IACH,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAyBjE;;OAEG;IACH,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IA+BnE;;OAEG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IA2B3D;;OAEG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;CAuB9D;AAED,eAAe,eAAe,CAAC"}