@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,362 @@
1
+ /**
2
+ * Database Connection Manager for Coherent.js
3
+ *
4
+ * @fileoverview Manages database connections, connection pooling, and adapter selection
5
+ * with support for multiple database engines and automatic failover.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ /**
9
+ * Database Connection Manager
10
+ *
11
+ * @class DatabaseManager
12
+ * @extends EventEmitter
13
+ * @description Manages database connections with pooling, health checks, and adapter abstraction.
14
+ * Provides a unified interface for different database engines.
15
+ *
16
+ * @param {Object} config - Database configuration
17
+ * @param {string} config.type - Database type ('postgresql', 'mysql', 'sqlite', 'mongodb')
18
+ * @param {string} [config.host='localhost'] - Database host
19
+ * @param {number} [config.port] - Database port (auto-detected by type)
20
+ * @param {string} config.database - Database name
21
+ * @param {string} [config.username] - Database username
22
+ * @param {string} [config.password] - Database password
23
+ * @param {Object} [config.pool] - Connection pool configuration
24
+ * @param {boolean} [config.debug=false] - Enable debug logging
25
+ *
26
+ * @example
27
+ * const db = new DatabaseManager({
28
+ * type: 'postgresql',
29
+ * host: 'localhost',
30
+ * database: 'myapp',
31
+ * username: 'user',
32
+ * password: 'pass',
33
+ * pool: { min: 2, max: 10 }
34
+ * });
35
+ *
36
+ * await db.connect();
37
+ * const users = await db.query('SELECT * FROM users WHERE active = ?', [true]);
38
+ */
39
+ export class DatabaseManager extends EventEmitter {
40
+ constructor(config) {
41
+ super();
42
+ this.config = this.validateConfig(config);
43
+ this.adapter = null;
44
+ this.pool = null;
45
+ this.isConnected = false;
46
+ this.connectionAttempts = 0;
47
+ this.maxRetries = 3;
48
+ // Health check interval
49
+ this.healthCheckInterval = null;
50
+ this.healthCheckFrequency = 30000; // 30 seconds
51
+ // Connection statistics
52
+ this.stats = {
53
+ totalConnections: 0,
54
+ activeConnections: 0,
55
+ failedConnections: 0,
56
+ queriesExecuted: 0,
57
+ averageQueryTime: 0,
58
+ lastHealthCheck: null
59
+ };
60
+ }
61
+ /**
62
+ * Validate database configuration
63
+ *
64
+ * @private
65
+ * @param {Object} config - Configuration to validate
66
+ * @returns {Object} Validated configuration
67
+ * @throws {Error} If configuration is invalid
68
+ */
69
+ validateConfig(config) {
70
+ if (!config || typeof config !== 'object') {
71
+ throw new Error('Database configuration is required');
72
+ }
73
+ // New adapter-based configuration
74
+ if (config.adapter) {
75
+ if (typeof config.adapter !== 'object' ||
76
+ typeof config.adapter.createPool !== 'function') {
77
+ throw new Error('Invalid adapter provided. Adapter must be an object with a createPool method');
78
+ }
79
+ // Set default store config if not provided
80
+ if (!config.store) {
81
+ config.store = { name: 'default' };
82
+ }
83
+ else if (typeof config.store === 'string') {
84
+ config.store = { name: config.store };
85
+ }
86
+ return config;
87
+ }
88
+ // Legacy type-based configuration
89
+ const { type, database } = config;
90
+ if (!type) {
91
+ throw new Error('Either database type or adapter is required');
92
+ }
93
+ const supportedTypes = ['postgresql', 'mysql', 'sqlite', 'mongodb'];
94
+ if (!supportedTypes.includes(type)) {
95
+ throw new Error(`Unsupported database type: ${type}. Supported types: ${supportedTypes.join(', ')}`);
96
+ }
97
+ if (!database) {
98
+ throw new Error('Database name is required for type-based configuration');
99
+ }
100
+ // Set default ports based on database type
101
+ const defaultPorts = {
102
+ postgresql: 5432,
103
+ mysql: 3306,
104
+ mongodb: 27017,
105
+ sqlite: null
106
+ };
107
+ return {
108
+ host: config.host || 'localhost',
109
+ port: config.port || defaultPorts[type],
110
+ ...config,
111
+ pool: {
112
+ min: 2,
113
+ max: 10,
114
+ acquireTimeoutMillis: 30000,
115
+ createTimeoutMillis: 30000,
116
+ destroyTimeoutMillis: 5000,
117
+ idleTimeoutMillis: 30000,
118
+ reapIntervalMillis: 1000,
119
+ createRetryIntervalMillis: 200,
120
+ ...config.pool
121
+ }
122
+ };
123
+ }
124
+ /**
125
+ * Connect to the database
126
+ *
127
+ * @returns {Promise<void>}
128
+ * @throws {Error} If connection fails after retries
129
+ *
130
+ * @example
131
+ * await db.connect();
132
+ * console.log('Database connected successfully');
133
+ */
134
+ async connect() {
135
+ if (this.isConnected) {
136
+ return;
137
+ }
138
+ try {
139
+ // Load appropriate adapter
140
+ this.adapter = await this.loadAdapter(this.config.type);
141
+ // Create connection pool
142
+ this.pool = await this.adapter.createPool(this.config);
143
+ // Test connection
144
+ await this.testConnection();
145
+ this.isConnected = true;
146
+ this.connectionAttempts = 0;
147
+ // Start health checks if supported by the adapter
148
+ if (this.adapter.startHealthChecks) {
149
+ this.startHealthChecks();
150
+ }
151
+ return this;
152
+ }
153
+ catch (_error) {
154
+ this.connectionAttempts++;
155
+ this.stats.failedConnections++;
156
+ this.emit('_error', _error);
157
+ if (this.connectionAttempts < this.maxRetries) {
158
+ console.warn(`Connection attempt ${this.connectionAttempts} failed. Retrying in 2 seconds...`);
159
+ await new Promise(resolve => setTimeout(resolve, 2000));
160
+ return this.connect();
161
+ }
162
+ throw new Error(`Failed to connect to database after ${this.connectionAttempts} attempts: ${_error.message}`);
163
+ }
164
+ }
165
+ /**
166
+ * Load database adapter
167
+ *
168
+ * @private
169
+ * @param {string} type - Database type
170
+ * @returns {Object} Database adapter
171
+ */
172
+ loadAdapter(type) {
173
+ // If using direct adapter instance (for custom adapters like MemoryAdapter)
174
+ if (this.config.adapter) {
175
+ return this.config.adapter;
176
+ }
177
+ // For built-in adapters
178
+ const adapterMap = {
179
+ postgresql: './adapters/postgresql.js',
180
+ mysql: './adapters/mysql.js',
181
+ sqlite: './adapters/sqlite.js',
182
+ mongodb: './adapters/mongodb.js',
183
+ memory: './adapters/memory.js'
184
+ };
185
+ const adapterPath = adapterMap[type];
186
+ if (!adapterPath) {
187
+ throw new Error(`No adapter found for database type: ${type}`);
188
+ }
189
+ // Use dynamic import for ESM compatibility
190
+ return import(adapterPath)
191
+ .then(adapterModule => {
192
+ // Try both the default export and the named export pattern
193
+ if (adapterModule.default) {
194
+ return new adapterModule.default();
195
+ }
196
+ const AdapterClass = adapterModule[`${type.charAt(0).toUpperCase() + type.slice(1)}Adapter`];
197
+ if (AdapterClass) {
198
+ return new AdapterClass();
199
+ }
200
+ throw new Error(`No valid adapter found in ${adapterPath}`);
201
+ })
202
+ .catch(_error => {
203
+ throw new Error(`Failed to load ${type} adapter: ${_error.message}`);
204
+ });
205
+ }
206
+ /**
207
+ * Test database connection
208
+ *
209
+ * @private
210
+ * @returns {Promise<void>}
211
+ */
212
+ async testConnection() {
213
+ const startTime = Date.now();
214
+ try {
215
+ if (typeof this.adapter.testConnection === 'function') {
216
+ await this.adapter.testConnection();
217
+ }
218
+ else if (this.adapter.ping) {
219
+ // Try ping if available
220
+ await this.adapter.ping();
221
+ }
222
+ // If no test method is available, we'll assume the connection is good
223
+ const duration = Date.now() - startTime;
224
+ this.stats.lastHealthCheck = new Date();
225
+ this.emit('connect:test', { duration });
226
+ }
227
+ catch (_error) {
228
+ this.emit('_error', _error);
229
+ throw new Error(`Database connection test failed: ${_error.message}`);
230
+ }
231
+ }
232
+ /**
233
+ * Execute a database query
234
+ *
235
+ * @param {string} sql - SQL query string
236
+ * @param {Array} [params=[]] - Query parameters
237
+ * @param {Object} [options={}] - Query options
238
+ * @returns {Promise<Object>} Query result
239
+ *
240
+ * @example
241
+ * const users = await db.query('SELECT * FROM users WHERE age > ?', [18]);
242
+ * const user = await db.query('SELECT * FROM users WHERE id = ?', [123], { single: true });
243
+ */
244
+ async query(operation, params = {}) {
245
+ if (!this.isConnected) {
246
+ throw new Error('Database not connected. Call connect() first.');
247
+ }
248
+ const startTime = Date.now();
249
+ try {
250
+ let result;
251
+ // Handle MemoryAdapter's query method
252
+ if (typeof this.pool.query === 'function') {
253
+ result = await this.pool.query(operation, params);
254
+ }
255
+ // Handle SQL adapters
256
+ else if (typeof this.adapter.query === 'function') {
257
+ result = await this.adapter.query(this.pool, operation, params);
258
+ }
259
+ else {
260
+ throw new Error('No valid query method found on adapter or pool');
261
+ }
262
+ // Update statistics
263
+ const duration = Date.now() - startTime;
264
+ this.stats.queriesExecuted++;
265
+ this.stats.averageQueryTime = ((this.stats.averageQueryTime * (this.stats.queriesExecuted - 1) + duration) /
266
+ this.stats.queriesExecuted);
267
+ if (this.config.debug) {
268
+ console.log(`Query executed in ${duration}ms: ${operation}`, params);
269
+ }
270
+ this.emit('query', { operation, params, duration });
271
+ return result;
272
+ }
273
+ catch (_error) {
274
+ const duration = Date.now() - startTime;
275
+ this.emit('queryError', { operation, params, duration, _error: _error.message });
276
+ throw new Error(`Query failed: ${_error.message}`);
277
+ }
278
+ }
279
+ /**
280
+ * Start a database transaction
281
+ *
282
+ * @returns {Promise<Object>} Transaction object
283
+ *
284
+ * @example
285
+ * const tx = await db.transaction();
286
+ * try {
287
+ * await tx.query('INSERT INTO users (name) VALUES (?)', ['John']);
288
+ * await tx.query('INSERT INTO profiles (user_id) VALUES (?)', [userId]);
289
+ * await tx.commit();
290
+ * } catch (_error) {
291
+ * await tx.rollback();
292
+ * throw _error;
293
+ * }
294
+ */
295
+ async transaction() {
296
+ if (!this.isConnected) {
297
+ throw new Error('Database not connected. Call connect() first.');
298
+ }
299
+ return await this.adapter.transaction(this.pool);
300
+ }
301
+ /**
302
+ * Start health check monitoring
303
+ *
304
+ * @private
305
+ */
306
+ startHealthCheck() {
307
+ if (this.healthCheckInterval) {
308
+ return;
309
+ }
310
+ this.healthCheckInterval = setInterval(async () => {
311
+ try {
312
+ await this.testConnection();
313
+ this.emit('healthCheck', { status: 'healthy', timestamp: new Date() });
314
+ }
315
+ catch (_error) {
316
+ this.emit('healthCheck', { status: 'unhealthy', _error: _error.message, timestamp: new Date() });
317
+ if (this.config.debug) {
318
+ console._error('Database health check failed:', _error.message);
319
+ }
320
+ }
321
+ }, this.healthCheckFrequency);
322
+ }
323
+ /**
324
+ * Get connection statistics
325
+ *
326
+ * @returns {Object} Connection statistics
327
+ */
328
+ getStats() {
329
+ return {
330
+ ...this.stats,
331
+ isConnected: this.isConnected,
332
+ poolStats: this.pool ? this.adapter.getPoolStats(this.pool) : null
333
+ };
334
+ }
335
+ /**
336
+ * Close database connection
337
+ *
338
+ * @returns {Promise<void>}
339
+ */
340
+ async close() {
341
+ if (!this.isConnected) {
342
+ return;
343
+ }
344
+ // Stop health checks
345
+ if (this.healthCheckInterval) {
346
+ clearInterval(this.healthCheckInterval);
347
+ this.healthCheckInterval = null;
348
+ }
349
+ // Close connection pool
350
+ if (this.pool && this.adapter) {
351
+ await this.adapter.closePool(this.pool);
352
+ }
353
+ this.isConnected = false;
354
+ this.pool = null;
355
+ this.adapter = null;
356
+ this.emit('disconnected');
357
+ if (this.config.debug) {
358
+ console.log('Database connection closed');
359
+ }
360
+ }
361
+ }
362
+ //# sourceMappingURL=connection-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../../../src/database/connection-manager.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Quick setup function for common database configurations
3
+ *
4
+ * @param {Object} config - Database configuration
5
+ * @returns {DatabaseManager} Configured database manager
6
+ *
7
+ * @example
8
+ * import { setupDatabase } from '@coherent/database';
9
+ *
10
+ * const db = setupDatabase({
11
+ * type: 'postgresql',
12
+ * host: 'localhost',
13
+ * database: 'myapp',
14
+ * username: 'user',
15
+ * password: 'pass'
16
+ * });
17
+ */
18
+ export function setupDatabase(config?: Object): DatabaseManager;
19
+ export { DatabaseManager } from "./connection-manager.js";
20
+ export { createModel } from "./model.js";
21
+ export { createMigration } from "./migration.js";
22
+ export { withDatabase } from "./middleware.js";
23
+ export { createPostgreSQLAdapter as PostgreSQLAdapter } from "./adapters/postgresql.js";
24
+ export { createMySQLAdapter as MySQLAdapter } from "./adapters/mysql.js";
25
+ export { createSQLiteAdapter as SQLiteAdapter } from "./adapters/sqlite.js";
26
+ export { createMongoDBAdapter as MongoDBAdapter } from "./adapters/mongodb.js";
27
+ export namespace DEFAULT_DB_CONFIG {
28
+ let type: string;
29
+ let database: string;
30
+ let synchronize: boolean;
31
+ let logging: boolean;
32
+ let entities: never[];
33
+ let migrations: never[];
34
+ let subscribers: never[];
35
+ }
36
+ export { createQuery, executeQuery, QueryBuilder } from "./query-builder.js";
37
+ export { createConnection, runMigrations } from "./utils.js";
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/index.js"],"names":[],"mappings":"AAsCA;;;;;;;;;;;;;;;;GAgBG;AACH,uCAdW,MAAM,GACJ,eAAe,CAuB3B"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Database Integration Layer for Coherent.js
3
+ *
4
+ * @fileoverview Provides database connectivity, query building, and ORM functionality
5
+ * with support for multiple database engines (PostgreSQL, MySQL, SQLite, MongoDB).
6
+ *
7
+ * @author Coherent.js Team
8
+ * @version 1.0.0
9
+ */
10
+ export { DatabaseManager } from './connection-manager.js';
11
+ export { createQuery, executeQuery, QueryBuilder } from './query-builder.js';
12
+ export { createModel } from './model.js';
13
+ export { createMigration } from './migration.js';
14
+ export { withDatabase } from './middleware.js';
15
+ // Database adapters
16
+ export { createPostgreSQLAdapter as PostgreSQLAdapter } from './adapters/postgresql.js';
17
+ export { createMySQLAdapter as MySQLAdapter } from './adapters/mysql.js';
18
+ export { createSQLiteAdapter as SQLiteAdapter } from './adapters/sqlite.js';
19
+ export { createMongoDBAdapter as MongoDBAdapter } from './adapters/mongodb.js';
20
+ // Utilities
21
+ export { createConnection, runMigrations } from './utils.js';
22
+ /**
23
+ * Default database configuration
24
+ */
25
+ export const DEFAULT_DB_CONFIG = {
26
+ type: 'sqlite',
27
+ database: ':memory:',
28
+ synchronize: true,
29
+ logging: false,
30
+ entities: [],
31
+ migrations: [],
32
+ subscribers: []
33
+ };
34
+ /**
35
+ * Quick setup function for common database configurations
36
+ *
37
+ * @param {Object} config - Database configuration
38
+ * @returns {DatabaseManager} Configured database manager
39
+ *
40
+ * @example
41
+ * import { setupDatabase } from '@coherent/database';
42
+ *
43
+ * const db = setupDatabase({
44
+ * type: 'postgresql',
45
+ * host: 'localhost',
46
+ * database: 'myapp',
47
+ * username: 'user',
48
+ * password: 'pass'
49
+ * });
50
+ */
51
+ export function setupDatabase(config = {}) {
52
+ const mergedConfig = { ...DEFAULT_DB_CONFIG, ...config };
53
+ const dbManager = new DatabaseManager(mergedConfig);
54
+ // Auto-connect if autoConnect is not explicitly set to false
55
+ if (mergedConfig.autoConnect !== false) {
56
+ dbManager.connect().catch(console._error);
57
+ }
58
+ return dbManager;
59
+ }
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/database/index.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,oBAAoB;AACpB,OAAO,EAAE,uBAAuB,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE/E,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,aAAa,CAAC,MAAM,GAAG,EAAE;IACvC,MAAM,YAAY,GAAG,EAAE,GAAG,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC;IAEpD,6DAA6D;IAC7D,IAAI,YAAY,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QACvC,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Database Middleware for Coherent.js Router Integration
3
+ *
4
+ * @fileoverview Provides middleware for seamless database integration with the router,
5
+ * including connection management, transaction handling, and query helpers.
6
+ */
7
+ /**
8
+ * Database middleware for router integration
9
+ *
10
+ * @param {DatabaseManager} db - Database manager instance
11
+ * @param {Object} [options={}] - Middleware options
12
+ * @returns {Function} Middleware function
13
+ *
14
+ * @example
15
+ * import { withDatabase } from '@coherent/database';
16
+ *
17
+ * const router = new SimpleRouter();
18
+ * router.use(withDatabase(db));
19
+ *
20
+ * router.get('/users', async (req, res) => {
21
+ * const users = await req.db.query('SELECT * FROM users');
22
+ * res.json(users.rows);
23
+ * });
24
+ */
25
+ export function withDatabase(db: DatabaseManager, options?: Object): Function;
26
+ /**
27
+ * Transaction middleware for automatic transaction management
28
+ *
29
+ * @param {DatabaseManager} db - Database manager instance
30
+ * @param {Object} [options={}] - Transaction options
31
+ * @returns {Function} Middleware function
32
+ *
33
+ * @example
34
+ * router.post('/transfer', withTransaction(db), async (req, res) => {
35
+ * // All database operations in this handler will be wrapped in a transaction
36
+ * await req.tx.query('UPDATE accounts SET balance = balance - ? WHERE id = ?', [amount, fromId]);
37
+ * await req.tx.query('UPDATE accounts SET balance = balance + ? WHERE id = ?', [amount, toId]);
38
+ * // Transaction is automatically committed on success or rolled back on error
39
+ * });
40
+ */
41
+ export function withTransaction(db: DatabaseManager, options?: Object): Function;
42
+ /**
43
+ * Model binding middleware
44
+ *
45
+ * @param {Function} ModelClass - Model class to bind
46
+ * @param {string} [paramName='id'] - Route parameter name
47
+ * @param {string} [requestKey] - Request key to attach model (defaults to model name)
48
+ * @returns {Function} Middleware function
49
+ *
50
+ * @example
51
+ * router.get('/users/:id', withModel(User), async (req, res) => {
52
+ * // req.user contains the loaded User model
53
+ * res.json(req.user.toJSON());
54
+ * });
55
+ *
56
+ * router.get('/posts/:postId', withModel(Post, 'postId', 'post'), async (req, res) => {
57
+ * // req.post contains the loaded Post model
58
+ * res.json(req.post.toJSON());
59
+ * });
60
+ */
61
+ export function withModel(ModelClass: Function, paramName?: string, requestKey?: string): Function;
62
+ /**
63
+ * Pagination middleware
64
+ *
65
+ * @param {Object} [options={}] - Pagination options
66
+ * @returns {Function} Middleware function
67
+ *
68
+ * @example
69
+ * router.get('/users', withPagination(), async (req, res) => {
70
+ * const users = await User.query()
71
+ * .limit(req.pagination.limit)
72
+ * .offset(req.pagination.offset)
73
+ * .execute();
74
+ *
75
+ * res.json({
76
+ * data: users.rows,
77
+ * pagination: req.pagination
78
+ * });
79
+ * });
80
+ */
81
+ export function withPagination(options?: Object): Function;
82
+ /**
83
+ * Query validation middleware
84
+ *
85
+ * @param {Object} schema - Validation schema
86
+ * @param {Object} [options={}] - Validation options
87
+ * @returns {Function} Middleware function
88
+ *
89
+ * @example
90
+ * router.get('/users', withQueryValidation({
91
+ * status: { type: 'string', enum: ['active', 'inactive'] },
92
+ * age: { type: 'number', min: 0, max: 120 }
93
+ * }), async (req, res) => {
94
+ * // req.query is validated and sanitized
95
+ * });
96
+ */
97
+ export function withQueryValidation(schema: Object, options?: Object): Function;
98
+ /**
99
+ * Database health check middleware
100
+ *
101
+ * @param {DatabaseManager} db - Database manager instance
102
+ * @param {Object} [options={}] - Health check options
103
+ * @returns {Function} Middleware function
104
+ *
105
+ * @example
106
+ * router.get('/health', withHealthCheck(db), (req, res) => {
107
+ * res.json({ status: 'healthy', database: req.dbHealth });
108
+ * });
109
+ */
110
+ export function withHealthCheck(db: DatabaseManager, options?: Object): Function;
111
+ /**
112
+ * Connection pooling middleware for request-scoped connections
113
+ *
114
+ * @param {DatabaseManager} db - Database manager instance
115
+ * @param {Object} [options={}] - Pool options
116
+ * @returns {Function} Middleware function
117
+ *
118
+ * @example
119
+ * router.use(withConnectionPool(db, { acquireTimeout: 10000 }));
120
+ */
121
+ export function withConnectionPool(db: DatabaseManager, options?: Object): Function;
122
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/database/middleware.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,iCAfW,eAAe,YACf,MAAM,YAsEhB;AAED;;;;;;;;;;;;;;GAcG;AACH,oCAZW,eAAe,YACf,MAAM,YAuChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,4DAfW,MAAM,eACN,MAAM,YA8ChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,yCAhBW,MAAM,YA6ChB;AAED;;;;;;;;;;;;;;GAcG;AACH,4CAZW,MAAM,YACN,MAAM,YA8FhB;AAED;;;;;;;;;;;GAWG;AACH,oCATW,eAAe,YACf,MAAM,YAmDhB;AAED;;;;;;;;;GASG;AACH,uCAPW,eAAe,YACf,MAAM,YAgDhB"}