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/repository.js
DELETED
|
@@ -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 +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"}
|
package/dist/decorators/model.js
DELETED
|
@@ -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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -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"}
|
package/dist/types/model.type.js
DELETED
|
@@ -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"}
|
package/dist/utils/validation.js
DELETED
|
@@ -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"}
|
package/templates/schema.prisma
DELETED
|
@@ -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
|
-
// }
|