crudora 0.1.0-alpha.2 → 0.1.0-alpha.4
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 +172 -42
- package/dist/core/crudora.d.ts.map +1 -1
- package/dist/core/crudora.js +48 -3
- package/dist/core/crudora.js.map +1 -1
- package/dist/core/model.d.ts +19 -0
- package/dist/core/model.d.ts.map +1 -1
- package/dist/core/model.js +86 -0
- package/dist/core/model.js.map +1 -1
- package/dist/core/repository.d.ts +2 -0
- package/dist/core/repository.d.ts.map +1 -1
- package/dist/core/repository.js +119 -12
- package/dist/core/repository.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/scripts/copy-assets.js +26 -6
- package/dist/scripts/postinstall.js +134 -12
- package/dist/templates/.env.example +9 -0
- package/dist/utils/validation.d.ts +3 -3
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +15 -47
- package/dist/utils/validation.js.map +1 -1
- package/package.json +4 -2
- package/scripts/copy-assets.js +26 -6
- package/scripts/postinstall.js +134 -12
- package/templates/.env.example +9 -0
package/README.md
CHANGED
|
@@ -16,6 +16,12 @@ Automatic CRUD API generator for TypeScript with Prisma - Build REST APIs in min
|
|
|
16
16
|
- 🔌 **Extensible**: Custom routes and middleware support
|
|
17
17
|
- 📖 **Schema Generation**: Auto-generate Prisma schemas from models
|
|
18
18
|
- 🗄️ **Repository Pattern**: Built-in repository for database operations
|
|
19
|
+
- 🔄 **Lifecycle Hooks**: beforeCreate, afterCreate, beforeUpdate, afterUpdate, beforeDelete, afterDelete, beforeFind, afterFind
|
|
20
|
+
- 🔒 **Field Security**: Hidden fields support with automatic filtering
|
|
21
|
+
- 🎛️ **Dynamic Selection**: Smart field selection based on fillable and hidden properties
|
|
22
|
+
- ⚡ **Auto Setup**: Intelligent postinstall script for quick project initialization
|
|
23
|
+
- 🔄 **TypeScript First**: Native TypeScript support with ESM modules
|
|
24
|
+
- 🖥️ **CLI Tool**: Command-line interface for project initialization and scaffolding
|
|
19
25
|
|
|
20
26
|
## Installation
|
|
21
27
|
|
|
@@ -25,9 +31,45 @@ npm install crudora prisma @prisma/client
|
|
|
25
31
|
yarn add crudora prisma @prisma/client
|
|
26
32
|
```
|
|
27
33
|
|
|
34
|
+
**Note**: After installation, Crudora automatically sets up your project with:
|
|
35
|
+
|
|
36
|
+
- Prisma schema template
|
|
37
|
+
- Environment configuration (.env)
|
|
38
|
+
- Basic server setup (server.ts)
|
|
39
|
+
- Useful npm scripts
|
|
40
|
+
|
|
41
|
+
## CLI Usage
|
|
42
|
+
|
|
43
|
+
Crudora comes with a built-in CLI tool for quick project initialization and database management:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Initialize a new Crudora project in the current directory
|
|
47
|
+
npx crudora init
|
|
48
|
+
|
|
49
|
+
# Start Prisma Studio for database management
|
|
50
|
+
npx crudora studio
|
|
51
|
+
|
|
52
|
+
# Generate Prisma Client
|
|
53
|
+
npx crudora generate
|
|
54
|
+
|
|
55
|
+
# Push Prisma schema to database
|
|
56
|
+
npx crudora push
|
|
57
|
+
|
|
58
|
+
# Run Prisma migrations
|
|
59
|
+
npx crudora migrate
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### CLI Commands
|
|
63
|
+
|
|
64
|
+
- `init` - Initialize a new Crudora project with necessary files (schema.prisma, .env, server.ts, tsconfig.json)
|
|
65
|
+
- `studio` - Start Prisma Studio for visual database management
|
|
66
|
+
- `generate` - Generate Prisma Client based on your schema
|
|
67
|
+
- `push` - Push Prisma schema to your database without migrations
|
|
68
|
+
- `migrate` - Run Prisma migrations for schema changes
|
|
69
|
+
|
|
28
70
|
## Quick Start
|
|
29
71
|
|
|
30
|
-
###
|
|
72
|
+
### Basic Usage
|
|
31
73
|
|
|
32
74
|
```typescript
|
|
33
75
|
import { CrudoraServer, Model } from "crudora";
|
|
@@ -35,26 +77,34 @@ import { PrismaClient } from "@prisma/client";
|
|
|
35
77
|
|
|
36
78
|
const prisma = new PrismaClient();
|
|
37
79
|
|
|
38
|
-
// Define your models
|
|
39
80
|
class User extends Model {
|
|
40
81
|
static tableName = "users";
|
|
41
82
|
static primaryKey = "id";
|
|
42
83
|
static timestamps = true;
|
|
43
|
-
static fillable = ["name", "email"];
|
|
84
|
+
static fillable = ["name", "email", "password"];
|
|
44
85
|
static hidden = ["password"];
|
|
86
|
+
|
|
87
|
+
// Lifecycle hooks
|
|
88
|
+
static async beforeCreate(data: any): Promise<any> {
|
|
89
|
+
data.password = await hashPassword(data.password);
|
|
90
|
+
return data;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
static async afterCreate(data: any, result: any): Promise<any> {
|
|
94
|
+
console.log(`User created: ${result.email}`);
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
45
97
|
}
|
|
46
98
|
|
|
47
99
|
class Post extends Model {
|
|
48
100
|
static tableName = "posts";
|
|
49
101
|
static fillable = ["title", "content", "authorId"];
|
|
102
|
+
static hidden = ["deletedAt"];
|
|
50
103
|
}
|
|
51
104
|
|
|
52
|
-
// Create server and register models
|
|
53
105
|
const server = new CrudoraServer({
|
|
54
106
|
port: 3000,
|
|
55
107
|
prisma: prisma,
|
|
56
|
-
cors: true,
|
|
57
|
-
basePath: "/api",
|
|
58
108
|
});
|
|
59
109
|
|
|
60
110
|
server
|
|
@@ -65,40 +115,6 @@ server
|
|
|
65
115
|
});
|
|
66
116
|
```
|
|
67
117
|
|
|
68
|
-
### Method 2: Decorator Pattern
|
|
69
|
-
|
|
70
|
-
```typescript
|
|
71
|
-
import { CrudoraServer, Model, Field } from "crudora";
|
|
72
|
-
import { PrismaClient } from "@prisma/client";
|
|
73
|
-
|
|
74
|
-
const prisma = new PrismaClient();
|
|
75
|
-
|
|
76
|
-
@Model({ tableName: "users" })
|
|
77
|
-
class User {
|
|
78
|
-
@Field({ type: "uuid", primary: true })
|
|
79
|
-
id!: string;
|
|
80
|
-
|
|
81
|
-
@Field({ type: "string", required: true })
|
|
82
|
-
name!: string;
|
|
83
|
-
|
|
84
|
-
@Field({ type: "string", unique: true, required: true })
|
|
85
|
-
email!: string;
|
|
86
|
-
|
|
87
|
-
@Field({ type: "date" })
|
|
88
|
-
createdAt!: Date;
|
|
89
|
-
|
|
90
|
-
@Field({ type: "date" })
|
|
91
|
-
updatedAt!: Date;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const server = new CrudoraServer({
|
|
95
|
-
port: 3000,
|
|
96
|
-
prisma: prisma,
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
server.registerModel(User).generateRoutes().listen();
|
|
100
|
-
```
|
|
101
|
-
|
|
102
118
|
## Generated API Endpoints
|
|
103
119
|
|
|
104
120
|
For each registered model, Crudora automatically generates:
|
|
@@ -118,19 +134,97 @@ For each registered model, Crudora automatically generates:
|
|
|
118
134
|
|
|
119
135
|
## Advanced Usage
|
|
120
136
|
|
|
137
|
+
### Lifecycle Hooks
|
|
138
|
+
|
|
139
|
+
Crudora supports comprehensive lifecycle hooks for all CRUD operations:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
class User extends Model {
|
|
143
|
+
static tableName = "users";
|
|
144
|
+
static fillable = ["name", "email", "password"];
|
|
145
|
+
static hidden = ["password"];
|
|
146
|
+
|
|
147
|
+
// Create hooks
|
|
148
|
+
static async beforeCreate(data: any): Promise<any> {
|
|
149
|
+
data.password = await hashPassword(data.password);
|
|
150
|
+
data.createdAt = new Date();
|
|
151
|
+
return data;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
static async afterCreate(data: any, result: any): Promise<any> {
|
|
155
|
+
await sendWelcomeEmail(result.email);
|
|
156
|
+
await logUserCreation(result.id);
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Update hooks
|
|
161
|
+
static async beforeUpdate(id: string, data: any): Promise<any> {
|
|
162
|
+
data.updatedAt = new Date();
|
|
163
|
+
return data;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
static async afterUpdate(id: string, data: any, result: any): Promise<any> {
|
|
167
|
+
await logUserUpdate(id, data);
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Delete hooks
|
|
172
|
+
static async beforeDelete(id: string): Promise<void> {
|
|
173
|
+
await archiveUserData(id);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
static async afterDelete(id: string, result: any): Promise<any> {
|
|
177
|
+
await logUserDeletion(id);
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Find hooks
|
|
182
|
+
static async beforeFind(options: any): Promise<any> {
|
|
183
|
+
// Add default filters
|
|
184
|
+
options.where = { ...options.where, active: true };
|
|
185
|
+
return options;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
static async afterFind(result: any): Promise<any> {
|
|
189
|
+
// Transform result
|
|
190
|
+
if (Array.isArray(result)) {
|
|
191
|
+
return result.map((user) => ({ ...user, displayName: user.name }));
|
|
192
|
+
}
|
|
193
|
+
return { ...result, displayName: result.name };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Field Security and Dynamic Selection
|
|
199
|
+
|
|
200
|
+
Crudora automatically handles field security and dynamic selection:
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
class User extends Model {
|
|
204
|
+
static tableName = "users";
|
|
205
|
+
static fillable = ["name", "email", "bio"]; // Only these fields can be mass-assigned
|
|
206
|
+
static hidden = ["password", "secret"]; // These fields are automatically excluded from responses
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// API responses automatically exclude hidden fields
|
|
210
|
+
// Only fillable fields are included in select queries for better performance
|
|
211
|
+
```
|
|
212
|
+
|
|
121
213
|
### Using Repositories
|
|
122
214
|
|
|
123
215
|
```typescript
|
|
124
216
|
const crudora = server.getCrudora();
|
|
125
217
|
const userRepo = crudora.getRepository(User);
|
|
126
218
|
|
|
127
|
-
// Create user
|
|
219
|
+
// Create user (triggers beforeCreate and afterCreate hooks)
|
|
128
220
|
const user = await userRepo.create({
|
|
129
221
|
name: "John Doe",
|
|
130
222
|
email: "john@example.com",
|
|
223
|
+
password: "plaintext", // Will be hashed by beforeCreate hook
|
|
131
224
|
});
|
|
225
|
+
// Response excludes password due to hidden field
|
|
132
226
|
|
|
133
|
-
// Find users
|
|
227
|
+
// Find users (triggers beforeFind and afterFind hooks)
|
|
134
228
|
const users = await userRepo.findAll({
|
|
135
229
|
skip: 0,
|
|
136
230
|
take: 10,
|
|
@@ -138,6 +232,11 @@ const users = await userRepo.findAll({
|
|
|
138
232
|
orderBy: { createdAt: "desc" },
|
|
139
233
|
});
|
|
140
234
|
|
|
235
|
+
// Update user (triggers beforeUpdate and afterUpdate hooks)
|
|
236
|
+
const updatedUser = await userRepo.update("user-id", {
|
|
237
|
+
name: "John Updated",
|
|
238
|
+
});
|
|
239
|
+
|
|
141
240
|
// Count users
|
|
142
241
|
const count = await userRepo.count({ active: true });
|
|
143
242
|
```
|
|
@@ -178,6 +277,37 @@ const partialSchema = crudora.getValidationSchema(User);
|
|
|
178
277
|
const strictSchema = crudora.getStrictValidationSchema(User);
|
|
179
278
|
```
|
|
180
279
|
|
|
280
|
+
## Project Setup
|
|
281
|
+
|
|
282
|
+
After installing Crudora, run these commands to complete setup:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
# Install additional dependencies
|
|
286
|
+
npm install @prisma/client prisma dotenv
|
|
287
|
+
|
|
288
|
+
# Generate Prisma client
|
|
289
|
+
npm run db:generate
|
|
290
|
+
|
|
291
|
+
# Push database schema
|
|
292
|
+
npm run db:push
|
|
293
|
+
|
|
294
|
+
# Start development server
|
|
295
|
+
npm run dev
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Available Scripts
|
|
299
|
+
|
|
300
|
+
Crudora automatically adds these scripts to your package.json:
|
|
301
|
+
|
|
302
|
+
- `npm run dev` - Start development server with ts-node
|
|
303
|
+
- `npm run build` - Build TypeScript to JavaScript
|
|
304
|
+
- `npm run start` - Start production server from built JavaScript
|
|
305
|
+
- `npm run start:prod` - Build and start production server
|
|
306
|
+
- `npm run db:generate` - Generate Prisma client
|
|
307
|
+
- `npm run db:push` - Push schema to database
|
|
308
|
+
- `npm run db:migrate` - Run database migrations
|
|
309
|
+
- `npm run db:studio` - Open Prisma Studio
|
|
310
|
+
|
|
181
311
|
## Documentation
|
|
182
312
|
|
|
183
313
|
- [API Reference](./docs/api.md)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crudora.d.ts","sourceRoot":"","sources":["../../src/core/crudora.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAElD,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,YAAY,CAIZ;gBAEI,MAAM,CAAC,EAAE,YAAY;IAQjC,aAAa,CAAC,GAAG,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAWxD,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAQ9E,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM;IAKvD,mBAAmB,CAAC,CAAC,SAAS,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAI5F,yBAAyB,CAAC,CAAC,SAAS,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAKzF,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAK9D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAK/D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAK9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAKjE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"crudora.d.ts","sourceRoot":"","sources":["../../src/core/crudora.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAElD,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,YAAY,CAIZ;gBAEI,MAAM,CAAC,EAAE,YAAY;IAQjC,aAAa,CAAC,GAAG,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAWxD,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAQ9E,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM;IAKvD,mBAAmB,CAAC,CAAC,SAAS,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAI5F,yBAAyB,CAAC,CAAC,SAAS,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAKzF,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAK9D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAK/D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAK9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAKjE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAOhE,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAE,MAAe,GAAG,IAAI;CAsK9D"}
|
package/dist/core/crudora.js
CHANGED
|
@@ -64,7 +64,52 @@ class Crudora {
|
|
|
64
64
|
return this;
|
|
65
65
|
}
|
|
66
66
|
// Auto-generate REST API routes
|
|
67
|
+
// Auto-generate REST API routes
|
|
67
68
|
generateRoutes(app, basePath = '/api') {
|
|
69
|
+
// Add API documentation endpoint
|
|
70
|
+
app.get(basePath, (req, res) => {
|
|
71
|
+
const routes = [];
|
|
72
|
+
// Add CRUD routes for each model
|
|
73
|
+
for (const [modelName, modelClass] of this.models) {
|
|
74
|
+
const routePath = `${basePath}/${modelClass.getTableName()}`;
|
|
75
|
+
routes.push({
|
|
76
|
+
method: 'GET',
|
|
77
|
+
path: routePath,
|
|
78
|
+
description: `List all ${modelClass.getTableName()}`,
|
|
79
|
+
type: 'CRUD'
|
|
80
|
+
}, {
|
|
81
|
+
method: 'GET',
|
|
82
|
+
path: `${routePath}/:id`,
|
|
83
|
+
description: `Get ${modelClass.getTableName()} by ID`,
|
|
84
|
+
type: 'CRUD'
|
|
85
|
+
}, {
|
|
86
|
+
method: 'POST',
|
|
87
|
+
path: routePath,
|
|
88
|
+
description: `Create new ${modelClass.getTableName()}`,
|
|
89
|
+
type: 'CRUD'
|
|
90
|
+
}, {
|
|
91
|
+
method: 'PUT',
|
|
92
|
+
path: `${routePath}/:id`,
|
|
93
|
+
description: `Update ${modelClass.getTableName()} by ID`,
|
|
94
|
+
type: 'CRUD'
|
|
95
|
+
}, {
|
|
96
|
+
method: 'DELETE',
|
|
97
|
+
path: `${routePath}/:id`,
|
|
98
|
+
description: `Delete ${modelClass.getTableName()} by ID`,
|
|
99
|
+
type: 'CRUD'
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Add custom routes
|
|
103
|
+
for (const route of this.customRoutes) {
|
|
104
|
+
routes.push({
|
|
105
|
+
method: route.method,
|
|
106
|
+
path: `${basePath}${route.path}`,
|
|
107
|
+
description: `Custom ${route.method} route`,
|
|
108
|
+
type: 'Custom'
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
res.json({ routes });
|
|
112
|
+
});
|
|
68
113
|
// Generate CRUD routes for models
|
|
69
114
|
for (const [modelName, modelClass] of this.models) {
|
|
70
115
|
const repository = this.getRepository(modelClass);
|
|
@@ -108,11 +153,11 @@ class Crudora {
|
|
|
108
153
|
res.status(500).json({ error: 'Internal server error' });
|
|
109
154
|
}
|
|
110
155
|
});
|
|
111
|
-
// POST /api/model - Create
|
|
156
|
+
// POST /api/model - Create
|
|
112
157
|
app.post(routePath, async (req, res) => {
|
|
113
158
|
try {
|
|
114
|
-
|
|
115
|
-
const validatedData =
|
|
159
|
+
// Gunakan partial validation schema instead of strict
|
|
160
|
+
const validatedData = validationSchema.parse(req.body);
|
|
116
161
|
const item = await repository.create(validatedData);
|
|
117
162
|
res.status(201).json(item);
|
|
118
163
|
}
|
package/dist/core/crudora.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crudora.js","sourceRoot":"","sources":["../../src/core/crudora.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"crudora.js","sourceRoot":"","sources":["../../src/core/crudora.ts"],"names":[],"mappings":"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"}
|
package/dist/core/model.d.ts
CHANGED
|
@@ -6,6 +6,17 @@ export declare abstract class Model {
|
|
|
6
6
|
static hidden?: string[];
|
|
7
7
|
static getTableName(): string;
|
|
8
8
|
static getPrimaryKey(): string;
|
|
9
|
+
static beforeCreate?(data: any): Promise<any>;
|
|
10
|
+
static afterCreate?(data: any, result: any): Promise<any>;
|
|
11
|
+
static beforeUpdate?(id: string, data: any): Promise<any>;
|
|
12
|
+
static afterUpdate?(id: string, data: any, result: any): Promise<any>;
|
|
13
|
+
static beforeDelete?(id: string): Promise<void>;
|
|
14
|
+
static afterDelete?(id: string, result: any): Promise<any>;
|
|
15
|
+
static beforeFind?(options?: any): Promise<any>;
|
|
16
|
+
static afterFind?(result: any): Promise<any>;
|
|
17
|
+
beforeSave?(): Promise<void>;
|
|
18
|
+
afterSave?(): Promise<void>;
|
|
19
|
+
static getSelectObject(prismaClient?: any): any;
|
|
9
20
|
}
|
|
10
21
|
export type ModelConstructor<T extends Model = Model> = {
|
|
11
22
|
new (): T;
|
|
@@ -16,5 +27,13 @@ export type ModelConstructor<T extends Model = Model> = {
|
|
|
16
27
|
hidden?: string[];
|
|
17
28
|
getTableName(): string;
|
|
18
29
|
getPrimaryKey(): string;
|
|
30
|
+
beforeCreate?(data: any): Promise<any>;
|
|
31
|
+
afterCreate?(data: any, result: any): Promise<any>;
|
|
32
|
+
beforeUpdate?(id: string, data: any): Promise<any>;
|
|
33
|
+
afterUpdate?(id: string, data: any, result: any): Promise<any>;
|
|
34
|
+
beforeDelete?(id: string): Promise<void>;
|
|
35
|
+
afterDelete?(id: string, result: any): Promise<any>;
|
|
36
|
+
beforeFind?(options?: any): Promise<any>;
|
|
37
|
+
afterFind?(result: any): Promise<any>;
|
|
19
38
|
} & typeof Model;
|
|
20
39
|
//# sourceMappingURL=model.d.ts.map
|
package/dist/core/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"AAAA,8BAAsB,KAAK;IACzB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAQ;IAClC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAQ;IACnC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,MAAM,CAAC,YAAY,IAAI,MAAM;IAI7B,MAAM,CAAC,aAAa,IAAI,MAAM;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"AAAA,8BAAsB,KAAK;IACzB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAQ;IAClC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAQ;IACnC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,MAAM,CAAC,YAAY,IAAI,MAAM;IAI7B,MAAM,CAAC,aAAa,IAAI,MAAM;WAKjB,YAAY,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;WAItC,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;WAIlD,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;WAIlD,WAAW,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;WAI9D,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIxC,WAAW,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;WAInD,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;WAIxC,SAAS,CAAC,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAK5C,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG;CAgEhD;AAGD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI;IACtD,QAAQ,CAAC,CAAC;IACV,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,IAAI,MAAM,CAAC;IACvB,aAAa,IAAI,MAAM,CAAC;IAGxB,YAAY,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,WAAW,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/D,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,WAAW,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpD,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,SAAS,CAAC,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACvC,GAAG,OAAO,KAAK,CAAC"}
|
package/dist/core/model.js
CHANGED
|
@@ -8,6 +8,92 @@ class Model {
|
|
|
8
8
|
static getPrimaryKey() {
|
|
9
9
|
return this.primaryKey || 'id';
|
|
10
10
|
}
|
|
11
|
+
// Lifecycle Hooks - Static methods untuk class-level hooks
|
|
12
|
+
static async beforeCreate(data) {
|
|
13
|
+
return data; // Default implementation - return data unchanged
|
|
14
|
+
}
|
|
15
|
+
static async afterCreate(data, result) {
|
|
16
|
+
return result; // Default implementation - return result unchanged
|
|
17
|
+
}
|
|
18
|
+
static async beforeUpdate(id, data) {
|
|
19
|
+
return data; // Default implementation - return data unchanged
|
|
20
|
+
}
|
|
21
|
+
static async afterUpdate(id, data, result) {
|
|
22
|
+
return result; // Default implementation - return result unchanged
|
|
23
|
+
}
|
|
24
|
+
static async beforeDelete(id) {
|
|
25
|
+
// Default implementation - do nothing
|
|
26
|
+
}
|
|
27
|
+
static async afterDelete(id, result) {
|
|
28
|
+
return result; // Default implementation - return result unchanged
|
|
29
|
+
}
|
|
30
|
+
static async beforeFind(options) {
|
|
31
|
+
return options; // Default implementation - return options unchanged
|
|
32
|
+
}
|
|
33
|
+
static async afterFind(result) {
|
|
34
|
+
return result; // Default implementation - return result unchanged
|
|
35
|
+
}
|
|
36
|
+
// Instance-level hooks (untuk future enhancement)
|
|
37
|
+
async beforeSave() {
|
|
38
|
+
// Default implementation - do nothing
|
|
39
|
+
}
|
|
40
|
+
async afterSave() {
|
|
41
|
+
// Default implementation - do nothing
|
|
42
|
+
}
|
|
43
|
+
// Method dinamis untuk generate select object
|
|
44
|
+
static getSelectObject(prismaClient) {
|
|
45
|
+
if (!this.hidden || this.hidden.length === 0) {
|
|
46
|
+
return undefined; // Return all fields jika tidak ada hidden
|
|
47
|
+
}
|
|
48
|
+
// Jika ada fillable, gunakan itu sebagai whitelist
|
|
49
|
+
if (this.fillable && this.fillable.length > 0) {
|
|
50
|
+
const selectObject = {};
|
|
51
|
+
// Include primary key jika tidak di-hidden
|
|
52
|
+
const primaryKey = this.getPrimaryKey();
|
|
53
|
+
if (!this.hidden.includes(primaryKey)) {
|
|
54
|
+
selectObject[primaryKey] = true;
|
|
55
|
+
}
|
|
56
|
+
// Include fillable fields jika tidak di-hidden
|
|
57
|
+
this.fillable.forEach(field => {
|
|
58
|
+
if (!this.hidden?.includes(field)) {
|
|
59
|
+
selectObject[field] = true;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// Include timestamp fields jika timestamps enabled dan tidak di-hidden
|
|
63
|
+
if (this.timestamps) {
|
|
64
|
+
if (!this.hidden.includes('createdAt')) {
|
|
65
|
+
selectObject.createdAt = true;
|
|
66
|
+
}
|
|
67
|
+
if (!this.hidden.includes('updatedAt')) {
|
|
68
|
+
selectObject.updatedAt = true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return selectObject;
|
|
72
|
+
}
|
|
73
|
+
// Jika tidak ada fillable, gunakan approach exclude dengan Prisma DMMF
|
|
74
|
+
if (prismaClient && prismaClient.dmmf) {
|
|
75
|
+
try {
|
|
76
|
+
const modelName = this.name;
|
|
77
|
+
const modelDef = prismaClient.dmmf.datamodel.models.find((model) => model.name === modelName);
|
|
78
|
+
if (modelDef) {
|
|
79
|
+
const selectObject = {};
|
|
80
|
+
// Include semua field kecuali yang di-hidden
|
|
81
|
+
modelDef.fields.forEach((field) => {
|
|
82
|
+
if (!this.hidden.includes(field.name)) {
|
|
83
|
+
selectObject[field.name] = true;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
return selectObject;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.warn('Failed to use Prisma DMMF for dynamic field selection:', error);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Fallback: return undefined untuk select semua field
|
|
94
|
+
// Lalu filter manual di level aplikasi jika diperlukan
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
11
97
|
}
|
|
12
98
|
exports.Model = Model;
|
|
13
99
|
Model.primaryKey = 'id';
|
package/dist/core/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":";;;AAAA,MAAsB,KAAK;IAOzB,MAAM,CAAC,YAAY;QACjB,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IACjC,CAAC;;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ export declare class Repository<T extends Model> {
|
|
|
5
5
|
private modelName;
|
|
6
6
|
private modelClass;
|
|
7
7
|
constructor(modelClass: ModelConstructor<T>, prisma: PrismaClient);
|
|
8
|
+
private getSelectOptions;
|
|
9
|
+
private filterHiddenFields;
|
|
8
10
|
create(data: Partial<T>): Promise<T>;
|
|
9
11
|
findById(id: string): Promise<T | null>;
|
|
10
12
|
findAll(options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/core/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/core/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAElD,qBAAa,UAAU,CAAC,CAAC,SAAS,KAAK;IACrC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAsB;gBAE5B,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY;IAMjE,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,kBAAkB;IAsBpB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA0BpC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA0BvC,OAAO,CAAC,OAAO,CAAC,EAAE;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,GAAG,CAAC;QACZ,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IA2BV,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiChD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAmB9B,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;CAI1C"}
|