@coherent.js/core 1.0.0-beta.2 → 1.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/coherent.d.ts +10 -150
  2. package/dist/coherent.d.ts.map +1 -1
  3. package/dist/coherent.js +33 -166
  4. package/dist/coherent.js.map +1 -1
  5. package/dist/components/component-system.js +109 -109
  6. package/dist/core/html-utils.js +5 -5
  7. package/dist/core/object-factory.js +21 -21
  8. package/dist/core/object-utils.js +2 -2
  9. package/dist/database/adapters/mongodb.d.ts +15 -0
  10. package/dist/database/adapters/mongodb.d.ts.map +1 -0
  11. package/dist/database/adapters/mongodb.js +216 -0
  12. package/dist/database/adapters/mongodb.js.map +1 -0
  13. package/dist/database/adapters/mysql.d.ts +12 -0
  14. package/dist/database/adapters/mysql.d.ts.map +1 -0
  15. package/dist/database/adapters/mysql.js +171 -0
  16. package/dist/database/adapters/mysql.js.map +1 -0
  17. package/dist/database/adapters/postgresql.d.ts +12 -0
  18. package/dist/database/adapters/postgresql.d.ts.map +1 -0
  19. package/dist/database/adapters/postgresql.js +177 -0
  20. package/dist/database/adapters/postgresql.js.map +1 -0
  21. package/dist/database/adapters/sqlite.d.ts +15 -0
  22. package/dist/database/adapters/sqlite.d.ts.map +1 -0
  23. package/dist/database/adapters/sqlite.js +241 -0
  24. package/dist/database/adapters/sqlite.js.map +1 -0
  25. package/dist/database/connection-manager.d.ts +135 -0
  26. package/dist/database/connection-manager.d.ts.map +1 -0
  27. package/dist/database/connection-manager.js +362 -0
  28. package/dist/database/connection-manager.js.map +1 -0
  29. package/dist/database/index.d.ts +38 -0
  30. package/dist/database/index.d.ts.map +1 -0
  31. package/dist/database/index.js +60 -0
  32. package/dist/database/index.js.map +1 -0
  33. package/dist/database/middleware.d.ts +122 -0
  34. package/dist/database/middleware.d.ts.map +1 -0
  35. package/dist/database/middleware.js +390 -0
  36. package/dist/database/middleware.js.map +1 -0
  37. package/dist/database/migration.d.ts +62 -0
  38. package/dist/database/migration.d.ts.map +1 -0
  39. package/dist/database/migration.js +423 -0
  40. package/dist/database/migration.js.map +1 -0
  41. package/dist/database/model.d.ts +8 -0
  42. package/dist/database/model.d.ts.map +1 -0
  43. package/dist/database/model.js +167 -0
  44. package/dist/database/model.js.map +1 -0
  45. package/dist/database/query-builder.d.ts +111 -0
  46. package/dist/database/query-builder.d.ts.map +1 -0
  47. package/dist/database/query-builder.js +187 -0
  48. package/dist/database/query-builder.js.map +1 -0
  49. package/dist/database/utils.d.ts +196 -0
  50. package/dist/database/utils.d.ts.map +1 -0
  51. package/dist/database/utils.js +372 -0
  52. package/dist/database/utils.js.map +1 -0
  53. package/dist/dev/dev-tools.d.ts +1 -1
  54. package/dist/dev/dev-tools.js +28 -28
  55. package/dist/index.cjs +2 -1
  56. package/dist/index.cjs.map +2 -2
  57. package/dist/index.js +2 -1
  58. package/dist/index.js.map +2 -2
  59. package/dist/performance/bundle-optimizer.js +11 -11
  60. package/dist/performance/cache-manager.js +6 -6
  61. package/dist/performance/monitor.js +10 -10
  62. package/dist/performance/monitor.js.map +1 -1
  63. package/dist/rendering/base-renderer.js +13 -13
  64. package/dist/rendering/dom-renderer.d.ts +0 -23
  65. package/dist/rendering/dom-renderer.d.ts.map +1 -1
  66. package/dist/rendering/dom-renderer.js +9 -77
  67. package/dist/rendering/dom-renderer.js.map +1 -1
  68. package/dist/rendering/html-renderer.d.ts +0 -15
  69. package/dist/rendering/html-renderer.d.ts.map +1 -1
  70. package/dist/rendering/html-renderer.js +4 -85
  71. package/dist/rendering/html-renderer.js.map +1 -1
  72. package/dist/rendering/streaming-renderer.js +12 -12
  73. package/dist/utils/dependency-utils.js +2 -2
  74. package/dist/utils/normalization.js +1 -1
  75. package/dist/utils/validation.js +1 -1
  76. package/package.json +22 -1
  77. package/dist/components/lifecycle.d.ts +0 -212
  78. package/dist/components/lifecycle.d.ts.map +0 -1
  79. package/dist/components/lifecycle.js +0 -525
  80. package/dist/components/lifecycle.js.map +0 -1
  81. package/dist/forms/validation.d.ts +0 -271
  82. package/dist/forms/validation.d.ts.map +0 -1
  83. package/dist/forms/validation.js +0 -573
  84. package/dist/forms/validation.js.map +0 -1
  85. package/dist/performance/component-cache.d.ts +0 -120
  86. package/dist/performance/component-cache.d.ts.map +0 -1
  87. package/dist/performance/component-cache.js +0 -364
  88. package/dist/performance/component-cache.js.map +0 -1
  89. package/dist/rendering/css-manager.d.ts +0 -73
  90. package/dist/rendering/css-manager.d.ts.map +0 -1
  91. package/dist/rendering/css-manager.js +0 -176
  92. package/dist/rendering/css-manager.js.map +0 -1
  93. package/dist/rendering/vdom-diff.d.ts +0 -47
  94. package/dist/rendering/vdom-diff.d.ts.map +0 -1
  95. package/dist/rendering/vdom-diff.js +0 -416
  96. package/dist/rendering/vdom-diff.js.map +0 -1
  97. package/dist/routing/router.d.ts +0 -241
  98. package/dist/routing/router.d.ts.map +0 -1
  99. package/dist/routing/router.js +0 -648
  100. package/dist/routing/router.js.map +0 -1
  101. package/dist/state/reactive-state.d.ts +0 -166
  102. package/dist/state/reactive-state.d.ts.map +0 -1
  103. package/dist/state/reactive-state.js +0 -546
  104. package/dist/state/reactive-state.js.map +0 -1
  105. package/dist/utils/error-handler.d.ts +0 -148
  106. package/dist/utils/error-handler.d.ts.map +0 -1
  107. package/dist/utils/error-handler.js +0 -468
  108. package/dist/utils/error-handler.js.map +0 -1
@@ -0,0 +1,423 @@
1
+ /**
2
+ * Database Migration System for Coherent.js
3
+ *
4
+ * @fileoverview Provides database schema migration functionality with version control,
5
+ * rollback support, and automatic migration tracking.
6
+ */
7
+ import { readdir, writeFile } from 'fs/promises';
8
+ import { join } from 'path';
9
+ /**
10
+ * Create migration instance
11
+ *
12
+ * @param {DatabaseManager} db - Database manager instance
13
+ * @param {Object} [config={}] - Migration configuration
14
+ * @returns {Object} Migration instance
15
+ *
16
+ * @example
17
+ * const migration = createMigration(db, {
18
+ * directory: './migrations',
19
+ * tableName: 'coherent_migrations'
20
+ * });
21
+ *
22
+ * await migration.run();
23
+ */
24
+ export function createMigration(db, config = {}) {
25
+ const migrationConfig = {
26
+ directory: './migrations',
27
+ tableName: 'coherent_migrations',
28
+ ...config
29
+ };
30
+ const migrations = [];
31
+ const appliedMigrations = new Set();
32
+ // Helper functions
33
+ async function ensureMigrationsTable() {
34
+ const tableName = migrationConfig.tableName;
35
+ try {
36
+ await db.query(`SELECT 1 FROM ${tableName} LIMIT 1`);
37
+ }
38
+ catch {
39
+ const createTableSQL = `
40
+ CREATE TABLE ${tableName} (
41
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
42
+ migration VARCHAR(255) NOT NULL UNIQUE,
43
+ batch INTEGER NOT NULL,
44
+ executed_at DATETIME DEFAULT CURRENT_TIMESTAMP
45
+ )
46
+ `;
47
+ await db.query(createTableSQL);
48
+ }
49
+ }
50
+ async function loadAppliedMigrations() {
51
+ const tableName = migrationConfig.tableName;
52
+ const result = await db.query(`SELECT migration FROM ${tableName} ORDER BY executed_at`);
53
+ if (result.rows) {
54
+ result.rows.forEach(row => {
55
+ appliedMigrations.add(row.migration);
56
+ });
57
+ }
58
+ }
59
+ async function loadMigrationFiles() {
60
+ try {
61
+ const files = await readdir(migrationConfig.directory);
62
+ const migrationFiles = files
63
+ .filter(file => file.endsWith('.js'))
64
+ .sort();
65
+ for (const file of migrationFiles) {
66
+ const migrationName = file.replace('.js', '');
67
+ const filePath = join(migrationConfig.directory, file);
68
+ try {
69
+ const migration = await import(filePath);
70
+ migrations.push({
71
+ name: migrationName,
72
+ file: filePath,
73
+ up: migration.up,
74
+ down: migration.down,
75
+ applied: appliedMigrations.has(migrationName)
76
+ });
77
+ }
78
+ catch (_error) {
79
+ console.warn(`Failed to load migration ${file}: ${_error.message}`);
80
+ }
81
+ }
82
+ }
83
+ catch (_error) {
84
+ if (_error.code !== 'ENOENT') {
85
+ throw _error;
86
+ }
87
+ }
88
+ }
89
+ async function getNextBatchNumber() {
90
+ const result = await db.query(`SELECT MAX(batch) as max_batch FROM ${migrationConfig.tableName}`);
91
+ const maxBatch = result.rows && result.rows[0] ? result.rows[0].max_batch : 0;
92
+ return (maxBatch || 0) + 1;
93
+ }
94
+ async function getLastBatches(count) {
95
+ const result = await db.query(`SELECT DISTINCT batch FROM ${migrationConfig.tableName} ORDER BY batch DESC LIMIT ?`, [count]);
96
+ return result.rows ? result.rows.map(row => row.batch) : [];
97
+ }
98
+ async function getMigrationsInBatch(batch) {
99
+ const result = await db.query(`SELECT migration FROM ${migrationConfig.tableName} WHERE batch = ? ORDER BY executed_at`, [batch]);
100
+ return result.rows ? result.rows.map(row => row.migration) : [];
101
+ }
102
+ async function ensureDirectory(dirPath) {
103
+ try {
104
+ const { mkdir } = await import('fs/promises');
105
+ await mkdir(dirPath, { recursive: true });
106
+ }
107
+ catch (_error) {
108
+ if (_error.code !== 'EEXIST') {
109
+ throw _error;
110
+ }
111
+ }
112
+ }
113
+ function getMigrationTemplate(name, options) {
114
+ const tableName = options.table || name.replace(/^create_/, '').replace(/_table$/, '');
115
+ if (name.startsWith('create_')) {
116
+ return `/**
117
+ * Migration: ${name}
118
+ * Created: ${new Date().toISOString()}
119
+ */
120
+
121
+ export async function up(schema) {
122
+ await schema.createTable('${tableName}', (table) => {
123
+ table.id();
124
+ table.string('name').notNull();
125
+ table.timestamps();
126
+ });
127
+ }
128
+
129
+ export async function down(schema) {
130
+ await schema.dropTable('${tableName}');
131
+ }
132
+ `;
133
+ }
134
+ return `/**
135
+ * Migration: ${name}
136
+ * Created: ${new Date().toISOString()}
137
+ */
138
+
139
+ export async function up(schema) {
140
+ // Add your migration logic here
141
+ }
142
+
143
+ export async function down(schema) {
144
+ // Add your rollback logic here
145
+ }
146
+ `;
147
+ }
148
+ return {
149
+ /**
150
+ * Initialize migration system
151
+ */
152
+ async initialize() {
153
+ await ensureMigrationsTable();
154
+ await loadAppliedMigrations();
155
+ await loadMigrationFiles();
156
+ },
157
+ /**
158
+ * Run pending migrations
159
+ */
160
+ async run(options = {}) {
161
+ await this.initialize();
162
+ const pendingMigrations = migrations.filter(m => !m.applied);
163
+ if (pendingMigrations.length === 0) {
164
+ return [];
165
+ }
166
+ const batch = await getNextBatchNumber();
167
+ const appliedMigrationsList = [];
168
+ for (const migration of pendingMigrations) {
169
+ try {
170
+ console.log(`Running migration: ${migration.name}`);
171
+ const tx = await db.transaction();
172
+ try {
173
+ await migration.up(createSchemaBuilder(tx));
174
+ await tx.query(`INSERT INTO ${migrationConfig.tableName} (migration, batch) VALUES (?, ?)`, [migration.name, batch]);
175
+ await tx.commit();
176
+ appliedMigrationsList.push(migration.name);
177
+ migration.applied = true;
178
+ console.log(`✓ Migration ${migration.name} completed`);
179
+ }
180
+ catch (_error) {
181
+ await tx.rollback();
182
+ throw _error;
183
+ }
184
+ }
185
+ catch (_error) {
186
+ console._error(`✗ Migration ${migration.name} failed: ${_error.message}`);
187
+ if (!options.continueOnError) {
188
+ throw _error;
189
+ }
190
+ }
191
+ }
192
+ return appliedMigrationsList;
193
+ },
194
+ /**
195
+ * Rollback migrations
196
+ */
197
+ async rollback(steps = 1) {
198
+ await this.initialize();
199
+ const batches = await getLastBatches(steps);
200
+ if (batches.length === 0) {
201
+ return [];
202
+ }
203
+ const rolledBackMigrations = [];
204
+ for (const batch of batches) {
205
+ const batchMigrations = await getMigrationsInBatch(batch);
206
+ for (const migrationName of batchMigrations.reverse()) {
207
+ const migration = migrations.find(m => m.name === migrationName);
208
+ if (!migration || !migration.down) {
209
+ console.warn(`Cannot rollback migration: ${migrationName}`);
210
+ continue;
211
+ }
212
+ try {
213
+ console.log(`Rolling back migration: ${migrationName}`);
214
+ const tx = await db.transaction();
215
+ try {
216
+ await migration.down(createSchemaBuilder(tx));
217
+ await tx.query(`DELETE FROM ${migrationConfig.tableName} WHERE migration = ?`, [migrationName]);
218
+ await tx.commit();
219
+ rolledBackMigrations.push(migrationName);
220
+ migration.applied = false;
221
+ console.log(`✓ Migration ${migrationName} rolled back`);
222
+ }
223
+ catch (_error) {
224
+ await tx.rollback();
225
+ throw _error;
226
+ }
227
+ }
228
+ catch (_error) {
229
+ console._error(`✗ Rollback ${migrationName} failed: ${_error.message}`);
230
+ throw _error;
231
+ }
232
+ }
233
+ }
234
+ return rolledBackMigrations;
235
+ },
236
+ /**
237
+ * Get migration status
238
+ */
239
+ async status() {
240
+ await this.initialize();
241
+ return migrations.map(migration => ({
242
+ name: migration.name,
243
+ applied: migration.applied,
244
+ file: migration.file
245
+ }));
246
+ },
247
+ /**
248
+ * Create new migration file
249
+ */
250
+ async create(name, options = {}) {
251
+ const timestamp = new Date().toISOString().replace(/[-:T]/g, '').split('.')[0];
252
+ const fileName = `${timestamp}_${name}.js`;
253
+ const filePath = join(migrationConfig.directory, fileName);
254
+ const template = getMigrationTemplate(name, options);
255
+ await ensureDirectory(migrationConfig.directory);
256
+ await writeFile(filePath, template);
257
+ console.log(`Created migration: ${filePath}`);
258
+ return filePath;
259
+ }
260
+ };
261
+ }
262
+ /**
263
+ * Create schema builder instance
264
+ */
265
+ export function createSchemaBuilder(db) {
266
+ return {
267
+ async createTable(tableName, callback) {
268
+ const table = createTableBuilder(tableName);
269
+ callback(table);
270
+ const sql = table.toCreateSQL();
271
+ await db.query(sql);
272
+ },
273
+ async alterTable(tableName, callback) {
274
+ const table = createTableBuilder(tableName);
275
+ callback(table);
276
+ const statements = table.toAlterSQL();
277
+ for (const sql of statements) {
278
+ await db.query(sql);
279
+ }
280
+ },
281
+ async dropTable(tableName) {
282
+ await db.query(`DROP TABLE IF EXISTS ${tableName}`);
283
+ },
284
+ async raw(sql, params = []) {
285
+ return await db.query(sql, params);
286
+ }
287
+ };
288
+ }
289
+ /**
290
+ * Create table builder instance
291
+ */
292
+ export function createTableBuilder(tableName) {
293
+ const columns = [];
294
+ const alterations = [];
295
+ function createColumnBuilder(column) {
296
+ return {
297
+ notNull() {
298
+ column.nullable = false;
299
+ return this;
300
+ },
301
+ unique() {
302
+ column.unique = true;
303
+ return this;
304
+ },
305
+ default(value) {
306
+ column.default = typeof value === 'string' ? `'${value}'` : value;
307
+ return this;
308
+ }
309
+ };
310
+ }
311
+ return {
312
+ id(name = 'id') {
313
+ columns.push({
314
+ name,
315
+ type: 'INTEGER',
316
+ primaryKey: true,
317
+ autoIncrement: true
318
+ });
319
+ return this;
320
+ },
321
+ string(name, length = 255) {
322
+ const column = {
323
+ name,
324
+ type: `VARCHAR(${length})`,
325
+ nullable: true
326
+ };
327
+ columns.push(column);
328
+ return createColumnBuilder(column);
329
+ },
330
+ text(name) {
331
+ const column = {
332
+ name,
333
+ type: 'TEXT',
334
+ nullable: true
335
+ };
336
+ columns.push(column);
337
+ return createColumnBuilder(column);
338
+ },
339
+ integer(name) {
340
+ const column = {
341
+ name,
342
+ type: 'INTEGER',
343
+ nullable: true
344
+ };
345
+ columns.push(column);
346
+ return createColumnBuilder(column);
347
+ },
348
+ boolean(name) {
349
+ const column = {
350
+ name,
351
+ type: 'BOOLEAN',
352
+ nullable: true,
353
+ default: false
354
+ };
355
+ columns.push(column);
356
+ return createColumnBuilder(column);
357
+ },
358
+ datetime(name) {
359
+ const column = {
360
+ name,
361
+ type: 'DATETIME',
362
+ nullable: true
363
+ };
364
+ columns.push(column);
365
+ return createColumnBuilder(column);
366
+ },
367
+ timestamps() {
368
+ this.datetime('created_at').default('CURRENT_TIMESTAMP');
369
+ this.datetime('updated_at').default('CURRENT_TIMESTAMP');
370
+ return this;
371
+ },
372
+ addColumn(name, type) {
373
+ alterations.push({
374
+ type: 'ADD',
375
+ name,
376
+ columnType: type
377
+ });
378
+ return this;
379
+ },
380
+ dropColumn(name) {
381
+ alterations.push({
382
+ type: 'DROP',
383
+ name
384
+ });
385
+ return this;
386
+ },
387
+ toCreateSQL() {
388
+ const columnDefs = columns.map(col => {
389
+ let def = `${col.name} ${col.type}`;
390
+ if (col.primaryKey) {
391
+ def += ' PRIMARY KEY';
392
+ }
393
+ if (col.autoIncrement) {
394
+ def += ' AUTOINCREMENT';
395
+ }
396
+ if (!col.nullable) {
397
+ def += ' NOT NULL';
398
+ }
399
+ if (col.unique) {
400
+ def += ' UNIQUE';
401
+ }
402
+ if (col.default !== undefined) {
403
+ def += ` DEFAULT ${col.default}`;
404
+ }
405
+ return def;
406
+ });
407
+ return `CREATE TABLE ${tableName} (\n ${columnDefs.join(',\n ')}\n)`;
408
+ },
409
+ toAlterSQL() {
410
+ return alterations.map(alt => {
411
+ switch (alt.type) {
412
+ case 'ADD':
413
+ return `ALTER TABLE ${tableName} ADD COLUMN ${alt.name} ${alt.columnType}`;
414
+ case 'DROP':
415
+ return `ALTER TABLE ${tableName} DROP COLUMN ${alt.name}`;
416
+ default:
417
+ throw new Error(`Unsupported alteration type: ${alt.type}`);
418
+ }
419
+ });
420
+ }
421
+ };
422
+ }
423
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../../src/database/migration.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Create model instance
3
+ *
4
+ * @param {DatabaseManager} db - Database manager instance
5
+ * @returns {Object} Model instance
6
+ */
7
+ export function createModel(db: DatabaseManager): Object;
8
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../src/database/model.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,gCAHW,eAAe,GACb,MAAM,CA6LlB"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Pure Object-Based Model System for Coherent.js
3
+ *
4
+ * @fileoverview Core model system using pure JavaScript objects for consistency
5
+ */
6
+ import { QueryBuilder } from './query-builder.js';
7
+ /**
8
+ * Create model instance
9
+ *
10
+ * @param {DatabaseManager} db - Database manager instance
11
+ * @returns {Object} Model instance
12
+ */
13
+ export function createModel(db) {
14
+ const models = new Map();
15
+ // Helper functions
16
+ function validateModelDefinition(definition) {
17
+ if (!definition.tableName) {
18
+ throw new Error('Model must have a tableName');
19
+ }
20
+ if (!definition.attributes || typeof definition.attributes !== 'object') {
21
+ throw new Error('Model must have attributes object');
22
+ }
23
+ }
24
+ function createInstance(modelName, attributes) {
25
+ const model = models.get(modelName);
26
+ if (!model) {
27
+ throw new Error(`Model '${modelName}' not found`);
28
+ }
29
+ const instance = { ...attributes };
30
+ // Add instance methods
31
+ if (model.methods) {
32
+ Object.entries(model.methods).forEach(([methodName, method]) => {
33
+ instance[methodName] = method.bind(instance);
34
+ });
35
+ }
36
+ // Add save method
37
+ instance.save = async () => {
38
+ const primaryKey = model.primaryKey || 'id';
39
+ const id = instance[primaryKey];
40
+ if (id) {
41
+ // Update existing
42
+ await model.updateWhere({ [primaryKey]: id }, instance);
43
+ }
44
+ else {
45
+ // Create new
46
+ const result = await model.query({
47
+ insert: instance
48
+ });
49
+ if (result.insertId) {
50
+ instance[primaryKey] = result.insertId;
51
+ }
52
+ }
53
+ return instance;
54
+ };
55
+ // Add delete method
56
+ instance.delete = async () => {
57
+ const primaryKey = model.primaryKey || 'id';
58
+ const id = instance[primaryKey];
59
+ if (!id) {
60
+ throw new Error('Cannot delete instance without primary key');
61
+ }
62
+ return await model.deleteWhere({ [primaryKey]: id });
63
+ };
64
+ return instance;
65
+ }
66
+ function createModel(name, definition) {
67
+ const model = {
68
+ name,
69
+ db,
70
+ ...definition,
71
+ // Core query method
72
+ query: async (config) => {
73
+ if (!config.from && definition.tableName) {
74
+ config.from = definition.tableName;
75
+ }
76
+ const result = await QueryBuilder.execute(db, config);
77
+ // Convert results to model instances for SELECT queries
78
+ if (config.select && result.rows) {
79
+ return result.rows.map(row => createInstance(name, row));
80
+ }
81
+ return result;
82
+ },
83
+ // Convenience methods
84
+ find: async (id) => {
85
+ const results = await model.query({
86
+ select: '*',
87
+ where: { [definition.primaryKey || 'id']: id },
88
+ limit: 1
89
+ });
90
+ return results.length > 0 ? results[0] : null;
91
+ },
92
+ all: async () => {
93
+ return await model.query({ select: '*' });
94
+ },
95
+ where: async (config) => {
96
+ return await model.query(config);
97
+ },
98
+ create: async (attributes) => {
99
+ const result = await model.query({
100
+ insert: attributes
101
+ });
102
+ // Return created instance with ID
103
+ if (result.insertId) {
104
+ return await model.find(result.insertId);
105
+ }
106
+ return createInstance(name, attributes);
107
+ },
108
+ updateWhere: async (conditions, updates) => {
109
+ const result = await model.query({
110
+ update: updates,
111
+ where: conditions
112
+ });
113
+ return result.affectedRows || 0;
114
+ },
115
+ deleteWhere: async (conditions) => {
116
+ const result = await model.query({
117
+ delete: true,
118
+ where: conditions
119
+ });
120
+ return result.affectedRows || 0;
121
+ }
122
+ };
123
+ // Add static methods if defined
124
+ if (definition.statics) {
125
+ Object.entries(definition.statics).forEach(([methodName, method]) => {
126
+ model[methodName] = method.bind(model);
127
+ });
128
+ }
129
+ return model;
130
+ }
131
+ return {
132
+ /**
133
+ * Register a model with pure object definition
134
+ *
135
+ * @param {string} name - Model name
136
+ * @param {Object} definition - Model definition object
137
+ * @returns {Object} Enhanced model object
138
+ */
139
+ registerModel(name, definition) {
140
+ validateModelDefinition(definition);
141
+ const model = createModel(name, definition);
142
+ models.set(name, model);
143
+ return model;
144
+ },
145
+ /**
146
+ * Execute multi-model queries
147
+ */
148
+ async execute(queryObject) {
149
+ const results = {};
150
+ for (const [modelName, queryConfig] of Object.entries(queryObject)) {
151
+ const model = models.get(modelName);
152
+ if (!model) {
153
+ throw new Error(`Model '${modelName}' not found`);
154
+ }
155
+ results[modelName] = await model.query(queryConfig);
156
+ }
157
+ return results;
158
+ },
159
+ /**
160
+ * Get registered model
161
+ */
162
+ getModel(name) {
163
+ return models.get(name);
164
+ }
165
+ };
166
+ }
167
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../src/database/model.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE;IAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IAEzB,mBAAmB;IACnB,SAAS,uBAAuB,CAAC,UAAU;QACzC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,SAAS,cAAc,CAAC,SAAS,EAAE,UAAU;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,QAAQ,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QAEnC,uBAAuB;QACvB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE;gBAC7D,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,QAAQ,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE;YACzB,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC;YAC5C,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEhC,IAAI,EAAE,EAAE,CAAC;gBACP,kBAAkB;gBAClB,MAAM,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,aAAa;gBACb,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;oBAC/B,MAAM,EAAE,QAAQ;iBACjB,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;QAEF,oBAAoB;QACpB,QAAQ,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC;YAC5C,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEhC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;YAED,OAAO,MAAM,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS,WAAW,CAAC,IAAI,EAAE,UAAU;QACnC,MAAM,KAAK,GAAG;YACZ,IAAI;YACJ,EAAE;YACF,GAAG,UAAU;YAEb,oBAAoB;YACpB,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;oBACzC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC;gBACrC,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAEtD,wDAAwD;gBACxD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBACjC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC3D,CAAC;gBAED,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,sBAAsB;YACtB,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACjB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;oBAChC,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE;oBAC9C,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAChD,CAAC;YAED,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACtB,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBAC3B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;oBAC/B,MAAM,EAAE,UAAU;iBACnB,CAAC,CAAC;gBAEH,kCAAkC;gBAClC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC3C,CAAC;gBAED,OAAO,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC1C,CAAC;YAED,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;gBACzC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;oBAC/B,MAAM,EAAE,OAAO;oBACf,KAAK,EAAE,UAAU;iBAClB,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBAChC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC;oBAC/B,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,UAAU;iBAClB,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;YAClC,CAAC;SACF,CAAC;QAEF,gCAAgC;QAChC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE;gBAClE,KAAK,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL;;;;;;WAMG;QACH,aAAa,CAAC,IAAI,EAAE,UAAU;YAC5B,uBAAuB,CAAC,UAAU,CAAC,CAAC;YAEpC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAExB,OAAO,KAAK,CAAC;QACf,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,OAAO,CAAC,WAAW;YACvB,MAAM,OAAO,GAAG,EAAE,CAAC;YAEnB,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,aAAa,CAAC,CAAC;gBACpD,CAAC;gBAED,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAED;;WAEG;QACH,QAAQ,CAAC,IAAI;YACX,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}