@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,293 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkRLTG4YZM_cjs = require('./chunk-RLTG4YZM.cjs');
|
|
4
|
+
|
|
5
|
+
// src/database/mongodb/adapter.ts
|
|
6
|
+
var MongoDBAdapter = class extends chunkRLTG4YZM_cjs.AbstractBaseAdapter {
|
|
7
|
+
client;
|
|
8
|
+
db;
|
|
9
|
+
database;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super();
|
|
12
|
+
this.client = options.client;
|
|
13
|
+
this.database = options.database;
|
|
14
|
+
}
|
|
15
|
+
async connect() {
|
|
16
|
+
this.db = this.client.db(this.database);
|
|
17
|
+
this.connected = true;
|
|
18
|
+
console.log(`[MongoDBAdapter] Connected to database: ${this.database}`);
|
|
19
|
+
}
|
|
20
|
+
async disconnect() {
|
|
21
|
+
if (this.client) {
|
|
22
|
+
await this.client.close();
|
|
23
|
+
this.connected = false;
|
|
24
|
+
console.log(`[MongoDBAdapter] Disconnected`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
getMongoCollection(slug) {
|
|
28
|
+
if (!this.db) {
|
|
29
|
+
throw new Error("MongoDB not connected");
|
|
30
|
+
}
|
|
31
|
+
return this.db.collection(slug);
|
|
32
|
+
}
|
|
33
|
+
async find(args) {
|
|
34
|
+
const { collection: slug, where = {}, sort, limit = 10, page = 1, tenantID, select } = args;
|
|
35
|
+
const config = this.getCollectionConfig(slug);
|
|
36
|
+
const col = this.getMongoCollection(slug);
|
|
37
|
+
const filter = this.buildFilter(where, tenantID);
|
|
38
|
+
const sortOption = this.parseSort(sort);
|
|
39
|
+
const sortObj = {
|
|
40
|
+
[sortOption.field]: sortOption.direction === "asc" ? 1 : -1
|
|
41
|
+
};
|
|
42
|
+
const skip = (page - 1) * limit;
|
|
43
|
+
const [docs, totalDocs] = await Promise.all([
|
|
44
|
+
col.find(filter).sort(sortObj).skip(skip).limit(limit).project(this.buildProjection(select)).toArray(),
|
|
45
|
+
col.countDocuments(filter)
|
|
46
|
+
]);
|
|
47
|
+
const processedDocs = docs.map((doc) => this.processResult(doc, config));
|
|
48
|
+
return {
|
|
49
|
+
docs: processedDocs,
|
|
50
|
+
...this.calculatePagination(page, limit, totalDocs)
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async findByID(args) {
|
|
54
|
+
const { collection: slug, id, tenantID } = args;
|
|
55
|
+
const config = this.getCollectionConfig(slug);
|
|
56
|
+
const col = this.getMongoCollection(slug);
|
|
57
|
+
const filter = { _id: id };
|
|
58
|
+
if (tenantID) {
|
|
59
|
+
filter.tenantId = tenantID;
|
|
60
|
+
}
|
|
61
|
+
const doc = await col.findOne(filter);
|
|
62
|
+
if (!doc) return null;
|
|
63
|
+
return this.processResult(doc, config);
|
|
64
|
+
}
|
|
65
|
+
async create(args) {
|
|
66
|
+
const { collection: slug, data, tenantID } = args;
|
|
67
|
+
const config = this.getCollectionConfig(slug);
|
|
68
|
+
const col = this.getMongoCollection(slug);
|
|
69
|
+
const doc = {
|
|
70
|
+
...this.prepareData(data, config),
|
|
71
|
+
_id: this.generateId()
|
|
72
|
+
};
|
|
73
|
+
if (tenantID) {
|
|
74
|
+
doc.tenantId = tenantID;
|
|
75
|
+
}
|
|
76
|
+
await col.insertOne(doc);
|
|
77
|
+
return this.processResult(doc, config);
|
|
78
|
+
}
|
|
79
|
+
async update(args) {
|
|
80
|
+
const { collection: slug, id, data, tenantID } = args;
|
|
81
|
+
const config = this.getCollectionConfig(slug);
|
|
82
|
+
const col = this.getMongoCollection(slug);
|
|
83
|
+
const filter = { _id: id };
|
|
84
|
+
if (tenantID) {
|
|
85
|
+
filter.tenantId = tenantID;
|
|
86
|
+
}
|
|
87
|
+
const updateData = this.prepareData(data, config);
|
|
88
|
+
const result = await col.findOneAndUpdate(
|
|
89
|
+
filter,
|
|
90
|
+
{ $set: updateData },
|
|
91
|
+
{ returnDocument: "after" }
|
|
92
|
+
);
|
|
93
|
+
if (!result) {
|
|
94
|
+
throw new Error(`Document not found: ${slug}/${id}`);
|
|
95
|
+
}
|
|
96
|
+
return this.processResult(result, config);
|
|
97
|
+
}
|
|
98
|
+
async delete(args) {
|
|
99
|
+
const { collection: slug, id, tenantID } = args;
|
|
100
|
+
const config = this.getCollectionConfig(slug);
|
|
101
|
+
const col = this.getMongoCollection(slug);
|
|
102
|
+
const filter = { _id: id };
|
|
103
|
+
if (tenantID) {
|
|
104
|
+
filter.tenantId = tenantID;
|
|
105
|
+
}
|
|
106
|
+
const doc = await col.findOneAndDelete(filter);
|
|
107
|
+
if (!doc) {
|
|
108
|
+
throw new Error(`Document not found: ${slug}/${id}`);
|
|
109
|
+
}
|
|
110
|
+
return this.processResult(doc, config);
|
|
111
|
+
}
|
|
112
|
+
async count(args) {
|
|
113
|
+
const { collection: slug, where = {}, tenantID } = args;
|
|
114
|
+
const col = this.getMongoCollection(slug);
|
|
115
|
+
const filter = this.buildFilter(where, tenantID);
|
|
116
|
+
return col.countDocuments(filter);
|
|
117
|
+
}
|
|
118
|
+
async findOne(args) {
|
|
119
|
+
const { collection: slug, where = {}, tenantID } = args;
|
|
120
|
+
const config = this.getCollectionConfig(slug);
|
|
121
|
+
const col = this.getMongoCollection(slug);
|
|
122
|
+
const filter = this.buildFilter(where, tenantID);
|
|
123
|
+
const doc = await col.findOne(filter);
|
|
124
|
+
if (!doc) return null;
|
|
125
|
+
return this.processResult(doc, config);
|
|
126
|
+
}
|
|
127
|
+
async findVersions(args) {
|
|
128
|
+
const { collection: slug, where = {}, sort, limit = 10, page = 1 } = args;
|
|
129
|
+
const versionCollection = this.getMongoCollection(`${slug}_versions`);
|
|
130
|
+
const filter = this.buildFilter(where);
|
|
131
|
+
const skip = (page - 1) * limit;
|
|
132
|
+
const sortOption = this.parseSort(sort);
|
|
133
|
+
const sortObj = {
|
|
134
|
+
[sortOption.field]: sortOption.direction === "asc" ? 1 : -1
|
|
135
|
+
};
|
|
136
|
+
const [docs, totalDocs] = await Promise.all([
|
|
137
|
+
versionCollection.find(filter).sort(sortObj).skip(skip).limit(limit).toArray(),
|
|
138
|
+
versionCollection.countDocuments(filter)
|
|
139
|
+
]);
|
|
140
|
+
return {
|
|
141
|
+
docs: docs.map((doc) => this.processResult(doc, {})),
|
|
142
|
+
...this.calculatePagination(page, limit, totalDocs)
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
async findVersionByID(args) {
|
|
146
|
+
const { collection: slug, id } = args;
|
|
147
|
+
const versionCollection = this.getMongoCollection(`${slug}_versions`);
|
|
148
|
+
return versionCollection.findOne({ _id: id });
|
|
149
|
+
}
|
|
150
|
+
async createVersion(args) {
|
|
151
|
+
const { collection: slug, data } = args;
|
|
152
|
+
const versionCollection = this.getMongoCollection(`${slug}_versions`);
|
|
153
|
+
const doc = {
|
|
154
|
+
...data,
|
|
155
|
+
_id: this.generateId(),
|
|
156
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
157
|
+
};
|
|
158
|
+
await versionCollection.insertOne(doc);
|
|
159
|
+
return doc;
|
|
160
|
+
}
|
|
161
|
+
async deleteVersions(args) {
|
|
162
|
+
const { collection: slug, where } = args;
|
|
163
|
+
const versionCollection = this.getMongoCollection(`${slug}_versions`);
|
|
164
|
+
await versionCollection.deleteMany(where);
|
|
165
|
+
}
|
|
166
|
+
async migrate() {
|
|
167
|
+
for (const config of this.collections.values()) {
|
|
168
|
+
const col = this.getMongoCollection(config.slug);
|
|
169
|
+
await col.createIndex({ _id: 1 });
|
|
170
|
+
if (config.tenantScoped) {
|
|
171
|
+
await col.createIndex({ tenantId: 1 });
|
|
172
|
+
}
|
|
173
|
+
if (config.timestamps) {
|
|
174
|
+
await col.createIndex({ createdAt: -1 });
|
|
175
|
+
}
|
|
176
|
+
for (const field of config.fields) {
|
|
177
|
+
if (field.unique && field.name) {
|
|
178
|
+
await col.createIndex({ [field.name]: 1 }, { unique: true });
|
|
179
|
+
}
|
|
180
|
+
if (field.indexed && field.name) {
|
|
181
|
+
await col.createIndex({ [field.name]: 1 });
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
console.log(`[MongoDBAdapter] Migration completed`);
|
|
186
|
+
}
|
|
187
|
+
// ========================================================================
|
|
188
|
+
// Helper Methods
|
|
189
|
+
// ========================================================================
|
|
190
|
+
getCollectionConfig(slug) {
|
|
191
|
+
const config = this.collections.get(slug);
|
|
192
|
+
if (!config) {
|
|
193
|
+
throw new Error(`Collection "${slug}" not found`);
|
|
194
|
+
}
|
|
195
|
+
return config;
|
|
196
|
+
}
|
|
197
|
+
buildFilter(where = {}, tenantID) {
|
|
198
|
+
const filter = {};
|
|
199
|
+
if (tenantID) {
|
|
200
|
+
filter.tenantId = tenantID;
|
|
201
|
+
}
|
|
202
|
+
for (const [key, value] of Object.entries(where)) {
|
|
203
|
+
if (key === "AND" && Array.isArray(value)) {
|
|
204
|
+
const andConditions = value.map((v) => this.buildFilter(v));
|
|
205
|
+
Object.assign(filter, ...andConditions);
|
|
206
|
+
} else if (key === "OR" && Array.isArray(value)) {
|
|
207
|
+
filter.$or = value.map((v) => this.buildFilter(v));
|
|
208
|
+
} else if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
209
|
+
const mongoOperators = {};
|
|
210
|
+
if (value.equals !== void 0) {
|
|
211
|
+
filter[key === "id" ? "_id" : key] = value.equals;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
if (value.not_equals !== void 0) {
|
|
215
|
+
mongoOperators.$ne = value.not_equals;
|
|
216
|
+
}
|
|
217
|
+
if (value.in !== void 0) {
|
|
218
|
+
mongoOperators.$in = value.in;
|
|
219
|
+
}
|
|
220
|
+
if (value.not_in !== void 0) {
|
|
221
|
+
mongoOperators.$nin = value.not_in;
|
|
222
|
+
}
|
|
223
|
+
if (value.greater_than !== void 0) {
|
|
224
|
+
mongoOperators.$gt = value.greater_than;
|
|
225
|
+
}
|
|
226
|
+
if (value.greater_than_equal !== void 0) {
|
|
227
|
+
mongoOperators.$gte = value.greater_than_equal;
|
|
228
|
+
}
|
|
229
|
+
if (value.less_than !== void 0) {
|
|
230
|
+
mongoOperators.$lt = value.less_than;
|
|
231
|
+
}
|
|
232
|
+
if (value.less_than_equal !== void 0) {
|
|
233
|
+
mongoOperators.$lte = value.less_than_equal;
|
|
234
|
+
}
|
|
235
|
+
if (value.like !== void 0) {
|
|
236
|
+
mongoOperators.$regex = new RegExp(value.like.replace(/%/g, ".*"), "i");
|
|
237
|
+
}
|
|
238
|
+
if (value.not_like !== void 0) {
|
|
239
|
+
mongoOperators.$not = new RegExp(value.not_like.replace(/%/g, ".*"), "i");
|
|
240
|
+
}
|
|
241
|
+
if (value.contains !== void 0) {
|
|
242
|
+
mongoOperators.$regex = new RegExp(`.*${value.contains}.*`, "i");
|
|
243
|
+
}
|
|
244
|
+
if (value.exists !== void 0) {
|
|
245
|
+
mongoOperators.$exists = value.exists;
|
|
246
|
+
}
|
|
247
|
+
if (Object.keys(mongoOperators).length > 0) {
|
|
248
|
+
filter[key === "id" ? "_id" : key] = mongoOperators;
|
|
249
|
+
}
|
|
250
|
+
} else {
|
|
251
|
+
filter[key === "id" ? "_id" : key] = value;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return filter;
|
|
255
|
+
}
|
|
256
|
+
buildProjection(select) {
|
|
257
|
+
if (!select || select.length === 0) return void 0;
|
|
258
|
+
const projection = { _id: 1 };
|
|
259
|
+
for (const field of select) {
|
|
260
|
+
projection[field] = 1;
|
|
261
|
+
}
|
|
262
|
+
return projection;
|
|
263
|
+
}
|
|
264
|
+
processResult(data, config) {
|
|
265
|
+
if (!data) return null;
|
|
266
|
+
const result = { ...data };
|
|
267
|
+
if (data._id) {
|
|
268
|
+
result.id = data._id;
|
|
269
|
+
delete result._id;
|
|
270
|
+
}
|
|
271
|
+
delete result.__v;
|
|
272
|
+
if (result.createdAt) {
|
|
273
|
+
result.createdAt = new Date(result.createdAt).toISOString();
|
|
274
|
+
}
|
|
275
|
+
if (result.updatedAt) {
|
|
276
|
+
result.updatedAt = new Date(result.updatedAt).toISOString();
|
|
277
|
+
}
|
|
278
|
+
return result;
|
|
279
|
+
}
|
|
280
|
+
generateId() {
|
|
281
|
+
const timestamp = Math.floor(Date.now() / 1e3).toString(16).padStart(8, "0");
|
|
282
|
+
const random = Math.random().toString(16).slice(2).padStart(16, "0");
|
|
283
|
+
return timestamp + random;
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
function createMongoDBAdapter(options) {
|
|
287
|
+
return new MongoDBAdapter(options);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
exports.MongoDBAdapter = MongoDBAdapter;
|
|
291
|
+
exports.createMongoDBAdapter = createMongoDBAdapter;
|
|
292
|
+
//# sourceMappingURL=chunk-HT6VE4NW.cjs.map
|
|
293
|
+
//# sourceMappingURL=chunk-HT6VE4NW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/database/mongodb/adapter.ts"],"names":["AbstractBaseAdapter"],"mappings":"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","file":"chunk-HT6VE4NW.cjs","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,311 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var graphql = require('graphql');
|
|
4
|
+
|
|
5
|
+
// src/api/graphql/schema.ts
|
|
6
|
+
function fieldToGraphQLType(field, registry) {
|
|
7
|
+
switch (field.type) {
|
|
8
|
+
case "text":
|
|
9
|
+
case "email":
|
|
10
|
+
case "password":
|
|
11
|
+
case "textarea":
|
|
12
|
+
case "color":
|
|
13
|
+
case "code":
|
|
14
|
+
case "markdown":
|
|
15
|
+
case "date":
|
|
16
|
+
case "select":
|
|
17
|
+
case "radio":
|
|
18
|
+
case "upload":
|
|
19
|
+
return graphql.GraphQLString;
|
|
20
|
+
case "number":
|
|
21
|
+
return field.integer ? graphql.GraphQLInt : graphql.GraphQLFloat;
|
|
22
|
+
case "checkbox":
|
|
23
|
+
return graphql.GraphQLBoolean;
|
|
24
|
+
case "json":
|
|
25
|
+
case "richtext":
|
|
26
|
+
return graphql.GraphQLString;
|
|
27
|
+
// JSON as string
|
|
28
|
+
case "relationship":
|
|
29
|
+
if (typeof field.relationTo === "string") {
|
|
30
|
+
const relatedCollection = registry.getCollection(field.relationTo);
|
|
31
|
+
if (relatedCollection) {
|
|
32
|
+
return new graphql.GraphQLObjectType({
|
|
33
|
+
name: `${field.relationTo}_ref`,
|
|
34
|
+
fields: () => ({
|
|
35
|
+
id: { type: graphql.GraphQLString },
|
|
36
|
+
...buildFieldsFromCollection(relatedCollection, registry)
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return graphql.GraphQLString;
|
|
42
|
+
case "array":
|
|
43
|
+
return new graphql.GraphQLList(graphql.GraphQLString);
|
|
44
|
+
// Simplified
|
|
45
|
+
case "group":
|
|
46
|
+
return graphql.GraphQLString;
|
|
47
|
+
// Simplified - JSON string
|
|
48
|
+
case "blocks":
|
|
49
|
+
return new graphql.GraphQLList(graphql.GraphQLString);
|
|
50
|
+
// Simplified
|
|
51
|
+
case "row":
|
|
52
|
+
case "collapsible":
|
|
53
|
+
case "tabs":
|
|
54
|
+
return graphql.GraphQLString;
|
|
55
|
+
default:
|
|
56
|
+
return graphql.GraphQLString;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function buildFieldsFromCollection(config, registry) {
|
|
60
|
+
const fields = {};
|
|
61
|
+
for (const field of config.fields) {
|
|
62
|
+
if (field.name && field.admin?.hidden !== true) {
|
|
63
|
+
fields[field.name] = {
|
|
64
|
+
type: field.required ? new graphql.GraphQLNonNull(fieldToGraphQLType(field, registry)) : fieldToGraphQLType(field, registry),
|
|
65
|
+
description: field.admin?.description || field.label
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return fields;
|
|
70
|
+
}
|
|
71
|
+
function buildGraphQLSchema(options) {
|
|
72
|
+
const { registry, db, user, req, tenantID } = options;
|
|
73
|
+
const collections = registry.getCollections();
|
|
74
|
+
const globals = registry.getGlobals();
|
|
75
|
+
const collectionTypes = {};
|
|
76
|
+
const collectionInputTypes = {};
|
|
77
|
+
for (const collection of collections) {
|
|
78
|
+
collectionTypes[collection.slug] = new graphql.GraphQLObjectType({
|
|
79
|
+
name: `${collection.slug.replace(/-/g, "_")}_type`,
|
|
80
|
+
fields: () => ({
|
|
81
|
+
id: { type: graphql.GraphQLString },
|
|
82
|
+
...buildFieldsFromCollection(collection, registry),
|
|
83
|
+
...collection.timestamps ? {
|
|
84
|
+
createdAt: { type: graphql.GraphQLString },
|
|
85
|
+
updatedAt: { type: graphql.GraphQLString }
|
|
86
|
+
} : {},
|
|
87
|
+
...collection.tenantScoped ? {
|
|
88
|
+
tenantID: { type: graphql.GraphQLString }
|
|
89
|
+
} : {}
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
const inputFields = {};
|
|
93
|
+
for (const field of collection.fields) {
|
|
94
|
+
if (field.name && field.name !== "id") {
|
|
95
|
+
inputFields[field.name] = {
|
|
96
|
+
type: fieldToGraphQLType(field, registry)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
collectionInputTypes[collection.slug] = new graphql.GraphQLInputObjectType({
|
|
101
|
+
name: `${collection.slug.replace(/-/g, "_")}_input`,
|
|
102
|
+
fields: () => inputFields
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
const globalTypes = {};
|
|
106
|
+
for (const global of globals) {
|
|
107
|
+
globalTypes[global.slug] = new graphql.GraphQLObjectType({
|
|
108
|
+
name: `${global.slug.replace(/-/g, "_")}_global_type`,
|
|
109
|
+
fields: () => ({
|
|
110
|
+
id: { type: graphql.GraphQLString },
|
|
111
|
+
...buildFieldsFromCollection(
|
|
112
|
+
{ slug: global.slug, fields: global.fields },
|
|
113
|
+
registry
|
|
114
|
+
)
|
|
115
|
+
})
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const queryFields = {};
|
|
119
|
+
for (const collection of collections) {
|
|
120
|
+
const type = collectionTypes[collection.slug];
|
|
121
|
+
if (!type) continue;
|
|
122
|
+
queryFields[`${collection.slug}Find`] = {
|
|
123
|
+
type: new graphql.GraphQLObjectType({
|
|
124
|
+
name: `${collection.slug.replace(/-/g, "_")}_find_result`,
|
|
125
|
+
fields: {
|
|
126
|
+
docs: { type: new graphql.GraphQLList(type) },
|
|
127
|
+
totalDocs: { type: graphql.GraphQLInt },
|
|
128
|
+
page: { type: graphql.GraphQLInt },
|
|
129
|
+
totalPages: { type: graphql.GraphQLInt },
|
|
130
|
+
hasNextPage: { type: graphql.GraphQLBoolean },
|
|
131
|
+
hasPrevPage: { type: graphql.GraphQLBoolean }
|
|
132
|
+
}
|
|
133
|
+
}),
|
|
134
|
+
args: {
|
|
135
|
+
where: { type: graphql.GraphQLString },
|
|
136
|
+
sort: { type: graphql.GraphQLString },
|
|
137
|
+
limit: { type: graphql.GraphQLInt },
|
|
138
|
+
page: { type: graphql.GraphQLInt }
|
|
139
|
+
},
|
|
140
|
+
resolve: async (_, args) => {
|
|
141
|
+
let where = {};
|
|
142
|
+
if (args.where) {
|
|
143
|
+
try {
|
|
144
|
+
where = JSON.parse(args.where);
|
|
145
|
+
} catch {
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return db.find({
|
|
149
|
+
collection: collection.slug,
|
|
150
|
+
where,
|
|
151
|
+
sort: args.sort,
|
|
152
|
+
limit: args.limit || 10,
|
|
153
|
+
page: args.page || 1,
|
|
154
|
+
tenantID
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
queryFields[`${collection.slug}FindByID`] = {
|
|
159
|
+
type,
|
|
160
|
+
args: {
|
|
161
|
+
id: { type: new graphql.GraphQLNonNull(graphql.GraphQLString) }
|
|
162
|
+
},
|
|
163
|
+
resolve: async (_, args) => {
|
|
164
|
+
const doc = await db.findByID({
|
|
165
|
+
collection: collection.slug,
|
|
166
|
+
id: args.id,
|
|
167
|
+
tenantID
|
|
168
|
+
});
|
|
169
|
+
return doc;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
queryFields[`${collection.slug}Count`] = {
|
|
173
|
+
type: new graphql.GraphQLObjectType({
|
|
174
|
+
name: `${collection.slug.replace(/-/g, "_")}_count`,
|
|
175
|
+
fields: {
|
|
176
|
+
totalDocs: { type: graphql.GraphQLInt }
|
|
177
|
+
}
|
|
178
|
+
}),
|
|
179
|
+
args: {
|
|
180
|
+
where: { type: graphql.GraphQLString }
|
|
181
|
+
},
|
|
182
|
+
resolve: async (_, args) => {
|
|
183
|
+
let where = {};
|
|
184
|
+
if (args.where) {
|
|
185
|
+
try {
|
|
186
|
+
where = JSON.parse(args.where);
|
|
187
|
+
} catch {
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const count = await db.count({
|
|
191
|
+
collection: collection.slug,
|
|
192
|
+
where,
|
|
193
|
+
tenantID
|
|
194
|
+
});
|
|
195
|
+
return { totalDocs: count };
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
for (const global of globals) {
|
|
200
|
+
const type = globalTypes[global.slug];
|
|
201
|
+
if (!type) continue;
|
|
202
|
+
queryFields[`${global.slug}Get`] = {
|
|
203
|
+
type,
|
|
204
|
+
resolve: async () => {
|
|
205
|
+
return db.findOne({
|
|
206
|
+
collection: `_globals_${global.slug}`,
|
|
207
|
+
where: {},
|
|
208
|
+
tenantID
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
const Query = new graphql.GraphQLObjectType({
|
|
214
|
+
name: "Query",
|
|
215
|
+
fields: queryFields
|
|
216
|
+
});
|
|
217
|
+
const mutationFields = {};
|
|
218
|
+
for (const collection of collections) {
|
|
219
|
+
const type = collectionTypes[collection.slug];
|
|
220
|
+
const inputType = collectionInputTypes[collection.slug];
|
|
221
|
+
if (!type || !inputType) continue;
|
|
222
|
+
mutationFields[`${collection.slug}Create`] = {
|
|
223
|
+
type: new graphql.GraphQLObjectType({
|
|
224
|
+
name: `${collection.slug.replace(/-/g, "_")}_create_result`,
|
|
225
|
+
fields: {
|
|
226
|
+
doc: { type },
|
|
227
|
+
message: { type: graphql.GraphQLString }
|
|
228
|
+
}
|
|
229
|
+
}),
|
|
230
|
+
args: {
|
|
231
|
+
data: { type: new graphql.GraphQLNonNull(inputType) }
|
|
232
|
+
},
|
|
233
|
+
resolve: async (_, args) => {
|
|
234
|
+
const schema = registry.getCreateZodSchema(collection.slug);
|
|
235
|
+
const validated = schema.parse(args.data);
|
|
236
|
+
const doc = await db.create({
|
|
237
|
+
collection: collection.slug,
|
|
238
|
+
data: validated,
|
|
239
|
+
tenantID
|
|
240
|
+
});
|
|
241
|
+
return { doc, message: "Created successfully" };
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
mutationFields[`${collection.slug}Update`] = {
|
|
245
|
+
type: new graphql.GraphQLObjectType({
|
|
246
|
+
name: `${collection.slug.replace(/-/g, "_")}_update_result`,
|
|
247
|
+
fields: {
|
|
248
|
+
doc: { type },
|
|
249
|
+
message: { type: graphql.GraphQLString }
|
|
250
|
+
}
|
|
251
|
+
}),
|
|
252
|
+
args: {
|
|
253
|
+
id: { type: new graphql.GraphQLNonNull(graphql.GraphQLString) },
|
|
254
|
+
data: { type: new graphql.GraphQLNonNull(inputType) }
|
|
255
|
+
},
|
|
256
|
+
resolve: async (_, args) => {
|
|
257
|
+
const schema = registry.getUpdateZodSchema(collection.slug);
|
|
258
|
+
const validated = schema.parse(args.data);
|
|
259
|
+
const doc = await db.update({
|
|
260
|
+
collection: collection.slug,
|
|
261
|
+
id: args.id,
|
|
262
|
+
data: validated,
|
|
263
|
+
tenantID
|
|
264
|
+
});
|
|
265
|
+
return { doc, message: "Updated successfully" };
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
mutationFields[`${collection.slug}Delete`] = {
|
|
269
|
+
type: new graphql.GraphQLObjectType({
|
|
270
|
+
name: `${collection.slug.replace(/-/g, "_")}_delete_result`,
|
|
271
|
+
fields: {
|
|
272
|
+
doc: { type },
|
|
273
|
+
message: { type: graphql.GraphQLString }
|
|
274
|
+
}
|
|
275
|
+
}),
|
|
276
|
+
args: {
|
|
277
|
+
id: { type: new graphql.GraphQLNonNull(graphql.GraphQLString) }
|
|
278
|
+
},
|
|
279
|
+
resolve: async (_, args) => {
|
|
280
|
+
const doc = await db.delete({
|
|
281
|
+
collection: collection.slug,
|
|
282
|
+
id: args.id,
|
|
283
|
+
tenantID
|
|
284
|
+
});
|
|
285
|
+
return { doc, message: "Deleted successfully" };
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
const Mutation = new graphql.GraphQLObjectType({
|
|
290
|
+
name: "Mutation",
|
|
291
|
+
fields: mutationFields
|
|
292
|
+
});
|
|
293
|
+
return new graphql.GraphQLSchema({
|
|
294
|
+
query: Query,
|
|
295
|
+
mutation: Mutation
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
function createGraphQLSchema(registry, db, options) {
|
|
299
|
+
return buildGraphQLSchema({
|
|
300
|
+
registry,
|
|
301
|
+
db,
|
|
302
|
+
user: options?.user,
|
|
303
|
+
req: options?.req,
|
|
304
|
+
tenantID: options?.tenantID
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
exports.buildGraphQLSchema = buildGraphQLSchema;
|
|
309
|
+
exports.createGraphQLSchema = createGraphQLSchema;
|
|
310
|
+
//# sourceMappingURL=chunk-K7QF2QCM.cjs.map
|
|
311
|
+
//# sourceMappingURL=chunk-K7QF2QCM.cjs.map
|