@rapidd/build 1.2.3 β†’ 2.0.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.
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 +148 -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
package/README.md CHANGED
@@ -1,22 +1,22 @@
1
1
  # @rapidd/build
2
2
 
3
- Dynamic code generator that transforms Prisma schemas into complete Express.js CRUD APIs with intelligent PostgreSQL RLS-to-JavaScript translation.
3
+ Dynamic code generator that transforms Prisma schemas into complete **Fastify** CRUD APIs with intelligent PostgreSQL RLS-to-**TypeScript** translation.
4
4
 
5
5
  ## Features
6
6
 
7
- - πŸš€ **Automatic CRUD API Generation** - Creates Express.js routes from Prisma models
8
- - πŸ”’ **RLS Translation** - Converts PostgreSQL Row-Level Security policies to JavaScript/Prisma filters (ACL: Access Control Layer)
9
- - 🎯 **Dynamic & Schema-Aware** - Zero hardcoding, adapts to any database structure
10
- - πŸ”— **Relationship Handling** - Supports 1:1, 1:n, n:m including junction tables
11
- - πŸ‘₯ **Role-Based Access Control** - Properly handles role checks in filters
12
- - πŸ“Š **Model Generation** - Creates CRUD model classes with capitalized filenames
13
- - πŸ—ΊοΈ **Relationships JSON** - Generates complete relationship mappings with foreign keys
14
- - ⚑ **Selective Generation** - Update only specific models or components
7
+ - **Automatic CRUD API Generation** - Creates Fastify routes from Prisma models (TypeScript)
8
+ - **RLS Translation** - Converts PostgreSQL Row-Level Security policies to TypeScript/Prisma filters (ACL: Access Control Layer)
9
+ - **Dynamic & Schema-Aware** - Zero hardcoding, adapts to any database structure
10
+ - **Relationship Handling** - Supports 1:1, 1:n, n:m including junction tables
11
+ - **Role-Based Access Control** - Properly handles role checks in filters
12
+ - **Model Generation** - Creates TypeScript CRUD model classes with capitalized filenames
13
+ - **Selective Generation** - Update only specific models or components
15
14
 
16
15
  ## Requirements
17
16
 
18
17
  - **Prisma 7+** (recommended) - Full support for Prisma 7's new architecture
19
- - Node.js 14.0.0 or higher
18
+ - Node.js 18.0.0 or higher
19
+ - TypeScript 5.0+
20
20
 
21
21
  ## Installation
22
22
 
@@ -40,22 +40,178 @@ npx rapidd build --model user
40
40
  npx rapidd build --only model
41
41
  npx rapidd build --only route
42
42
  npx rapidd build --only acl
43
- npx rapidd build --only relationship
44
43
 
45
44
  # Combine model and component filters
46
45
  npx rapidd build --model account --only route
47
46
 
48
47
  # Specify custom user table
49
48
  npx rapidd build --user-table accounts
49
+
50
+ # Enable debug mode (generates acl-mappings.json)
51
+ npx rapidd build --debug
50
52
  ```
51
53
 
52
54
  ## CLI Options
53
55
 
54
- - `-o, --output <path>` - Output directory (default: `./`)
55
- - `-s, --schema <path>` - Prisma schema file (default: `./prisma/schema.prisma`)
56
- - `-m, --model <name>` - Generate/update only specific model (e.g., "account", "user")
57
- - `--only <component>` - Generate only specific component: "model", "route", "acl", or "relationship"
58
- - `--user-table <name>` - User table name for ACL (default: auto-detected)
56
+ | Option | Description | Default |
57
+ |--------|-------------|---------|
58
+ | `-o, --output <path>` | Output directory | `./` |
59
+ | `-s, --schema <path>` | Prisma schema file | `./prisma/schema.prisma` |
60
+ | `-m, --model <name>` | Generate/update only specific model | All models |
61
+ | `--only <component>` | Generate only: `model`, `route`, or `acl` | All components |
62
+ | `--user-table <name>` | User table name for ACL | Auto-detected |
63
+ | `--debug` | Enable debug mode | `false` |
64
+
65
+ ## Generated Structure
66
+
67
+ ```
68
+ ./
69
+ β”œβ”€β”€ src/
70
+ β”‚ β”œβ”€β”€ models/
71
+ β”‚ β”‚ β”œβ”€β”€ User.ts
72
+ β”‚ β”‚ β”œβ”€β”€ Post.ts
73
+ β”‚ β”‚ β”œβ”€β”€ index.ts
74
+ β”‚ β”‚ └── ...
75
+ β”‚ └── config/
76
+ β”‚ └── acl.ts
77
+ └── routes/
78
+ └── api/
79
+ └── v1/
80
+ β”œβ”€β”€ users.ts
81
+ β”œβ”€β”€ posts.ts
82
+ β”œβ”€β”€ index.ts
83
+ └── ...
84
+ ```
85
+
86
+ ## Generated Code Examples
87
+
88
+ ### Model (TypeScript)
89
+
90
+ ```typescript
91
+ // src/models/Users.ts
92
+ import { Model } from '../orm/Model';
93
+ import { QueryBuilder, prisma } from '../orm/QueryBuilder';
94
+ import type { ModelOptions, GetManyResult } from '../types';
95
+
96
+ export class Users extends Model {
97
+ constructor(options?: ModelOptions) {
98
+ super('users', options);
99
+ }
100
+
101
+ async getMany(
102
+ q: Record<string, unknown> = {},
103
+ include: string | Record<string, unknown> = '',
104
+ limit: number = 25,
105
+ offset: number = 0,
106
+ sortBy: string = 'id',
107
+ sortOrder: 'asc' | 'desc' = 'asc'
108
+ ): Promise<GetManyResult> {
109
+ return await this._getMany(q, include, Number(limit), Number(offset), sortBy, sortOrder);
110
+ }
111
+
112
+ async get(id: string | number, include?: string | Record<string, unknown>): Promise<Record<string, unknown>> {
113
+ return await this._get(id, include);
114
+ }
115
+
116
+ async create(data: Record<string, unknown>): Promise<Record<string, unknown>> {
117
+ return await this._create(data);
118
+ }
119
+
120
+ async update(id: string | number, data: Record<string, unknown>): Promise<Record<string, unknown>> {
121
+ return await this._update(id, data);
122
+ }
123
+
124
+ async delete(id: string | number): Promise<Record<string, unknown>> {
125
+ return await this._delete(id);
126
+ }
127
+
128
+ filter(include: string | Record<string, unknown>): Record<string, unknown> {
129
+ return { ...this._filter(include), ...this.getAccessFilter() };
130
+ }
131
+
132
+ static override QueryBuilder = new QueryBuilder('users');
133
+ }
134
+ ```
135
+
136
+ ### Route (Fastify TypeScript)
137
+
138
+ ```typescript
139
+ // routes/api/v1/users.ts
140
+ import { FastifyPluginAsync, FastifyRequest, FastifyReply } from 'fastify';
141
+ import { Users, QueryBuilder } from '../../../src/models/Users';
142
+
143
+ const usersRoutes: FastifyPluginAsync = async (fastify) => {
144
+ fastify.addHook('preHandler', async (request, reply) => {
145
+ if (!request.user) {
146
+ return reply.sendError(401, 'no_valid_session');
147
+ }
148
+ (request as any).Users = new Users({ user: request.user });
149
+ });
150
+
151
+ fastify.get('/', async (request: FastifyRequest, reply: FastifyReply) => {
152
+ const { q = {}, include = '', limit = '25', offset = '0', sortBy = 'id', sortOrder = 'asc' } = request.query as Record<string, string>;
153
+ const model = (request as any).Users as Users;
154
+ const results = await model.getMany(q, include, Number(limit), Number(offset), sortBy, sortOrder as 'asc' | 'desc');
155
+ return reply.sendList(results.data, results.meta);
156
+ });
157
+
158
+ // ... POST, PATCH, DELETE handlers
159
+ };
160
+
161
+ export default usersRoutes;
162
+ ```
163
+
164
+ ### ACL (TypeScript)
165
+
166
+ ```typescript
167
+ // src/config/acl.ts
168
+ import type { AclConfig, RapiddUser } from '../types';
169
+
170
+ const acl: AclConfig = {
171
+ model: {
172
+ users: {
173
+ canCreate(): boolean {
174
+ return true;
175
+ },
176
+ getAccessFilter(user: RapiddUser) {
177
+ if (user.role === 'ADMIN') return {};
178
+ return { id: user.id };
179
+ },
180
+ getUpdateFilter(user: RapiddUser) {
181
+ if (user.role === 'ADMIN') return {};
182
+ return { id: user.id };
183
+ },
184
+ getDeleteFilter(user: RapiddUser) {
185
+ if (user.role === 'ADMIN') return {};
186
+ return false;
187
+ },
188
+ getOmitFields(): string[] {
189
+ return [];
190
+ },
191
+ },
192
+ // ... other models
193
+ },
194
+ };
195
+
196
+ export default acl;
197
+ ```
198
+
199
+ ## ACL Translation Example
200
+
201
+ **PostgreSQL Policy:**
202
+ ```sql
203
+ CREATE POLICY user_policy ON posts
204
+ FOR SELECT
205
+ USING (author_id = current_user_id() OR current_user_role() IN ('admin', 'moderator'));
206
+ ```
207
+
208
+ **Generated TypeScript:**
209
+ ```typescript
210
+ getAccessFilter(user: RapiddUser) {
211
+ if (['admin', 'moderator'].includes(user?.role)) return {};
212
+ return { author_id: user?.id };
213
+ }
214
+ ```
59
215
 
60
216
  ## Selective Generation
61
217
 
@@ -67,10 +223,9 @@ npx rapidd build --model account
67
223
  ```
68
224
 
69
225
  This will:
70
- - Generate/update `src/Model/Account.js`
71
- - Generate/update `routes/api/v1/account.js`
72
- - Update the `account` entry in `rapidd/relationships.json`
73
- - Update the `account` entry in `rapidd/acl.js`
226
+ - Generate/update `src/models/Account.ts`
227
+ - Generate/update `routes/api/v1/account.ts`
228
+ - Update the `account` entry in `src/config/acl.ts`
74
229
 
75
230
  ### Update Single Component
76
231
 
@@ -83,9 +238,6 @@ npx rapidd build --only acl
83
238
 
84
239
  # Regenerate all models
85
240
  npx rapidd build --only model
86
-
87
- # Regenerate relationships
88
- npx rapidd build --only relationship
89
241
  ```
90
242
 
91
243
  ### Combine Filters
@@ -98,41 +250,6 @@ npx rapidd build --model user --only route
98
250
  npx rapidd build --model account --only acl
99
251
  ```
100
252
 
101
- ## Generated Structure
102
-
103
- ```
104
- ./
105
- β”œβ”€β”€ src/Model/
106
- β”‚ β”œβ”€β”€ User.js
107
- β”‚ β”œβ”€β”€ Post.js
108
- β”‚ └── ...
109
- β”œβ”€β”€ routes/
110
- β”‚ β”œβ”€β”€ user.js
111
- β”‚ β”œβ”€β”€ post.js
112
- β”‚ └── ...
113
- └── rapidd/
114
- β”œβ”€β”€ acl.js
115
- β”œβ”€β”€ relationships.json
116
- └── rapidd.js
117
- ```
118
-
119
- ## ACL Translation Example
120
-
121
- **PostgreSQL Policy:**
122
- ```sql
123
- CREATE POLICY user_policy ON posts
124
- FOR SELECT
125
- USING (author_id = current_user_id() OR current_user_role() IN ('admin', 'moderator'));
126
- ```
127
-
128
- **Generated JavaScript:**
129
- ```javascript
130
- getAccessFilter: (user) => {
131
- if (['admin', 'moderator'].includes(user?.role)) return {};
132
- return { author_id: user?.id };
133
- }
134
- ```
135
-
136
253
  ## Use Cases
137
254
 
138
255
  ### During Development
@@ -140,9 +257,6 @@ getAccessFilter: (user) => {
140
257
  # After adding a new model to schema
141
258
  npx rapidd build --model newModel
142
259
 
143
- # After changing relationships
144
- npx rapidd build --only relationship
145
-
146
260
  # After updating RLS policies
147
261
  npx rapidd build --only acl
148
262
  ```
@@ -160,6 +274,33 @@ npx rapidd build --model user --only model
160
274
  npx rapidd build --model user --only acl
161
275
  ```
162
276
 
277
+ ## Migration from v1 (JavaScript/Express) to v2 (TypeScript/Fastify)
278
+
279
+ Version 2.0 brings major changes:
280
+
281
+ 1. **TypeScript Output** - All generated files are now TypeScript (`.ts`)
282
+ 2. **Fastify Framework** - Routes now use Fastify instead of Express
283
+ 3. **New Directory Structure**:
284
+ - Models: `src/models/` (was `src/Model/`)
285
+ - ACL: `src/config/acl.ts` (was `rapidd/acl.js`)
286
+ - Routes: `routes/api/v1/*.ts` (now TypeScript)
287
+ 4. **Removed**: `rapidd/` folder and `relationships.json` are no longer generated
288
+
289
+ ### Upgrade Steps
290
+
291
+ ```bash
292
+ # 1. Update dependencies
293
+ npm install @rapidd/build@latest
294
+ npm install prisma@^7.0.0 @prisma/client@^7.0.0
295
+
296
+ # 2. Full rebuild
297
+ npx rapidd build
298
+
299
+ # 3. Update your imports in existing code
300
+ # Old: const { User } = require('./src/Model/User');
301
+ # New: import { User } from './src/models/User';
302
+ ```
303
+
163
304
  ## Migration from Prisma 6 to 7
164
305
 
165
306
  If you're upgrading from Prisma 6, this package now automatically:
@@ -171,15 +312,25 @@ If you're upgrading from Prisma 6, this package now automatically:
171
312
  - `DATABASE_URL` environment variable
172
313
  3. **Maintains full compatibility** - no changes needed to your workflow
173
314
 
174
- Simply update your dependencies and rebuild:
315
+ ## API Usage
175
316
 
176
- ```bash
177
- npm install @rapidd/build@latest
178
- npm install prisma@^7.0.0 @prisma/client@^7.0.0
179
- npx rapidd build
180
- ```
317
+ You can also use the package programmatically:
181
318
 
182
- For more details on Prisma 7 migration, see the [official Prisma upgrade guide](https://www.prisma.io/docs/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-7).
319
+ ```typescript
320
+ import { buildModels, parsePrismaSchema, generateAllModels } from '@rapidd/build';
321
+
322
+ // Full build
323
+ await buildModels({
324
+ schema: './prisma/schema.prisma',
325
+ output: './generated'
326
+ });
327
+
328
+ // Parse schema only
329
+ const { models, enums } = parsePrismaSchema('./prisma/schema.prisma');
330
+
331
+ // Generate models only
332
+ generateAllModels(models, './src/models');
333
+ ```
183
334
 
184
335
  ## License
185
336
 
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const build_1 = require("../src/commands/build");
6
+ const program = new commander_1.Command();
7
+ program
8
+ .name('rapidd')
9
+ .description('Rapidd build tool for generating TypeScript model files from Prisma schema')
10
+ .version('2.0.0');
11
+ program
12
+ .command('build')
13
+ .description('Build TypeScript model files, routes, and ACL from Prisma schema')
14
+ .option('-s, --schema <path>', 'Path to Prisma schema file', process.env.PRISMA_SCHEMA_PATH || './prisma/schema.prisma')
15
+ .option('-o, --output <path>', 'Output base directory', './')
16
+ .option('-m, --model <name>', 'Generate/update only specific model (e.g., "account", "user")')
17
+ .option('--only <component>', 'Generate only specific component: "model", "route", or "acl"')
18
+ .option('--user-table <name>', 'Name of the user table for ACL (default: auto-detect from user/users)')
19
+ .option('--debug', 'Enable debug mode (generates acl-mappings.json)')
20
+ .action(async (options) => {
21
+ try {
22
+ await (0, build_1.buildModels)(options);
23
+ console.log('\nβœ“ Build completed successfully');
24
+ }
25
+ catch (error) {
26
+ console.error('Error building models:', error.message);
27
+ process.exit(1);
28
+ }
29
+ });
30
+ program.parse(process.argv);
31
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,iDAAkE;AAElE,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,4EAA4E,CAAC;KACzF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kEAAkE,CAAC;KAC/E,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,wBAAwB,CAAC;KACvH,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,IAAI,CAAC;KAC5D,MAAM,CAAC,oBAAoB,EAAE,+DAA+D,CAAC;KAC7F,MAAM,CAAC,oBAAoB,EAAE,8DAA8D,CAAC;KAC5F,MAAM,CAAC,qBAAqB,EAAE,uEAAuE,CAAC;KACtG,MAAM,CAAC,SAAS,EAAE,iDAAiD,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,OAAqB,EAAE,EAAE;IACtC,IAAI,CAAC;QACH,MAAM,IAAA,mBAAW,EAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export { buildModels } from './src/commands/build';
2
+ export type { BuildOptions } from './src/commands/build';
3
+ export { parsePrismaSchema, parsePrismaDMMF } from './src/parsers/prismaParser';
4
+ export { parseDatasource } from './src/parsers/datasourceParser';
5
+ export { DeepSQLAnalyzer } from './src/parsers/deepSQLAnalyzer';
6
+ export { PrismaFilterBuilder } from './src/parsers/prismaFilterBuilder';
7
+ export { createEnhancedConverter } from './src/parsers/enhancedRLSConverter';
8
+ export { analyzeFunctions, generateMappingConfig } from './src/parsers/functionAnalyzer';
9
+ export { generateModelFile, generateAllModels } from './src/generators/modelGenerator';
10
+ export { generateRouteFile, generateAllRoutes } from './src/generators/routeGenerator';
11
+ export { generateACL } from './src/generators/aclGenerator';
12
+ export type { ModelInfo, ModelField, ModelRelation, RelationshipInfo } from './src/parsers/prismaFilterBuilder';
13
+ export type { SQLFilter, SQLCondition, SQLAnalysis } from './src/parsers/deepSQLAnalyzer';
14
+ export type { DatasourceConfig } from './src/parsers/datasourceParser';
15
+ export type { ParsedSchema } from './src/parsers/prismaParser';
16
+ export type { EnhancedConverter } from './src/parsers/enhancedRLSConverter';
17
+ export type { FunctionMapping, FunctionAnalysisResult, MappingConfig } from './src/parsers/functionAnalyzer';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAGzF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAG5D,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAChH,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC1F,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ // Main exports for @rapidd/build
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.generateACL = exports.generateAllRoutes = exports.generateRouteFile = exports.generateAllModels = exports.generateModelFile = exports.generateMappingConfig = exports.analyzeFunctions = exports.createEnhancedConverter = exports.PrismaFilterBuilder = exports.DeepSQLAnalyzer = exports.parseDatasource = exports.parsePrismaDMMF = exports.parsePrismaSchema = exports.buildModels = void 0;
5
+ // Commands
6
+ var build_1 = require("./src/commands/build");
7
+ Object.defineProperty(exports, "buildModels", { enumerable: true, get: function () { return build_1.buildModels; } });
8
+ // Parsers
9
+ var prismaParser_1 = require("./src/parsers/prismaParser");
10
+ Object.defineProperty(exports, "parsePrismaSchema", { enumerable: true, get: function () { return prismaParser_1.parsePrismaSchema; } });
11
+ Object.defineProperty(exports, "parsePrismaDMMF", { enumerable: true, get: function () { return prismaParser_1.parsePrismaDMMF; } });
12
+ var datasourceParser_1 = require("./src/parsers/datasourceParser");
13
+ Object.defineProperty(exports, "parseDatasource", { enumerable: true, get: function () { return datasourceParser_1.parseDatasource; } });
14
+ var deepSQLAnalyzer_1 = require("./src/parsers/deepSQLAnalyzer");
15
+ Object.defineProperty(exports, "DeepSQLAnalyzer", { enumerable: true, get: function () { return deepSQLAnalyzer_1.DeepSQLAnalyzer; } });
16
+ var prismaFilterBuilder_1 = require("./src/parsers/prismaFilterBuilder");
17
+ Object.defineProperty(exports, "PrismaFilterBuilder", { enumerable: true, get: function () { return prismaFilterBuilder_1.PrismaFilterBuilder; } });
18
+ var enhancedRLSConverter_1 = require("./src/parsers/enhancedRLSConverter");
19
+ Object.defineProperty(exports, "createEnhancedConverter", { enumerable: true, get: function () { return enhancedRLSConverter_1.createEnhancedConverter; } });
20
+ var functionAnalyzer_1 = require("./src/parsers/functionAnalyzer");
21
+ Object.defineProperty(exports, "analyzeFunctions", { enumerable: true, get: function () { return functionAnalyzer_1.analyzeFunctions; } });
22
+ Object.defineProperty(exports, "generateMappingConfig", { enumerable: true, get: function () { return functionAnalyzer_1.generateMappingConfig; } });
23
+ // Generators
24
+ var modelGenerator_1 = require("./src/generators/modelGenerator");
25
+ Object.defineProperty(exports, "generateModelFile", { enumerable: true, get: function () { return modelGenerator_1.generateModelFile; } });
26
+ Object.defineProperty(exports, "generateAllModels", { enumerable: true, get: function () { return modelGenerator_1.generateAllModels; } });
27
+ var routeGenerator_1 = require("./src/generators/routeGenerator");
28
+ Object.defineProperty(exports, "generateRouteFile", { enumerable: true, get: function () { return routeGenerator_1.generateRouteFile; } });
29
+ Object.defineProperty(exports, "generateAllRoutes", { enumerable: true, get: function () { return routeGenerator_1.generateAllRoutes; } });
30
+ var aclGenerator_1 = require("./src/generators/aclGenerator");
31
+ Object.defineProperty(exports, "generateACL", { enumerable: true, get: function () { return aclGenerator_1.generateACL; } });
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAAA,iCAAiC;;;AAEjC,WAAW;AACX,8CAAmD;AAA1C,oGAAA,WAAW,OAAA;AAGpB,UAAU;AACV,2DAAgF;AAAvE,iHAAA,iBAAiB,OAAA;AAAE,+GAAA,eAAe,OAAA;AAC3C,mEAAiE;AAAxD,mHAAA,eAAe,OAAA;AACxB,iEAAgE;AAAvD,kHAAA,eAAe,OAAA;AACxB,yEAAwE;AAA/D,0HAAA,mBAAmB,OAAA;AAC5B,2EAA6E;AAApE,+HAAA,uBAAuB,OAAA;AAChC,mEAAyF;AAAhF,oHAAA,gBAAgB,OAAA;AAAE,yHAAA,qBAAqB,OAAA;AAEhD,aAAa;AACb,kEAAuF;AAA9E,mHAAA,iBAAiB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAC7C,kEAAuF;AAA9E,mHAAA,iBAAiB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAC7C,8DAA4D;AAAnD,2GAAA,WAAW,OAAA"}
@@ -0,0 +1,17 @@
1
+ import type { ModelInfo } from '../parsers/prismaFilterBuilder';
2
+ export interface BuildOptions {
3
+ schema: string;
4
+ output: string;
5
+ model?: string;
6
+ only?: 'model' | 'route' | 'acl';
7
+ userTable?: string;
8
+ debug?: boolean;
9
+ }
10
+ /**
11
+ * Build models from Prisma schema
12
+ */
13
+ export declare function buildModels(options: BuildOptions): Promise<{
14
+ models: Record<string, ModelInfo>;
15
+ enums: any;
16
+ }>;
17
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/build.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,gCAAgC,CAAC;AAElF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgHD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,CAAC,CA0InH"}