@zintrust/core 0.1.21 → 0.1.22

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 (67) hide show
  1. package/package.json +1 -1
  2. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  3. package/src/cli/commands/MigrateCommand.js +1 -1
  4. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
  5. package/src/cli/d1/D1SqlMigrations.js +4 -3
  6. package/src/cli/scaffolding/ModelGenerator.d.ts +1 -1
  7. package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -1
  8. package/src/cli/scaffolding/ModelGenerator.js +10 -2
  9. package/src/config/broadcast.js +1 -1
  10. package/src/config/storage.js +4 -4
  11. package/src/config/type.d.ts +11 -0
  12. package/src/config/type.d.ts.map +1 -1
  13. package/src/config/type.js +10 -1
  14. package/src/index.d.ts.map +1 -1
  15. package/src/migrations/MigrationLoader.d.ts +1 -1
  16. package/src/migrations/MigrationLoader.d.ts.map +1 -1
  17. package/src/migrations/Migrator.d.ts +3 -3
  18. package/src/migrations/Migrator.d.ts.map +1 -1
  19. package/src/migrations/Migrator.js +1 -1
  20. package/src/migrations/MigratorFactory.d.ts +1 -1
  21. package/src/migrations/MigratorFactory.d.ts.map +1 -1
  22. package/src/migrations/MigratorFactory.js +3 -3
  23. package/src/migrations/enum/index.d.ts +93 -0
  24. package/src/migrations/enum/index.d.ts.map +1 -0
  25. package/src/migrations/enum/index.js +92 -0
  26. package/src/migrations/schema/Blueprint.d.ts +1 -1
  27. package/src/migrations/schema/Blueprint.d.ts.map +1 -1
  28. package/src/migrations/schema/Blueprint.js +27 -25
  29. package/src/migrations/schema/Schema.d.ts +1 -1
  30. package/src/migrations/schema/Schema.d.ts.map +1 -1
  31. package/src/migrations/schema/Schema.js +4 -3
  32. package/src/migrations/schema/SchemaCompiler.d.ts +1 -1
  33. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -1
  34. package/src/migrations/schema/SchemaCompiler.js +99 -91
  35. package/src/migrations/schema/index.d.ts +4 -4
  36. package/src/migrations/schema/index.d.ts.map +1 -1
  37. package/src/migrations/schema/index.js +3 -3
  38. package/src/migrations/schema/types.d.ts +2 -1
  39. package/src/migrations/schema/types.d.ts.map +1 -1
  40. package/src/orm/ConnectionManager.d.ts +6 -4
  41. package/src/orm/ConnectionManager.d.ts.map +1 -1
  42. package/src/orm/ConnectionManager.js +213 -75
  43. package/src/orm/Database.d.ts +2 -1
  44. package/src/orm/Database.d.ts.map +1 -1
  45. package/src/orm/DatabaseAdapter.d.ts +3 -2
  46. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  47. package/src/orm/DatabaseAdapter.js +17 -0
  48. package/src/orm/Model.d.ts.map +1 -1
  49. package/src/orm/Model.js +24 -2
  50. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  51. package/src/orm/adapters/D1Adapter.js +2 -1
  52. package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
  53. package/src/orm/adapters/D1RemoteAdapter.js +2 -1
  54. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  55. package/src/orm/adapters/MySQLAdapter.js +2 -1
  56. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  57. package/src/orm/adapters/SQLServerAdapter.js +2 -1
  58. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  59. package/src/orm/adapters/SQLiteAdapter.js +2 -1
  60. package/src/orm/migrations/MigrationStore.d.ts.map +1 -1
  61. package/src/performance/Optimizer.d.ts.map +1 -1
  62. package/src/performance/Optimizer.js +55 -14
  63. package/src/profiling/RequestProfiler.d.ts.map +1 -1
  64. package/src/profiling/RequestProfiler.js +3 -1
  65. package/src/runtime/StartupConfigFileRegistry.d.ts +14 -13
  66. package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -1
  67. package/src/runtime/StartupConfigFileRegistry.js +10 -11
@@ -8,41 +8,36 @@
8
8
  import { Env } from '../config/env.js';
9
9
  import { Logger } from '../config/logger.js';
10
10
  import { ErrorFactory } from '../exceptions/ZintrustError.js';
11
+ import { D1Adapter } from './adapters/D1Adapter.js';
12
+ import { D1RemoteAdapter } from './adapters/D1RemoteAdapter.js';
13
+ import { MySQLAdapter } from './adapters/MySQLAdapter.js';
14
+ import { PostgreSQLAdapter } from './adapters/PostgreSQLAdapter.js';
15
+ import { SQLiteAdapter } from './adapters/SQLiteAdapter.js';
16
+ import { SQLServerAdapter } from './adapters/SQLServerAdapter.js';
17
+ import { DatabaseAdapterRegistry } from './DatabaseAdapterRegistry.js';
11
18
  let instance;
12
19
  /**
13
20
  * Close a specific connection
14
21
  */
15
22
  const closeConnection = async (conn) => {
16
- if (conn !== undefined &&
17
- conn !== null &&
18
- typeof conn === 'object' &&
19
- 'close' in conn &&
20
- typeof conn.close === 'function') {
21
- await conn.close();
23
+ if (isDatabaseAdapter(conn)) {
24
+ await conn.disconnect();
22
25
  }
23
26
  };
24
27
  /**
25
28
  * Test if connection is still alive
26
29
  */
27
- const testConnection = async (config, _conn) => {
30
+ const testConnection = async (_config, conn) => {
31
+ if (!isDatabaseAdapter(conn))
32
+ return false;
33
+ if (!conn.isConnected())
34
+ return false;
28
35
  try {
29
- if (config.adapter === 'postgresql' || config.adapter === 'mysql') {
30
- // SELECT 1 for PostgreSQL/MySQL
31
- await new Promise((resolve, reject) => {
32
- const timeout = globalThis.setTimeout(() => reject(ErrorFactory.createConnectionError('Connection test timeout')), 5000);
33
- try {
34
- // In real implementation, query the connection
35
- resolve(true);
36
- }
37
- finally {
38
- clearTimeout(timeout);
39
- }
40
- });
41
- }
36
+ await conn.ping();
42
37
  return true;
43
38
  }
44
39
  catch (error) {
45
- ErrorFactory.createConnectionError('Connection test failed:', error);
40
+ Logger.warn('Connection health check failed', error);
46
41
  return false;
47
42
  }
48
43
  };
@@ -57,38 +52,134 @@ const updateConnectionUsage = (connectionPool, id) => {
57
52
  entry.isActive = true;
58
53
  }
59
54
  };
55
+ const isDatabaseAdapter = (value) => {
56
+ if (typeof value !== 'object' || value === null)
57
+ return false;
58
+ const candidate = value;
59
+ return (typeof candidate.connect === 'function' &&
60
+ typeof candidate.disconnect === 'function' &&
61
+ typeof candidate.ping === 'function' &&
62
+ typeof candidate.isConnected === 'function');
63
+ };
64
+ const createAdapterFromConfig = (config) => {
65
+ if (config.adapter === 'aurora-data-api') {
66
+ throw ErrorFactory.createConfigError('Aurora Data API connections should be created via getAuroraDataApiConnection()');
67
+ }
68
+ const driver = config.adapter;
69
+ const adapterConfig = {
70
+ driver,
71
+ database: config.database,
72
+ host: config.host,
73
+ port: config.port,
74
+ username: config.username,
75
+ password: config.password,
76
+ };
77
+ const registered = DatabaseAdapterRegistry.get(driver);
78
+ if (registered !== undefined) {
79
+ return registered(adapterConfig);
80
+ }
81
+ switch (driver) {
82
+ case 'postgresql':
83
+ return PostgreSQLAdapter.create(adapterConfig);
84
+ case 'mysql':
85
+ return MySQLAdapter.create(adapterConfig);
86
+ case 'sqlserver':
87
+ return SQLServerAdapter.create(adapterConfig);
88
+ case 'd1':
89
+ return D1Adapter.create(adapterConfig);
90
+ case 'd1-remote':
91
+ return D1RemoteAdapter.create(adapterConfig);
92
+ case 'sqlite':
93
+ default:
94
+ return SQLiteAdapter.create(adapterConfig);
95
+ }
96
+ };
60
97
  /**
61
98
  * Create new database connection
62
99
  */
63
100
  const createConnection = async (config, id) => {
64
101
  Logger.info(`Creating ${config.adapter} connection (${id}) to ${config.host}:${config.port}`);
65
- // Connection creation would be adapter-specific
66
- // This is a placeholder for the actual implementation
67
- return {
68
- id,
69
- adapter: config.adapter,
70
- query: async (_sql, _params) => {
71
- throw ErrorFactory.createDatabaseError(`Query execution not implemented for ${config.adapter}`);
72
- },
73
- close: async () => {
74
- Logger.info(`Connection ${id} closed`);
75
- },
76
- };
102
+ if (config.adapter === 'aurora-data-api') {
103
+ throw ErrorFactory.createConfigError('Aurora Data API connections should be created via getAuroraDataApiConnection()');
104
+ }
105
+ const adapter = createAdapterFromConfig(config);
106
+ await adapter.connect();
107
+ return adapter;
77
108
  };
78
109
  /**
79
110
  * Create Aurora Data API connection
80
111
  */
81
- const createAuroraDataApiConnection = () => ({
82
- execute: async (_sql, _params) => {
83
- // Call Aurora Data API via AWS SDK
84
- // Requires proper IAM permissions
85
- throw ErrorFactory.createConfigError('Aurora Data API not implemented yet');
86
- },
87
- batch: async (_statements) => {
88
- // Execute batch statements
89
- throw ErrorFactory.createConfigError('Aurora Data API batch not implemented yet');
90
- },
91
- });
112
+ function isMissingEsmPackage(error, packageName) {
113
+ if (typeof error !== 'object' || error === null)
114
+ return false;
115
+ const maybe = error;
116
+ const code = typeof maybe.code === 'string' ? maybe.code : '';
117
+ const message = typeof maybe.message === 'string' ? maybe.message : '';
118
+ if (code === 'ERR_MODULE_NOT_FOUND' && message.length === 0)
119
+ return true;
120
+ if (code === 'ERR_MODULE_NOT_FOUND' && message.includes(`'${packageName}'`))
121
+ return true;
122
+ if (message.includes(`Cannot find package '${packageName}'`))
123
+ return true;
124
+ return false;
125
+ }
126
+ async function importOptionalModule(modulePath) {
127
+ return import(modulePath);
128
+ }
129
+ const loadClientRdsDataModule = async () => {
130
+ try {
131
+ return (await importOptionalModule('@zintrust/client-rds-data'));
132
+ }
133
+ catch (error) {
134
+ if (isMissingEsmPackage(error, '@zintrust/client-rds-data')) {
135
+ throw ErrorFactory.createConfigError("Aurora Data API requires '@zintrust/client-rds-data' (install the package to enable AWS Data API support).");
136
+ }
137
+ throw ErrorFactory.createTryCatchError('Failed to load @zintrust/client-rds-data', {
138
+ cause: error,
139
+ });
140
+ }
141
+ };
142
+ const createAuroraDataApiConnection = () => {
143
+ const getClient = async () => {
144
+ const mod = await loadClientRdsDataModule();
145
+ return mod.getRdsDataClient(Env.AWS_REGION);
146
+ };
147
+ const resourceArn = Env.get('AURORA_RESOURCE_ARN');
148
+ const secretArn = Env.get('AURORA_SECRET_ARN');
149
+ const database = Env.get('AURORA_DATABASE', Env.DB_DATABASE);
150
+ const assertConfig = () => {
151
+ if (resourceArn.length === 0 || secretArn.length === 0) {
152
+ throw ErrorFactory.createConfigError('Aurora Data API requires AURORA_RESOURCE_ARN and AURORA_SECRET_ARN env vars');
153
+ }
154
+ };
155
+ const executeStatement = async (sql, params) => {
156
+ assertConfig();
157
+ const client = await getClient();
158
+ const input = {
159
+ resourceArn,
160
+ secretArn,
161
+ database,
162
+ sql,
163
+ parameters: (params ?? []).map((value) => ({ value: { stringValue: String(value) } })),
164
+ };
165
+ const response = (await client.executeStatement(input));
166
+ return {
167
+ numberOfRecordsUpdated: response.numberOfRecordsUpdated ?? 0,
168
+ records: response.records ?? [],
169
+ };
170
+ };
171
+ return {
172
+ execute: executeStatement,
173
+ batch: async (statements) => {
174
+ const results = [];
175
+ for (const statement of statements) {
176
+ const result = await executeStatement(statement.sql, statement.params);
177
+ results.push(result);
178
+ }
179
+ return results;
180
+ },
181
+ };
182
+ };
92
183
  /**
93
184
  * Get healthy existing connection if available
94
185
  */
@@ -113,48 +204,43 @@ const findIdleConnection = (state) => {
113
204
  return null;
114
205
  const lru = idleConnections.reduce((prev, current) => (prev.lastUsedAt < current.lastUsedAt ? prev : current), idleConnections[0]);
115
206
  updateConnectionUsage(state.connectionPool, lru.id);
116
- return state.connections.get(lru.id);
207
+ const conn = state.connections.get(lru.id);
208
+ return conn ?? null;
117
209
  };
118
210
  /**
119
211
  * Wait for a connection to become available
120
212
  */
121
213
  const waitForIdleConnection = async (state) => {
122
214
  return new Promise((resolve, reject) => {
123
- let settled = false;
124
215
  let timeoutId;
125
- const checkInterval = setInterval(() => {
126
- const idle = state.connectionPool.find((c) => !c.isActive);
127
- if (idle !== undefined) {
128
- if (settled)
129
- return;
130
- settled = true;
131
- cleanup();
132
- updateConnectionUsage(state.connectionPool, idle.id);
133
- resolve(state.connections.get(idle.id));
134
- }
135
- }, 100);
136
216
  const cleanup = () => {
137
- clearInterval(checkInterval);
138
217
  if (timeoutId !== undefined) {
139
- clearTimeout(timeoutId);
218
+ globalThis.clearTimeout(timeoutId);
140
219
  timeoutId = undefined;
141
220
  }
142
221
  };
143
- // Node: allow process to exit; other runtimes may not support unref()
144
- if (isUnrefableTimer(checkInterval)) {
145
- checkInterval.unref();
146
- }
147
- // eslint-disable-next-line no-restricted-syntax
148
- timeoutId = setTimeout(() => {
149
- if (settled)
150
- return;
151
- settled = true;
222
+ const waiter = {
223
+ resolve: (conn) => {
224
+ cleanup();
225
+ resolve(conn);
226
+ },
227
+ reject: (err) => {
228
+ cleanup();
229
+ reject(err);
230
+ },
231
+ timeoutId,
232
+ cleanup,
233
+ };
234
+ timeoutId = globalThis.setTimeout(() => {
235
+ state.waiters = state.waiters.filter((entry) => entry !== waiter);
152
236
  cleanup();
153
237
  reject(ErrorFactory.createConnectionError('Connection pool exhausted - timeout waiting for available connection'));
154
238
  }, 30000);
239
+ waiter.timeoutId = timeoutId;
155
240
  if (isUnrefableTimer(timeoutId)) {
156
241
  timeoutId.unref();
157
242
  }
243
+ state.waiters.push(waiter);
158
244
  });
159
245
  };
160
246
  function isUnrefableTimer(value) {
@@ -194,6 +280,9 @@ const startIdleConnectionCleanup = (state, idleTimeout) => {
194
280
  Logger.info(`Removed idle connection: ${id}`);
195
281
  }
196
282
  }, 300000); // Every 5 minutes
283
+ if (isUnrefableTimer(state.cleanupInterval)) {
284
+ state.cleanupInterval.unref();
285
+ }
197
286
  };
198
287
  /**
199
288
  * Create and register a new connection
@@ -219,6 +308,15 @@ const closeAllConnections = async (state) => {
219
308
  clearInterval(state.cleanupInterval);
220
309
  state.cleanupInterval = undefined;
221
310
  }
311
+ if (state.waiters.length > 0) {
312
+ const err = ErrorFactory.createConnectionError('Connection manager shutting down');
313
+ for (const waiter of state.waiters) {
314
+ if (waiter.timeoutId !== undefined)
315
+ clearTimeout(waiter.timeoutId);
316
+ waiter.reject(err);
317
+ }
318
+ state.waiters = [];
319
+ }
222
320
  for (const [id, conn] of state.connections.entries()) {
223
321
  try {
224
322
  await closeConnection(conn);
@@ -240,7 +338,7 @@ const getPoolStatistics = (state) => {
240
338
  total: state.connectionPool.length,
241
339
  active,
242
340
  idle,
243
- queued: 0,
341
+ queued: state.waiters.length,
244
342
  };
245
343
  };
246
344
  /**
@@ -255,6 +353,7 @@ const ConnectionManagerImpl = {
255
353
  const state = {
256
354
  connections: new Map(),
257
355
  connectionPool: [],
356
+ waiters: [],
258
357
  };
259
358
  const maxConnections = config.maxConnections ?? 10;
260
359
  const idleTimeout = config.idleTimeout ?? 900000; // 15 minutes
@@ -278,10 +377,23 @@ const ConnectionManagerImpl = {
278
377
  */
279
378
  async releaseConnection(connectionId = 'default') {
280
379
  const poolEntry = state.connectionPool.find((c) => c.id === connectionId);
281
- if (poolEntry !== undefined) {
282
- poolEntry.isActive = false;
283
- poolEntry.lastUsedAt = Date.now();
380
+ if (poolEntry === undefined)
381
+ return;
382
+ poolEntry.isActive = false;
383
+ poolEntry.lastUsedAt = Date.now();
384
+ if (state.waiters.length === 0)
385
+ return;
386
+ const waiter = state.waiters.shift();
387
+ if (waiter === undefined)
388
+ return;
389
+ waiter.cleanup();
390
+ const conn = state.connections.get(connectionId);
391
+ if (conn === undefined) {
392
+ waiter.reject(ErrorFactory.createConnectionError('Released connection not found'));
393
+ return;
284
394
  }
395
+ updateConnectionUsage(state.connectionPool, connectionId);
396
+ waiter.resolve(conn);
285
397
  },
286
398
  /**
287
399
  * Close all connections (graceful shutdown)
@@ -341,6 +453,7 @@ export const ConnectionManager = Object.freeze({
341
453
  if (instance !== undefined) {
342
454
  try {
343
455
  await instance.closeAll();
456
+ instance = undefined;
344
457
  }
345
458
  catch (err) {
346
459
  Logger.error('Error while shutting down ConnectionManager:', err);
@@ -387,9 +500,34 @@ export const ConnectionManager = Object.freeze({
387
500
  /**
388
501
  * Get database credentials from AWS Secrets Manager
389
502
  */
390
- export async function getDatabaseSecret(_secretName) {
391
- // Would use AWS SDK to fetch from Secrets Manager
392
- throw ErrorFactory.createConfigError('Secrets Manager integration not implemented');
503
+ export async function getDatabaseSecret(secretName) {
504
+ try {
505
+ const mod = await loadClientRdsDataModule();
506
+ const client = await mod.getSecretsManagerClient(Env.AWS_REGION);
507
+ const response = await client.getSecretValue(secretName);
508
+ const secretString = response.SecretString;
509
+ if (secretString === undefined || secretString === null || secretString.trim().length === 0) {
510
+ throw ErrorFactory.createConfigError('Secrets Manager returned an empty secret');
511
+ }
512
+ const parsed = JSON.parse(secretString);
513
+ if (parsed.username === undefined ||
514
+ parsed.password === undefined ||
515
+ parsed.host === undefined ||
516
+ parsed.port === undefined ||
517
+ parsed.database === undefined) {
518
+ throw ErrorFactory.createConfigError('Secrets Manager secret is missing required fields');
519
+ }
520
+ return {
521
+ username: parsed.username,
522
+ password: parsed.password,
523
+ host: parsed.host,
524
+ port: Number(parsed.port),
525
+ database: parsed.database,
526
+ };
527
+ }
528
+ catch (error) {
529
+ throw ErrorFactory.createTryCatchError('Failed to fetch database secret', { cause: error });
530
+ }
393
531
  }
394
532
  /**
395
533
  * Get database credentials from environment variables
@@ -2,6 +2,7 @@
2
2
  * Database Manager
3
3
  * Central database connection management and query execution
4
4
  */
5
+ import type { SupportedDriver } from '../migrations/enum';
5
6
  import type { DatabaseConfig, IDatabaseAdapter, QueryResult } from './DatabaseAdapter';
6
7
  import type { IQueryBuilder } from './QueryBuilder';
7
8
  export interface IDatabase {
@@ -18,7 +19,7 @@ export interface IDatabase {
18
19
  offBeforeQuery(handler: (query: string, params: unknown[]) => void): void;
19
20
  offAfterQuery(handler: (query: string, params: unknown[], duration: number) => void): void;
20
21
  getAdapterInstance(isRead?: boolean): IDatabaseAdapter;
21
- getType(): string;
22
+ getType(): SupportedDriver;
22
23
  getConfig(): DatabaseConfig;
23
24
  dispose(): void;
24
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../src/orm/Database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,WAAW,SAAS;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACrF,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IACnC,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACzE,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1F,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1E,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3F,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACvD,OAAO,IAAI,MAAM,CAAC;IAClB,SAAS,IAAI,cAAc,CAAC;IAC5B,OAAO,IAAI,IAAI,CAAC;CACjB;AA0YD,eAAO,MAAM,QAAQ;IACnB;;OAEG;oBACa,cAAc,GAAG,SAAS;EAI1C,CAAC;AAIH,eAAO,MAAM,oBAAoB,GAC/B,kBAAkB,EAClB,uBAA0B,KACzB,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAMxC,CAAC;AAEF,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,UAAU,SAAY,GAAG,SAAS,CAgBtF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAWnD"}
1
+ {"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../src/orm/Database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAQxD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,WAAW,SAAS;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACrF,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IACnC,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACzE,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1F,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1E,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3F,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACvD,OAAO,IAAI,eAAe,CAAC;IAC3B,SAAS,IAAI,cAAc,CAAC;IAC5B,OAAO,IAAI,IAAI,CAAC;CACjB;AA0YD,eAAO,MAAM,QAAQ;IACnB;;OAEG;oBACa,cAAc,GAAG,SAAS;EAI1C,CAAC;AAIH,eAAO,MAAM,oBAAoB,GAC/B,kBAAkB,EAClB,uBAA0B,KACzB,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAMxC,CAAC;AAEF,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,UAAU,SAAY,GAAG,SAAS,CAgBtF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAWnD"}
@@ -2,6 +2,7 @@
2
2
  * Database Adapter Interface
3
3
  * Defines contract for different database implementations
4
4
  */
5
+ import type { SupportedDriver } from '../migrations/enum';
5
6
  /**
6
7
  * Minimal D1 Database interface for type safety
7
8
  */
@@ -23,7 +24,7 @@ export interface ID1Database {
23
24
  }
24
25
  export interface DatabaseConfig {
25
26
  d1?: ID1Database;
26
- driver: 'sqlite' | 'postgresql' | 'mysql' | 'sqlserver' | 'd1' | 'd1-remote';
27
+ driver: SupportedDriver;
27
28
  database?: string;
28
29
  host?: string;
29
30
  port?: number;
@@ -86,7 +87,7 @@ export interface IDatabaseAdapter {
86
87
  /**
87
88
  * Get database type
88
89
  */
89
- getType(): string;
90
+ getType(): SupportedDriver;
90
91
  /**
91
92
  * Check connection status
92
93
  */
@@ -1 +1 @@
1
- {"version":3,"file":"DatabaseAdapter.d.ts","sourceRoot":"","sources":["../../../src/orm/DatabaseAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DatabaseAdapter.d.ts","sourceRoot":"","sources":["../../../src/orm/DatabaseAdapter.ts"],"names":[],"mappings":"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"}
@@ -20,9 +20,26 @@ export const BaseAdapter = Object.freeze({
20
20
  if (typeof value === 'boolean') {
21
21
  return value ? '1' : '0';
22
22
  }
23
+ // Support BigInt explicitly to avoid JSON.stringify errors and driver issues
24
+ if (typeof value === 'bigint') {
25
+ return String(value);
26
+ }
27
+ // Dates should be passed as ISO strings
28
+ if (value instanceof Date) {
29
+ return `'${value.toISOString()}'`;
30
+ }
23
31
  if (typeof value === 'number') {
24
32
  return String(value);
25
33
  }
34
+ // Buffer / Uint8Array -> base64 string
35
+ // Some DB adapters expect binary types; returning base64-encoded string is a safe default
36
+ // and prevents JSON.stringify(BigInt) errors when objects include BigInt.
37
+ if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {
38
+ return `'${value.toString('base64')}'`;
39
+ }
40
+ if (value instanceof Uint8Array) {
41
+ return `'${Buffer.from(value).toString('base64')}'`;
42
+ }
26
43
  // For objects, convert to JSON string representation
27
44
  return `'${JSON.stringify(value).replaceAll("'", "''")}'`;
28
45
  },
@@ -1 +1 @@
1
- {"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../../src/orm/Model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../../src/orm/Model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AAE1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAWxD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,aAAa,CAAC,CAAC;IACvF,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnD,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,aAAa,CAAC;IACvB,QAAQ,CAAC,IAAI,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CACvD;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAClD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAClD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,IAAI,OAAO,CAAC;IACrB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,QAAQ,IAAI,MAAM,CAAC;IACnB,MAAM,IAAI,OAAO,CAAC;IAClB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAGjC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAChD,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAG5C,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IACtE,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IACvE,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IACzE,aAAa,CACX,YAAY,EAAE,WAAW,EACzB,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,aAAa,CAAC;CAClB;AA6LD;;GAEG;AAEH,eAAO,MAAM,WAAW,GACtB,QAAQ,WAAW,EACnB,aAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,KACvC,MA4GF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,aAAa,MAAM,KAAG,aAG1D,CAAC;AAOF;;GAEG;AACH,eAAO,MAAM,IAAI,GAAU,QAAQ,WAAW,EAAE,IAAI,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAUlF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,GAAG,GAAU,QAAQ,WAAW,KAAG,OAAO,CAAC,MAAM,EAAE,CAS/D,CAAC;AAEF,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC;AACtF,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,CAAC;AAEvE,KAAK,gBAAgB,CAAC,CAAC,SAAS,mBAAmB,IAAI;KACpD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK;CAClG,CAAC;AAqBF,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,iBAAiB,IAAI;IACtD,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAAK,MAAM,GAAG,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC;IAC7D,oBAAoB,CAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,GAAG,CAAC,CAAC;IACd,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpD,GAAG,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACtC,GAAG,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,EAAE,MAAM,aAAa,CAAC;IAG3B,KAAK,EAAE,CACL,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,EAC1C,KAAK,CAAC,EAAE,OAAO,KACZ,aAAa,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,aAAa,CAAC;IAC/E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,aAAa,CAAC;IAC9E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,aAAa,CAAC;IAC9D,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,aAAa,CAAC;IACjE,MAAM,EAAE,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,CAAC;IAChD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC;IAC3D,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC;IACvD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,aAAa,CAAC;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,aAAa,CAAC;IACvD,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,KAAK,aAAa,CAAC;IACvE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC;IACxC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC;IACzC,WAAW,EAAE,MAAM,aAAa,CAAC;IACjC,WAAW,EAAE,MAAM,aAAa,CAAC;IACjC,cAAc,EAAE,MAAM,aAAa,CAAC;IAEpC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,aAAa,CAAC;IAC3D,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;CAC7C,CAAC;AAsMF;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,mBAAmB,EACxD,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,CAAC,GACV,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,wBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,iBAAiB,EACtD,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,GACzB,YAAY,CAAC,CAAC,CAAC,CAAC;AA2CnB;;;;;GAKG;AACH,eAAO,MAAM,KAAK;qBA1dR,WAAW,eACP,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAClC,MAAM;mBAiHoB,MAAM,eAAe,MAAM,KAAG,aAAa;mBAarC,WAAW,MAAM,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;kBAelD,WAAW,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;qBAmTvD,WAAW,UACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAC/D,OAAO,CAAC,YAAY,CAAC;yBAUd,WAAW,WACV,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KACtC,OAAO,CAAC,YAAY,CAAC;;EAkBtB,CAAC"}
package/src/orm/Model.js CHANGED
@@ -25,6 +25,17 @@ const castAttribute = (config, key, value) => {
25
25
  return value === true || value === 1 || value === '1';
26
26
  case 'integer':
27
27
  return Number.parseInt(String(value), 10);
28
+ case 'bigint': {
29
+ // Native BigInt if supported, otherwise string
30
+ try {
31
+ return BigInt(value);
32
+ }
33
+ catch {
34
+ return String(value);
35
+ }
36
+ }
37
+ case 'uuid':
38
+ return String(value);
28
39
  case 'float':
29
40
  return Number.parseFloat(String(value));
30
41
  case 'date':
@@ -70,8 +81,19 @@ const runObservers = async (config, hook, model) => {
70
81
  const createModelJSON = (config, attrs) => {
71
82
  const json = {};
72
83
  for (const [key, value] of Object.entries(attrs)) {
73
- if (!config.hidden.includes(key))
74
- json[key] = value;
84
+ if (config.hidden.includes(key))
85
+ continue;
86
+ // Serialize BigInt as string to keep JSON stable
87
+ if (typeof value === 'bigint') {
88
+ json[key] = String(value);
89
+ continue;
90
+ }
91
+ // Convert Dates to ISO strings for JSON
92
+ if (value instanceof Date) {
93
+ json[key] = value.toISOString();
94
+ continue;
95
+ }
96
+ json[key] = value;
75
97
  }
76
98
  return json;
77
99
  };
@@ -1 +1 @@
1
- {"version":3,"file":"D1Adapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1Adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAe,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AAUvG;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;OAEG;oBAEa,cAAc,GAAG,gBAAgB;EAkHjD,CAAC;AAEH,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"D1Adapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1Adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EACV,cAAc,EAEd,gBAAgB,EAEjB,MAAM,sBAAsB,CAAC;AAU9B;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;OAEG;oBAEa,cAAc,GAAG,gBAAgB;EAkHjD,CAAC;AAEH,eAAe,SAAS,CAAC"}
@@ -5,6 +5,7 @@ import { Cloudflare } from '../../config/cloudflare.js';
5
5
  import { FeatureFlags } from '../../config/features.js';
6
6
  import { Logger } from '../../config/logger.js';
7
7
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
8
+ import { AdaptersEnum } from '../../migrations/enum/index.js';
8
9
  import { QueryBuilder } from '../QueryBuilder.js';
9
10
  /**
10
11
  * Get D1 binding from config or global environment
@@ -96,7 +97,7 @@ export const D1Adapter = Object.freeze({
96
97
  }
97
98
  },
98
99
  getType() {
99
- return 'd1';
100
+ return AdaptersEnum.d1;
100
101
  },
101
102
  isConnected() {
102
103
  return connected;
@@ -1 +1 @@
1
- {"version":3,"file":"D1RemoteAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1RemoteAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AA+I1F,eAAO,MAAM,eAAe;oBACV,cAAc,GAAG,gBAAgB;EA+EjD,CAAC;AAEH,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"D1RemoteAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1RemoteAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AA+I1F,eAAO,MAAM,eAAe;oBACV,cAAc,GAAG,gBAAgB;EA+EjD,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -6,6 +6,7 @@
6
6
  import { RemoteSignedJson } from '../../common/RemoteSignedJson.js';
7
7
  import { Env } from '../../config/env.js';
8
8
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
9
+ import { AdaptersEnum } from '../../migrations/enum/index.js';
9
10
  import { QueryBuilder } from '../QueryBuilder.js';
10
11
  import { SignedRequest } from '../../security/SignedRequest.js';
11
12
  const createRemoteConfig = () => {
@@ -148,7 +149,7 @@ export const D1RemoteAdapter = Object.freeze({
148
149
  return out.rows;
149
150
  },
150
151
  getType() {
151
- return 'd1-remote';
152
+ return AdaptersEnum.d1Remote;
152
153
  },
153
154
  isConnected() {
154
155
  return connected;
@@ -1 +1 @@
1
- {"version":3,"file":"MySQLAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/MySQLAdapter.ts"],"names":[],"mappings":"AACA;;GAEG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AAyG1F;;;GAGG;AACH,eAAO,MAAM,YAAY;IACvB;;OAEG;mBACY,cAAc,GAAG,gBAAgB;EAIhD,CAAC;AAEH,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"MySQLAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/MySQLAdapter.ts"],"names":[],"mappings":"AACA;;GAEG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AAyG1F;;;GAGG;AACH,eAAO,MAAM,YAAY;IACvB;;OAEG;mBACY,cAAc,GAAG,gBAAgB;EAIhD,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -5,6 +5,7 @@
5
5
  import { FeatureFlags } from '../../config/features.js';
6
6
  import { Logger } from '../../config/logger.js';
7
7
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
8
+ import { AdaptersEnum } from '../../migrations/enum/index.js';
8
9
  import { QueryBuilder } from '../QueryBuilder.js';
9
10
  function createRawQuery(state) {
10
11
  return async function rawQuery(sql, parameters) {
@@ -68,7 +69,7 @@ function createMySQLAdapterInstance(config, state) {
68
69
  }
69
70
  },
70
71
  getType() {
71
- return 'mysql';
72
+ return AdaptersEnum.mysql;
72
73
  },
73
74
  isConnected() {
74
75
  return state.connected;
@@ -1 +1 @@
1
- {"version":3,"file":"SQLServerAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/SQLServerAdapter.ts"],"names":[],"mappings":"AACA;;GAEG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AAG1F;;;GAGG;AACH,eAAO,MAAM,gBAAgB;IAC3B;;OAEG;mBACY,cAAc,GAAG,gBAAgB;EA4EhD,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"SQLServerAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/SQLServerAdapter.ts"],"names":[],"mappings":"AACA;;GAEG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AAG1F;;;GAGG;AACH,eAAO,MAAM,gBAAgB;IAC3B;;OAEG;mBACY,cAAc,GAAG,gBAAgB;EA4EhD,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -5,6 +5,7 @@
5
5
  import { FeatureFlags } from '../../config/features.js';
6
6
  import { Logger } from '../../config/logger.js';
7
7
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
8
+ import { AdaptersEnum } from '../../migrations/enum/index.js';
8
9
  import { QueryBuilder } from '../QueryBuilder.js';
9
10
  /**
10
11
  * SQL Server adapter implementation
@@ -50,7 +51,7 @@ export const SQLServerAdapter = Object.freeze({
50
51
  }
51
52
  },
52
53
  getType() {
53
- return 'sqlserver';
54
+ return AdaptersEnum.sqlserver;
54
55
  },
55
56
  isConnected() {
56
57
  return connected;