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,149 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Repository = void 0;
4
- class Repository {
5
- constructor(modelClass, prisma) {
6
- this.prisma = prisma;
7
- this.modelClass = modelClass;
8
- this.modelName = modelClass.getTableName();
9
- }
10
- getSelectOptions() {
11
- // Pass prisma client untuk akses DMMF
12
- return this.modelClass.getSelectObject(this.prisma);
13
- }
14
- filterHiddenFields(data) {
15
- // Fallback manual filtering jika select tidak bisa digunakan
16
- if (!this.modelClass.hidden || this.modelClass.hidden.length === 0) {
17
- return data;
18
- }
19
- const filterObject = (obj) => {
20
- if (!obj)
21
- return obj;
22
- const filtered = { ...obj };
23
- this.modelClass.hidden.forEach(field => {
24
- delete filtered[field];
25
- });
26
- return filtered;
27
- };
28
- if (Array.isArray(data)) {
29
- return data.map(filterObject);
30
- }
31
- return filterObject(data);
32
- }
33
- async create(data) {
34
- const model = this.prisma[this.modelName];
35
- const select = this.getSelectOptions();
36
- // Execute beforeCreate hook
37
- let processedData = data;
38
- if (this.modelClass.beforeCreate) {
39
- processedData = await this.modelClass.beforeCreate(data);
40
- }
41
- let result;
42
- if (select) {
43
- result = await model.create({ data: processedData, select });
44
- }
45
- else {
46
- result = await model.create({ data: processedData });
47
- result = this.filterHiddenFields(result);
48
- }
49
- // Execute afterCreate hook
50
- if (this.modelClass.afterCreate) {
51
- result = await this.modelClass.afterCreate(processedData, result);
52
- }
53
- return result;
54
- }
55
- async findById(id) {
56
- const model = this.prisma[this.modelName];
57
- const select = this.getSelectOptions();
58
- // Execute beforeFind hook
59
- let findOptions = { where: { id } };
60
- if (this.modelClass.beforeFind) {
61
- findOptions = await this.modelClass.beforeFind(findOptions);
62
- }
63
- let result;
64
- if (select) {
65
- result = await model.findUnique({ ...findOptions, select });
66
- }
67
- else {
68
- result = await model.findUnique(findOptions);
69
- result = result ? this.filterHiddenFields(result) : null;
70
- }
71
- // Execute afterFind hook
72
- if (result && this.modelClass.afterFind) {
73
- result = await this.modelClass.afterFind(result);
74
- }
75
- return result;
76
- }
77
- async findAll(options) {
78
- const model = this.prisma[this.modelName];
79
- const select = this.getSelectOptions();
80
- // Execute beforeFind hook
81
- let queryOptions = options ? { ...options } : undefined;
82
- if (this.modelClass.beforeFind) {
83
- queryOptions = await this.modelClass.beforeFind(queryOptions);
84
- }
85
- let results;
86
- if (select) {
87
- const finalOptions = queryOptions ? { ...queryOptions, select } : { select };
88
- results = await model.findMany(finalOptions);
89
- }
90
- else {
91
- results = await model.findMany(queryOptions);
92
- results = this.filterHiddenFields(results);
93
- }
94
- // Execute afterFind hook
95
- if (results && this.modelClass.afterFind) {
96
- results = await this.modelClass.afterFind(results);
97
- }
98
- return results;
99
- }
100
- async update(id, data) {
101
- const model = this.prisma[this.modelName];
102
- const select = this.getSelectOptions();
103
- // Execute beforeUpdate hook
104
- let processedData = data;
105
- if (this.modelClass.beforeUpdate) {
106
- processedData = await this.modelClass.beforeUpdate(id, data);
107
- }
108
- let result;
109
- if (select) {
110
- result = await model.update({
111
- where: { id },
112
- data: processedData,
113
- select
114
- });
115
- }
116
- else {
117
- result = await model.update({
118
- where: { id },
119
- data: processedData
120
- });
121
- result = this.filterHiddenFields(result);
122
- }
123
- // Execute afterUpdate hook
124
- if (this.modelClass.afterUpdate) {
125
- result = await this.modelClass.afterUpdate(id, processedData, result);
126
- }
127
- return result;
128
- }
129
- async delete(id) {
130
- const model = this.prisma[this.modelName];
131
- // Execute beforeDelete hook
132
- if (this.modelClass.beforeDelete) {
133
- await this.modelClass.beforeDelete(id);
134
- }
135
- const result = await model.delete({ where: { id } });
136
- // Execute afterDelete hook
137
- let finalResult = result;
138
- if (this.modelClass.afterDelete) {
139
- finalResult = await this.modelClass.afterDelete(id, result);
140
- }
141
- return finalResult;
142
- }
143
- async count(where) {
144
- const model = this.prisma[this.modelName];
145
- return await model.count({ where });
146
- }
147
- }
148
- exports.Repository = Repository;
149
- //# sourceMappingURL=repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/core/repository.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { Model } from './model';
2
- export declare class SchemaGenerator {
3
- static generatePrismaSchema(models: (typeof Model)[], databaseProvider?: string): string;
4
- private static generateModelSchemaFromClass;
5
- }
6
- //# sourceMappingURL=schemaGenerator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemaGenerator.d.ts","sourceRoot":"","sources":["../../src/core/schemaGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,eAAe;IAC1B,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,OAAO,KAAK,CAAC,EAAE,EAAE,gBAAgB,GAAE,MAAiB,GAAG,MAAM;IAmBlG,OAAO,CAAC,MAAM,CAAC,4BAA4B;CA2B5C"}
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SchemaGenerator = void 0;
4
- class SchemaGenerator {
5
- static generatePrismaSchema(models, databaseProvider = 'sqlite') {
6
- let schema = `// Auto-generated Prisma schema\n// Generated by Crudora Framework\n\n`;
7
- schema += `generator client {\n provider = "prisma-client-js"\n}\n\n`;
8
- // Fix: Use the provided database provider directly
9
- if (databaseProvider === 'sqlite') {
10
- schema += `datasource db {\n provider = "sqlite"\n url = env("DATABASE_URL")\n}\n\n`;
11
- }
12
- else {
13
- schema += `datasource db {\n provider = "${databaseProvider}"\n url = env("DATABASE_URL")\n}\n\n`;
14
- }
15
- for (const model of models) {
16
- schema += this.generateModelSchemaFromClass(model);
17
- }
18
- return schema;
19
- }
20
- static generateModelSchemaFromClass(modelClass) {
21
- const tableName = modelClass.getTableName();
22
- const primaryKey = modelClass.getPrimaryKey();
23
- let schema = `model ${modelClass.name} {\n`;
24
- // Add primary key
25
- schema += ` ${primaryKey} String @id @default(uuid())\n`;
26
- // Add common fields (you can customize this based on your needs)
27
- schema += ` createdAt DateTime @default(now())\n`;
28
- schema += ` updatedAt DateTime @updatedAt\n`;
29
- // Add custom fields if defined in static properties
30
- if (modelClass.fillable) {
31
- for (const field of modelClass.fillable) {
32
- if (field !== primaryKey) {
33
- schema += ` ${field} String?\n`;
34
- }
35
- }
36
- }
37
- schema += `\n @@map("${tableName}")\n`;
38
- schema += `}\n\n`;
39
- return schema;
40
- }
41
- }
42
- exports.SchemaGenerator = SchemaGenerator;
43
- //# sourceMappingURL=schemaGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemaGenerator.js","sourceRoot":"","sources":["../../src/core/schemaGenerator.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAC1B,MAAM,CAAC,oBAAoB,CAAC,MAAwB,EAAE,mBAA2B,QAAQ;QACvF,IAAI,MAAM,GAAG,wEAAwE,CAAC;QAEtF,MAAM,IAAI,4DAA4D,CAAC;QAEvE,mDAAmD;QACnD,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,4EAA4E,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,kCAAkC,gBAAgB,uCAAuC,CAAC;QACtG,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,4BAA4B,CAAC,UAAwB;QAClE,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QAE9C,IAAI,MAAM,GAAG,SAAS,UAAU,CAAC,IAAI,MAAM,CAAC;QAE5C,kBAAkB;QAClB,MAAM,IAAI,KAAK,UAAU,gCAAgC,CAAC;QAE1D,iEAAiE;QACjE,MAAM,IAAI,wCAAwC,CAAC;QACnD,MAAM,IAAI,mCAAmC,CAAC;QAE9C,oDAAoD;QACpD,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,KAAK,YAAY,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,cAAc,SAAS,MAAM,CAAC;QACxC,MAAM,IAAI,OAAO,CAAC;QAElB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA/CD,0CA+CC"}
@@ -1,9 +0,0 @@
1
- import 'reflect-metadata';
2
- import { FieldOptions, ModelOptions } from '../types/model.type';
3
- export declare function Model(options?: ModelOptions): <T extends {
4
- new (...args: any[]): {};
5
- }>(constructor: T) => T;
6
- export declare function Field(options: FieldOptions): (target: any, context: any) => void;
7
- export declare function getModelMetadata(target: any): any;
8
- export declare function getFieldMetadata(target: any): any;
9
- //# sourceMappingURL=model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/decorators/model.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKjE,wBAAgB,KAAK,CAAC,OAAO,GAAE,YAAiB,IAC7B,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,aAAa,CAAC,OAQxE;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,IACxB,QAAQ,GAAG,EAAE,SAAS,GAAG,UAiB3C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,OAE3C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,OAE3C"}
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Model = Model;
4
- exports.Field = Field;
5
- exports.getModelMetadata = getModelMetadata;
6
- exports.getFieldMetadata = getFieldMetadata;
7
- require("reflect-metadata");
8
- const MODEL_METADATA_KEY = Symbol('model');
9
- const FIELD_METADATA_KEY = Symbol('field');
10
- function Model(options = {}) {
11
- return function (constructor) {
12
- Reflect.defineMetadata(MODEL_METADATA_KEY, {
13
- tableName: options.tableName || constructor.name.toLowerCase(),
14
- timestamps: options.timestamps !== false,
15
- constructor
16
- }, constructor);
17
- return constructor;
18
- };
19
- }
20
- function Field(options) {
21
- return function (target, context) {
22
- // Support both old and new decorator syntax
23
- if (typeof context === 'string') {
24
- // Old decorator syntax (target, propertyKey)
25
- const propertyKey = context;
26
- const existingFields = Reflect.getMetadata(FIELD_METADATA_KEY, target.constructor) || {};
27
- existingFields[propertyKey] = options;
28
- Reflect.defineMetadata(FIELD_METADATA_KEY, existingFields, target.constructor);
29
- }
30
- else {
31
- // New decorator syntax (target, context)
32
- const propertyKey = context.name;
33
- const constructor = target.constructor;
34
- const existingFields = Reflect.getMetadata(FIELD_METADATA_KEY, constructor) || {};
35
- existingFields[propertyKey] = options;
36
- Reflect.defineMetadata(FIELD_METADATA_KEY, existingFields, constructor);
37
- }
38
- };
39
- }
40
- function getModelMetadata(target) {
41
- return Reflect.getMetadata(MODEL_METADATA_KEY, target);
42
- }
43
- function getFieldMetadata(target) {
44
- return Reflect.getMetadata(FIELD_METADATA_KEY, target) || {};
45
- }
46
- //# sourceMappingURL=model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/decorators/model.ts"],"names":[],"mappings":";;AAMA,sBASC;AAED,sBAkBC;AAED,4CAEC;AAED,4CAEC;AA3CD,4BAA0B;AAG1B,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3C,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAE3C,SAAgB,KAAK,CAAC,UAAwB,EAAE;IAC9C,OAAO,UAAkD,WAAc;QACrE,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE;YACzC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE;YAC9D,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,KAAK;YACxC,WAAW;SACZ,EAAE,WAAW,CAAC,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,KAAK,CAAC,OAAqB;IACzC,OAAO,UAAU,MAAW,EAAE,OAAY;QACxC,4CAA4C;QAC5C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,6CAA6C;YAC7C,MAAM,WAAW,GAAG,OAAO,CAAC;YAC5B,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACzF,cAAc,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;YACtC,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YACjC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YACvC,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;YAClF,cAAc,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;YACtC,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAW;IAC1C,OAAO,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAW;IAC1C,OAAO,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC/D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -1,22 +0,0 @@
1
- // This is your Prisma schema file,
2
- // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
-
4
- generator client {
5
- provider = "prisma-client-js"
6
- }
7
-
8
- datasource db {
9
- provider = "sqlite"
10
- url = env("DATABASE_URL")
11
- }
12
-
13
- // Add your models here
14
- // Example:
15
- // model User {
16
- // id String @id @default(uuid())
17
- // name String
18
- // email String @unique
19
- // password String
20
- // createdAt DateTime @default(now())
21
- // updatedAt DateTime @updatedAt
22
- // }
@@ -1,13 +0,0 @@
1
- export interface ModelOptions {
2
- tableName?: string;
3
- timestamps?: boolean;
4
- }
5
- export interface FieldOptions {
6
- type: 'string' | 'number' | 'boolean' | 'date' | 'uuid';
7
- required?: boolean;
8
- unique?: boolean;
9
- default?: any;
10
- length?: number;
11
- primary?: boolean;
12
- }
13
- //# sourceMappingURL=model.type.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.type.d.ts","sourceRoot":"","sources":["../../src/types/model.type.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=model.type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.type.js","sourceRoot":"","sources":["../../src/types/model.type.ts"],"names":[],"mappings":""}
@@ -1,7 +0,0 @@
1
- import { z } from 'zod';
2
- import { Model, ModelConstructor } from '../core/model';
3
- export declare class ValidationGenerator {
4
- static generateZodSchema<T extends Model>(modelClass: ModelConstructor<T>): z.ZodType<Partial<T>>;
5
- static generateStrictZodSchema<T extends Model>(modelClass: ModelConstructor<T>): z.ZodType<any>;
6
- }
7
- //# sourceMappingURL=validation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAExD,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAkBjG,MAAM,CAAC,uBAAuB,CAAC,CAAC,SAAS,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;CAgBjG"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ValidationGenerator = void 0;
4
- const zod_1 = require("zod");
5
- class ValidationGenerator {
6
- static generateZodSchema(modelClass) {
7
- // Simplified: gunakan static properties langsung dari model class
8
- const fillable = modelClass.fillable || [];
9
- const schemaFields = {};
10
- // Jika tidak ada fillable fields, return empty partial schema
11
- if (fillable.length === 0) {
12
- return zod_1.z.object({}).partial();
13
- }
14
- // Generate basic string validation untuk semua fillable fields
15
- fillable.forEach(fieldName => {
16
- schemaFields[fieldName] = zod_1.z.string().optional();
17
- });
18
- return zod_1.z.object(schemaFields).partial();
19
- }
20
- static generateStrictZodSchema(modelClass) {
21
- const fillable = modelClass.fillable || [];
22
- const schemaFields = {};
23
- // Jika tidak ada fillable fields, return empty schema
24
- if (fillable.length === 0) {
25
- return zod_1.z.object({});
26
- }
27
- // Generate basic string validation untuk semua fillable fields
28
- fillable.forEach(fieldName => {
29
- schemaFields[fieldName] = zod_1.z.string();
30
- });
31
- return zod_1.z.object(schemaFields);
32
- }
33
- }
34
- exports.ValidationGenerator = ValidationGenerator;
35
- //# sourceMappingURL=validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAGxB,MAAa,mBAAmB;IAC9B,MAAM,CAAC,iBAAiB,CAAkB,UAA+B;QACvE,kEAAkE;QAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAiC,EAAE,CAAC;QAEtD,8DAA8D;QAC9D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAS,CAAC;QACvC,CAAC;QAED,+DAA+D;QAC/D,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC3B,YAAY,CAAC,SAAS,CAAC,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,OAAO,OAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAS,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,uBAAuB,CAAkB,UAA+B;QAC7E,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAiC,EAAE,CAAC;QAEtD,sDAAsD;QACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,OAAC,CAAC,MAAM,CAAC,EAAE,CAAQ,CAAC;QAC7B,CAAC;QAED,+DAA+D;QAC/D,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC3B,YAAY,CAAC,SAAS,CAAC,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,OAAO,OAAC,CAAC,MAAM,CAAC,YAAY,CAAQ,CAAC;IACvC,CAAC;CACF;AAnCD,kDAmCC"}
@@ -1,22 +0,0 @@
1
- // This is your Prisma schema file,
2
- // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
-
4
- generator client {
5
- provider = "prisma-client-js"
6
- }
7
-
8
- datasource db {
9
- provider = "sqlite"
10
- url = env("DATABASE_URL")
11
- }
12
-
13
- // Add your models here
14
- // Example:
15
- // model User {
16
- // id String @id @default(uuid())
17
- // name String
18
- // email String @unique
19
- // password String
20
- // createdAt DateTime @default(now())
21
- // updatedAt DateTime @updatedAt
22
- // }