@kyro-cms/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +241 -0
- package/dist/base-CQkFzqQl.d.ts +62 -0
- package/dist/base-DlhVlwnN.d.cts +62 -0
- package/dist/chunk-3Q3FS5J4.cjs +273 -0
- package/dist/chunk-3Q3FS5J4.cjs.map +1 -0
- package/dist/chunk-3TPQ2BU6.js +423 -0
- package/dist/chunk-3TPQ2BU6.js.map +1 -0
- package/dist/chunk-3VZCX4DF.cjs +384 -0
- package/dist/chunk-3VZCX4DF.cjs.map +1 -0
- package/dist/chunk-BXMWDUED.js +115 -0
- package/dist/chunk-BXMWDUED.js.map +1 -0
- package/dist/chunk-DIC236EW.js +290 -0
- package/dist/chunk-DIC236EW.js.map +1 -0
- package/dist/chunk-DKSMFC3L.js +268 -0
- package/dist/chunk-DKSMFC3L.js.map +1 -0
- package/dist/chunk-DVD5P72E.cjs +428 -0
- package/dist/chunk-DVD5P72E.cjs.map +1 -0
- package/dist/chunk-HT6VE4NW.cjs +293 -0
- package/dist/chunk-HT6VE4NW.cjs.map +1 -0
- package/dist/chunk-K7QF2QCM.cjs +311 -0
- package/dist/chunk-K7QF2QCM.cjs.map +1 -0
- package/dist/chunk-OG3KX56O.js +308 -0
- package/dist/chunk-OG3KX56O.js.map +1 -0
- package/dist/chunk-R3XIBBAW.cjs +34 -0
- package/dist/chunk-R3XIBBAW.cjs.map +1 -0
- package/dist/chunk-RLTG4YZM.cjs +117 -0
- package/dist/chunk-RLTG4YZM.cjs.map +1 -0
- package/dist/chunk-SDMNUYVU.js +30 -0
- package/dist/chunk-SDMNUYVU.js.map +1 -0
- package/dist/chunk-UEG7KMKC.cjs +228 -0
- package/dist/chunk-UEG7KMKC.cjs.map +1 -0
- package/dist/chunk-UEYC46RL.js +374 -0
- package/dist/chunk-UEYC46RL.js.map +1 -0
- package/dist/chunk-YPAFJ7EV.js +225 -0
- package/dist/chunk-YPAFJ7EV.js.map +1 -0
- package/dist/cli/index.cjs +306 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +303 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/drizzle/index.cjs +25 -0
- package/dist/drizzle/index.cjs.map +1 -0
- package/dist/drizzle/index.d.cts +49 -0
- package/dist/drizzle/index.d.ts +49 -0
- package/dist/drizzle/index.js +4 -0
- package/dist/drizzle/index.js.map +1 -0
- package/dist/graphql/index.cjs +16 -0
- package/dist/graphql/index.cjs.map +1 -0
- package/dist/graphql/index.d.cts +20 -0
- package/dist/graphql/index.d.ts +20 -0
- package/dist/graphql/index.js +3 -0
- package/dist/graphql/index.js.map +1 -0
- package/dist/index-4fJKLFK2.d.ts +63 -0
- package/dist/index-DI0DRPNv.d.cts +63 -0
- package/dist/index.cjs +2506 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +525 -0
- package/dist/index.d.ts +525 -0
- package/dist/index.js +2334 -0
- package/dist/index.js.map +1 -0
- package/dist/mongodb/index.cjs +17 -0
- package/dist/mongodb/index.cjs.map +1 -0
- package/dist/mongodb/index.d.cts +49 -0
- package/dist/mongodb/index.d.ts +49 -0
- package/dist/mongodb/index.js +4 -0
- package/dist/mongodb/index.js.map +1 -0
- package/dist/rest/index.cjs +17 -0
- package/dist/rest/index.cjs.map +1 -0
- package/dist/rest/index.d.cts +28 -0
- package/dist/rest/index.d.ts +28 -0
- package/dist/rest/index.js +4 -0
- package/dist/rest/index.js.map +1 -0
- package/dist/trpc/index.cjs +45 -0
- package/dist/trpc/index.cjs.map +1 -0
- package/dist/trpc/index.d.cts +130 -0
- package/dist/trpc/index.d.ts +130 -0
- package/dist/trpc/index.js +4 -0
- package/dist/trpc/index.js.map +1 -0
- package/dist/types-BGM5MV_K.d.cts +589 -0
- package/dist/types-BGM5MV_K.d.ts +589 -0
- package/dist/ws/index.cjs +24 -0
- package/dist/ws/index.cjs.map +1 -0
- package/dist/ws/index.d.cts +88 -0
- package/dist/ws/index.d.ts +88 -0
- package/dist/ws/index.js +3 -0
- package/dist/ws/index.js.map +1 -0
- package/package.json +120 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { AbstractBaseAdapter } from './chunk-BXMWDUED.js';
|
|
2
|
+
|
|
3
|
+
// src/database/mongodb/adapter.ts
|
|
4
|
+
var MongoDBAdapter = class extends AbstractBaseAdapter {
|
|
5
|
+
client;
|
|
6
|
+
db;
|
|
7
|
+
database;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
super();
|
|
10
|
+
this.client = options.client;
|
|
11
|
+
this.database = options.database;
|
|
12
|
+
}
|
|
13
|
+
async connect() {
|
|
14
|
+
this.db = this.client.db(this.database);
|
|
15
|
+
this.connected = true;
|
|
16
|
+
console.log(`[MongoDBAdapter] Connected to database: ${this.database}`);
|
|
17
|
+
}
|
|
18
|
+
async disconnect() {
|
|
19
|
+
if (this.client) {
|
|
20
|
+
await this.client.close();
|
|
21
|
+
this.connected = false;
|
|
22
|
+
console.log(`[MongoDBAdapter] Disconnected`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
getMongoCollection(slug) {
|
|
26
|
+
if (!this.db) {
|
|
27
|
+
throw new Error("MongoDB not connected");
|
|
28
|
+
}
|
|
29
|
+
return this.db.collection(slug);
|
|
30
|
+
}
|
|
31
|
+
async find(args) {
|
|
32
|
+
const { collection: slug, where = {}, sort, limit = 10, page = 1, tenantID, select } = args;
|
|
33
|
+
const config = this.getCollectionConfig(slug);
|
|
34
|
+
const col = this.getMongoCollection(slug);
|
|
35
|
+
const filter = this.buildFilter(where, tenantID);
|
|
36
|
+
const sortOption = this.parseSort(sort);
|
|
37
|
+
const sortObj = {
|
|
38
|
+
[sortOption.field]: sortOption.direction === "asc" ? 1 : -1
|
|
39
|
+
};
|
|
40
|
+
const skip = (page - 1) * limit;
|
|
41
|
+
const [docs, totalDocs] = await Promise.all([
|
|
42
|
+
col.find(filter).sort(sortObj).skip(skip).limit(limit).project(this.buildProjection(select)).toArray(),
|
|
43
|
+
col.countDocuments(filter)
|
|
44
|
+
]);
|
|
45
|
+
const processedDocs = docs.map((doc) => this.processResult(doc, config));
|
|
46
|
+
return {
|
|
47
|
+
docs: processedDocs,
|
|
48
|
+
...this.calculatePagination(page, limit, totalDocs)
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
async findByID(args) {
|
|
52
|
+
const { collection: slug, id, tenantID } = args;
|
|
53
|
+
const config = this.getCollectionConfig(slug);
|
|
54
|
+
const col = this.getMongoCollection(slug);
|
|
55
|
+
const filter = { _id: id };
|
|
56
|
+
if (tenantID) {
|
|
57
|
+
filter.tenantId = tenantID;
|
|
58
|
+
}
|
|
59
|
+
const doc = await col.findOne(filter);
|
|
60
|
+
if (!doc) return null;
|
|
61
|
+
return this.processResult(doc, config);
|
|
62
|
+
}
|
|
63
|
+
async create(args) {
|
|
64
|
+
const { collection: slug, data, tenantID } = args;
|
|
65
|
+
const config = this.getCollectionConfig(slug);
|
|
66
|
+
const col = this.getMongoCollection(slug);
|
|
67
|
+
const doc = {
|
|
68
|
+
...this.prepareData(data, config),
|
|
69
|
+
_id: this.generateId()
|
|
70
|
+
};
|
|
71
|
+
if (tenantID) {
|
|
72
|
+
doc.tenantId = tenantID;
|
|
73
|
+
}
|
|
74
|
+
await col.insertOne(doc);
|
|
75
|
+
return this.processResult(doc, config);
|
|
76
|
+
}
|
|
77
|
+
async update(args) {
|
|
78
|
+
const { collection: slug, id, data, tenantID } = args;
|
|
79
|
+
const config = this.getCollectionConfig(slug);
|
|
80
|
+
const col = this.getMongoCollection(slug);
|
|
81
|
+
const filter = { _id: id };
|
|
82
|
+
if (tenantID) {
|
|
83
|
+
filter.tenantId = tenantID;
|
|
84
|
+
}
|
|
85
|
+
const updateData = this.prepareData(data, config);
|
|
86
|
+
const result = await col.findOneAndUpdate(
|
|
87
|
+
filter,
|
|
88
|
+
{ $set: updateData },
|
|
89
|
+
{ returnDocument: "after" }
|
|
90
|
+
);
|
|
91
|
+
if (!result) {
|
|
92
|
+
throw new Error(`Document not found: ${slug}/${id}`);
|
|
93
|
+
}
|
|
94
|
+
return this.processResult(result, config);
|
|
95
|
+
}
|
|
96
|
+
async delete(args) {
|
|
97
|
+
const { collection: slug, id, tenantID } = args;
|
|
98
|
+
const config = this.getCollectionConfig(slug);
|
|
99
|
+
const col = this.getMongoCollection(slug);
|
|
100
|
+
const filter = { _id: id };
|
|
101
|
+
if (tenantID) {
|
|
102
|
+
filter.tenantId = tenantID;
|
|
103
|
+
}
|
|
104
|
+
const doc = await col.findOneAndDelete(filter);
|
|
105
|
+
if (!doc) {
|
|
106
|
+
throw new Error(`Document not found: ${slug}/${id}`);
|
|
107
|
+
}
|
|
108
|
+
return this.processResult(doc, config);
|
|
109
|
+
}
|
|
110
|
+
async count(args) {
|
|
111
|
+
const { collection: slug, where = {}, tenantID } = args;
|
|
112
|
+
const col = this.getMongoCollection(slug);
|
|
113
|
+
const filter = this.buildFilter(where, tenantID);
|
|
114
|
+
return col.countDocuments(filter);
|
|
115
|
+
}
|
|
116
|
+
async findOne(args) {
|
|
117
|
+
const { collection: slug, where = {}, tenantID } = args;
|
|
118
|
+
const config = this.getCollectionConfig(slug);
|
|
119
|
+
const col = this.getMongoCollection(slug);
|
|
120
|
+
const filter = this.buildFilter(where, tenantID);
|
|
121
|
+
const doc = await col.findOne(filter);
|
|
122
|
+
if (!doc) return null;
|
|
123
|
+
return this.processResult(doc, config);
|
|
124
|
+
}
|
|
125
|
+
async findVersions(args) {
|
|
126
|
+
const { collection: slug, where = {}, sort, limit = 10, page = 1 } = args;
|
|
127
|
+
const versionCollection = this.getMongoCollection(`${slug}_versions`);
|
|
128
|
+
const filter = this.buildFilter(where);
|
|
129
|
+
const skip = (page - 1) * limit;
|
|
130
|
+
const sortOption = this.parseSort(sort);
|
|
131
|
+
const sortObj = {
|
|
132
|
+
[sortOption.field]: sortOption.direction === "asc" ? 1 : -1
|
|
133
|
+
};
|
|
134
|
+
const [docs, totalDocs] = await Promise.all([
|
|
135
|
+
versionCollection.find(filter).sort(sortObj).skip(skip).limit(limit).toArray(),
|
|
136
|
+
versionCollection.countDocuments(filter)
|
|
137
|
+
]);
|
|
138
|
+
return {
|
|
139
|
+
docs: docs.map((doc) => this.processResult(doc, {})),
|
|
140
|
+
...this.calculatePagination(page, limit, totalDocs)
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
async findVersionByID(args) {
|
|
144
|
+
const { collection: slug, id } = args;
|
|
145
|
+
const versionCollection = this.getMongoCollection(`${slug}_versions`);
|
|
146
|
+
return versionCollection.findOne({ _id: id });
|
|
147
|
+
}
|
|
148
|
+
async createVersion(args) {
|
|
149
|
+
const { collection: slug, data } = args;
|
|
150
|
+
const versionCollection = this.getMongoCollection(`${slug}_versions`);
|
|
151
|
+
const doc = {
|
|
152
|
+
...data,
|
|
153
|
+
_id: this.generateId(),
|
|
154
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
155
|
+
};
|
|
156
|
+
await versionCollection.insertOne(doc);
|
|
157
|
+
return doc;
|
|
158
|
+
}
|
|
159
|
+
async deleteVersions(args) {
|
|
160
|
+
const { collection: slug, where } = args;
|
|
161
|
+
const versionCollection = this.getMongoCollection(`${slug}_versions`);
|
|
162
|
+
await versionCollection.deleteMany(where);
|
|
163
|
+
}
|
|
164
|
+
async migrate() {
|
|
165
|
+
for (const config of this.collections.values()) {
|
|
166
|
+
const col = this.getMongoCollection(config.slug);
|
|
167
|
+
await col.createIndex({ _id: 1 });
|
|
168
|
+
if (config.tenantScoped) {
|
|
169
|
+
await col.createIndex({ tenantId: 1 });
|
|
170
|
+
}
|
|
171
|
+
if (config.timestamps) {
|
|
172
|
+
await col.createIndex({ createdAt: -1 });
|
|
173
|
+
}
|
|
174
|
+
for (const field of config.fields) {
|
|
175
|
+
if (field.unique && field.name) {
|
|
176
|
+
await col.createIndex({ [field.name]: 1 }, { unique: true });
|
|
177
|
+
}
|
|
178
|
+
if (field.indexed && field.name) {
|
|
179
|
+
await col.createIndex({ [field.name]: 1 });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
console.log(`[MongoDBAdapter] Migration completed`);
|
|
184
|
+
}
|
|
185
|
+
// ========================================================================
|
|
186
|
+
// Helper Methods
|
|
187
|
+
// ========================================================================
|
|
188
|
+
getCollectionConfig(slug) {
|
|
189
|
+
const config = this.collections.get(slug);
|
|
190
|
+
if (!config) {
|
|
191
|
+
throw new Error(`Collection "${slug}" not found`);
|
|
192
|
+
}
|
|
193
|
+
return config;
|
|
194
|
+
}
|
|
195
|
+
buildFilter(where = {}, tenantID) {
|
|
196
|
+
const filter = {};
|
|
197
|
+
if (tenantID) {
|
|
198
|
+
filter.tenantId = tenantID;
|
|
199
|
+
}
|
|
200
|
+
for (const [key, value] of Object.entries(where)) {
|
|
201
|
+
if (key === "AND" && Array.isArray(value)) {
|
|
202
|
+
const andConditions = value.map((v) => this.buildFilter(v));
|
|
203
|
+
Object.assign(filter, ...andConditions);
|
|
204
|
+
} else if (key === "OR" && Array.isArray(value)) {
|
|
205
|
+
filter.$or = value.map((v) => this.buildFilter(v));
|
|
206
|
+
} else if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
207
|
+
const mongoOperators = {};
|
|
208
|
+
if (value.equals !== void 0) {
|
|
209
|
+
filter[key === "id" ? "_id" : key] = value.equals;
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
if (value.not_equals !== void 0) {
|
|
213
|
+
mongoOperators.$ne = value.not_equals;
|
|
214
|
+
}
|
|
215
|
+
if (value.in !== void 0) {
|
|
216
|
+
mongoOperators.$in = value.in;
|
|
217
|
+
}
|
|
218
|
+
if (value.not_in !== void 0) {
|
|
219
|
+
mongoOperators.$nin = value.not_in;
|
|
220
|
+
}
|
|
221
|
+
if (value.greater_than !== void 0) {
|
|
222
|
+
mongoOperators.$gt = value.greater_than;
|
|
223
|
+
}
|
|
224
|
+
if (value.greater_than_equal !== void 0) {
|
|
225
|
+
mongoOperators.$gte = value.greater_than_equal;
|
|
226
|
+
}
|
|
227
|
+
if (value.less_than !== void 0) {
|
|
228
|
+
mongoOperators.$lt = value.less_than;
|
|
229
|
+
}
|
|
230
|
+
if (value.less_than_equal !== void 0) {
|
|
231
|
+
mongoOperators.$lte = value.less_than_equal;
|
|
232
|
+
}
|
|
233
|
+
if (value.like !== void 0) {
|
|
234
|
+
mongoOperators.$regex = new RegExp(value.like.replace(/%/g, ".*"), "i");
|
|
235
|
+
}
|
|
236
|
+
if (value.not_like !== void 0) {
|
|
237
|
+
mongoOperators.$not = new RegExp(value.not_like.replace(/%/g, ".*"), "i");
|
|
238
|
+
}
|
|
239
|
+
if (value.contains !== void 0) {
|
|
240
|
+
mongoOperators.$regex = new RegExp(`.*${value.contains}.*`, "i");
|
|
241
|
+
}
|
|
242
|
+
if (value.exists !== void 0) {
|
|
243
|
+
mongoOperators.$exists = value.exists;
|
|
244
|
+
}
|
|
245
|
+
if (Object.keys(mongoOperators).length > 0) {
|
|
246
|
+
filter[key === "id" ? "_id" : key] = mongoOperators;
|
|
247
|
+
}
|
|
248
|
+
} else {
|
|
249
|
+
filter[key === "id" ? "_id" : key] = value;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return filter;
|
|
253
|
+
}
|
|
254
|
+
buildProjection(select) {
|
|
255
|
+
if (!select || select.length === 0) return void 0;
|
|
256
|
+
const projection = { _id: 1 };
|
|
257
|
+
for (const field of select) {
|
|
258
|
+
projection[field] = 1;
|
|
259
|
+
}
|
|
260
|
+
return projection;
|
|
261
|
+
}
|
|
262
|
+
processResult(data, config) {
|
|
263
|
+
if (!data) return null;
|
|
264
|
+
const result = { ...data };
|
|
265
|
+
if (data._id) {
|
|
266
|
+
result.id = data._id;
|
|
267
|
+
delete result._id;
|
|
268
|
+
}
|
|
269
|
+
delete result.__v;
|
|
270
|
+
if (result.createdAt) {
|
|
271
|
+
result.createdAt = new Date(result.createdAt).toISOString();
|
|
272
|
+
}
|
|
273
|
+
if (result.updatedAt) {
|
|
274
|
+
result.updatedAt = new Date(result.updatedAt).toISOString();
|
|
275
|
+
}
|
|
276
|
+
return result;
|
|
277
|
+
}
|
|
278
|
+
generateId() {
|
|
279
|
+
const timestamp = Math.floor(Date.now() / 1e3).toString(16).padStart(8, "0");
|
|
280
|
+
const random = Math.random().toString(16).slice(2).padStart(16, "0");
|
|
281
|
+
return timestamp + random;
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
function createMongoDBAdapter(options) {
|
|
285
|
+
return new MongoDBAdapter(options);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
export { MongoDBAdapter, createMongoDBAdapter };
|
|
289
|
+
//# sourceMappingURL=chunk-DIC236EW.js.map
|
|
290
|
+
//# sourceMappingURL=chunk-DIC236EW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/database/mongodb/adapter.ts"],"names":[],"mappings":"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","file":"chunk-DIC236EW.js","sourcesContent":["import { AbstractBaseAdapter } from '../base.js';\nimport type {\n CollectionConfig,\n GlobalConfig,\n FindArgs,\n FindByIDArgs,\n CreateArgs,\n UpdateArgs,\n DeleteArgs,\n FindResult,\n} from '../../registry/types.js';\n\n// ============================================================================\n// MongoDB Adapter\n// ============================================================================\n\nexport class MongoDBAdapter extends AbstractBaseAdapter {\n private client: any;\n private db: any;\n private database: string;\n \n constructor(options: {\n client: any;\n database: string;\n }) {\n super();\n this.client = options.client;\n this.database = options.database;\n }\n\n async connect(): Promise<void> {\n this.db = this.client.db(this.database);\n this.connected = true;\n console.log(`[MongoDBAdapter] Connected to database: ${this.database}`);\n }\n\n async disconnect(): Promise<void> {\n if (this.client) {\n await this.client.close();\n this.connected = false;\n console.log(`[MongoDBAdapter] Disconnected`);\n }\n }\n\n private getMongoCollection(slug: string): any {\n if (!this.db) {\n throw new Error('MongoDB not connected');\n }\n return this.db.collection(slug);\n }\n\n async find<T>(args: FindArgs): Promise<FindResult<T>> {\n const { collection: slug, where = {}, sort, limit = 10, page = 1, tenantID, select } = args;\n const config = this.getCollectionConfig(slug);\n const col = this.getMongoCollection(slug);\n\n // Build filter\n const filter = this.buildFilter(where, tenantID);\n \n // Build sort\n const sortOption = this.parseSort(sort);\n const sortObj: Record<string, 1 | -1> = {\n [sortOption.field]: sortOption.direction === 'asc' ? 1 : -1,\n };\n\n // Execute query\n const skip = (page - 1) * limit;\n \n const [docs, totalDocs] = await Promise.all([\n col\n .find(filter)\n .sort(sortObj)\n .skip(skip)\n .limit(limit)\n .project(this.buildProjection(select))\n .toArray(),\n col.countDocuments(filter),\n ]);\n\n // Process results\n const processedDocs = docs.map((doc: any) => this.processResult(doc, config));\n\n return {\n docs: processedDocs as T[],\n ...this.calculatePagination(page, limit, totalDocs),\n };\n }\n\n async findByID<T>(args: FindByIDArgs): Promise<T | null> {\n const { collection: slug, id, tenantID } = args;\n const config = this.getCollectionConfig(slug);\n const col = this.getMongoCollection(slug);\n\n const filter: any = { _id: id };\n if (tenantID) {\n filter.tenantId = tenantID;\n }\n\n const doc = await col.findOne(filter);\n if (!doc) return null;\n\n return this.processResult(doc, config) as T;\n }\n\n async create<T>(args: CreateArgs): Promise<T> {\n const { collection: slug, data, tenantID } = args;\n const config = this.getCollectionConfig(slug);\n const col = this.getMongoCollection(slug);\n\n const doc: any = {\n ...this.prepareData(data, config),\n _id: this.generateId(),\n };\n\n if (tenantID) {\n doc.tenantId = tenantID;\n }\n\n await col.insertOne(doc);\n\n return this.processResult(doc, config) as T;\n }\n\n async update<T>(args: UpdateArgs): Promise<T> {\n const { collection: slug, id, data, tenantID } = args;\n const config = this.getCollectionConfig(slug);\n const col = this.getMongoCollection(slug);\n\n const filter: any = { _id: id };\n if (tenantID) {\n filter.tenantId = tenantID;\n }\n\n const updateData = this.prepareData(data, config);\n\n const result = await col.findOneAndUpdate(\n filter,\n { $set: updateData },\n { returnDocument: 'after' }\n );\n\n if (!result) {\n throw new Error(`Document not found: ${slug}/${id}`);\n }\n\n return this.processResult(result, config) as T;\n }\n\n async delete<T>(args: DeleteArgs): Promise<T> {\n const { collection: slug, id, tenantID } = args;\n const config = this.getCollectionConfig(slug);\n const col = this.getMongoCollection(slug);\n\n const filter: any = { _id: id };\n if (tenantID) {\n filter.tenantId = tenantID;\n }\n\n const doc = await col.findOneAndDelete(filter);\n if (!doc) {\n throw new Error(`Document not found: ${slug}/${id}`);\n }\n\n return this.processResult(doc, config) as T;\n }\n\n async count(args: { collection: string; where?: Record<string, any>; tenantID?: string }): Promise<number> {\n const { collection: slug, where = {}, tenantID } = args;\n const col = this.getMongoCollection(slug);\n const filter = this.buildFilter(where, tenantID);\n return col.countDocuments(filter);\n }\n\n async findOne(args: { collection: string; where: Record<string, any>; tenantID?: string }): Promise<any> {\n const { collection: slug, where = {}, tenantID } = args;\n const config = this.getCollectionConfig(slug);\n const col = this.getMongoCollection(slug);\n const filter = this.buildFilter(where, tenantID);\n\n const doc = await col.findOne(filter);\n if (!doc) return null;\n\n return this.processResult(doc, config);\n }\n\n async findVersions(args: FindArgs): Promise<FindResult<any>> {\n const { collection: slug, where = {}, sort, limit = 10, page = 1 } = args;\n \n // Versions stored in a separate collection\n const versionCollection = this.getMongoCollection(`${slug}_versions`);\n const filter = this.buildFilter(where);\n\n const skip = (page - 1) * limit;\n const sortOption = this.parseSort(sort);\n const sortObj: Record<string, 1 | -1> = {\n [sortOption.field]: sortOption.direction === 'asc' ? 1 : -1,\n };\n\n const [docs, totalDocs] = await Promise.all([\n versionCollection.find(filter).sort(sortObj).skip(skip).limit(limit).toArray(),\n versionCollection.countDocuments(filter),\n ]);\n\n return {\n docs: docs.map((doc: any) => this.processResult(doc, {} as CollectionConfig)),\n ...this.calculatePagination(page, limit, totalDocs),\n };\n }\n\n async findVersionByID(args: FindByIDArgs): Promise<any> {\n const { collection: slug, id } = args;\n const versionCollection = this.getMongoCollection(`${slug}_versions`);\n return versionCollection.findOne({ _id: id });\n }\n\n async createVersion(args: CreateArgs): Promise<any> {\n const { collection: slug, data } = args;\n const versionCollection = this.getMongoCollection(`${slug}_versions`);\n\n const doc = {\n ...data,\n _id: this.generateId(),\n createdAt: new Date().toISOString(),\n };\n\n await versionCollection.insertOne(doc);\n return doc;\n }\n\n async deleteVersions(args: { collection: string; where: Record<string, any> }): Promise<void> {\n const { collection: slug, where } = args;\n const versionCollection = this.getMongoCollection(`${slug}_versions`);\n await versionCollection.deleteMany(where);\n }\n\n async migrate?(): Promise<void> {\n // Create indexes for all collections\n for (const config of this.collections.values()) {\n const col = this.getMongoCollection(config.slug);\n\n // Create default indexes\n await col.createIndex({ _id: 1 });\n \n if (config.tenantScoped) {\n await col.createIndex({ tenantId: 1 });\n }\n\n if (config.timestamps) {\n await col.createIndex({ createdAt: -1 });\n }\n\n // Create unique indexes\n for (const field of config.fields) {\n if (field.unique && field.name) {\n await col.createIndex({ [field.name]: 1 }, { unique: true });\n }\n if (field.indexed && field.name) {\n await col.createIndex({ [field.name]: 1 });\n }\n }\n }\n \n console.log(`[MongoDBAdapter] Migration completed`);\n }\n\n // ========================================================================\n // Helper Methods\n // ========================================================================\n\n private getCollectionConfig(slug: string): CollectionConfig {\n const config = this.collections.get(slug);\n if (!config) {\n throw new Error(`Collection \"${slug}\" not found`);\n }\n return config;\n }\n\n private buildFilter(where: Record<string, any> = {}, tenantID?: string): Record<string, any> {\n const filter: Record<string, any> = {};\n\n // Apply tenant filter\n if (tenantID) {\n filter.tenantId = tenantID;\n }\n\n // Convert operators to MongoDB format\n for (const [key, value] of Object.entries(where)) {\n if (key === 'AND' && Array.isArray(value)) {\n const andConditions = value.map((v: any) => this.buildFilter(v));\n Object.assign(filter, ...andConditions);\n } else if (key === 'OR' && Array.isArray(value)) {\n filter.$or = value.map((v: any) => this.buildFilter(v));\n } else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n // Operator-based conditions\n const mongoOperators: Record<string, any> = {};\n \n if (value.equals !== undefined) {\n filter[key === 'id' ? '_id' : key] = value.equals;\n continue;\n }\n if (value.not_equals !== undefined) {\n mongoOperators.$ne = value.not_equals;\n }\n if (value.in !== undefined) {\n mongoOperators.$in = value.in;\n }\n if (value.not_in !== undefined) {\n mongoOperators.$nin = value.not_in;\n }\n if (value.greater_than !== undefined) {\n mongoOperators.$gt = value.greater_than;\n }\n if (value.greater_than_equal !== undefined) {\n mongoOperators.$gte = value.greater_than_equal;\n }\n if (value.less_than !== undefined) {\n mongoOperators.$lt = value.less_than;\n }\n if (value.less_than_equal !== undefined) {\n mongoOperators.$lte = value.less_than_equal;\n }\n if (value.like !== undefined) {\n mongoOperators.$regex = new RegExp(value.like.replace(/%/g, '.*'), 'i');\n }\n if (value.not_like !== undefined) {\n mongoOperators.$not = new RegExp(value.not_like.replace(/%/g, '.*'), 'i');\n }\n if (value.contains !== undefined) {\n mongoOperators.$regex = new RegExp(`.*${value.contains}.*`, 'i');\n }\n if (value.exists !== undefined) {\n mongoOperators.$exists = value.exists;\n }\n\n if (Object.keys(mongoOperators).length > 0) {\n filter[key === 'id' ? '_id' : key] = mongoOperators;\n }\n } else {\n // Direct equality\n filter[key === 'id' ? '_id' : key] = value;\n }\n }\n\n return filter;\n }\n\n private buildProjection(select?: string[]): Record<string, 1> | undefined {\n if (!select || select.length === 0) return undefined;\n \n const projection: Record<string, 1> = { _id: 1 };\n for (const field of select) {\n projection[field] = 1;\n }\n return projection;\n }\n\n private processResult(data: any, config: CollectionConfig): any {\n if (!data) return null;\n\n const result = { ...data };\n\n // Convert _id to id\n if (data._id) {\n result.id = data._id;\n delete result._id;\n }\n\n // Remove MongoDB internals\n delete result.__v;\n\n // Convert dates to ISO strings\n if (result.createdAt) {\n result.createdAt = new Date(result.createdAt).toISOString();\n }\n if (result.updatedAt) {\n result.updatedAt = new Date(result.updatedAt).toISOString();\n }\n\n return result;\n }\n\n private generateId(): string {\n // Generate a MongoDB-like ObjectId\n const timestamp = Math.floor(Date.now() / 1000).toString(16).padStart(8, '0');\n const random = Math.random().toString(16).slice(2).padStart(16, '0');\n return timestamp + random;\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\nexport function createMongoDBAdapter(options: {\n client: any;\n database: string;\n}): MongoDBAdapter {\n return new MongoDBAdapter(options);\n}\n"]}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { AbstractBaseAdapter } from './chunk-BXMWDUED.js';
|
|
2
|
+
|
|
3
|
+
// src/database/drizzle/adapter.ts
|
|
4
|
+
function fieldToDrizzleType(field, dialect = "postgres") {
|
|
5
|
+
switch (field.type) {
|
|
6
|
+
case "text":
|
|
7
|
+
case "email":
|
|
8
|
+
case "password":
|
|
9
|
+
case "textarea":
|
|
10
|
+
case "color":
|
|
11
|
+
case "code":
|
|
12
|
+
case "markdown":
|
|
13
|
+
return dialect === "sqlite" ? "text" : "varchar";
|
|
14
|
+
case "number":
|
|
15
|
+
return field.integer ? "integer" : "decimal";
|
|
16
|
+
case "checkbox":
|
|
17
|
+
return "boolean";
|
|
18
|
+
case "date":
|
|
19
|
+
return "timestamp";
|
|
20
|
+
case "select":
|
|
21
|
+
case "radio":
|
|
22
|
+
return dialect === "sqlite" ? "text" : "varchar";
|
|
23
|
+
case "richtext":
|
|
24
|
+
case "json":
|
|
25
|
+
case "array":
|
|
26
|
+
case "group":
|
|
27
|
+
case "blocks":
|
|
28
|
+
case "row":
|
|
29
|
+
case "collapsible":
|
|
30
|
+
case "tabs":
|
|
31
|
+
return "jsonb";
|
|
32
|
+
case "relationship":
|
|
33
|
+
return dialect === "sqlite" ? "text" : "varchar";
|
|
34
|
+
case "upload":
|
|
35
|
+
return dialect === "sqlite" ? "text" : "varchar";
|
|
36
|
+
default:
|
|
37
|
+
return "jsonb";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function collectionToDrizzleSchema(collection, dialect = "postgres") {
|
|
41
|
+
const tableName = collection.slug.replace(/-/g, "_");
|
|
42
|
+
const lines = [];
|
|
43
|
+
lines.push(`export const ${tableName} = ${dialect === "mysql" ? "mysqlTable" : "pgTable"}('${tableName}', {`);
|
|
44
|
+
lines.push(` id: ${dialect === "mysql" ? "varchar" : "uuid"}('${dialect === "mysql" ? "id" : "id"}').${dialect === "mysql" ? "primaryKey().default(sql`UUID()`)" : "primaryKey().defaultRandom()"},`);
|
|
45
|
+
for (const field of collection.fields) {
|
|
46
|
+
if (field.name === "id") continue;
|
|
47
|
+
const dbType = fieldToDrizzleType(field, dialect);
|
|
48
|
+
const isRequired = field.required;
|
|
49
|
+
let fieldDef = ` ${field.name}: ${dialect === "mysql" ? "mysql" : "pg"}.${dbType}('${field.name}')`;
|
|
50
|
+
if (field.unique) fieldDef += ".unique()";
|
|
51
|
+
if (!isRequired) fieldDef += ".nullable()";
|
|
52
|
+
if (field.defaultValue !== void 0) {
|
|
53
|
+
if (typeof field.defaultValue === "string") {
|
|
54
|
+
fieldDef += `.default('${field.defaultValue}')`;
|
|
55
|
+
} else if (typeof field.defaultValue === "boolean") {
|
|
56
|
+
fieldDef += `.default(${field.defaultValue})`;
|
|
57
|
+
} else {
|
|
58
|
+
fieldDef += `.default(sql\`${JSON.stringify(field.defaultValue)}\`)`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
fieldDef += ",";
|
|
62
|
+
lines.push(fieldDef);
|
|
63
|
+
}
|
|
64
|
+
if (collection.timestamps) {
|
|
65
|
+
lines.push(` createdAt: ${dialect === "mysql" ? "mysql" : "pg"}.timestamp('created_at').defaultNow(),`);
|
|
66
|
+
lines.push(` updatedAt: ${dialect === "mysql" ? "mysql" : "pg"}.timestamp('updated_at').defaultNow(),`);
|
|
67
|
+
}
|
|
68
|
+
if (collection.tenantScoped) {
|
|
69
|
+
lines.push(` tenantId: ${dialect === "mysql" ? "mysql" : "pg"}.varchar('tenant_id'),`);
|
|
70
|
+
}
|
|
71
|
+
lines.push("});");
|
|
72
|
+
return lines.join("\n");
|
|
73
|
+
}
|
|
74
|
+
var DrizzleAdapter = class extends AbstractBaseAdapter {
|
|
75
|
+
client;
|
|
76
|
+
schema;
|
|
77
|
+
dialect;
|
|
78
|
+
constructor(options) {
|
|
79
|
+
super();
|
|
80
|
+
this.client = options.client;
|
|
81
|
+
this.schema = options.schema || {};
|
|
82
|
+
this.dialect = options.type;
|
|
83
|
+
}
|
|
84
|
+
async connect() {
|
|
85
|
+
this.connected = true;
|
|
86
|
+
console.log(`[DrizzleAdapter] Connected to ${this.dialect}`);
|
|
87
|
+
}
|
|
88
|
+
async disconnect() {
|
|
89
|
+
this.connected = false;
|
|
90
|
+
console.log(`[DrizzleAdapter] Disconnected from ${this.dialect}`);
|
|
91
|
+
}
|
|
92
|
+
async find(args) {
|
|
93
|
+
const { collection: slug, where = {}, sort, limit = 10, page = 1, tenantID, select } = args;
|
|
94
|
+
const config = this.getCollection(slug);
|
|
95
|
+
const table = this.getTable(slug);
|
|
96
|
+
const filters = this.buildWhereClause(where, config, tenantID);
|
|
97
|
+
const sortOption = this.parseSort(sort);
|
|
98
|
+
const totalDocs = await this.count({ collection: slug, where, tenantID });
|
|
99
|
+
const offset = (page - 1) * limit;
|
|
100
|
+
let docs = [];
|
|
101
|
+
try {
|
|
102
|
+
const results = await this.client.select().from(table).where(filters).orderBy(sortOption.direction === "asc" ? table[sortOption.field] : void 0).limit(limit).offset(offset);
|
|
103
|
+
docs = results.map((doc) => this.processResult(doc, config));
|
|
104
|
+
} catch (error) {
|
|
105
|
+
console.error(`[DrizzleAdapter] Query error:`, error);
|
|
106
|
+
docs = [];
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
docs,
|
|
110
|
+
...this.calculatePagination(page, limit, totalDocs)
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
async findByID(args) {
|
|
114
|
+
const { collection: slug, id, tenantID } = args;
|
|
115
|
+
const config = this.getCollection(slug);
|
|
116
|
+
const table = this.getTable(slug);
|
|
117
|
+
let query = this.client.select().from(table).where(table.id.equals(id));
|
|
118
|
+
if (tenantID) {
|
|
119
|
+
query = query.where(table.tenantId.equals(tenantID));
|
|
120
|
+
}
|
|
121
|
+
const results = await query.limit(1);
|
|
122
|
+
if (results.length === 0) return null;
|
|
123
|
+
return this.processResult(results[0], config);
|
|
124
|
+
}
|
|
125
|
+
async create(args) {
|
|
126
|
+
const { collection: slug, data, tenantID } = args;
|
|
127
|
+
const config = this.getCollection(slug);
|
|
128
|
+
const table = this.getTable(slug);
|
|
129
|
+
const insertData = this.prepareData(data, config);
|
|
130
|
+
if (tenantID) {
|
|
131
|
+
insertData.tenantId = tenantID;
|
|
132
|
+
}
|
|
133
|
+
const result = await this.client.insert(table).values(insertData).returning();
|
|
134
|
+
return this.processResult(result[0], config);
|
|
135
|
+
}
|
|
136
|
+
async update(args) {
|
|
137
|
+
const { collection: slug, id, data, tenantID } = args;
|
|
138
|
+
const config = this.getCollection(slug);
|
|
139
|
+
const table = this.getTable(slug);
|
|
140
|
+
const updateData = this.prepareData(data, config);
|
|
141
|
+
if (tenantID) {
|
|
142
|
+
updateData.tenantId = tenantID;
|
|
143
|
+
}
|
|
144
|
+
const result = await this.client.update(table).set(updateData).where(table.id.equals(id)).returning();
|
|
145
|
+
return this.processResult(result[0], config);
|
|
146
|
+
}
|
|
147
|
+
async delete(args) {
|
|
148
|
+
const { collection: slug, id, tenantID } = args;
|
|
149
|
+
const config = this.getCollection(slug);
|
|
150
|
+
const table = this.getTable(slug);
|
|
151
|
+
let query = this.client.delete(table).where(table.id.equals(id)).returning();
|
|
152
|
+
if (tenantID) {
|
|
153
|
+
query = query.where(table.tenantId.equals(tenantID));
|
|
154
|
+
}
|
|
155
|
+
const result = await query;
|
|
156
|
+
if (result.length === 0) {
|
|
157
|
+
throw new Error(`Document not found: ${slug}/${id}`);
|
|
158
|
+
}
|
|
159
|
+
return this.processResult(result[0], config);
|
|
160
|
+
}
|
|
161
|
+
async count(args) {
|
|
162
|
+
const { collection: slug, where = {}, tenantID } = args;
|
|
163
|
+
const config = this.getCollection(slug);
|
|
164
|
+
const table = this.getTable(slug);
|
|
165
|
+
const filters = this.buildWhereClause(where, config, tenantID);
|
|
166
|
+
try {
|
|
167
|
+
const result = await this.client.select({ count: `count(*)` }).from(table).where(filters);
|
|
168
|
+
return parseInt(result[0]?.count || "0");
|
|
169
|
+
} catch {
|
|
170
|
+
return 0;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
async findOne(args) {
|
|
174
|
+
const { collection: slug, where = {}, tenantID } = args;
|
|
175
|
+
const config = this.getCollection(slug);
|
|
176
|
+
const table = this.getTable(slug);
|
|
177
|
+
const filters = this.buildWhereClause(where, config, tenantID);
|
|
178
|
+
const results = await this.client.select().from(table).where(filters).limit(1);
|
|
179
|
+
if (results.length === 0) return null;
|
|
180
|
+
return this.processResult(results[0], config);
|
|
181
|
+
}
|
|
182
|
+
async findVersions(args) {
|
|
183
|
+
const { collection: slug, where = {}, sort, limit = 10, page = 1 } = args;
|
|
184
|
+
return {
|
|
185
|
+
docs: [],
|
|
186
|
+
...this.calculatePagination(page, limit, 0)
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
async findVersionByID(args) {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
async createVersion(args) {
|
|
193
|
+
return args.data;
|
|
194
|
+
}
|
|
195
|
+
async deleteVersions(args) {
|
|
196
|
+
}
|
|
197
|
+
// ========================================================================
|
|
198
|
+
// Helper Methods
|
|
199
|
+
// ========================================================================
|
|
200
|
+
getTable(slug) {
|
|
201
|
+
const tableName = this.getTableName(slug);
|
|
202
|
+
const table = this.schema[tableName];
|
|
203
|
+
if (!table) {
|
|
204
|
+
throw new Error(`Table "${tableName}" not found in schema`);
|
|
205
|
+
}
|
|
206
|
+
return table;
|
|
207
|
+
}
|
|
208
|
+
buildWhereClause(where, config, tenantID) {
|
|
209
|
+
const conditions = [];
|
|
210
|
+
if (tenantID && config.tenantScoped) {
|
|
211
|
+
conditions.push({ tenantId: tenantID });
|
|
212
|
+
}
|
|
213
|
+
for (const [key, value] of Object.entries(where)) {
|
|
214
|
+
if (key === "AND" && Array.isArray(value)) {
|
|
215
|
+
for (const subCondition of value) {
|
|
216
|
+
conditions.push(...Object.entries(subCondition).map(([k, v]) => ({ [k]: v })));
|
|
217
|
+
}
|
|
218
|
+
} else if (key === "OR" && Array.isArray(value)) {
|
|
219
|
+
conditions.push(...value.flatMap(
|
|
220
|
+
(v) => Object.entries(v).map(([k, val]) => ({ [k]: val }))
|
|
221
|
+
));
|
|
222
|
+
} else if (typeof value === "object" && value !== null) {
|
|
223
|
+
if (value.equals !== void 0) conditions.push({ [key]: value.equals });
|
|
224
|
+
if (value.not_equals !== void 0) conditions.push({ [key]: { not: value.not_equals } });
|
|
225
|
+
if (value.in) conditions.push({ [key]: { in: value.in } });
|
|
226
|
+
if (value.like) conditions.push({ [key]: { like: value.like } });
|
|
227
|
+
if (value.greater_than !== void 0) conditions.push({ [key]: { gt: value.greater_than } });
|
|
228
|
+
if (value.greater_than_equal !== void 0) conditions.push({ [key]: { gte: value.greater_than_equal } });
|
|
229
|
+
if (value.less_than !== void 0) conditions.push({ [key]: { lt: value.less_than } });
|
|
230
|
+
if (value.less_than_equal !== void 0) conditions.push({ [key]: { lte: value.less_than_equal } });
|
|
231
|
+
} else {
|
|
232
|
+
conditions.push({ [key]: value });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return conditions.length > 0 ? conditions : void 0;
|
|
236
|
+
}
|
|
237
|
+
processResult(data, config) {
|
|
238
|
+
if (!data) return null;
|
|
239
|
+
const result = { ...data };
|
|
240
|
+
if (data.id) {
|
|
241
|
+
result.id = String(data.id);
|
|
242
|
+
}
|
|
243
|
+
for (const field of config.fields) {
|
|
244
|
+
if (field.type === "json" || field.type === "richtext" || field.type === "array" || field.type === "group" || field.type === "blocks") {
|
|
245
|
+
if (result[field.name] && typeof result[field.name] === "string") {
|
|
246
|
+
try {
|
|
247
|
+
result[field.name] = JSON.parse(result[field.name]);
|
|
248
|
+
} catch {
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (result.createdAt) {
|
|
254
|
+
result.createdAt = new Date(result.createdAt).toISOString();
|
|
255
|
+
}
|
|
256
|
+
if (result.updatedAt) {
|
|
257
|
+
result.updatedAt = new Date(result.updatedAt).toISOString();
|
|
258
|
+
}
|
|
259
|
+
return result;
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
function createDrizzleAdapter(options) {
|
|
263
|
+
return new DrizzleAdapter(options);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export { DrizzleAdapter, collectionToDrizzleSchema, createDrizzleAdapter, fieldToDrizzleType };
|
|
267
|
+
//# sourceMappingURL=chunk-DKSMFC3L.js.map
|
|
268
|
+
//# sourceMappingURL=chunk-DKSMFC3L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/database/drizzle/adapter.ts"],"names":[],"mappings":"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","file":"chunk-DKSMFC3L.js","sourcesContent":["import { AbstractBaseAdapter } from '../base.js';\nimport type {\n CollectionConfig,\n GlobalConfig,\n FindArgs,\n FindByIDArgs,\n CreateArgs,\n UpdateArgs,\n DeleteArgs,\n FindResult,\n} from '../../registry/types.js';\nimport type { Field, RelationshipField } from '../../fields/types.js';\n\n// ============================================================================\n// Drizzle Schema Generator\n// ============================================================================\n\nexport function fieldToDrizzleType(field: Field, dialect: 'postgres' | 'mysql' | 'sqlite' = 'postgres'): string {\n switch (field.type) {\n case 'text':\n case 'email':\n case 'password':\n case 'textarea':\n case 'color':\n case 'code':\n case 'markdown':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'number':\n return field.integer ? 'integer' : 'decimal';\n case 'checkbox':\n return 'boolean';\n case 'date':\n return 'timestamp';\n case 'select':\n case 'radio':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'richtext':\n case 'json':\n case 'array':\n case 'group':\n case 'blocks':\n case 'row':\n case 'collapsible':\n case 'tabs':\n return 'jsonb';\n case 'relationship':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'upload':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n default:\n return 'jsonb';\n }\n}\n\nexport function collectionToDrizzleSchema(\n collection: CollectionConfig,\n dialect: 'postgres' | 'mysql' | 'sqlite' = 'postgres'\n): string {\n const tableName = collection.slug.replace(/-/g, '_');\n const lines: string[] = [];\n \n lines.push(`export const ${tableName} = ${dialect === 'mysql' ? 'mysqlTable' : 'pgTable'}('${tableName}', {`);\n \n // Add id field\n lines.push(` id: ${dialect === 'mysql' ? 'varchar' : 'uuid'}('${dialect === 'mysql' ? 'id' : 'id'}').${dialect === 'mysql' ? \"primaryKey().default(sql`UUID()`)\" : \"primaryKey().defaultRandom()\"},`);\n \n // Process fields\n for (const field of collection.fields) {\n if (field.name === 'id') continue;\n \n const dbType = fieldToDrizzleType(field, dialect);\n const isRequired = field.required;\n \n let fieldDef = ` ${field.name}: ${dialect === 'mysql' ? 'mysql' : 'pg'}.${dbType}('${field.name}')`;\n \n // Add constraints\n if (field.unique) fieldDef += '.unique()';\n if (!isRequired) fieldDef += '.nullable()';\n \n // Add default value\n if (field.defaultValue !== undefined) {\n if (typeof field.defaultValue === 'string') {\n fieldDef += `.default('${field.defaultValue}')`;\n } else if (typeof field.defaultValue === 'boolean') {\n fieldDef += `.default(${field.defaultValue})`;\n } else {\n fieldDef += `.default(sql\\`${JSON.stringify(field.defaultValue)}\\`)`;\n }\n }\n \n fieldDef += ',';\n lines.push(fieldDef);\n }\n \n // Add timestamps\n if (collection.timestamps) {\n lines.push(` createdAt: ${dialect === 'mysql' ? 'mysql' : 'pg'}.timestamp('created_at').defaultNow(),`);\n lines.push(` updatedAt: ${dialect === 'mysql' ? 'mysql' : 'pg'}.timestamp('updated_at').defaultNow(),`);\n }\n \n // Add tenantID\n if (collection.tenantScoped) {\n lines.push(` tenantId: ${dialect === 'mysql' ? 'mysql' : 'pg'}.varchar('tenant_id'),`);\n }\n \n lines.push('});');\n \n return lines.join('\\n');\n}\n\n// ============================================================================\n// Drizzle Adapter\n// ============================================================================\n\nexport class DrizzleAdapter extends AbstractBaseAdapter {\n private client: any;\n private schema: any;\n private dialect: 'postgres' | 'mysql' | 'sqlite';\n \n constructor(options: {\n type: 'postgres' | 'mysql' | 'sqlite';\n client: any;\n schema?: any;\n }) {\n super();\n this.client = options.client;\n this.schema = options.schema || {};\n this.dialect = options.type;\n }\n\n async connect(): Promise<void> {\n this.connected = true;\n console.log(`[DrizzleAdapter] Connected to ${this.dialect}`);\n }\n\n async disconnect(): Promise<void> {\n this.connected = false;\n console.log(`[DrizzleAdapter] Disconnected from ${this.dialect}`);\n }\n\n async find<T>(args: FindArgs): Promise<FindResult<T>> {\n const { collection: slug, where = {}, sort, limit = 10, page = 1, tenantID, select } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n // Build query\n const filters = this.buildWhereClause(where, config, tenantID);\n const sortOption = this.parseSort(sort);\n\n // Get total count\n const totalDocs = await this.count({ collection: slug, where, tenantID });\n\n // Execute query\n const offset = (page - 1) * limit;\n \n let docs: T[] = [];\n try {\n const results = await this.client\n .select()\n .from(table)\n .where(filters)\n .orderBy(sortOption.direction === 'asc' ? table[sortOption.field] : undefined)\n .limit(limit)\n .offset(offset);\n\n docs = results.map((doc: any) => this.processResult(doc, config));\n } catch (error) {\n console.error(`[DrizzleAdapter] Query error:`, error);\n docs = [];\n }\n\n return {\n docs,\n ...this.calculatePagination(page, limit, totalDocs),\n };\n }\n\n async findByID<T>(args: FindByIDArgs): Promise<T | null> {\n const { collection: slug, id, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n let query = this.client\n .select()\n .from(table)\n .where(table.id.equals(id));\n\n if (tenantID) {\n query = query.where(table.tenantId.equals(tenantID));\n }\n\n const results = await query.limit(1);\n if (results.length === 0) return null;\n\n return this.processResult(results[0], config) as T;\n }\n\n async create<T>(args: CreateArgs): Promise<T> {\n const { collection: slug, data, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const insertData = this.prepareData(data, config);\n if (tenantID) {\n insertData.tenantId = tenantID;\n }\n\n const result = await this.client\n .insert(table)\n .values(insertData)\n .returning();\n\n return this.processResult(result[0], config) as T;\n }\n\n async update<T>(args: UpdateArgs): Promise<T> {\n const { collection: slug, id, data, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const updateData = this.prepareData(data, config);\n if (tenantID) {\n updateData.tenantId = tenantID;\n }\n\n const result = await this.client\n .update(table)\n .set(updateData)\n .where(table.id.equals(id))\n .returning();\n\n return this.processResult(result[0], config) as T;\n }\n\n async delete<T>(args: DeleteArgs): Promise<T> {\n const { collection: slug, id, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n let query = this.client\n .delete(table)\n .where(table.id.equals(id))\n .returning();\n\n if (tenantID) {\n query = query.where(table.tenantId.equals(tenantID));\n }\n\n const result = await query;\n if (result.length === 0) {\n throw new Error(`Document not found: ${slug}/${id}`);\n }\n\n return this.processResult(result[0], config) as T;\n }\n\n async count(args: { collection: string; where?: Record<string, any>; tenantID?: string }): Promise<number> {\n const { collection: slug, where = {}, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const filters = this.buildWhereClause(where, config, tenantID);\n\n try {\n const result = await this.client\n .select({ count: `count(*)` })\n .from(table)\n .where(filters);\n\n return parseInt(result[0]?.count || '0');\n } catch {\n return 0;\n }\n }\n\n async findOne(args: { collection: string; where: Record<string, any>; tenantID?: string }): Promise<any> {\n const { collection: slug, where = {}, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const filters = this.buildWhereClause(where, config, tenantID);\n\n const results = await this.client\n .select()\n .from(table)\n .where(filters)\n .limit(1);\n\n if (results.length === 0) return null;\n\n return this.processResult(results[0], config);\n }\n\n async findVersions(args: FindArgs): Promise<FindResult<any>> {\n // Versions are stored in a separate table\n const { collection: slug, where = {}, sort, limit = 10, page = 1 } = args;\n \n // Placeholder implementation\n return {\n docs: [],\n ...this.calculatePagination(page, limit, 0),\n };\n }\n\n async findVersionByID(args: FindByIDArgs): Promise<any> {\n return null;\n }\n\n async createVersion(args: CreateArgs): Promise<any> {\n return args.data;\n }\n\n async deleteVersions(args: { collection: string; where: Record<string, any> }): Promise<void> {\n // Placeholder\n }\n\n // ========================================================================\n // Helper Methods\n // ========================================================================\n\n private getTable(slug: string): any {\n const tableName = this.getTableName(slug);\n const table = this.schema[tableName];\n if (!table) {\n throw new Error(`Table \"${tableName}\" not found in schema`);\n }\n return table;\n }\n\n private buildWhereClause(\n where: Record<string, any>,\n config: CollectionConfig,\n tenantID?: string\n ): any {\n // Simplified where clause builder\n const conditions: any[] = [];\n\n // Apply tenant filter\n if (tenantID && config.tenantScoped) {\n conditions.push({ tenantId: tenantID });\n }\n\n // Process where conditions\n for (const [key, value] of Object.entries(where)) {\n if (key === 'AND' && Array.isArray(value)) {\n // AND conditions\n for (const subCondition of value) {\n conditions.push(...Object.entries(subCondition).map(([k, v]) => ({ [k]: v })));\n }\n } else if (key === 'OR' && Array.isArray(value)) {\n // OR conditions - simplified\n conditions.push(...value.flatMap((v: any) => \n Object.entries(v).map(([k, val]) => ({ [k]: val }))\n ));\n } else if (typeof value === 'object' && value !== null) {\n // Operator-based conditions\n if (value.equals !== undefined) conditions.push({ [key]: value.equals });\n if (value.not_equals !== undefined) conditions.push({ [key]: { not: value.not_equals } });\n if (value.in) conditions.push({ [key]: { in: value.in } });\n if (value.like) conditions.push({ [key]: { like: value.like } });\n if (value.greater_than !== undefined) conditions.push({ [key]: { gt: value.greater_than } });\n if (value.greater_than_equal !== undefined) conditions.push({ [key]: { gte: value.greater_than_equal } });\n if (value.less_than !== undefined) conditions.push({ [key]: { lt: value.less_than } });\n if (value.less_than_equal !== undefined) conditions.push({ [key]: { lte: value.less_than_equal } });\n } else {\n // Direct equality\n conditions.push({ [key]: value });\n }\n }\n\n return conditions.length > 0 ? conditions : undefined;\n }\n\n private processResult(data: any, config: CollectionConfig): any {\n if (!data) return null;\n\n const result = { ...data };\n\n // Convert id field\n if (data.id) {\n result.id = String(data.id);\n }\n\n // Parse JSON fields\n for (const field of config.fields) {\n if (field.type === 'json' || field.type === 'richtext' || field.type === 'array' || field.type === 'group' || field.type === 'blocks') {\n if (result[field.name] && typeof result[field.name] === 'string') {\n try {\n result[field.name] = JSON.parse(result[field.name]);\n } catch {\n // Keep original value\n }\n }\n }\n }\n\n // Convert timestamps to ISO strings\n if (result.createdAt) {\n result.createdAt = new Date(result.createdAt).toISOString();\n }\n if (result.updatedAt) {\n result.updatedAt = new Date(result.updatedAt).toISOString();\n }\n\n return result;\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\nexport function createDrizzleAdapter(options: {\n type: 'postgres' | 'mysql' | 'sqlite';\n client: any;\n schema?: any;\n}): DrizzleAdapter {\n return new DrizzleAdapter(options);\n}\n"]}
|