@rapidd/build 1.2.2 β 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.
- package/README.md +219 -68
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +31 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/src/commands/build.d.ts +17 -0
- package/dist/src/commands/build.d.ts.map +1 -0
- package/dist/src/commands/build.js +236 -0
- package/dist/src/commands/build.js.map +1 -0
- package/dist/src/generators/aclGenerator.d.ts +6 -0
- package/dist/src/generators/aclGenerator.d.ts.map +1 -0
- package/dist/src/generators/aclGenerator.js +384 -0
- package/dist/src/generators/aclGenerator.js.map +1 -0
- package/dist/src/generators/index.d.ts +4 -0
- package/dist/src/generators/index.d.ts.map +1 -0
- package/dist/src/generators/index.js +13 -0
- package/dist/src/generators/index.js.map +1 -0
- package/dist/src/generators/modelGenerator.d.ts +10 -0
- package/dist/src/generators/modelGenerator.d.ts.map +1 -0
- package/dist/src/generators/modelGenerator.js +143 -0
- package/dist/src/generators/modelGenerator.js.map +1 -0
- package/dist/src/generators/routeGenerator.d.ts +10 -0
- package/dist/src/generators/routeGenerator.d.ts.map +1 -0
- package/dist/src/generators/routeGenerator.js +172 -0
- package/dist/src/generators/routeGenerator.js.map +1 -0
- package/dist/src/parsers/datasourceParser.d.ts +11 -0
- package/dist/src/parsers/datasourceParser.d.ts.map +1 -0
- package/dist/src/parsers/datasourceParser.js +131 -0
- package/dist/src/parsers/datasourceParser.js.map +1 -0
- package/dist/src/parsers/deepSQLAnalyzer.d.ts +85 -0
- package/dist/src/parsers/deepSQLAnalyzer.d.ts.map +1 -0
- package/dist/src/parsers/deepSQLAnalyzer.js +482 -0
- package/dist/src/parsers/deepSQLAnalyzer.js.map +1 -0
- package/dist/src/parsers/enhancedRLSConverter.d.ts +14 -0
- package/dist/src/parsers/enhancedRLSConverter.d.ts.map +1 -0
- package/dist/src/parsers/enhancedRLSConverter.js +168 -0
- package/dist/src/parsers/enhancedRLSConverter.js.map +1 -0
- package/dist/src/parsers/functionAnalyzer.d.ts +55 -0
- package/dist/src/parsers/functionAnalyzer.d.ts.map +1 -0
- package/dist/src/parsers/functionAnalyzer.js +274 -0
- package/dist/src/parsers/functionAnalyzer.js.map +1 -0
- package/dist/src/parsers/index.d.ts +13 -0
- package/dist/src/parsers/index.d.ts.map +1 -0
- package/dist/src/parsers/index.js +20 -0
- package/dist/src/parsers/index.js.map +1 -0
- package/dist/src/parsers/prismaFilterBuilder.d.ts +79 -0
- package/dist/src/parsers/prismaFilterBuilder.d.ts.map +1 -0
- package/dist/src/parsers/prismaFilterBuilder.js +322 -0
- package/dist/src/parsers/prismaFilterBuilder.js.map +1 -0
- package/dist/src/parsers/prismaParser.d.ts +14 -0
- package/dist/src/parsers/prismaParser.d.ts.map +1 -0
- package/dist/src/parsers/prismaParser.js +263 -0
- package/dist/src/parsers/prismaParser.js.map +1 -0
- package/package.json +21 -13
- package/bin/cli.js +0 -33
- package/index.js +0 -11
- package/src/commands/build.js +0 -638
- package/src/generators/aclGenerator.js +0 -394
- package/src/generators/modelGenerator.js +0 -172
- package/src/generators/relationshipsGenerator.js +0 -200
- package/src/generators/routeGenerator.js +0 -119
- package/src/parsers/datasourceParser.js +0 -121
- package/src/parsers/deepSQLAnalyzer.js +0 -554
- package/src/parsers/enhancedRLSConverter.js +0 -181
- package/src/parsers/functionAnalyzer.js +0 -302
- package/src/parsers/prismaFilterBuilder.js +0 -422
- 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
|
|
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
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
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
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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/
|
|
71
|
-
- Generate/update `routes/api/v1/account.
|
|
72
|
-
- Update the `account` entry in `
|
|
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
|
-
|
|
315
|
+
## API Usage
|
|
175
316
|
|
|
176
|
-
|
|
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
|
-
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":""}
|
package/dist/bin/cli.js
ADDED
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|