crudora 0.1.0 → 0.2.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.
- package/LICENSE +21 -21
- package/README.md +554 -328
- package/dist/cli.js +62 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.cjs +1692 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +404 -0
- package/dist/index.d.ts +404 -10
- package/dist/index.js +1685 -16
- package/dist/index.js.map +1 -1
- package/dist/scripts/copy-assets.js +26 -47
- package/dist/scripts/postinstall.js +172 -136
- package/dist/templates/.env.example +13 -9
- package/dist/templates/drizzle.config.ts +10 -0
- package/dist/templates/schema.ts +23 -0
- package/package.json +109 -94
- package/scripts/copy-assets.js +26 -47
- package/scripts/postinstall.js +172 -136
- package/templates/.env.example +13 -9
- package/templates/drizzle.config.ts +10 -0
- package/templates/schema.ts +23 -0
- package/dist/core/crudora.d.ts +0 -24
- package/dist/core/crudora.d.ts.map +0 -1
- package/dist/core/crudora.js +0 -221
- package/dist/core/crudora.js.map +0 -1
- package/dist/core/crudoraServer.d.ts +0 -30
- package/dist/core/crudoraServer.d.ts.map +0 -1
- package/dist/core/crudoraServer.js +0 -83
- package/dist/core/crudoraServer.js.map +0 -1
- package/dist/core/model.d.ts +0 -39
- package/dist/core/model.d.ts.map +0 -1
- package/dist/core/model.js +0 -101
- package/dist/core/model.js.map +0 -1
- package/dist/core/repository.d.ts +0 -22
- package/dist/core/repository.d.ts.map +0 -1
- package/dist/core/repository.js +0 -149
- package/dist/core/repository.js.map +0 -1
- package/dist/core/schemaGenerator.d.ts +0 -6
- package/dist/core/schemaGenerator.d.ts.map +0 -1
- package/dist/core/schemaGenerator.js +0 -43
- package/dist/core/schemaGenerator.js.map +0 -1
- package/dist/decorators/model.d.ts +0 -9
- package/dist/decorators/model.d.ts.map +0 -1
- package/dist/decorators/model.js +0 -46
- package/dist/decorators/model.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/templates/schema.prisma +0 -22
- package/dist/types/model.type.d.ts +0 -13
- package/dist/types/model.type.d.ts.map +0 -1
- package/dist/types/model.type.js +0 -3
- package/dist/types/model.type.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -7
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -35
- package/dist/utils/validation.js.map +0 -1
- package/templates/schema.prisma +0 -22
package/dist/core/crudora.js
DELETED
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Crudora = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
const repository_1 = require("./repository");
|
|
6
|
-
const schemaGenerator_1 = require("./schemaGenerator");
|
|
7
|
-
const validation_1 = require("../utils/validation");
|
|
8
|
-
class Crudora {
|
|
9
|
-
constructor(prisma) {
|
|
10
|
-
this.models = new Map();
|
|
11
|
-
this.repositories = new Map();
|
|
12
|
-
this.customRoutes = [];
|
|
13
|
-
if (!prisma) {
|
|
14
|
-
console.warn('⚠️ No Prisma client provided. Make sure to install @prisma/client and prisma, then initialize PrismaClient.');
|
|
15
|
-
throw new Error('PrismaClient is required. Please provide a PrismaClient instance.');
|
|
16
|
-
}
|
|
17
|
-
this.prisma = prisma;
|
|
18
|
-
}
|
|
19
|
-
registerModel(...modelClasses) {
|
|
20
|
-
for (const modelClass of modelClasses) {
|
|
21
|
-
const modelName = modelClass.name;
|
|
22
|
-
this.models.set(modelName, modelClass);
|
|
23
|
-
const repository = new repository_1.Repository(modelClass, this.prisma);
|
|
24
|
-
this.repositories.set(modelName, repository);
|
|
25
|
-
}
|
|
26
|
-
return this;
|
|
27
|
-
}
|
|
28
|
-
getRepository(modelClass) {
|
|
29
|
-
const repository = this.repositories.get(modelClass.name);
|
|
30
|
-
if (!repository) {
|
|
31
|
-
throw new Error(`Repository for ${modelClass.name} not found. Did you register the model?`);
|
|
32
|
-
}
|
|
33
|
-
return repository;
|
|
34
|
-
}
|
|
35
|
-
generatePrismaSchema(databaseProvider) {
|
|
36
|
-
const modelClasses = Array.from(this.models.values());
|
|
37
|
-
return schemaGenerator_1.SchemaGenerator.generatePrismaSchema(modelClasses, databaseProvider);
|
|
38
|
-
}
|
|
39
|
-
getValidationSchema(modelClass) {
|
|
40
|
-
return validation_1.ValidationGenerator.generateZodSchema(modelClass);
|
|
41
|
-
}
|
|
42
|
-
getStrictValidationSchema(modelClass) {
|
|
43
|
-
return validation_1.ValidationGenerator.generateStrictZodSchema(modelClass);
|
|
44
|
-
}
|
|
45
|
-
// Custom route methods
|
|
46
|
-
get(path, handler) {
|
|
47
|
-
this.customRoutes.push({ method: 'GET', path, handler });
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
|
-
post(path, handler) {
|
|
51
|
-
this.customRoutes.push({ method: 'POST', path, handler });
|
|
52
|
-
return this;
|
|
53
|
-
}
|
|
54
|
-
put(path, handler) {
|
|
55
|
-
this.customRoutes.push({ method: 'PUT', path, handler });
|
|
56
|
-
return this;
|
|
57
|
-
}
|
|
58
|
-
delete(path, handler) {
|
|
59
|
-
this.customRoutes.push({ method: 'DELETE', path, handler });
|
|
60
|
-
return this;
|
|
61
|
-
}
|
|
62
|
-
patch(path, handler) {
|
|
63
|
-
this.customRoutes.push({ method: 'PATCH', path, handler });
|
|
64
|
-
return this;
|
|
65
|
-
}
|
|
66
|
-
// Auto-generate REST API routes
|
|
67
|
-
// Auto-generate REST API routes
|
|
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
|
-
});
|
|
113
|
-
// Generate CRUD routes for models
|
|
114
|
-
for (const [modelName, modelClass] of this.models) {
|
|
115
|
-
const repository = this.getRepository(modelClass);
|
|
116
|
-
const validationSchema = this.getValidationSchema(modelClass);
|
|
117
|
-
const routePath = `${basePath}/${modelClass.getTableName()}`;
|
|
118
|
-
// GET /api/model - List all
|
|
119
|
-
app.get(routePath, async (req, res) => {
|
|
120
|
-
try {
|
|
121
|
-
const { page = 1, limit = 10, ...filters } = req.query;
|
|
122
|
-
const skip = (Number(page) - 1) * Number(limit);
|
|
123
|
-
const items = await repository.findAll({
|
|
124
|
-
skip,
|
|
125
|
-
take: Number(limit),
|
|
126
|
-
where: filters
|
|
127
|
-
});
|
|
128
|
-
const total = await repository.count(filters);
|
|
129
|
-
res.json({
|
|
130
|
-
data: items,
|
|
131
|
-
pagination: {
|
|
132
|
-
page: Number(page),
|
|
133
|
-
limit: Number(limit),
|
|
134
|
-
total,
|
|
135
|
-
pages: Math.ceil(total / Number(limit))
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
catch (error) {
|
|
140
|
-
res.status(500).json({ error: 'Internal server error' });
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
// GET /api/model/:id - Get by ID
|
|
144
|
-
app.get(`${routePath}/:id`, async (req, res) => {
|
|
145
|
-
try {
|
|
146
|
-
const item = await repository.findById(req.params.id);
|
|
147
|
-
if (!item) {
|
|
148
|
-
return res.status(404).json({ error: 'Not found' });
|
|
149
|
-
}
|
|
150
|
-
res.json(item);
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
res.status(500).json({ error: 'Internal server error' });
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
// POST /api/model - Create
|
|
157
|
-
app.post(routePath, async (req, res) => {
|
|
158
|
-
try {
|
|
159
|
-
// Gunakan partial validation schema instead of strict
|
|
160
|
-
const validatedData = validationSchema.parse(req.body);
|
|
161
|
-
const item = await repository.create(validatedData);
|
|
162
|
-
res.status(201).json(item);
|
|
163
|
-
}
|
|
164
|
-
catch (error) {
|
|
165
|
-
if (error instanceof zod_1.z.ZodError) {
|
|
166
|
-
return res.status(400).json({ error: 'Validation error', details: error.issues });
|
|
167
|
-
}
|
|
168
|
-
res.status(500).json({ error: 'Internal server error' });
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
// PUT /api/model/:id - Update (gunakan partial validation)
|
|
172
|
-
app.put(`${routePath}/:id`, async (req, res) => {
|
|
173
|
-
try {
|
|
174
|
-
const validationSchema = this.getValidationSchema(modelClass);
|
|
175
|
-
const validatedData = validationSchema.parse(req.body);
|
|
176
|
-
const item = await repository.update(req.params.id, validatedData);
|
|
177
|
-
res.json(item);
|
|
178
|
-
}
|
|
179
|
-
catch (error) {
|
|
180
|
-
if (error instanceof zod_1.z.ZodError) {
|
|
181
|
-
return res.status(400).json({ error: 'Validation error', details: error.issues });
|
|
182
|
-
}
|
|
183
|
-
res.status(500).json({ error: 'Internal server error' });
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
// DELETE /api/model/:id - Delete
|
|
187
|
-
app.delete(`${routePath}/:id`, async (req, res) => {
|
|
188
|
-
try {
|
|
189
|
-
await repository.delete(req.params.id);
|
|
190
|
-
res.status(204).send();
|
|
191
|
-
}
|
|
192
|
-
catch (error) {
|
|
193
|
-
res.status(500).json({ error: 'Internal server error' });
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
// Generate custom routes
|
|
198
|
-
for (const route of this.customRoutes) {
|
|
199
|
-
const fullPath = `${basePath}${route.path}`;
|
|
200
|
-
switch (route.method.toLowerCase()) {
|
|
201
|
-
case 'get':
|
|
202
|
-
app.get(fullPath, route.handler);
|
|
203
|
-
break;
|
|
204
|
-
case 'post':
|
|
205
|
-
app.post(fullPath, route.handler);
|
|
206
|
-
break;
|
|
207
|
-
case 'put':
|
|
208
|
-
app.put(fullPath, route.handler);
|
|
209
|
-
break;
|
|
210
|
-
case 'delete':
|
|
211
|
-
app.delete(fullPath, route.handler);
|
|
212
|
-
break;
|
|
213
|
-
case 'patch':
|
|
214
|
-
app.patch(fullPath, route.handler);
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
exports.Crudora = Crudora;
|
|
221
|
-
//# sourceMappingURL=crudora.js.map
|
package/dist/core/crudora.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crudora.js","sourceRoot":"","sources":["../../src/core/crudora.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Express } from 'express';
|
|
2
|
-
import { Crudora } from './crudora';
|
|
3
|
-
import { PrismaClient } from '@prisma/client';
|
|
4
|
-
import { ModelConstructor } from './model';
|
|
5
|
-
export interface CrudoraServerConfig {
|
|
6
|
-
port?: number;
|
|
7
|
-
cors?: boolean;
|
|
8
|
-
bodyParser?: boolean;
|
|
9
|
-
prisma?: PrismaClient;
|
|
10
|
-
basePath?: string;
|
|
11
|
-
}
|
|
12
|
-
export declare class CrudoraServer {
|
|
13
|
-
private app;
|
|
14
|
-
private crudora;
|
|
15
|
-
private config;
|
|
16
|
-
constructor(config?: CrudoraServerConfig);
|
|
17
|
-
private setupMiddleware;
|
|
18
|
-
registerModel(...modelClasses: ModelConstructor[]): this;
|
|
19
|
-
generateRoutes(): this;
|
|
20
|
-
use(middleware: any): this;
|
|
21
|
-
listen(callback?: () => void): void;
|
|
22
|
-
getApp(): Express;
|
|
23
|
-
getCrudora(): Crudora;
|
|
24
|
-
get(path: string, handler: (req: any, res: any) => void): this;
|
|
25
|
-
post(path: string, handler: (req: any, res: any) => void): this;
|
|
26
|
-
put(path: string, handler: (req: any, res: any) => void): this;
|
|
27
|
-
delete(path: string, handler: (req: any, res: any) => void): this;
|
|
28
|
-
patch(path: string, handler: (req: any, res: any) => void): this;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=crudoraServer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crudoraServer.d.ts","sourceRoot":"","sources":["../../src/core/crudoraServer.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAS,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,GAAE,mBAAwB;IAO5C,OAAO,CAAC,eAAe;IAoBvB,aAAa,CAAC,GAAG,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAKxD,cAAc,IAAI,IAAI;IAKtB,GAAG,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI;IAK1B,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAQnC,MAAM,IAAI,OAAO;IAIjB,UAAU,IAAI,OAAO;IAIrB,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;CAIjE"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.CrudoraServer = void 0;
|
|
7
|
-
const express_1 = __importDefault(require("express"));
|
|
8
|
-
const crudora_1 = require("./crudora");
|
|
9
|
-
class CrudoraServer {
|
|
10
|
-
constructor(config = {}) {
|
|
11
|
-
this.config = { port: 3000, cors: true, bodyParser: true, basePath: '/api', ...config };
|
|
12
|
-
this.app = (0, express_1.default)();
|
|
13
|
-
this.crudora = new crudora_1.Crudora(config.prisma);
|
|
14
|
-
this.setupMiddleware();
|
|
15
|
-
}
|
|
16
|
-
setupMiddleware() {
|
|
17
|
-
if (this.config.bodyParser) {
|
|
18
|
-
this.app.use(express_1.default.json());
|
|
19
|
-
this.app.use(express_1.default.urlencoded({ extended: true }));
|
|
20
|
-
}
|
|
21
|
-
if (this.config.cors) {
|
|
22
|
-
this.app.use((req, res, next) => {
|
|
23
|
-
res.header('Access-Control-Allow-Origin', '*');
|
|
24
|
-
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
|
|
25
|
-
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
26
|
-
if (req.method === 'OPTIONS') {
|
|
27
|
-
res.sendStatus(200);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
next();
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
registerModel(...modelClasses) {
|
|
36
|
-
this.crudora.registerModel(...modelClasses);
|
|
37
|
-
return this;
|
|
38
|
-
}
|
|
39
|
-
generateRoutes() {
|
|
40
|
-
this.crudora.generateRoutes(this.app, this.config.basePath);
|
|
41
|
-
return this;
|
|
42
|
-
}
|
|
43
|
-
use(middleware) {
|
|
44
|
-
this.app.use(middleware);
|
|
45
|
-
return this;
|
|
46
|
-
}
|
|
47
|
-
listen(callback) {
|
|
48
|
-
this.app.listen(this.config.port, () => {
|
|
49
|
-
console.log(`🚀 Crudora server running on port ${this.config.port}`);
|
|
50
|
-
console.log(`📚 API available at http://localhost:${this.config.port}${this.config.basePath}`);
|
|
51
|
-
if (callback)
|
|
52
|
-
callback();
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
getApp() {
|
|
56
|
-
return this.app;
|
|
57
|
-
}
|
|
58
|
-
getCrudora() {
|
|
59
|
-
return this.crudora;
|
|
60
|
-
}
|
|
61
|
-
get(path, handler) {
|
|
62
|
-
this.crudora.get(path, handler);
|
|
63
|
-
return this;
|
|
64
|
-
}
|
|
65
|
-
post(path, handler) {
|
|
66
|
-
this.crudora.post(path, handler);
|
|
67
|
-
return this;
|
|
68
|
-
}
|
|
69
|
-
put(path, handler) {
|
|
70
|
-
this.crudora.put(path, handler);
|
|
71
|
-
return this;
|
|
72
|
-
}
|
|
73
|
-
delete(path, handler) {
|
|
74
|
-
this.crudora.delete(path, handler);
|
|
75
|
-
return this;
|
|
76
|
-
}
|
|
77
|
-
patch(path, handler) {
|
|
78
|
-
this.crudora.patch(path, handler);
|
|
79
|
-
return this;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
exports.CrudoraServer = CrudoraServer;
|
|
83
|
-
//# sourceMappingURL=crudoraServer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crudoraServer.js","sourceRoot":"","sources":["../../src/core/crudoraServer.ts"],"names":[],"mappings":"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"}
|
package/dist/core/model.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export declare abstract class Model {
|
|
2
|
-
static tableName?: string;
|
|
3
|
-
static primaryKey?: string;
|
|
4
|
-
static timestamps?: boolean;
|
|
5
|
-
static fillable?: string[];
|
|
6
|
-
static hidden?: string[];
|
|
7
|
-
static getTableName(): string;
|
|
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;
|
|
20
|
-
}
|
|
21
|
-
export type ModelConstructor<T extends Model = Model> = {
|
|
22
|
-
new (): T;
|
|
23
|
-
tableName?: string;
|
|
24
|
-
primaryKey?: string;
|
|
25
|
-
timestamps?: boolean;
|
|
26
|
-
fillable?: string[];
|
|
27
|
-
hidden?: string[];
|
|
28
|
-
getTableName(): string;
|
|
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>;
|
|
38
|
-
} & typeof Model;
|
|
39
|
-
//# sourceMappingURL=model.d.ts.map
|
package/dist/core/model.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Model = void 0;
|
|
4
|
-
class Model {
|
|
5
|
-
static getTableName() {
|
|
6
|
-
return this.tableName || this.name.toLowerCase() + 's';
|
|
7
|
-
}
|
|
8
|
-
static getPrimaryKey() {
|
|
9
|
-
return this.primaryKey || 'id';
|
|
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
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.Model = Model;
|
|
99
|
-
Model.primaryKey = 'id';
|
|
100
|
-
Model.timestamps = true;
|
|
101
|
-
//# sourceMappingURL=model.js.map
|
package/dist/core/model.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { PrismaClient } from '@prisma/client';
|
|
2
|
-
import { Model, ModelConstructor } from './model';
|
|
3
|
-
export declare class Repository<T extends Model> {
|
|
4
|
-
private prisma;
|
|
5
|
-
private modelName;
|
|
6
|
-
private modelClass;
|
|
7
|
-
constructor(modelClass: ModelConstructor<T>, prisma: PrismaClient);
|
|
8
|
-
private getSelectOptions;
|
|
9
|
-
private filterHiddenFields;
|
|
10
|
-
create(data: Partial<T>): Promise<T>;
|
|
11
|
-
findById(id: string): Promise<T | null>;
|
|
12
|
-
findAll(options?: {
|
|
13
|
-
skip?: number;
|
|
14
|
-
take?: number;
|
|
15
|
-
where?: any;
|
|
16
|
-
orderBy?: any;
|
|
17
|
-
}): Promise<T[]>;
|
|
18
|
-
update(id: string, data: Partial<T>): Promise<T>;
|
|
19
|
-
delete(id: string): Promise<T>;
|
|
20
|
-
count(where?: any): Promise<number>;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|