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.
Files changed (56) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +554 -328
  3. package/dist/cli.js +62 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/index.cjs +1692 -0
  6. package/dist/index.cjs.map +1 -0
  7. package/dist/index.d.cts +404 -0
  8. package/dist/index.d.ts +404 -10
  9. package/dist/index.js +1685 -16
  10. package/dist/index.js.map +1 -1
  11. package/dist/scripts/copy-assets.js +26 -47
  12. package/dist/scripts/postinstall.js +172 -136
  13. package/dist/templates/.env.example +13 -9
  14. package/dist/templates/drizzle.config.ts +10 -0
  15. package/dist/templates/schema.ts +23 -0
  16. package/package.json +109 -94
  17. package/scripts/copy-assets.js +26 -47
  18. package/scripts/postinstall.js +172 -136
  19. package/templates/.env.example +13 -9
  20. package/templates/drizzle.config.ts +10 -0
  21. package/templates/schema.ts +23 -0
  22. package/dist/core/crudora.d.ts +0 -24
  23. package/dist/core/crudora.d.ts.map +0 -1
  24. package/dist/core/crudora.js +0 -221
  25. package/dist/core/crudora.js.map +0 -1
  26. package/dist/core/crudoraServer.d.ts +0 -30
  27. package/dist/core/crudoraServer.d.ts.map +0 -1
  28. package/dist/core/crudoraServer.js +0 -83
  29. package/dist/core/crudoraServer.js.map +0 -1
  30. package/dist/core/model.d.ts +0 -39
  31. package/dist/core/model.d.ts.map +0 -1
  32. package/dist/core/model.js +0 -101
  33. package/dist/core/model.js.map +0 -1
  34. package/dist/core/repository.d.ts +0 -22
  35. package/dist/core/repository.d.ts.map +0 -1
  36. package/dist/core/repository.js +0 -149
  37. package/dist/core/repository.js.map +0 -1
  38. package/dist/core/schemaGenerator.d.ts +0 -6
  39. package/dist/core/schemaGenerator.d.ts.map +0 -1
  40. package/dist/core/schemaGenerator.js +0 -43
  41. package/dist/core/schemaGenerator.js.map +0 -1
  42. package/dist/decorators/model.d.ts +0 -9
  43. package/dist/decorators/model.d.ts.map +0 -1
  44. package/dist/decorators/model.js +0 -46
  45. package/dist/decorators/model.js.map +0 -1
  46. package/dist/index.d.ts.map +0 -1
  47. package/dist/templates/schema.prisma +0 -22
  48. package/dist/types/model.type.d.ts +0 -13
  49. package/dist/types/model.type.d.ts.map +0 -1
  50. package/dist/types/model.type.js +0 -3
  51. package/dist/types/model.type.js.map +0 -1
  52. package/dist/utils/validation.d.ts +0 -7
  53. package/dist/utils/validation.d.ts.map +0 -1
  54. package/dist/utils/validation.js +0 -35
  55. package/dist/utils/validation.js.map +0 -1
  56. package/templates/schema.prisma +0 -22
@@ -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
@@ -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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"}
@@ -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
@@ -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"}
@@ -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
@@ -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"}