@db-bridge/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2433 @@
1
+ import { EventEmitter } from 'eventemitter3';
2
+
3
+ declare const __brand: unique symbol;
4
+ type Brand<T, B> = T & {
5
+ [__brand]: B;
6
+ };
7
+ type SafeSQL = Brand<string, 'SafeSQL'>;
8
+ type TableName = Brand<string, 'TableName'>;
9
+ type ColumnName = Brand<string, 'ColumnName'>;
10
+ declare function sql(strings: TemplateStringsArray, ..._values: unknown[]): SafeSQL;
11
+ interface HostConnectionConfig {
12
+ type: 'host';
13
+ host: string;
14
+ port: number;
15
+ database: string;
16
+ user: string;
17
+ password: string;
18
+ ssl?: SSLConfig;
19
+ pool?: StrictPoolConfig;
20
+ }
21
+ interface ConnectionStringConfig {
22
+ type: 'connectionString';
23
+ connectionString: string;
24
+ ssl?: SSLConfig;
25
+ pool?: StrictPoolConfig;
26
+ }
27
+ type StrictConnectionConfig = HostConnectionConfig | ConnectionStringConfig;
28
+ interface SSLConfig {
29
+ enabled: boolean;
30
+ rejectUnauthorized?: boolean;
31
+ ca?: string | Buffer;
32
+ cert?: string | Buffer;
33
+ key?: string | Buffer;
34
+ }
35
+ interface StrictPoolConfig {
36
+ min: number;
37
+ max: number;
38
+ acquireTimeout: number;
39
+ idleTimeout: number;
40
+ validateOnBorrow?: boolean;
41
+ maxLifetime?: number;
42
+ }
43
+ interface BaseQueryResult {
44
+ duration: number;
45
+ command: SQLCommand;
46
+ }
47
+ interface SelectResult<T> extends BaseQueryResult {
48
+ command: 'SELECT';
49
+ rows: T[];
50
+ rowCount: number;
51
+ fields: StrictFieldInfo[];
52
+ }
53
+ interface InsertResult extends BaseQueryResult {
54
+ command: 'INSERT';
55
+ insertId: number | bigint;
56
+ affectedRows: number;
57
+ }
58
+ interface UpdateResult extends BaseQueryResult {
59
+ command: 'UPDATE';
60
+ affectedRows: number;
61
+ changedRows: number;
62
+ }
63
+ interface DeleteResult extends BaseQueryResult {
64
+ command: 'DELETE';
65
+ affectedRows: number;
66
+ }
67
+ type StrictQueryResult<T = unknown> = SelectResult<T> | InsertResult | UpdateResult | DeleteResult;
68
+ type SQLCommand = 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'CREATE' | 'ALTER' | 'DROP' | 'TRUNCATE' | 'BEGIN' | 'COMMIT' | 'ROLLBACK';
69
+ type FieldType = 'varchar' | 'char' | 'text' | 'mediumtext' | 'longtext' | 'enum' | 'set' | 'int' | 'tinyint' | 'smallint' | 'mediumint' | 'bigint' | 'decimal' | 'float' | 'double' | 'numeric' | 'date' | 'datetime' | 'timestamp' | 'time' | 'year' | 'blob' | 'binary' | 'varbinary' | 'json' | 'jsonb' | 'uuid' | 'boolean' | 'bool' | 'unknown';
70
+ interface StrictFieldInfo {
71
+ name: string;
72
+ type: FieldType;
73
+ nullable: boolean;
74
+ primaryKey: boolean;
75
+ autoIncrement: boolean;
76
+ defaultValue: unknown;
77
+ maxLength?: number;
78
+ precision?: number;
79
+ scale?: number;
80
+ }
81
+ type ComparisonOperator = '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=';
82
+ type LikeOperator = 'LIKE' | 'NOT LIKE' | 'ILIKE';
83
+ type NullOperator = 'IS NULL' | 'IS NOT NULL';
84
+ type InOperator = 'IN' | 'NOT IN';
85
+ type BetweenOperator = 'BETWEEN' | 'NOT BETWEEN';
86
+ type WhereOperator = ComparisonOperator | LikeOperator | NullOperator | InOperator | BetweenOperator;
87
+ type JoinType = 'INNER' | 'LEFT' | 'RIGHT' | 'FULL' | 'CROSS';
88
+ type OrderDirection = 'ASC' | 'DESC';
89
+ type AggregateFunction = 'COUNT' | 'SUM' | 'AVG' | 'MIN' | 'MAX';
90
+ interface TableSchema<T extends Record<string, unknown>> {
91
+ name: TableName;
92
+ columns: {
93
+ [K in keyof T]: ColumnDefinition<T[K]>;
94
+ };
95
+ primaryKey: keyof T;
96
+ }
97
+ interface ColumnDefinition<T> {
98
+ type: FieldType;
99
+ nullable: boolean;
100
+ defaultValue?: T;
101
+ autoIncrement?: boolean;
102
+ }
103
+ type ExtractRow<T> = T extends SelectResult<infer R> ? R : never;
104
+ type RequireKeys<T, K extends keyof T> = T & Required<Pick<T, K>>;
105
+ type OptionalKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
106
+ type InsertData<T, AutoFields extends keyof T = never> = Omit<T, AutoFields>;
107
+ type UpdateData<T, IdField extends keyof T> = Partial<Omit<T, IdField>> & Pick<T, IdField>;
108
+ type Nullable<T> = T | null;
109
+ type DeepPartial<T> = {
110
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
111
+ };
112
+ type DeepRequired<T> = {
113
+ [P in keyof T]-?: T[P] extends object ? DeepRequired<T[P]> : T[P];
114
+ };
115
+ declare function isSelectResult<T>(result: StrictQueryResult<T>): result is SelectResult<T>;
116
+ declare function isInsertResult(result: StrictQueryResult): result is InsertResult;
117
+ declare function isUpdateResult(result: StrictQueryResult): result is UpdateResult;
118
+ declare function isDeleteResult(result: StrictQueryResult): result is DeleteResult;
119
+ declare const DEFAULT_POOL_CONFIG: StrictPoolConfig;
120
+ declare const DEFAULT_TIMEOUTS: {
121
+ readonly connection: 10000;
122
+ readonly query: 30000;
123
+ readonly transaction: 60000;
124
+ };
125
+ declare const ISOLATION_LEVELS: {
126
+ readonly READ_UNCOMMITTED: "READ UNCOMMITTED";
127
+ readonly READ_COMMITTED: "READ COMMITTED";
128
+ readonly REPEATABLE_READ: "REPEATABLE READ";
129
+ readonly SERIALIZABLE: "SERIALIZABLE";
130
+ };
131
+ type StrictIsolationLevel = (typeof ISOLATION_LEVELS)[keyof typeof ISOLATION_LEVELS];
132
+
133
+ interface ConnectionConfig {
134
+ host?: string;
135
+ port?: number;
136
+ database?: string;
137
+ user?: string;
138
+ password?: string;
139
+ connectionString?: string;
140
+ ssl?: boolean | Record<string, unknown>;
141
+ poolSize?: number;
142
+ pool?: PoolConfig;
143
+ connectionTimeout?: number;
144
+ idleTimeout?: number;
145
+ maxRetries?: number;
146
+ retryDelay?: number;
147
+ readonly?: boolean;
148
+ }
149
+ interface PoolConfig {
150
+ min?: number;
151
+ max?: number;
152
+ acquireTimeout?: number;
153
+ idleTimeout?: number;
154
+ validateOnBorrow?: boolean;
155
+ maxLifetime?: number;
156
+ queueLimit?: number;
157
+ queryTimeout?: number;
158
+ enableKeepAlive?: boolean;
159
+ keepAliveInitialDelay?: number;
160
+ }
161
+ interface QueryResult<T = unknown> {
162
+ rows: T[];
163
+ rowCount: number;
164
+ affectedRows?: number;
165
+ insertId?: number;
166
+ fields?: FieldInfo[];
167
+ command?: string;
168
+ duration?: number;
169
+ }
170
+ interface FieldInfo {
171
+ name: string;
172
+ type: string;
173
+ nullable: boolean;
174
+ primaryKey?: boolean;
175
+ autoIncrement?: boolean;
176
+ defaultValue?: unknown;
177
+ }
178
+ interface TransactionOptions {
179
+ isolationLevel?: IsolationLevel;
180
+ readOnly?: boolean;
181
+ deferrable?: boolean;
182
+ }
183
+ declare enum IsolationLevel {
184
+ READ_UNCOMMITTED = "READ UNCOMMITTED",
185
+ READ_COMMITTED = "READ COMMITTED",
186
+ REPEATABLE_READ = "REPEATABLE READ",
187
+ SERIALIZABLE = "SERIALIZABLE"
188
+ }
189
+ interface PreparedStatement<T = unknown> {
190
+ execute(params?: unknown[]): Promise<QueryResult<T>>;
191
+ release(): Promise<void>;
192
+ close(): Promise<void>;
193
+ }
194
+ interface CacheOptions$1 {
195
+ ttl?: number;
196
+ key?: string;
197
+ invalidateOn?: string[];
198
+ compress?: boolean;
199
+ }
200
+ interface QueryOptions {
201
+ cache?: boolean | CacheOptions$1;
202
+ timeout?: number;
203
+ prepare?: boolean;
204
+ transaction?: Transaction;
205
+ }
206
+ interface Transaction {
207
+ id: string;
208
+ isActive: boolean;
209
+ commit(): Promise<void>;
210
+ rollback(): Promise<void>;
211
+ savepoint(name: string): Promise<void>;
212
+ releaseSavepoint(name: string): Promise<void>;
213
+ rollbackToSavepoint(name: string): Promise<void>;
214
+ query<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
215
+ execute<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
216
+ }
217
+ interface PoolStats {
218
+ total: number;
219
+ idle: number;
220
+ waiting: number;
221
+ active: number;
222
+ }
223
+ type QueryValue = string | number | boolean | Date | Buffer | null | undefined;
224
+ type QueryParams = QueryValue[] | Record<string, QueryValue>;
225
+ interface LogLevel {
226
+ ERROR: 'error';
227
+ WARN: 'warn';
228
+ INFO: 'info';
229
+ DEBUG: 'debug';
230
+ }
231
+ interface Logger {
232
+ error(message: string, ...args: unknown[]): void;
233
+ warn(message: string, ...args: unknown[]): void;
234
+ info(message: string, ...args: unknown[]): void;
235
+ debug(message: string, ...args: unknown[]): void;
236
+ }
237
+
238
+ declare const CONNECTION_DEFAULTS: {
239
+ readonly MYSQL_PORT: 3306;
240
+ readonly POSTGRESQL_PORT: 5432;
241
+ readonly REDIS_PORT: 6379;
242
+ readonly MONGODB_PORT: 27017;
243
+ readonly CONNECTION_TIMEOUT: 10000;
244
+ readonly IDLE_TIMEOUT: 300000;
245
+ readonly MAX_PORT: 65535;
246
+ readonly MIN_PORT: 1;
247
+ };
248
+ declare const POOL_DEFAULTS_LEGACY: {
249
+ readonly MIN_CONNECTIONS: 2;
250
+ readonly MAX_CONNECTIONS: 10;
251
+ readonly ACQUIRE_TIMEOUT: 30000;
252
+ readonly IDLE_TIMEOUT: 60000;
253
+ readonly MAX_LIFETIME: 1800000;
254
+ readonly QUEUE_LIMIT: 0;
255
+ };
256
+ declare const POOL_DEFAULTS: {
257
+ readonly min: 0;
258
+ readonly max: 10;
259
+ readonly acquireTimeout: 30000;
260
+ readonly idleTimeout: 60000;
261
+ readonly queueLimit: 100;
262
+ readonly queryTimeout: 30000;
263
+ };
264
+ declare const QUERY_DEFAULTS: {
265
+ readonly TIMEOUT: 30000;
266
+ readonly TRANSACTION_TIMEOUT: 60000;
267
+ readonly SLOW_QUERY_THRESHOLD: 1000;
268
+ readonly MAX_TRACES: 10000;
269
+ readonly VERY_SLOW_QUERY_THRESHOLD: 2000;
270
+ readonly SLOW_TRANSACTION_THRESHOLD: 5000;
271
+ };
272
+ declare const CACHE_DEFAULTS: {
273
+ readonly TTL_SECONDS: 3600;
274
+ readonly TTL_MS: 3600000;
275
+ readonly ERROR_TTL_SECONDS: 60;
276
+ readonly CLEANUP_INTERVAL: 60000;
277
+ readonly MAX_ENTRY_SIZE: number;
278
+ readonly COMPRESSION_THRESHOLD: 1024;
279
+ readonly MAX_LATENCIES: 1000;
280
+ };
281
+ declare const RETRY_DEFAULTS: {
282
+ readonly MAX_RETRIES: 3;
283
+ readonly BASE_DELAY: 1000;
284
+ readonly MAX_DELAY: 30000;
285
+ readonly BACKOFF_MULTIPLIER: 2;
286
+ readonly CIRCUIT_BREAKER_THRESHOLD: 5;
287
+ readonly CIRCUIT_BREAKER_RESET: 30000;
288
+ };
289
+ declare const CRYPTO_DEFAULTS: {
290
+ readonly ALGORITHM: "aes-256-gcm";
291
+ readonly KEY_LENGTH: 32;
292
+ readonly IV_LENGTH: 16;
293
+ readonly CHACHA_IV_LENGTH: 12;
294
+ readonly SALT_LENGTH: 32;
295
+ readonly ITERATIONS: 100000;
296
+ readonly DIGEST: "sha256";
297
+ };
298
+ declare const HEALTH_DEFAULTS: {
299
+ readonly CHECK_INTERVAL: 30000;
300
+ readonly CHECK_TIMEOUT: 5000;
301
+ readonly MAX_WAIT_TIME: 60000;
302
+ readonly WAIT_INTERVAL: 1000;
303
+ };
304
+ declare const LOGGING_DEFAULTS: {
305
+ readonly SLOW_QUERY_THRESHOLD: 1000;
306
+ readonly MAX_SQL_LENGTH: 200;
307
+ readonly MAX_PARAMS_LENGTH: 100;
308
+ };
309
+ declare const DURATION_BUCKETS: readonly [10, 50, 100, 250, 500, 1000, 2500, 5000, 10000];
310
+ declare const ANALYSIS_DEFAULTS: {
311
+ readonly WINDOW: 3600000;
312
+ readonly WARMUP_DELAY: 1000;
313
+ };
314
+ declare const TIME_UNITS: {
315
+ readonly MS_PER_SECOND: 1000;
316
+ readonly MS_PER_MINUTE: 60000;
317
+ readonly MS_PER_HOUR: 3600000;
318
+ readonly SECONDS_PER_MINUTE: 60;
319
+ readonly SECONDS_PER_HOUR: 3600;
320
+ };
321
+ declare const SIZE_UNITS: {
322
+ readonly BYTES_PER_KB: 1024;
323
+ readonly BYTES_PER_MB: number;
324
+ readonly BYTES_PER_GB: number;
325
+ };
326
+
327
+ interface PaginationResult<T> {
328
+ data: T[];
329
+ pagination: {
330
+ page: number;
331
+ perPage: number;
332
+ total: number;
333
+ totalPages: number;
334
+ hasMore: boolean;
335
+ from: number;
336
+ to: number;
337
+ };
338
+ }
339
+ interface CursorPaginationResult<T> {
340
+ data: T[];
341
+ nextCursor: number | string | null;
342
+ hasMore: boolean;
343
+ }
344
+ interface QueryBuilder<T = unknown> {
345
+ select(...columns: string[]): QueryBuilder<T>;
346
+ select(columns: string[]): QueryBuilder<T>;
347
+ from(table: string, alias?: string): QueryBuilder<T>;
348
+ table(table: string, alias?: string): QueryBuilder<T>;
349
+ distinct(): QueryBuilder<T>;
350
+ join(table: string, on: string, type?: 'INNER' | 'LEFT' | 'RIGHT' | 'FULL'): QueryBuilder<T>;
351
+ innerJoin(table: string, on: string): QueryBuilder<T>;
352
+ leftJoin(table: string, on: string): QueryBuilder<T>;
353
+ rightJoin(table: string, on: string): QueryBuilder<T>;
354
+ fullJoin(table: string, on: string): QueryBuilder<T>;
355
+ where(condition: string | Record<string, unknown>, operator?: string, value?: unknown): QueryBuilder<T>;
356
+ where(column: string, operator: string, value: unknown): QueryBuilder<T>;
357
+ whereIn(column: string, values: unknown[]): QueryBuilder<T>;
358
+ whereNotIn(column: string, values: unknown[]): QueryBuilder<T>;
359
+ whereBetween(column: string, min: unknown, max: unknown): QueryBuilder<T>;
360
+ whereNull(column: string): QueryBuilder<T>;
361
+ whereNotNull(column: string): QueryBuilder<T>;
362
+ orWhere(condition: string | Record<string, unknown>, operator?: string, value?: unknown): QueryBuilder<T>;
363
+ orWhere(column: string, operator: string, value: unknown): QueryBuilder<T>;
364
+ whereDate(column: string, operator: string, date: Date | string): QueryBuilder<T>;
365
+ whereYear(column: string, operator: string, year: number): QueryBuilder<T>;
366
+ whereMonth(column: string, operator: string, month: number): QueryBuilder<T>;
367
+ whereDay(column: string, operator: string, day: number): QueryBuilder<T>;
368
+ whereToday(column: string): QueryBuilder<T>;
369
+ whereYesterday(column: string): QueryBuilder<T>;
370
+ whereBetweenDates(column: string, startDate: Date | string, endDate: Date | string): QueryBuilder<T>;
371
+ whereLastDays(column: string, days: number): QueryBuilder<T>;
372
+ groupBy(...columns: string[]): QueryBuilder<T>;
373
+ having(condition: string): QueryBuilder<T>;
374
+ orderBy(column: string, direction?: 'ASC' | 'DESC'): QueryBuilder<T>;
375
+ limit(limit: number): QueryBuilder<T>;
376
+ offset(offset: number): QueryBuilder<T>;
377
+ insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): QueryBuilder<T>;
378
+ update(table: string, data: Record<string, unknown>): QueryBuilder<T>;
379
+ delete(table: string): QueryBuilder<T>;
380
+ raw(sql: string, bindings?: unknown[]): QueryBuilder<T>;
381
+ encrypt(...fields: string[]): QueryBuilder<T>;
382
+ decrypt(...fields: string[]): QueryBuilder<T>;
383
+ toSQL(): {
384
+ sql: string;
385
+ bindings: unknown[];
386
+ };
387
+ execute(options?: QueryOptions): Promise<QueryResult<T>>;
388
+ first(options?: QueryOptions): Promise<T | null>;
389
+ count(column?: string, options?: QueryOptions): Promise<number>;
390
+ sum(column: string, options?: QueryOptions): Promise<number>;
391
+ avg(column: string, options?: QueryOptions): Promise<number>;
392
+ min(column: string, options?: QueryOptions): Promise<number | null>;
393
+ max(column: string, options?: QueryOptions): Promise<number | null>;
394
+ exists(options?: QueryOptions): Promise<boolean>;
395
+ paginate(page?: number, perPage?: number, options?: QueryOptions): Promise<PaginationResult<T>>;
396
+ cursorPaginate(cursorColumn: string, cursor?: number | string | null, limit?: number, options?: QueryOptions): Promise<CursorPaginationResult<T>>;
397
+ pluck<K = unknown>(column: string, options?: QueryOptions): Promise<K[]>;
398
+ value<K = unknown>(column: string, options?: QueryOptions): Promise<K | null>;
399
+ chunk(size: number, callback: (items: T[], page: number) => Promise<void | false>, options?: QueryOptions): Promise<void>;
400
+ }
401
+
402
+ interface DatabaseAdapter {
403
+ readonly name: string;
404
+ readonly version: string;
405
+ readonly isConnected: boolean;
406
+ connect(config: ConnectionConfig): Promise<void>;
407
+ disconnect(): Promise<void>;
408
+ query<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
409
+ execute<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
410
+ prepare<T = unknown>(sql: string, name?: string): Promise<PreparedStatement<T>>;
411
+ beginTransaction(options?: TransactionOptions): Promise<Transaction>;
412
+ getPoolStats(): PoolStats;
413
+ ping(): Promise<boolean>;
414
+ escape(value: unknown): string;
415
+ escapeIdentifier(identifier: string): string;
416
+ createQueryBuilder<T = unknown>(): QueryBuilder<T>;
417
+ }
418
+
419
+ interface CacheAdapter {
420
+ get<T = unknown>(key: string): Promise<T | null>;
421
+ set<T = unknown>(key: string, value: T, ttl?: number): Promise<void>;
422
+ delete(key: string): Promise<boolean>;
423
+ exists(key: string): Promise<boolean>;
424
+ clear(): Promise<void>;
425
+ mget<T = unknown>(keys: string[]): Promise<(T | null)[]>;
426
+ mset<T = unknown>(items: Array<{
427
+ key: string;
428
+ value: T;
429
+ ttl?: number;
430
+ }>): Promise<void>;
431
+ keys(pattern?: string): Promise<string[]>;
432
+ ttl(key: string): Promise<number>;
433
+ expire(key: string, ttl: number): Promise<boolean>;
434
+ increment(key: string, value?: number): Promise<number>;
435
+ decrement(key: string, value?: number): Promise<number>;
436
+ }
437
+
438
+ declare class DatabaseError extends Error {
439
+ code?: string | undefined;
440
+ cause?: Error | undefined;
441
+ constructor(message: string, code?: string | undefined, cause?: Error | undefined);
442
+ }
443
+ declare class DBBridgeError extends DatabaseError {
444
+ code?: string | undefined;
445
+ cause?: Error | undefined;
446
+ constructor(message: string, code?: string | undefined, cause?: Error | undefined);
447
+ }
448
+ declare class ConnectionError extends DBBridgeError {
449
+ constructor(message: string, cause?: Error);
450
+ }
451
+ declare class QueryError extends DBBridgeError {
452
+ sql?: string | undefined;
453
+ params?: unknown[] | undefined;
454
+ constructor(message: string, sql?: string | undefined, params?: unknown[] | undefined, cause?: Error);
455
+ }
456
+ declare class TransactionError extends DBBridgeError {
457
+ transactionId?: string | undefined;
458
+ constructor(message: string, transactionId?: string | undefined, cause?: Error);
459
+ }
460
+ declare class TimeoutError extends DBBridgeError {
461
+ timeout?: number | undefined;
462
+ constructor(message: string, timeout?: number | undefined, cause?: Error);
463
+ }
464
+ declare class QueryTimeoutError extends TimeoutError {
465
+ sql: string;
466
+ timeoutMs: number;
467
+ constructor(sql: string, timeoutMs: number, cause?: Error);
468
+ }
469
+ declare class PoolExhaustedError extends ConnectionError {
470
+ poolStats: {
471
+ active: number;
472
+ waiting: number;
473
+ max: number;
474
+ };
475
+ waitTimeMs?: number | undefined;
476
+ constructor(poolStats: {
477
+ active: number;
478
+ waiting: number;
479
+ max: number;
480
+ }, waitTimeMs?: number | undefined, cause?: Error);
481
+ }
482
+ declare class ValidationError extends DBBridgeError {
483
+ field?: string | undefined;
484
+ constructor(message: string, field?: string | undefined, cause?: Error);
485
+ }
486
+ declare class CacheError extends DBBridgeError {
487
+ key?: string | undefined;
488
+ constructor(message: string, key?: string | undefined, cause?: Error);
489
+ }
490
+ declare class NotImplementedError extends DBBridgeError {
491
+ constructor(feature: string);
492
+ }
493
+
494
+ interface RetryOptions {
495
+ maxRetries: number;
496
+ retryDelay: number;
497
+ backoffMultiplier?: number;
498
+ maxRetryDelay?: number;
499
+ shouldRetry?: (error: Error) => boolean;
500
+ }
501
+ declare function retry<T>(fn: () => Promise<T>, options?: Partial<RetryOptions>): Promise<T>;
502
+ declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, message?: string): Promise<T>;
503
+
504
+ declare function validateConnectionConfig(config: ConnectionConfig): void;
505
+ declare function validateSQL(sql: string): void;
506
+ declare function validateTableName(tableName: string): void;
507
+ declare function validateColumnName(columnName: string): void;
508
+
509
+ declare function generateCacheKey(sql: string, params?: unknown[], prefix?: string): string;
510
+ declare function parseCacheKey(key: string): {
511
+ prefix: string;
512
+ hash: string;
513
+ } | null;
514
+ declare function createCacheKeyPattern(prefix?: string, pattern?: string): string;
515
+ declare function sanitizeCacheKey(key: string): string;
516
+
517
+ declare function generateUUID(): string;
518
+
519
+ interface CompressionOptions {
520
+ threshold?: number;
521
+ level?: number;
522
+ }
523
+ declare function compress(data: string, options?: CompressionOptions): string;
524
+ declare function decompress(data: string): string;
525
+ declare function isCompressed(data: string): boolean;
526
+ declare function getCompressionRatio(original: string, compressed: string): number;
527
+ declare function shouldCompress(data: string, threshold?: 1024): boolean;
528
+
529
+ interface CryptoConfig {
530
+ algorithm?: string;
531
+ keyLength?: number;
532
+ ivLength?: number;
533
+ saltLength?: number;
534
+ iterations?: number;
535
+ digest?: string;
536
+ }
537
+ interface EncryptionOptions {
538
+ key?: string;
539
+ salt?: Buffer;
540
+ encoding?: BufferEncoding;
541
+ }
542
+ interface EncryptedData {
543
+ encrypted: string;
544
+ salt: string;
545
+ iv: string;
546
+ authTag?: string;
547
+ }
548
+ declare class CryptoProvider {
549
+ private readonly config;
550
+ constructor(config?: CryptoConfig);
551
+ private deriveKey;
552
+ encrypt(data: string, options?: EncryptionOptions): EncryptedData;
553
+ decrypt(encryptedData: EncryptedData, options?: EncryptionOptions): string;
554
+ encryptField(value: unknown): string;
555
+ decryptField(encryptedField: string): unknown;
556
+ generateKey(): string;
557
+ hash(value: string): string;
558
+ compareHash(value: string, hash: string): boolean;
559
+ }
560
+ declare const crypto: CryptoProvider;
561
+ declare const CryptoAlgorithms: {
562
+ readonly AES_256_GCM: "aes-256-gcm";
563
+ readonly AES_256_CBC: "aes-256-cbc";
564
+ readonly AES_192_GCM: "aes-192-gcm";
565
+ readonly AES_192_CBC: "aes-192-cbc";
566
+ readonly AES_128_GCM: "aes-128-gcm";
567
+ readonly AES_128_CBC: "aes-128-cbc";
568
+ readonly CHACHA20_POLY1305: "chacha20-poly1305";
569
+ };
570
+ type CryptoAlgorithm = (typeof CryptoAlgorithms)[keyof typeof CryptoAlgorithms];
571
+
572
+ interface BaseAdapterOptions {
573
+ logger?: Logger;
574
+ cache?: CacheAdapter;
575
+ crypto?: CryptoProvider;
576
+ retryOptions?: {
577
+ maxRetries?: number;
578
+ retryDelay?: number;
579
+ };
580
+ }
581
+ declare abstract class BaseAdapter extends EventEmitter implements DatabaseAdapter {
582
+ protected config?: ConnectionConfig;
583
+ protected logger?: Logger;
584
+ protected cache?: CacheAdapter;
585
+ protected crypto?: CryptoProvider;
586
+ protected _isConnected: boolean;
587
+ protected retryOptions: {
588
+ maxRetries: number;
589
+ retryDelay: number;
590
+ };
591
+ abstract readonly name: string;
592
+ abstract readonly version: string;
593
+ get isConnected(): boolean;
594
+ constructor(options?: BaseAdapterOptions);
595
+ connect(config: ConnectionConfig): Promise<void>;
596
+ disconnect(): Promise<void>;
597
+ query<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
598
+ execute<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
599
+ executeBatch<T = unknown>(sql: string, paramSets: QueryParams[], options?: QueryOptions): Promise<QueryResult<T>[]>;
600
+ prepare<T = unknown>(_sql: string, _name?: string): Promise<PreparedStatement<T>>;
601
+ beginTransaction(_options?: TransactionOptions): Promise<Transaction>;
602
+ getPoolStats(): PoolStats;
603
+ ping(): Promise<boolean>;
604
+ escape(_value: unknown): string;
605
+ escapeIdentifier(_identifier: string): string;
606
+ abstract createQueryBuilder<T = unknown>(): QueryBuilder<T>;
607
+ protected abstract doConnect(config: ConnectionConfig): Promise<void>;
608
+ protected abstract doDisconnect(): Promise<void>;
609
+ protected abstract doQuery<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
610
+ private getCacheKey;
611
+ }
612
+
613
+ interface QueryBuilderOptions {
614
+ adapter: DatabaseAdapter;
615
+ escapeIdentifier?: (identifier: string) => string;
616
+ parameterPlaceholder?: (index: number) => string;
617
+ crypto?: CryptoProvider;
618
+ }
619
+ interface WhereClause {
620
+ type: 'AND' | 'OR';
621
+ condition: string;
622
+ bindings: unknown[];
623
+ }
624
+ interface JoinClause {
625
+ type: 'INNER' | 'LEFT' | 'RIGHT' | 'FULL';
626
+ table: string;
627
+ on: string;
628
+ }
629
+ interface OrderByClause {
630
+ column: string;
631
+ direction: 'ASC' | 'DESC';
632
+ }
633
+ interface QueryState {
634
+ selectColumns: string[];
635
+ fromTable?: string;
636
+ fromAlias?: string;
637
+ joins: JoinClause[];
638
+ whereClauses: WhereClause[];
639
+ groupByColumns: string[];
640
+ havingClause?: string;
641
+ orderByColumns: OrderByClause[];
642
+ limitValue?: number;
643
+ offsetValue?: number;
644
+ bindings: unknown[];
645
+ isDistinct: boolean;
646
+ insertTable?: string;
647
+ insertData?: Record<string, unknown> | Record<string, unknown>[];
648
+ updateTable?: string;
649
+ updateData?: Record<string, unknown>;
650
+ deleteTable?: string;
651
+ rawSql?: string;
652
+ rawBindings?: unknown[];
653
+ encryptedFields: Set<string>;
654
+ decryptedFields: Set<string>;
655
+ }
656
+ declare function createQueryState(): QueryState;
657
+
658
+ declare abstract class BaseQueryBuilder<T = unknown> implements QueryBuilder<T> {
659
+ protected adapter: DatabaseAdapter;
660
+ protected escapeIdentifierFn: (identifier: string) => string;
661
+ protected parameterPlaceholderFn: (index: number) => string;
662
+ protected crypto?: CryptoProvider;
663
+ protected encryptedFields: Set<string>;
664
+ protected decryptedFields: Set<string>;
665
+ protected selectColumns: string[];
666
+ protected fromTable?: string;
667
+ protected fromAlias?: string;
668
+ protected joins: JoinClause[];
669
+ protected whereClauses: WhereClause[];
670
+ protected groupByColumns: string[];
671
+ protected havingClause?: string;
672
+ protected orderByColumns: Array<{
673
+ column: string;
674
+ direction: 'ASC' | 'DESC';
675
+ }>;
676
+ protected limitValue?: number;
677
+ protected offsetValue?: number;
678
+ protected bindings: unknown[];
679
+ protected isDistinct: boolean;
680
+ protected insertTable?: string;
681
+ protected insertData?: Record<string, unknown> | Record<string, unknown>[];
682
+ protected updateTable?: string;
683
+ protected updateData?: Record<string, unknown>;
684
+ protected deleteTable?: string;
685
+ protected rawSql?: string;
686
+ protected rawBindings?: unknown[];
687
+ constructor(options: QueryBuilderOptions);
688
+ select(...columns: string[]): QueryBuilder<T>;
689
+ select(columns: string[]): QueryBuilder<T>;
690
+ from(table: string, alias?: string): QueryBuilder<T>;
691
+ table(table: string, alias?: string): QueryBuilder<T>;
692
+ distinct(): QueryBuilder<T>;
693
+ join(table: string, on: string, type?: 'INNER' | 'LEFT' | 'RIGHT' | 'FULL'): QueryBuilder<T>;
694
+ innerJoin(table: string, on: string): QueryBuilder<T>;
695
+ leftJoin(table: string, on: string): QueryBuilder<T>;
696
+ rightJoin(table: string, on: string): QueryBuilder<T>;
697
+ fullJoin(table: string, on: string): QueryBuilder<T>;
698
+ where(condition: string | Record<string, unknown>, operator?: string, value?: unknown): QueryBuilder<T>;
699
+ where(column: string, operator: string, value: unknown): QueryBuilder<T>;
700
+ orWhere(condition: string | Record<string, unknown>, operator?: string, value?: unknown): QueryBuilder<T>;
701
+ orWhere(column: string, operator: string, value: unknown): QueryBuilder<T>;
702
+ whereIn(column: string, values: unknown[]): QueryBuilder<T>;
703
+ whereNotIn(column: string, values: unknown[]): QueryBuilder<T>;
704
+ whereBetween(column: string, min: unknown, max: unknown): QueryBuilder<T>;
705
+ whereNull(column: string): QueryBuilder<T>;
706
+ whereNotNull(column: string): QueryBuilder<T>;
707
+ whereDate(column: string, operator: string, date: Date | string): QueryBuilder<T>;
708
+ whereYear(column: string, operator: string, year: number): QueryBuilder<T>;
709
+ whereMonth(column: string, operator: string, month: number): QueryBuilder<T>;
710
+ whereDay(column: string, operator: string, day: number): QueryBuilder<T>;
711
+ whereToday(column: string): QueryBuilder<T>;
712
+ whereYesterday(column: string): QueryBuilder<T>;
713
+ whereBetweenDates(column: string, startDate: Date | string, endDate: Date | string): QueryBuilder<T>;
714
+ whereLastDays(column: string, days: number): QueryBuilder<T>;
715
+ private getDateFilterContext;
716
+ groupBy(...columns: string[]): QueryBuilder<T>;
717
+ having(condition: string): QueryBuilder<T>;
718
+ orderBy(column: string, direction?: 'ASC' | 'DESC'): QueryBuilder<T>;
719
+ limit(limit: number): QueryBuilder<T>;
720
+ offset(offset: number): QueryBuilder<T>;
721
+ count(column?: string, options?: QueryOptions): Promise<number>;
722
+ sum(column: string, options?: QueryOptions): Promise<number>;
723
+ avg(column: string, options?: QueryOptions): Promise<number>;
724
+ min(column: string, options?: QueryOptions): Promise<number | null>;
725
+ max(column: string, options?: QueryOptions): Promise<number | null>;
726
+ exists(options?: QueryOptions): Promise<boolean>;
727
+ paginate(page?: number, perPage?: number, options?: QueryOptions): Promise<PaginationResult<T>>;
728
+ cursorPaginate(cursorColumn: string, cursor?: number | string | null, limit?: number, options?: QueryOptions): Promise<CursorPaginationResult<T>>;
729
+ chunk(size: number, callback: (items: T[], page: number) => Promise<void | false>, options?: QueryOptions): Promise<void>;
730
+ first(options?: QueryOptions): Promise<T | null>;
731
+ pluck<K = unknown>(column: string, options?: QueryOptions): Promise<K[]>;
732
+ value<K = unknown>(column: string, options?: QueryOptions): Promise<K | null>;
733
+ insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): QueryBuilder<T>;
734
+ update(table: string, data: Record<string, unknown>): QueryBuilder<T>;
735
+ delete(table: string): QueryBuilder<T>;
736
+ raw(sql: string, bindings?: unknown[]): QueryBuilder<T>;
737
+ encrypt(...fields: string[]): QueryBuilder<T>;
738
+ decrypt(...fields: string[]): QueryBuilder<T>;
739
+ toSQL(): {
740
+ sql: string;
741
+ bindings: unknown[];
742
+ };
743
+ execute(options?: QueryOptions): Promise<QueryResult<T>>;
744
+ protected addWhereClause(type: 'AND' | 'OR', condition: string | Record<string, unknown>, operator: string, value?: unknown): void;
745
+ protected processDataForEncryption(data: Record<string, unknown> | Record<string, unknown>[]): Record<string, unknown> | Record<string, unknown>[];
746
+ protected encryptRow(row: Record<string, unknown>): Record<string, unknown>;
747
+ protected processResultsForDecryption(result: QueryResult<T>): Promise<QueryResult<T>>;
748
+ protected abstract buildSelectSQL(): {
749
+ sql: string;
750
+ bindings: unknown[];
751
+ };
752
+ protected abstract buildInsertSQL(): {
753
+ sql: string;
754
+ bindings: unknown[];
755
+ };
756
+ protected abstract buildUpdateSQL(): {
757
+ sql: string;
758
+ bindings: unknown[];
759
+ };
760
+ protected abstract buildDeleteSQL(): {
761
+ sql: string;
762
+ bindings: unknown[];
763
+ };
764
+ }
765
+
766
+ interface DateFilterContext {
767
+ bindings: unknown[];
768
+ whereClauses: WhereClause[];
769
+ escapeIdentifierFn: (identifier: string) => string;
770
+ parameterPlaceholderFn: (index: number) => string;
771
+ }
772
+ declare function whereDate(ctx: DateFilterContext, column: string, operator: string, date: Date | string): void;
773
+ declare function whereYear(ctx: DateFilterContext, column: string, operator: string, year: number): void;
774
+ declare function whereMonth(ctx: DateFilterContext, column: string, operator: string, month: number): void;
775
+ declare function whereDay(ctx: DateFilterContext, column: string, operator: string, day: number): void;
776
+ declare function whereToday(ctx: DateFilterContext, column: string): void;
777
+ declare function whereYesterday(ctx: DateFilterContext, column: string): void;
778
+ declare function whereBetweenDates(ctx: DateFilterContext, column: string, startDate: Date | string, endDate: Date | string): void;
779
+ declare function whereLastDays(ctx: DateFilterContext, column: string, days: number): void;
780
+
781
+ interface AggregateContext {
782
+ adapter: DatabaseAdapter;
783
+ selectColumns: string[];
784
+ escapeIdentifierFn: (identifier: string) => string;
785
+ toSQL: () => {
786
+ sql: string;
787
+ bindings: unknown[];
788
+ };
789
+ }
790
+ declare function count(ctx: AggregateContext, column?: string, options?: QueryOptions): Promise<number>;
791
+ declare function sum(ctx: AggregateContext, column: string, options?: QueryOptions): Promise<number>;
792
+ declare function avg(ctx: AggregateContext, column: string, options?: QueryOptions): Promise<number>;
793
+ declare function min(ctx: AggregateContext, column: string, options?: QueryOptions): Promise<number | null>;
794
+ declare function max(ctx: AggregateContext, column: string, options?: QueryOptions): Promise<number | null>;
795
+ declare function exists(ctx: AggregateContext, options?: QueryOptions): Promise<boolean>;
796
+
797
+ interface PaginationContext<T> {
798
+ toSQL: () => {
799
+ sql: string;
800
+ bindings: unknown[];
801
+ };
802
+ where: (column: string, operator: string, value: unknown) => void;
803
+ orderBy: (column: string, direction: 'ASC' | 'DESC') => void;
804
+ count: (column: string, options?: QueryOptions) => Promise<number>;
805
+ execute: (options?: QueryOptions) => Promise<QueryResult<T>>;
806
+ }
807
+ interface PaginationState {
808
+ limitValue?: number;
809
+ offsetValue?: number;
810
+ }
811
+ declare function paginate<T>(ctx: PaginationContext<T>, state: PaginationState, page?: number, perPage?: number, options?: QueryOptions): Promise<PaginationResult<T>>;
812
+ declare function cursorPaginate<T>(ctx: PaginationContext<T>, state: PaginationState, cursorColumn: string, cursor?: number | string | null, limit?: number, options?: QueryOptions): Promise<CursorPaginationResult<T>>;
813
+ declare function chunk<T>(ctx: PaginationContext<T>, state: PaginationState, size: number, callback: (items: T[], page: number) => Promise<void | false>, options?: QueryOptions): Promise<void>;
814
+
815
+ interface EncryptionContext {
816
+ crypto?: CryptoProvider;
817
+ encryptedFields: Set<string>;
818
+ decryptedFields: Set<string>;
819
+ }
820
+ declare function processDataForEncryption(ctx: EncryptionContext, data: Record<string, unknown> | Record<string, unknown>[]): Record<string, unknown> | Record<string, unknown>[];
821
+ declare function encryptRow(ctx: EncryptionContext, row: Record<string, unknown>): Record<string, unknown>;
822
+ declare function processResultsForDecryption<T>(ctx: EncryptionContext, result: QueryResult<T>): Promise<QueryResult<T>>;
823
+
824
+ interface HealthCheckResult {
825
+ status: 'healthy' | 'degraded' | 'unhealthy';
826
+ latency: number;
827
+ timestamp: Date;
828
+ details: {
829
+ connectionPool?: {
830
+ total: number;
831
+ active: number;
832
+ idle: number;
833
+ waiting: number;
834
+ };
835
+ lastError?: string;
836
+ uptime?: number;
837
+ version?: string;
838
+ };
839
+ }
840
+ interface HealthCheckOptions {
841
+ interval?: number;
842
+ timeout?: number;
843
+ retries?: number;
844
+ onHealthChange?: (result: HealthCheckResult) => void;
845
+ logger?: Logger;
846
+ }
847
+ declare class HealthChecker {
848
+ private adapter;
849
+ private options;
850
+ private intervalId?;
851
+ private lastResult?;
852
+ private startTime;
853
+ private consecutiveFailures;
854
+ constructor(adapter: DatabaseAdapter, options?: HealthCheckOptions);
855
+ check(): Promise<HealthCheckResult>;
856
+ start(): void;
857
+ stop(): void;
858
+ getLastResult(): HealthCheckResult | undefined;
859
+ isHealthy(): boolean;
860
+ getUptime(): number;
861
+ getConsecutiveFailures(): number;
862
+ waitForHealthy(maxWaitTime?: number): Promise<void>;
863
+ }
864
+
865
+ interface QueryMetrics {
866
+ totalQueries: number;
867
+ successfulQueries: number;
868
+ failedQueries: number;
869
+ averageLatency: number;
870
+ minLatency: number;
871
+ maxLatency: number;
872
+ queriesPerSecond: number;
873
+ cacheHitRate: number;
874
+ slowQueries: number;
875
+ queryDistribution: Record<string, number>;
876
+ }
877
+ interface ConnectionMetrics {
878
+ totalConnections: number;
879
+ activeConnections: number;
880
+ idleConnections: number;
881
+ connectionErrors: number;
882
+ averageConnectionTime: number;
883
+ connectionReuse: number;
884
+ }
885
+ interface TransactionMetrics {
886
+ totalTransactions: number;
887
+ committedTransactions: number;
888
+ rolledBackTransactions: number;
889
+ averageTransactionDuration: number;
890
+ activeTransactions: number;
891
+ deadlocks: number;
892
+ }
893
+ interface SystemMetrics {
894
+ memoryUsage: NodeJS.MemoryUsage;
895
+ cpuUsage: NodeJS.CpuUsage;
896
+ uptime: number;
897
+ timestamp: Date;
898
+ }
899
+ interface MetricsSnapshot {
900
+ query: QueryMetrics;
901
+ connection: ConnectionMetrics;
902
+ transaction: TransactionMetrics;
903
+ system: SystemMetrics;
904
+ custom: Record<string, unknown>;
905
+ }
906
+ declare class MetricsCollector extends EventEmitter {
907
+ private queryMetrics;
908
+ private connectionMetrics;
909
+ private transactionMetrics;
910
+ private queryLatencies;
911
+ private connectionTimes;
912
+ private transactionDurations;
913
+ private startTime;
914
+ private slowQueryThreshold;
915
+ private customMetrics;
916
+ private interval?;
917
+ constructor(options?: {
918
+ slowQueryThreshold?: number;
919
+ collectionInterval?: number;
920
+ });
921
+ private createEmptyQueryMetrics;
922
+ private createEmptyConnectionMetrics;
923
+ private createEmptyTransactionMetrics;
924
+ recordQuery(command: string, latency: number, success: boolean, cacheHit?: boolean): void;
925
+ recordConnection(connected: boolean, connectionTime?: number): void;
926
+ recordTransaction(action: 'start' | 'commit' | 'rollback', duration?: number, isDeadlock?: boolean): void;
927
+ updateConnectionPool(stats: {
928
+ total: number;
929
+ active: number;
930
+ idle: number;
931
+ }): void;
932
+ setCustomMetric(key: string, value: unknown): void;
933
+ incrementCustomMetric(key: string, value?: number): void;
934
+ getSnapshot(): MetricsSnapshot;
935
+ reset(): void;
936
+ private calculateAverage;
937
+ private startCollection;
938
+ stop(): void;
939
+ exportPrometheus(): string;
940
+ }
941
+
942
+ interface Migration {
943
+ id: string;
944
+ version: number;
945
+ name: string;
946
+ up: (adapter: DatabaseAdapter) => Promise<void>;
947
+ down: (adapter: DatabaseAdapter) => Promise<void>;
948
+ timestamp: Date;
949
+ }
950
+ interface MigrationHistory {
951
+ id: string;
952
+ version: number;
953
+ name: string;
954
+ executedAt: Date;
955
+ duration: number;
956
+ checksum: string;
957
+ }
958
+ interface MigrationRunnerOptions {
959
+ tableName?: string;
960
+ logger?: Logger;
961
+ validateChecksums?: boolean;
962
+ dryRun?: boolean;
963
+ }
964
+ declare class MigrationRunner {
965
+ private adapter;
966
+ private migrations;
967
+ private options;
968
+ constructor(adapter: DatabaseAdapter, options?: MigrationRunnerOptions);
969
+ initialize(): Promise<void>;
970
+ addMigration(migration: Migration): void;
971
+ addMigrations(migrations: Migration[]): void;
972
+ getExecutedMigrations(): Promise<MigrationHistory[]>;
973
+ getPendingMigrations(): Promise<Migration[]>;
974
+ private calculateChecksum;
975
+ up(targetVersion?: number): Promise<void>;
976
+ down(targetVersion: number): Promise<void>;
977
+ latest(): Promise<void>;
978
+ rollback(steps?: number): Promise<void>;
979
+ reset(): Promise<void>;
980
+ refresh(): Promise<void>;
981
+ private runMigration;
982
+ status(): Promise<{
983
+ executed: MigrationHistory[];
984
+ pending: Migration[];
985
+ current: number | null;
986
+ }>;
987
+ validate(): Promise<{
988
+ valid: boolean;
989
+ errors: string[];
990
+ }>;
991
+ }
992
+
993
+ interface PerformanceTrace$1 {
994
+ id: string;
995
+ operation: string;
996
+ startTime: number;
997
+ endTime?: number;
998
+ duration?: number;
999
+ metadata: Record<string, unknown>;
1000
+ status: 'started' | 'completed' | 'failed';
1001
+ error?: Error;
1002
+ parent?: string;
1003
+ children: string[];
1004
+ }
1005
+ interface QueryPlan$1 {
1006
+ query: string;
1007
+ plan: string;
1008
+ cost: number;
1009
+ rows: number;
1010
+ width: number;
1011
+ actualTime?: number;
1012
+ actualRows?: number;
1013
+ }
1014
+ interface PerformanceReport$1 {
1015
+ slowQueries: Array<{
1016
+ query: string;
1017
+ duration: number;
1018
+ timestamp: Date;
1019
+ params?: unknown[];
1020
+ }>;
1021
+ queryPlans: QueryPlan$1[];
1022
+ bottlenecks: Array<{
1023
+ operation: string;
1024
+ averageDuration: number;
1025
+ count: number;
1026
+ impact: number;
1027
+ }>;
1028
+ recommendations: string[];
1029
+ }
1030
+ declare class PerformanceMonitor extends EventEmitter {
1031
+ private traces;
1032
+ private slowQueries;
1033
+ private queryPlans;
1034
+ private slowQueryThreshold;
1035
+ private maxTraces;
1036
+ private adapter;
1037
+ private enabled;
1038
+ constructor(adapter: DatabaseAdapter, options?: {
1039
+ slowQueryThreshold?: number;
1040
+ maxTraces?: number;
1041
+ enabled?: boolean;
1042
+ });
1043
+ startTrace(operation: string, metadata?: Record<string, unknown>, parent?: string): string;
1044
+ endTrace(id: string, error?: Error): void;
1045
+ explainQuery(sql: string, params?: QueryParams): Promise<QueryPlan$1 | null>;
1046
+ private parseExplainResult;
1047
+ analyzePerformance(duration?: number): Promise<PerformanceReport$1>;
1048
+ wrapAdapter(adapter: DatabaseAdapter): DatabaseAdapter;
1049
+ reset(): void;
1050
+ enable(): void;
1051
+ disable(): void;
1052
+ isEnabled(): boolean;
1053
+ private generateTraceId;
1054
+ getTraces(filter?: {
1055
+ operation?: string;
1056
+ status?: PerformanceTrace$1['status'];
1057
+ minDuration?: number;
1058
+ parent?: string;
1059
+ }): PerformanceTrace$1[];
1060
+ getSlowQueries(limit?: number): typeof this.slowQueries;
1061
+ exportTraces(): string;
1062
+ importTraces(data: string): void;
1063
+ }
1064
+
1065
+ interface PerformanceTrace {
1066
+ id: string;
1067
+ operation: string;
1068
+ startTime: number;
1069
+ endTime?: number;
1070
+ duration?: number;
1071
+ metadata: Record<string, unknown>;
1072
+ status: 'started' | 'completed' | 'failed';
1073
+ error?: Error;
1074
+ parent?: string;
1075
+ children: string[];
1076
+ }
1077
+ declare class TraceBaseTrait extends EventEmitter {
1078
+ protected traces: Map<string, PerformanceTrace>;
1079
+ protected enabled: boolean;
1080
+ protected maxTraces: number;
1081
+ constructor(maxTraces?: number, enabled?: boolean);
1082
+ enable(): void;
1083
+ disable(): void;
1084
+ isEnabled(): boolean;
1085
+ protected generateTraceId(): string;
1086
+ getTraces(filter?: {
1087
+ operation?: string;
1088
+ status?: PerformanceTrace['status'];
1089
+ minDuration?: number;
1090
+ parent?: string;
1091
+ }): PerformanceTrace[];
1092
+ exportTraces(): string;
1093
+ importTraces(data: string): void;
1094
+ reset(): void;
1095
+ }
1096
+
1097
+ declare class TraceManagementTrait extends TraceBaseTrait {
1098
+ startTrace(operation: string, metadata?: Record<string, unknown>, parent?: string): string;
1099
+ endTrace(id: string, error?: Error): void;
1100
+ protected cleanupOldTraces(): void;
1101
+ getTrace(id: string): PerformanceTrace | undefined;
1102
+ getChildTraces(parentId: string): PerformanceTrace[];
1103
+ getTraceHierarchy(rootId: string): PerformanceTrace | null;
1104
+ }
1105
+
1106
+ interface QueryPlan {
1107
+ query: string;
1108
+ plan: string;
1109
+ cost: number;
1110
+ rows: number;
1111
+ width: number;
1112
+ actualTime?: number;
1113
+ actualRows?: number;
1114
+ }
1115
+ declare class QueryAnalysisTrait extends TraceManagementTrait {
1116
+ protected adapter: DatabaseAdapter;
1117
+ protected slowQueryThreshold: number;
1118
+ protected slowQueries: Array<{
1119
+ query: string;
1120
+ duration: number;
1121
+ timestamp: Date;
1122
+ params?: unknown[];
1123
+ }>;
1124
+ protected queryPlans: Map<string, QueryPlan>;
1125
+ constructor(adapter: DatabaseAdapter, slowQueryThreshold?: number, maxTraces?: number, enabled?: boolean);
1126
+ endTrace(id: string, error?: Error): void;
1127
+ explainQuery(sql: string, params?: QueryParams): Promise<QueryPlan | null>;
1128
+ protected parseExplainResult(result: Record<string, unknown>): QueryPlan | null;
1129
+ getSlowQueries(limit?: number): typeof this.slowQueries;
1130
+ reset(): void;
1131
+ }
1132
+
1133
+ interface PerformanceReport {
1134
+ slowQueries: Array<{
1135
+ query: string;
1136
+ duration: number;
1137
+ timestamp: Date;
1138
+ params?: unknown[];
1139
+ }>;
1140
+ queryPlans: any[];
1141
+ bottlenecks: Array<{
1142
+ operation: string;
1143
+ averageDuration: number;
1144
+ count: number;
1145
+ impact: number;
1146
+ }>;
1147
+ recommendations: string[];
1148
+ }
1149
+ declare class PerformanceAnalysisTrait extends QueryAnalysisTrait {
1150
+ analyzePerformance(duration?: number): Promise<PerformanceReport>;
1151
+ protected generateRecommendations(traces: any[]): string[];
1152
+ getBottlenecks(limit?: number): Array<{
1153
+ operation: string;
1154
+ avgDuration: number;
1155
+ count: number;
1156
+ }>;
1157
+ }
1158
+
1159
+ declare class AdapterWrapperTrait extends PerformanceAnalysisTrait {
1160
+ wrapAdapter(adapter: DatabaseAdapter): DatabaseAdapter;
1161
+ protected wrapMethod(adapter: any, methodName: string, operationType: string): void;
1162
+ unwrapAdapter(adapter: DatabaseAdapter): void;
1163
+ }
1164
+
1165
+ declare class ModularPerformanceMonitor extends AdapterWrapperTrait {
1166
+ constructor(adapter: DatabaseAdapter, options?: {
1167
+ slowQueryThreshold?: number;
1168
+ maxTraces?: number;
1169
+ enabled?: boolean;
1170
+ });
1171
+ }
1172
+
1173
+ type CacheKeyPattern = 'table' | 'table:id' | 'table:query' | 'table:field' | 'custom';
1174
+ interface CacheKeyOptions {
1175
+ namespace?: string;
1176
+ table?: string;
1177
+ id?: string | number;
1178
+ field?: string;
1179
+ value?: unknown;
1180
+ query?: string;
1181
+ params?: unknown[];
1182
+ parts?: string[];
1183
+ tags?: string[];
1184
+ }
1185
+ declare class CacheKeyGenerator {
1186
+ private readonly namespace;
1187
+ private readonly separator;
1188
+ private readonly hashAlgorithm;
1189
+ private readonly hashLength;
1190
+ private currentOptions;
1191
+ constructor(options?: {
1192
+ namespace?: string;
1193
+ separator?: string;
1194
+ hashAlgorithm?: string;
1195
+ hashLength?: number;
1196
+ });
1197
+ forTable(table: string): this;
1198
+ withId(id: string | number): this;
1199
+ withField(field: string, value: unknown): this;
1200
+ withTags(...tags: string[]): this;
1201
+ forQuery(sql: string, params?: unknown[]): this;
1202
+ forCustom(...parts: string[]): this;
1203
+ inNamespace(namespace: string): this;
1204
+ build(): string;
1205
+ buildWithTags(): {
1206
+ key: string;
1207
+ tags: string[];
1208
+ };
1209
+ tableId(table: string, id: string | number): string;
1210
+ tableField(table: string, field: string, value: unknown): string;
1211
+ query(sql: string, params?: unknown[]): string;
1212
+ pattern(table: string, pattern?: '*' | 'id:*' | 'field:*'): string;
1213
+ tag(tagName: string): string;
1214
+ private hashQuery;
1215
+ private hashValue;
1216
+ private hash;
1217
+ withNamespace(namespace: string): CacheKeyGenerator;
1218
+ }
1219
+ declare const cacheKey: CacheKeyGenerator;
1220
+
1221
+ interface CacheEntry<T = unknown> {
1222
+ data: T;
1223
+ cachedAt: number;
1224
+ expiresAt?: number;
1225
+ tags?: string[];
1226
+ }
1227
+ interface CacheStats {
1228
+ hits: number;
1229
+ misses: number;
1230
+ sets: number;
1231
+ deletes: number;
1232
+ invalidations: number;
1233
+ hitRate: number;
1234
+ }
1235
+ interface CacheManagerOptions {
1236
+ adapter: CacheAdapter;
1237
+ defaultTTL?: number;
1238
+ namespace?: string;
1239
+ enableStats?: boolean;
1240
+ keyPrefix?: string;
1241
+ }
1242
+ interface CacheSetOptions {
1243
+ ttl?: number;
1244
+ tags?: string[];
1245
+ skipIfExists?: boolean;
1246
+ }
1247
+ declare class CacheManager {
1248
+ private readonly adapter;
1249
+ private readonly defaultTTL;
1250
+ private readonly enableStats;
1251
+ private readonly keyPrefix;
1252
+ readonly key: CacheKeyGenerator;
1253
+ private stats;
1254
+ constructor(options: CacheManagerOptions);
1255
+ get<T = unknown>(key: string): Promise<T | null>;
1256
+ set<T = unknown>(key: string, data: T, options?: CacheSetOptions): Promise<void>;
1257
+ getOrSet<T = unknown>(key: string, fetchFn: () => Promise<T>, options?: CacheSetOptions): Promise<T>;
1258
+ delete(key: string): Promise<boolean>;
1259
+ deleteMany(keys: string[]): Promise<number>;
1260
+ exists(key: string): Promise<boolean>;
1261
+ invalidateByTag(tag: string): Promise<number>;
1262
+ invalidateByTags(tags: string[]): Promise<number>;
1263
+ invalidateTable(table: string): Promise<number>;
1264
+ invalidateRecord(table: string, id: string | number): Promise<boolean>;
1265
+ clear(): Promise<void>;
1266
+ getStats(): CacheStats;
1267
+ resetStats(): void;
1268
+ getTTL(key: string): Promise<number>;
1269
+ extendTTL(key: string, ttl: number): Promise<boolean>;
1270
+ scope(namespace: string): CacheManager;
1271
+ private getFullKey;
1272
+ private addKeyToTags;
1273
+ private recordHit;
1274
+ private recordMiss;
1275
+ private recordSet;
1276
+ private recordDelete;
1277
+ private recordInvalidation;
1278
+ }
1279
+
1280
+ interface CacheStrategy {
1281
+ shouldCache(sql: string, result: QueryResult): boolean;
1282
+ getCacheTTL(sql: string, options?: QueryCacheOptions): number;
1283
+ getCacheKey(sql: string, params?: unknown[], options?: QueryCacheOptions): string;
1284
+ getInvalidationPatterns(sql: string): string[];
1285
+ }
1286
+ interface QueryCacheOptions {
1287
+ ttl?: number;
1288
+ key?: string;
1289
+ tags?: string[];
1290
+ invalidateOn?: string[];
1291
+ compress?: boolean;
1292
+ cacheEmpty?: boolean;
1293
+ cacheErrors?: boolean;
1294
+ }
1295
+ declare class DefaultCacheStrategy implements CacheStrategy {
1296
+ private readonly cacheableCommands;
1297
+ private readonly defaultTTL;
1298
+ shouldCache(sql: string, result: QueryResult): boolean;
1299
+ getCacheTTL(sql: string, options?: QueryCacheOptions): number;
1300
+ getCacheKey(sql: string, params?: unknown[], options?: QueryCacheOptions): string;
1301
+ getInvalidationPatterns(sql: string): string[];
1302
+ protected extractTableNames(sql: string): string[];
1303
+ }
1304
+ declare class SmartCacheStrategy extends DefaultCacheStrategy {
1305
+ private queryPatterns;
1306
+ shouldCache(sql: string, result: QueryResult): boolean;
1307
+ getCacheTTL(sql: string, options?: QueryCacheOptions): number;
1308
+ recordQueryExecution(sql: string, duration: number): void;
1309
+ private normalizeQuery;
1310
+ }
1311
+
1312
+ interface CacheInvalidateOptions {
1313
+ tables?: string | string[];
1314
+ tags?: string | string[];
1315
+ }
1316
+ interface CacheWarmupQuery {
1317
+ sql: string;
1318
+ params?: unknown[];
1319
+ ttl?: number;
1320
+ tags?: string[];
1321
+ }
1322
+ interface CacheAPIStats {
1323
+ hits: number;
1324
+ misses: number;
1325
+ sets: number;
1326
+ deletes: number;
1327
+ invalidations: number;
1328
+ hitRate: number;
1329
+ size: number;
1330
+ memoryUsage?: number;
1331
+ }
1332
+ interface CacheAPIOptions {
1333
+ adapter: CacheAdapter;
1334
+ namespace?: string;
1335
+ logger?: Logger;
1336
+ onHit?: (key: string, sql: string) => void;
1337
+ onMiss?: (key: string, sql: string) => void;
1338
+ onError?: (error: Error, key: string) => void;
1339
+ }
1340
+ declare class CacheAPI {
1341
+ private adapter;
1342
+ private keyGenerator;
1343
+ private logger?;
1344
+ private stats;
1345
+ private tableKeyMap;
1346
+ private tagKeyMap;
1347
+ onHit?: (key: string, sql: string) => void;
1348
+ onMiss?: (key: string, sql: string) => void;
1349
+ onError?: (error: Error, key: string) => void;
1350
+ constructor(options: CacheAPIOptions);
1351
+ invalidate(options: CacheInvalidateOptions): Promise<number>;
1352
+ clear(): Promise<void>;
1353
+ warmup(queries: CacheWarmupQuery[], executor: (sql: string, params?: unknown[]) => Promise<unknown>): Promise<{
1354
+ success: number;
1355
+ failed: number;
1356
+ }>;
1357
+ getStats(): CacheAPIStats;
1358
+ resetStats(): void;
1359
+ get<T>(key: string): Promise<T | null>;
1360
+ set<T>(key: string, value: T, options?: {
1361
+ ttl?: number;
1362
+ tags?: string[];
1363
+ tables?: string[];
1364
+ }): Promise<void>;
1365
+ delete(key: string): Promise<boolean>;
1366
+ exists(key: string): Promise<boolean>;
1367
+ generateKey(sql: string, params?: unknown[]): string;
1368
+ key(): CacheKeyGenerator;
1369
+ private extractTables;
1370
+ private updateHitRate;
1371
+ private handleError;
1372
+ }
1373
+ interface CacheConfig {
1374
+ redis?: string | CacheAdapter;
1375
+ global?: boolean;
1376
+ ttl?: number;
1377
+ namespace?: string;
1378
+ cacheableCommands?: string[];
1379
+ autoInvalidate?: boolean;
1380
+ cacheEmpty?: boolean;
1381
+ warmup?: CacheWarmupQuery[];
1382
+ onHit?: (key: string, sql: string) => void;
1383
+ onMiss?: (key: string, sql: string) => void;
1384
+ onError?: (error: Error, key: string) => void;
1385
+ }
1386
+ interface QueryCacheConfig {
1387
+ enabled?: boolean;
1388
+ ttl?: number;
1389
+ key?: string;
1390
+ tags?: string[];
1391
+ autoInvalidate?: boolean;
1392
+ }
1393
+ type CacheOption = boolean | QueryCacheConfig;
1394
+
1395
+ interface CacheStatistics {
1396
+ hits: number;
1397
+ misses: number;
1398
+ hitRate: number;
1399
+ totalCached: number;
1400
+ totalEvicted: number;
1401
+ avgHitTime: number;
1402
+ avgMissTime: number;
1403
+ memoryUsage?: number;
1404
+ }
1405
+ declare class CacheBaseTrait extends EventEmitter {
1406
+ protected cache: CacheAdapter;
1407
+ protected logger?: Logger;
1408
+ protected enabled: boolean;
1409
+ protected statistics: CacheStatistics;
1410
+ constructor(cache: CacheAdapter, logger?: Logger, enabled?: boolean);
1411
+ enable(): void;
1412
+ disable(): void;
1413
+ isEnabled(): boolean;
1414
+ getStatistics(): CacheStatistics;
1415
+ resetStatistics(): void;
1416
+ protected updateStatistics(type: 'hit' | 'miss', duration: number): void;
1417
+ }
1418
+
1419
+ interface CachedQuery {
1420
+ key: string;
1421
+ sql: string;
1422
+ result: QueryResult;
1423
+ timestamp: Date;
1424
+ ttl: number;
1425
+ hits: number;
1426
+ tags: string[];
1427
+ size: number;
1428
+ }
1429
+ declare class CacheOperationsTrait extends CacheBaseTrait {
1430
+ protected strategy: CacheStrategy;
1431
+ protected queryCache: Map<string, CachedQuery>;
1432
+ protected tagIndex: Map<string, Set<string>>;
1433
+ setStrategy(strategy: CacheStrategy): void;
1434
+ get<T = unknown>(sql: string, params?: unknown[], options?: QueryCacheOptions): Promise<QueryResult<T> | null>;
1435
+ set<T = unknown>(sql: string, params: unknown[] | undefined, result: QueryResult<T>, options?: QueryCacheOptions): Promise<void>;
1436
+ getCachedQueries(): CachedQuery[];
1437
+ getCacheSize(): {
1438
+ entries: number;
1439
+ approximateSize: number;
1440
+ };
1441
+ protected registerInvalidation(key: string, patterns: string[]): Promise<void>;
1442
+ }
1443
+
1444
+ declare class CacheInvalidationTrait extends CacheOperationsTrait {
1445
+ invalidate(patterns: string[]): Promise<number>;
1446
+ invalidateByTable(table: string): Promise<number>;
1447
+ invalidateAll(): Promise<void>;
1448
+ }
1449
+
1450
+ declare class CacheMaintenanceTrait extends CacheInvalidationTrait {
1451
+ private cleanupInterval?;
1452
+ warmUp(queries: Array<{
1453
+ sql: string;
1454
+ params?: unknown[];
1455
+ options?: QueryCacheOptions;
1456
+ }>): Promise<void>;
1457
+ startCleanupTimer(intervalMs?: number): void;
1458
+ stopCleanupTimer(): void;
1459
+ destroy(): void;
1460
+ }
1461
+
1462
+ declare class ModularCacheManager extends CacheMaintenanceTrait {
1463
+ constructor(cache: CacheAdapter, options?: {
1464
+ strategy?: CacheStrategy;
1465
+ logger?: Logger;
1466
+ enabled?: boolean;
1467
+ });
1468
+ }
1469
+
1470
+ interface CachedAdapterOptions {
1471
+ adapter: DatabaseAdapter;
1472
+ cache: CacheAdapter;
1473
+ strategy?: CacheStrategy;
1474
+ logger?: Logger;
1475
+ enabled?: boolean;
1476
+ cacheableCommands?: string[];
1477
+ defaultTTL?: number;
1478
+ cacheEmptyResults?: boolean;
1479
+ cacheErrors?: boolean;
1480
+ warmupQueries?: Array<{
1481
+ sql: string;
1482
+ params?: unknown[];
1483
+ ttl?: number;
1484
+ }>;
1485
+ }
1486
+ declare class CachedAdapter extends EventEmitter implements DatabaseAdapter {
1487
+ private adapter;
1488
+ private cacheManager;
1489
+ private cacheableCommands;
1490
+ private defaultTTL;
1491
+ private cacheEmptyResults;
1492
+ private cacheErrors;
1493
+ private logger?;
1494
+ private warmupQueries?;
1495
+ constructor(options: CachedAdapterOptions);
1496
+ get name(): string;
1497
+ get version(): string;
1498
+ get isConnected(): boolean;
1499
+ connect(config: ConnectionConfig): Promise<void>;
1500
+ disconnect(): Promise<void>;
1501
+ query<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
1502
+ beginTransaction(options?: TransactionOptions): Promise<Transaction>;
1503
+ prepare<T = unknown>(sql: string, name?: string): Promise<PreparedStatement<T>>;
1504
+ getPoolStats(): PoolStats;
1505
+ ping(): Promise<boolean>;
1506
+ escape(value: unknown): string;
1507
+ escapeIdentifier(identifier: string): string;
1508
+ execute<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
1509
+ createQueryBuilder<T = unknown>(): QueryBuilder<T>;
1510
+ getCacheManager(): ModularCacheManager;
1511
+ warmupCache(): Promise<void>;
1512
+ private performWarmup;
1513
+ private shouldCache;
1514
+ private shouldCacheResult;
1515
+ private extractCommand;
1516
+ private isWriteCommand;
1517
+ private invalidateRelatedCache;
1518
+ private extractTableNames;
1519
+ }
1520
+ declare function createCachedAdapter(adapter: DatabaseAdapter, cache: CacheAdapter, options?: Partial<CachedAdapterOptions>): CachedAdapter;
1521
+
1522
+ interface DialectConfig {
1523
+ identifierQuote: string;
1524
+ namedParameters: boolean;
1525
+ concatOperator: string;
1526
+ booleanLiterals: {
1527
+ true: string;
1528
+ false: string;
1529
+ };
1530
+ dateFunctions: {
1531
+ now: string;
1532
+ currentDate: string;
1533
+ currentTime: string;
1534
+ dateFormat: (column: string, format: string) => string;
1535
+ };
1536
+ limitStyle: 'LIMIT_OFFSET' | 'FETCH_FIRST' | 'TOP';
1537
+ jsonOperators: {
1538
+ extract: (column: string, path: string) => string;
1539
+ contains: (column: string, value: string) => string;
1540
+ };
1541
+ }
1542
+ declare abstract class SQLDialect {
1543
+ abstract readonly name: string;
1544
+ abstract readonly config: DialectConfig;
1545
+ private parameterIndex;
1546
+ resetParameters(): void;
1547
+ abstract getParameterPlaceholder(): string;
1548
+ escapeIdentifier(identifier: string): string;
1549
+ abstract escapeValue(value: unknown): string;
1550
+ buildSelect(components: SelectComponents): BuiltSQL;
1551
+ buildInsert(components: InsertComponents): BuiltSQL;
1552
+ buildUpdate(components: UpdateComponents): BuiltSQL;
1553
+ buildDelete(components: DeleteComponents): BuiltSQL;
1554
+ protected buildWhereClause(conditions: WhereCondition[], bindings: unknown[]): string;
1555
+ protected appendLimitOffset(parts: string[], limit?: number, offset?: number): void;
1556
+ protected nextParameterIndex(): number;
1557
+ }
1558
+ interface BuiltSQL {
1559
+ sql: string;
1560
+ bindings: unknown[];
1561
+ }
1562
+ interface WhereCondition {
1563
+ type: 'AND' | 'OR';
1564
+ sql: string;
1565
+ bindings: unknown[];
1566
+ }
1567
+ interface JoinDefinition {
1568
+ type: 'INNER' | 'LEFT' | 'RIGHT' | 'FULL' | 'CROSS';
1569
+ table: string;
1570
+ alias?: string;
1571
+ condition: string;
1572
+ bindings: unknown[];
1573
+ }
1574
+ interface OrderByDefinition {
1575
+ column: string;
1576
+ direction: 'ASC' | 'DESC';
1577
+ raw?: boolean;
1578
+ }
1579
+ interface SelectComponents {
1580
+ columns: string[];
1581
+ distinct?: boolean;
1582
+ from?: string;
1583
+ fromAlias?: string;
1584
+ joins: JoinDefinition[];
1585
+ where: WhereCondition[];
1586
+ groupBy: string[];
1587
+ having?: {
1588
+ condition: string;
1589
+ bindings: unknown[];
1590
+ };
1591
+ orderBy: OrderByDefinition[];
1592
+ limit?: number;
1593
+ offset?: number;
1594
+ }
1595
+ interface InsertComponents {
1596
+ table: string;
1597
+ data: Record<string, unknown>[];
1598
+ returning?: string[];
1599
+ }
1600
+ interface UpdateComponents {
1601
+ table: string;
1602
+ data: Record<string, unknown>;
1603
+ where: WhereCondition[];
1604
+ returning?: string[];
1605
+ }
1606
+ interface DeleteComponents {
1607
+ table: string;
1608
+ where: WhereCondition[];
1609
+ returning?: string[];
1610
+ }
1611
+
1612
+ declare class MySQLDialect extends SQLDialect {
1613
+ readonly name = "mysql";
1614
+ readonly config: DialectConfig;
1615
+ getParameterPlaceholder(): string;
1616
+ escapeValue(value: unknown): string;
1617
+ buildUpsert(table: string, data: Record<string, unknown>, conflictColumns: string[]): {
1618
+ sql: string;
1619
+ bindings: unknown[];
1620
+ };
1621
+ buildReplace(table: string, data: Record<string, unknown>): {
1622
+ sql: string;
1623
+ bindings: unknown[];
1624
+ };
1625
+ getLastInsertIdSQL(): string;
1626
+ protected appendLimitOffset(parts: string[], limit?: number, offset?: number): void;
1627
+ }
1628
+
1629
+ declare class PostgreSQLDialect extends SQLDialect {
1630
+ readonly name = "postgresql";
1631
+ readonly config: DialectConfig;
1632
+ getParameterPlaceholder(): string;
1633
+ escapeValue(value: unknown): string;
1634
+ buildUpsert(table: string, data: Record<string, unknown>, conflictColumns: string[], updateColumns?: string[]): {
1635
+ sql: string;
1636
+ bindings: unknown[];
1637
+ };
1638
+ buildWithCTE(cteName: string, cteQuery: string, mainQuery: string, recursive?: boolean): string;
1639
+ buildReturning(columns: string[]): string;
1640
+ buildArrayContains(column: string, value: unknown): string;
1641
+ buildArrayOverlap(column: string, values: unknown[]): string;
1642
+ buildTextSearch(column: string, query: string, config?: string): string;
1643
+ buildJsonPath(column: string, path: string[]): string;
1644
+ buildJsonPathText(column: string, path: string[]): string;
1645
+ }
1646
+
1647
+ type DialectDatabaseType = 'mysql' | 'mariadb' | 'postgresql' | 'postgres';
1648
+ declare class DialectFactory {
1649
+ static getDialect(type: DialectDatabaseType): SQLDialect;
1650
+ static createDialect(type: DialectDatabaseType): SQLDialect;
1651
+ private static normalizeType;
1652
+ static isSupported(type: string): type is DialectDatabaseType;
1653
+ static clearCache(): void;
1654
+ }
1655
+
1656
+ interface ExecuteResult {
1657
+ affectedRows: number;
1658
+ insertId?: number | bigint;
1659
+ changedRows?: number;
1660
+ }
1661
+ interface QueryExecutor {
1662
+ query<T = unknown>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
1663
+ execute(sql: string, params?: unknown[]): Promise<ExecuteResult>;
1664
+ }
1665
+ interface QueryContextCacheConfig {
1666
+ adapter: CacheAdapter;
1667
+ defaultTTL: number;
1668
+ maxTTL: number;
1669
+ prefix: string;
1670
+ global: boolean;
1671
+ warnOnLargeResult: number;
1672
+ maxCacheableRows: number;
1673
+ logger?: {
1674
+ warn: (message: string) => void;
1675
+ };
1676
+ }
1677
+ declare class QueryContext {
1678
+ readonly dialect: SQLDialect;
1679
+ readonly executor: QueryExecutor;
1680
+ readonly crypto?: CryptoProvider | undefined;
1681
+ readonly cacheConfig?: QueryContextCacheConfig;
1682
+ constructor(dialect: SQLDialect, executor: QueryExecutor, crypto?: CryptoProvider | undefined, cacheConfig?: QueryContextCacheConfig);
1683
+ executeQuery<T>(sql: string, bindings: unknown[]): Promise<QueryResult<T>>;
1684
+ executeWrite(sql: string, bindings: unknown[]): Promise<ExecuteResult>;
1685
+ encrypt(value: string): string;
1686
+ decrypt(value: string): string;
1687
+ get hasCrypto(): boolean;
1688
+ get hasCache(): boolean;
1689
+ generateCacheKey(sql: string, bindings: unknown[]): string;
1690
+ executeCachedQuery<T>(sql: string, bindings: unknown[], options?: {
1691
+ ttl?: number;
1692
+ key?: string;
1693
+ }): Promise<QueryResult<T>>;
1694
+ invalidateCache(pattern?: string): Promise<void>;
1695
+ }
1696
+
1697
+ interface CacheOptions {
1698
+ ttl?: number;
1699
+ key?: string;
1700
+ tags?: string[];
1701
+ }
1702
+ interface CacheState {
1703
+ enabled: boolean;
1704
+ ttl?: number;
1705
+ key?: string;
1706
+ tags?: string[];
1707
+ }
1708
+
1709
+ declare class SelectBuilder<T = unknown> {
1710
+ private readonly ctx;
1711
+ private _columns;
1712
+ private _distinct;
1713
+ private _table?;
1714
+ private _tableAlias?;
1715
+ private _joins;
1716
+ private _groupBy;
1717
+ private _having?;
1718
+ private _orderBy;
1719
+ private _limit?;
1720
+ private _offset?;
1721
+ private _whereBuilder;
1722
+ private _encryptFields;
1723
+ private _decryptFields;
1724
+ private _cacheEnabled;
1725
+ private _cacheTTL?;
1726
+ private _cacheKey?;
1727
+ private _cacheTags?;
1728
+ constructor(ctx: QueryContext);
1729
+ select(...columns: string[]): this;
1730
+ addSelect(...columns: string[]): this;
1731
+ distinct(): this;
1732
+ from(table: string, alias?: string): this;
1733
+ table(table: string, alias?: string): this;
1734
+ where(column: string, value: unknown): this;
1735
+ where(column: string, operator: string, value: unknown): this;
1736
+ where(conditions: Record<string, unknown>): this;
1737
+ orWhere(column: string, value: unknown): this;
1738
+ orWhere(column: string, operator: string, value: unknown): this;
1739
+ orWhere(conditions: Record<string, unknown>): this;
1740
+ whereNull(column: string): this;
1741
+ whereNotNull(column: string): this;
1742
+ whereIn(column: string, values: unknown[]): this;
1743
+ whereNotIn(column: string, values: unknown[]): this;
1744
+ whereBetween(column: string, from: unknown, to: unknown): this;
1745
+ whereLike(column: string, pattern: string): this;
1746
+ whereRaw(sql: string, bindings?: unknown[]): this;
1747
+ join(table: string, condition: string, bindings?: unknown[]): this;
1748
+ innerJoin(table: string, condition: string, bindings?: unknown[]): this;
1749
+ leftJoin(table: string, condition: string, bindings?: unknown[]): this;
1750
+ rightJoin(table: string, condition: string, bindings?: unknown[]): this;
1751
+ fullJoin(table: string, condition: string, bindings?: unknown[]): this;
1752
+ crossJoin(table: string): this;
1753
+ leftJoinAs(table: string, alias: string, condition: string, bindings?: unknown[]): this;
1754
+ innerJoinAs(table: string, alias: string, condition: string, bindings?: unknown[]): this;
1755
+ groupBy(...columns: string[]): this;
1756
+ having(condition: string, bindings?: unknown[]): this;
1757
+ orderBy(column: string, direction?: 'ASC' | 'DESC'): this;
1758
+ orderByDesc(column: string): this;
1759
+ orderByAsc(column: string): this;
1760
+ orderByRaw(expression: string): this;
1761
+ clearOrder(): this;
1762
+ reorder(column: string, direction?: 'ASC' | 'DESC'): this;
1763
+ limit(count: number): this;
1764
+ offset(count: number): this;
1765
+ skip(count: number): this;
1766
+ take(count: number): this;
1767
+ paginate(page: number, perPage: number): this;
1768
+ forPage(page: number, perPage?: number): this;
1769
+ encrypt(...fields: string[]): this;
1770
+ decrypt(...fields: string[]): this;
1771
+ cache(options?: number | CacheOptions): this;
1772
+ noCache(): this;
1773
+ cacheTTL(seconds: number): this;
1774
+ cacheKey(key: string): this;
1775
+ cacheTags(...tags: string[]): this;
1776
+ getCacheState(): CacheState;
1777
+ toSQL(): {
1778
+ sql: string;
1779
+ bindings: unknown[];
1780
+ };
1781
+ get(): Promise<T[]>;
1782
+ first(): Promise<T | null>;
1783
+ firstOrFail(): Promise<T>;
1784
+ sole(): Promise<T>;
1785
+ count(column?: string): Promise<number>;
1786
+ exists(): Promise<boolean>;
1787
+ doesntExist(): Promise<boolean>;
1788
+ aggregate(fn: 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT', column: string): Promise<number | null>;
1789
+ sum(column: string): Promise<number | null>;
1790
+ avg(column: string): Promise<number | null>;
1791
+ min(column: string): Promise<number | null>;
1792
+ max(column: string): Promise<number | null>;
1793
+ pluck<V = unknown>(column: string): Promise<V[]>;
1794
+ pluckKeyValue<K extends string | number, V = unknown>(valueColumn: string, keyColumn: string): Promise<Map<K, V>>;
1795
+ chunk(size: number, callback: (rows: T[], chunkNumber: number) => Promise<boolean | void> | boolean | void): Promise<void>;
1796
+ lazy(chunkSize?: number): AsyncGenerator<T, void, unknown>;
1797
+ private processResults;
1798
+ clone(): SelectBuilder<T>;
1799
+ dump(): this;
1800
+ dd(): Promise<T[]>;
1801
+ }
1802
+
1803
+ declare class InsertBuilder<T = unknown> {
1804
+ private readonly ctx;
1805
+ private _table?;
1806
+ private _data;
1807
+ private _returning;
1808
+ private _encryptFields;
1809
+ private _ignore;
1810
+ constructor(ctx: QueryContext);
1811
+ into(table: string): this;
1812
+ table(table: string): this;
1813
+ values(data: Record<string, unknown> | Record<string, unknown>[]): this;
1814
+ encrypt(...fields: string[]): this;
1815
+ returning(...columns: string[]): this;
1816
+ ignore(): this;
1817
+ toSQL(): {
1818
+ sql: string;
1819
+ bindings: unknown[];
1820
+ };
1821
+ execute(): Promise<ExecuteResult>;
1822
+ getInsertId(): Promise<number | bigint | undefined>;
1823
+ getInserted<R = T>(): Promise<R | null>;
1824
+ private processDataForEncryption;
1825
+ }
1826
+
1827
+ declare class UpdateBuilder<T = unknown> {
1828
+ private readonly ctx;
1829
+ private _table?;
1830
+ private _data;
1831
+ private _whereBuilder;
1832
+ private _returning;
1833
+ private _encryptFields;
1834
+ constructor(ctx: QueryContext);
1835
+ table(table: string): this;
1836
+ set(data: Record<string, unknown>): this;
1837
+ encrypt(...fields: string[]): this;
1838
+ returning(...columns: string[]): this;
1839
+ where(column: string, value: unknown): this;
1840
+ where(column: string, operator: string, value: unknown): this;
1841
+ where(conditions: Record<string, unknown>): this;
1842
+ orWhere(column: string, value: unknown): this;
1843
+ orWhere(column: string, operator: string, value: unknown): this;
1844
+ orWhere(conditions: Record<string, unknown>): this;
1845
+ whereNull(column: string): this;
1846
+ whereNotNull(column: string): this;
1847
+ whereIn(column: string, values: unknown[]): this;
1848
+ whereNotIn(column: string, values: unknown[]): this;
1849
+ whereBetween(column: string, from: unknown, to: unknown): this;
1850
+ whereLike(column: string, pattern: string): this;
1851
+ whereRaw(sql: string, bindings?: unknown[]): this;
1852
+ toSQL(): {
1853
+ sql: string;
1854
+ bindings: unknown[];
1855
+ };
1856
+ execute(): Promise<ExecuteResult>;
1857
+ getAffectedRows(): Promise<number>;
1858
+ getUpdated<R = T>(): Promise<R | null>;
1859
+ getAllUpdated<R = T>(): Promise<R[]>;
1860
+ private processDataForEncryption;
1861
+ }
1862
+
1863
+ declare class DeleteBuilder<T = unknown> {
1864
+ private readonly ctx;
1865
+ private _table?;
1866
+ private _whereBuilder;
1867
+ private _returning;
1868
+ private _force;
1869
+ constructor(ctx: QueryContext);
1870
+ from(table: string): this;
1871
+ table(table: string): this;
1872
+ returning(...columns: string[]): this;
1873
+ force(): this;
1874
+ where(column: string, value: unknown): this;
1875
+ where(column: string, operator: string, value: unknown): this;
1876
+ where(conditions: Record<string, unknown>): this;
1877
+ orWhere(column: string, value: unknown): this;
1878
+ orWhere(column: string, operator: string, value: unknown): this;
1879
+ orWhere(conditions: Record<string, unknown>): this;
1880
+ whereNull(column: string): this;
1881
+ whereNotNull(column: string): this;
1882
+ whereIn(column: string, values: unknown[]): this;
1883
+ whereNotIn(column: string, values: unknown[]): this;
1884
+ whereBetween(column: string, from: unknown, to: unknown): this;
1885
+ whereLike(column: string, pattern: string): this;
1886
+ whereRaw(sql: string, bindings?: unknown[]): this;
1887
+ toSQL(): {
1888
+ sql: string;
1889
+ bindings: unknown[];
1890
+ };
1891
+ execute(): Promise<ExecuteResult>;
1892
+ getAffectedRows(): Promise<number>;
1893
+ getDeleted<R = T>(): Promise<R | null>;
1894
+ getAllDeleted<R = T>(): Promise<R[]>;
1895
+ truncate(): Promise<void>;
1896
+ }
1897
+
1898
+ type WhereConditionInput = {
1899
+ type: 'simple';
1900
+ column: string;
1901
+ operator: string;
1902
+ value: unknown;
1903
+ } | {
1904
+ type: 'object';
1905
+ data: Record<string, unknown>;
1906
+ } | {
1907
+ type: 'raw';
1908
+ sql: string;
1909
+ bindings: unknown[];
1910
+ } | {
1911
+ type: 'null';
1912
+ column: string;
1913
+ not: boolean;
1914
+ } | {
1915
+ type: 'in';
1916
+ column: string;
1917
+ values: unknown[];
1918
+ not: boolean;
1919
+ } | {
1920
+ type: 'between';
1921
+ column: string;
1922
+ from: unknown;
1923
+ to: unknown;
1924
+ not: boolean;
1925
+ } | {
1926
+ type: 'like';
1927
+ column: string;
1928
+ pattern: string;
1929
+ not: boolean;
1930
+ };
1931
+ declare class WhereBuilder {
1932
+ private readonly dialect;
1933
+ private conditions;
1934
+ constructor(dialect: SQLDialect);
1935
+ where(column: string, value: unknown): this;
1936
+ where(column: string, operator: string, value: unknown): this;
1937
+ where(conditions: Record<string, unknown>): this;
1938
+ orWhere(column: string, value: unknown): this;
1939
+ orWhere(column: string, operator: string, value: unknown): this;
1940
+ orWhere(conditions: Record<string, unknown>): this;
1941
+ whereNull(column: string): this;
1942
+ whereNotNull(column: string): this;
1943
+ whereIn(column: string, values: unknown[]): this;
1944
+ whereNotIn(column: string, values: unknown[]): this;
1945
+ whereBetween(column: string, from: unknown, to: unknown): this;
1946
+ whereNotBetween(column: string, from: unknown, to: unknown): this;
1947
+ whereLike(column: string, pattern: string): this;
1948
+ whereNotLike(column: string, pattern: string): this;
1949
+ whereRaw(sql: string, bindings?: unknown[]): this;
1950
+ build(): WhereCondition[];
1951
+ hasConditions(): boolean;
1952
+ clear(): void;
1953
+ clone(): WhereBuilder;
1954
+ private cloneInput;
1955
+ private parseWhereArgs;
1956
+ private buildCondition;
1957
+ private buildSimpleCondition;
1958
+ private buildObjectCondition;
1959
+ private buildInCondition;
1960
+ private buildBetweenCondition;
1961
+ }
1962
+
1963
+ interface QueryBuilderCacheConfig {
1964
+ adapter: CacheAdapter;
1965
+ defaultTTL?: number;
1966
+ maxTTL?: number;
1967
+ prefix?: string;
1968
+ global?: boolean;
1969
+ warnOnLargeResult?: number;
1970
+ maxCacheableRows?: number;
1971
+ logger?: {
1972
+ warn: (message: string) => void;
1973
+ };
1974
+ }
1975
+ interface ModularQueryBuilderOptions {
1976
+ dialect: SQLDialect;
1977
+ executor: QueryExecutor;
1978
+ crypto?: CryptoProvider;
1979
+ cache?: QueryBuilderCacheConfig;
1980
+ }
1981
+ interface ModularQueryBuilder {
1982
+ select<T = unknown>(...columns: string[]): SelectBuilder<T>;
1983
+ insert<T = unknown>(): InsertBuilder<T>;
1984
+ update<T = unknown>(): UpdateBuilder<T>;
1985
+ delete<T = unknown>(): DeleteBuilder<T>;
1986
+ getContext(): QueryContext;
1987
+ raw<T = unknown>(sql: string, bindings?: unknown[]): Promise<T[]>;
1988
+ rawExecute(sql: string, bindings?: unknown[]): Promise<{
1989
+ affectedRows: number;
1990
+ }>;
1991
+ table<T = unknown>(name: string, alias?: string): SelectBuilder<T>;
1992
+ }
1993
+ declare function createModularQueryBuilder(options: ModularQueryBuilderOptions): ModularQueryBuilder;
1994
+ type InferQueryResult<T> = T extends SelectBuilder<infer R> ? R : never;
1995
+
1996
+ interface TransactionConnection {
1997
+ release(): void | Promise<void>;
1998
+ }
1999
+ declare abstract class BaseTransaction<TConnection extends TransactionConnection> implements Transaction {
2000
+ protected readonly connection: TConnection;
2001
+ protected readonly options?: TransactionOptions | undefined;
2002
+ readonly id: string;
2003
+ protected _isActive: boolean;
2004
+ protected readonly savepoints: Set<string>;
2005
+ constructor(connection: TConnection, options?: TransactionOptions | undefined);
2006
+ get isActive(): boolean;
2007
+ begin(): Promise<void>;
2008
+ commit(): Promise<void>;
2009
+ rollback(): Promise<void>;
2010
+ savepoint(name: string): Promise<void>;
2011
+ releaseSavepoint(name: string): Promise<void>;
2012
+ rollbackToSavepoint(name: string): Promise<void>;
2013
+ query<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
2014
+ execute<T = unknown>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
2015
+ getConnection(): TConnection;
2016
+ protected abstract doBegin(): Promise<void>;
2017
+ protected abstract doCommit(): Promise<void>;
2018
+ protected abstract doRollback(): Promise<void>;
2019
+ protected abstract doSavepoint(name: string): Promise<void>;
2020
+ protected abstract doReleaseSavepoint(name: string): Promise<void>;
2021
+ protected abstract doRollbackToSavepoint(name: string): Promise<void>;
2022
+ protected abstract doQuery<T>(sql: string, params?: QueryParams, options?: QueryOptions): Promise<QueryResult<T>>;
2023
+ protected abstract setIsolationLevel(level: IsolationLevel): Promise<void>;
2024
+ protected abstract escapeIdentifier(identifier: string): string;
2025
+ protected applyTransactionOptions(): Promise<void>;
2026
+ protected releaseConnection(): Promise<void>;
2027
+ protected ensureActive(operation: string): void;
2028
+ protected ensureSavepointExists(name: string): void;
2029
+ protected validateSavepointName(name: string): void;
2030
+ protected sanitizeSavepointName(name: string): string;
2031
+ protected removeNewerSavepoints(name: string): void;
2032
+ protected normalizeParams(params?: QueryParams): unknown[];
2033
+ }
2034
+
2035
+ interface QueryMiddlewareContext {
2036
+ sql: string;
2037
+ params: unknown[];
2038
+ options?: QueryOptions;
2039
+ startTime: number;
2040
+ metadata: Record<string, unknown>;
2041
+ }
2042
+ interface QueryMiddlewareResult<T = unknown> {
2043
+ result: QueryResult<T>;
2044
+ cached?: boolean;
2045
+ retries?: number;
2046
+ duration?: number;
2047
+ }
2048
+ type NextMiddleware<T = unknown> = (context: QueryMiddlewareContext) => Promise<QueryMiddlewareResult<T>>;
2049
+ type QueryMiddleware<T = unknown> = (context: QueryMiddlewareContext, next: NextMiddleware<T>) => Promise<QueryMiddlewareResult<T>>;
2050
+ interface MiddlewareConfig {
2051
+ name: string;
2052
+ enabled?: boolean;
2053
+ order?: number;
2054
+ }
2055
+ interface CacheMiddlewareOptions {
2056
+ adapter: MiddlewareCacheAdapter;
2057
+ defaultTTL?: number;
2058
+ keyPrefix?: string;
2059
+ shouldCache?: (sql: string, params: unknown[]) => boolean;
2060
+ }
2061
+ interface RetryMiddlewareOptions {
2062
+ maxRetries?: number;
2063
+ baseDelay?: number;
2064
+ maxDelay?: number;
2065
+ retryOn?: (error: Error) => boolean;
2066
+ backoffMultiplier?: number;
2067
+ }
2068
+ interface TimeoutMiddlewareOptions {
2069
+ defaultTimeout?: number;
2070
+ onTimeout?: (sql: string, elapsed: number) => void;
2071
+ }
2072
+ interface LoggingMiddlewareOptions {
2073
+ logger?: MiddlewareLogger;
2074
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
2075
+ logParams?: boolean;
2076
+ logResults?: boolean;
2077
+ slowQueryThreshold?: number;
2078
+ }
2079
+ interface MiddlewareLogger {
2080
+ debug(message: string, ...args: unknown[]): void;
2081
+ info(message: string, ...args: unknown[]): void;
2082
+ warn(message: string, ...args: unknown[]): void;
2083
+ error(message: string, ...args: unknown[]): void;
2084
+ }
2085
+ interface MiddlewareCacheAdapter {
2086
+ get<T>(key: string): Promise<T | null>;
2087
+ set<T>(key: string, value: T, ttl?: number): Promise<void>;
2088
+ delete(key: string): Promise<void>;
2089
+ has(key: string): Promise<boolean>;
2090
+ }
2091
+
2092
+ declare class MiddlewareChain<T = unknown> {
2093
+ private middlewares;
2094
+ use(middleware: QueryMiddleware<T>): this;
2095
+ remove(middleware: QueryMiddleware<T>): this;
2096
+ clear(): this;
2097
+ get length(): number;
2098
+ execute(context: QueryMiddlewareContext, finalHandler: NextMiddleware<T>): Promise<QueryMiddlewareResult<T>>;
2099
+ static createContext(sql: string, params: unknown[], options?: QueryMiddlewareContext['options']): QueryMiddlewareContext;
2100
+ }
2101
+ declare function composeMiddleware<T = unknown>(...middlewares: QueryMiddleware<T>[]): QueryMiddleware<T>;
2102
+
2103
+ declare function createCacheMiddleware<T = unknown>(options: CacheMiddlewareOptions): QueryMiddleware<T>;
2104
+ declare function createCacheInvalidationMiddleware<T = unknown>(_adapter: MiddlewareCacheAdapter, _keyPrefix?: string): QueryMiddleware<T>;
2105
+
2106
+ declare function createRetryMiddleware<T = unknown>(options?: RetryMiddlewareOptions): QueryMiddleware<T>;
2107
+ declare function createCircuitBreakerMiddleware<T = unknown>(options?: {
2108
+ failureThreshold?: number;
2109
+ resetTimeout?: number;
2110
+ halfOpenRequests?: number;
2111
+ }): QueryMiddleware<T>;
2112
+
2113
+ declare function createTimeoutMiddleware<T = unknown>(options?: TimeoutMiddlewareOptions): QueryMiddleware<T>;
2114
+ declare function createDeadlineMiddleware<T = unknown>(options?: {
2115
+ getDeadline?: (context: QueryMiddlewareContext) => number | undefined;
2116
+ }): QueryMiddleware<T>;
2117
+
2118
+ declare function createLoggingMiddleware<T = unknown>(options?: LoggingMiddlewareOptions): QueryMiddleware<T>;
2119
+ declare function createMetricsMiddleware<T = unknown>(options?: {
2120
+ onQuery?: (metrics: MiddlewareQueryMetrics) => void;
2121
+ buckets?: number[];
2122
+ }): QueryMiddleware<T>;
2123
+ interface MiddlewareQueryMetrics {
2124
+ sql: string;
2125
+ duration: number;
2126
+ success: boolean;
2127
+ cached: boolean;
2128
+ rowCount: number;
2129
+ retries: number;
2130
+ bucket: number;
2131
+ timestamp: Date;
2132
+ }
2133
+
2134
+ interface ClientOptions {
2135
+ provider: 'mysql' | 'postgresql' | 'postgres';
2136
+ url?: string;
2137
+ connection?: ConnectionConfig & {
2138
+ poolMin?: number;
2139
+ poolMax?: number;
2140
+ poolIdleTimeout?: number;
2141
+ poolAcquireTimeout?: number;
2142
+ charset?: string;
2143
+ timezone?: string;
2144
+ multipleStatements?: boolean;
2145
+ dateStrings?: boolean;
2146
+ supportBigNumbers?: boolean;
2147
+ bigNumberStrings?: boolean;
2148
+ schema?: string;
2149
+ searchPath?: string[];
2150
+ statement_timeout?: number;
2151
+ query_timeout?: number;
2152
+ application_name?: string;
2153
+ };
2154
+ cache?: boolean | {
2155
+ provider: 'redis';
2156
+ url?: string;
2157
+ connection?: ConnectionConfig & {
2158
+ db?: number;
2159
+ sentinels?: Array<{
2160
+ host: string;
2161
+ port: number;
2162
+ }>;
2163
+ name?: string;
2164
+ sentinelPassword?: string;
2165
+ retryStrategy?: (times: number) => number;
2166
+ maxRetriesPerRequest?: number;
2167
+ enableReadyCheck?: boolean;
2168
+ enableOfflineQueue?: boolean;
2169
+ cluster?: Array<{
2170
+ host: string;
2171
+ port: number;
2172
+ }>;
2173
+ };
2174
+ };
2175
+ encryption?: boolean | {
2176
+ algorithm?: string;
2177
+ key?: string;
2178
+ keyRotationInterval?: number;
2179
+ autoEncryptFields?: Record<string, string[]>;
2180
+ };
2181
+ logger?: boolean | Console | {
2182
+ level?: string;
2183
+ prettyPrint?: boolean;
2184
+ customLogger?: (level: string, message: string, meta?: any) => void;
2185
+ };
2186
+ monitoring?: {
2187
+ enabled?: boolean;
2188
+ slowQueryThreshold?: number;
2189
+ captureStackTrace?: boolean;
2190
+ metricsCollector?: (metric: any) => void;
2191
+ };
2192
+ healthCheck?: {
2193
+ enabled?: boolean;
2194
+ interval?: number;
2195
+ timeout?: number;
2196
+ retries?: number;
2197
+ };
2198
+ multiTenant?: {
2199
+ enabled?: boolean;
2200
+ tenantIdField?: string;
2201
+ tenantIdHeader?: string;
2202
+ isolationLevel?: 'schema' | 'database' | 'row';
2203
+ tenantResolver?: (context: any) => Promise<string>;
2204
+ };
2205
+ migrations?: {
2206
+ directory?: string;
2207
+ tableName?: string;
2208
+ strategy?: 'safe' | 'force' | 'dry-run';
2209
+ beforeMigrate?: (migration: any) => Promise<void>;
2210
+ afterMigrate?: (migration: any) => Promise<void>;
2211
+ rollbackOnError?: boolean;
2212
+ validateChecksum?: boolean;
2213
+ };
2214
+ typeMappings?: {
2215
+ pg_to_js?: Record<string, (value: any) => any>;
2216
+ js_to_pg?: Record<string, (value: any) => any>;
2217
+ };
2218
+ poolSize?: number;
2219
+ ssl?: boolean | any;
2220
+ }
2221
+ declare class DBBridge$2 {
2222
+ private static instances;
2223
+ private adapter;
2224
+ private connected;
2225
+ readonly options: ClientOptions;
2226
+ constructor(options: ClientOptions);
2227
+ static create(options: ClientOptions): DBBridge$2;
2228
+ static getInstance(name: string, options?: ClientOptions): DBBridge$2;
2229
+ static fromUrl(url: string, options?: Partial<ClientOptions>): DBBridge$2;
2230
+ private static parseProvider;
2231
+ private createAdapter;
2232
+ private parseConnectionUrl;
2233
+ connect(): Promise<void>;
2234
+ from<T = any>(table: string, alias?: string): QueryBuilder<T>;
2235
+ query<T = any>(sql: string, params?: any[]): Promise<QueryResult<T>>;
2236
+ insert<T = any>(table: string, data: Record<string, any> | Record<string, any>[]): Promise<QueryResult<T>>;
2237
+ update<T = any>(table: string, data: Record<string, any>, where: Record<string, any>): Promise<QueryResult<T>>;
2238
+ delete<T = any>(table: string, where: Record<string, any>): Promise<QueryResult<T>>;
2239
+ transaction(): Promise<Transaction>;
2240
+ disconnect(): Promise<void>;
2241
+ getAdapter(): DatabaseAdapter;
2242
+ isConnected(): boolean;
2243
+ ping(): Promise<boolean>;
2244
+ }
2245
+
2246
+ declare enum DatabaseType$2 {
2247
+ MySQL = "mysql",
2248
+ PostgreSQL = "postgresql",
2249
+ Postgres = "postgres",
2250
+ Redis = "redis"
2251
+ }
2252
+ type DatabaseTypeString = 'mysql' | 'postgresql' | 'postgres' | 'redis';
2253
+ interface DBBridgeConfig$1 {
2254
+ type: DatabaseType$2 | DatabaseTypeString;
2255
+ connection: ConnectionConfig;
2256
+ options?: {
2257
+ logging?: boolean;
2258
+ logger?: any;
2259
+ autoConnect?: boolean;
2260
+ pool?: {
2261
+ min?: number;
2262
+ max?: number;
2263
+ };
2264
+ };
2265
+ }
2266
+ declare class DBBridge$1 {
2267
+ private adapter?;
2268
+ private readonly config;
2269
+ private _dialect?;
2270
+ private _queryBuilder?;
2271
+ constructor(config: DBBridgeConfig$1);
2272
+ static mysql(connection: ConnectionConfig, options?: any): DBBridge$1;
2273
+ static createMySQL(connection: ConnectionConfig, options?: any, autoConnect?: boolean): Promise<DBBridge$1>;
2274
+ static postgresql(connection: ConnectionConfig, options?: any): DBBridge$1;
2275
+ static createPostgreSQL(connection: ConnectionConfig, options?: any, autoConnect?: boolean): Promise<DBBridge$1>;
2276
+ static redis(connection?: ConnectionConfig, options?: any): DBBridge$1;
2277
+ static createRedis(connection?: ConnectionConfig, options?: any, autoConnect?: boolean): Promise<DBBridge$1>;
2278
+ static create(config: DBBridgeConfig$1, autoConnect?: boolean): Promise<DBBridge$1>;
2279
+ connect(): Promise<void>;
2280
+ private loadAdapter;
2281
+ private loadRedisAdapter;
2282
+ private loadMySQLAdapter;
2283
+ private loadPostgreSQLAdapter;
2284
+ disconnect(): Promise<void>;
2285
+ query<T = any>(sql: string, params?: any[]): Promise<{
2286
+ rows: T[];
2287
+ fields?: any[];
2288
+ }>;
2289
+ execute(sql: string, params?: any[]): Promise<any>;
2290
+ table<T = any>(tableName: string): QueryBuilder<T>;
2291
+ private configureQueryBuilder;
2292
+ from<T = any>(tableName: string): QueryBuilder<T>;
2293
+ transaction<T>(callback: (trx: any) => Promise<T>): Promise<T>;
2294
+ prepare(sql: string, options?: any): Promise<any>;
2295
+ private ensureConnected;
2296
+ getAdapter(): DatabaseAdapter | undefined;
2297
+ getDialect(): SQLDialect;
2298
+ qb(): ModularQueryBuilder;
2299
+ getDatabaseType(): DatabaseType$2 | DatabaseTypeString;
2300
+ }
2301
+
2302
+ type DatabaseType$1 = 'mysql' | 'postgresql' | 'postgres' | 'redis';
2303
+ interface CachedDBBridgeConfig {
2304
+ type: DatabaseType$1;
2305
+ host?: string;
2306
+ port?: number;
2307
+ user?: string;
2308
+ password?: string;
2309
+ database?: string;
2310
+ connectionString?: string;
2311
+ cache?: CacheConfig;
2312
+ options?: {
2313
+ logging?: boolean;
2314
+ logger?: any;
2315
+ pool?: {
2316
+ min?: number;
2317
+ max?: number;
2318
+ };
2319
+ };
2320
+ }
2321
+ declare class CacheableQuery<T = unknown> implements PromiseLike<QueryResult<T>> {
2322
+ private readonly sql;
2323
+ private readonly params;
2324
+ private readonly executor;
2325
+ private executed;
2326
+ private cacheConfig;
2327
+ private result;
2328
+ constructor(sql: string, params: QueryParams | undefined, executor: (sql: string, params?: QueryParams, cache?: QueryCacheConfig | null) => Promise<QueryResult<T>>, globalCache: boolean);
2329
+ $withCache(options?: boolean | QueryCacheConfig): this;
2330
+ cache(options?: boolean | QueryCacheConfig): this;
2331
+ execute(): Promise<QueryResult<T>>;
2332
+ then<TResult1 = QueryResult<T>, TResult2 = never>(onfulfilled?: ((value: QueryResult<T>) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
2333
+ }
2334
+ declare class CachedDBBridge extends EventEmitter {
2335
+ private adapter?;
2336
+ private cacheAdapter?;
2337
+ private cacheAPI?;
2338
+ private keyGenerator;
2339
+ private readonly config;
2340
+ constructor(config: CachedDBBridgeConfig);
2341
+ static mysql(config: Omit<CachedDBBridgeConfig, 'type'> & {
2342
+ host?: string;
2343
+ port?: number;
2344
+ user?: string;
2345
+ password?: string;
2346
+ database?: string;
2347
+ }): CachedDBBridge;
2348
+ static postgresql(config: Omit<CachedDBBridgeConfig, 'type'> & {
2349
+ host?: string;
2350
+ port?: number;
2351
+ user?: string;
2352
+ password?: string;
2353
+ database?: string;
2354
+ }): CachedDBBridge;
2355
+ static postgres(config: Omit<CachedDBBridgeConfig, 'type'>): CachedDBBridge;
2356
+ get $cache(): {
2357
+ invalidate: CacheAPI['invalidate'];
2358
+ clear: CacheAPI['clear'];
2359
+ warmup: (queries: Array<{
2360
+ sql: string;
2361
+ params?: unknown[];
2362
+ ttl?: number;
2363
+ }>) => Promise<{
2364
+ success: number;
2365
+ failed: number;
2366
+ }>;
2367
+ stats: () => ReturnType<CacheAPI['getStats']>;
2368
+ resetStats: () => void;
2369
+ key: () => CacheKeyGenerator;
2370
+ };
2371
+ get isCacheEnabled(): boolean;
2372
+ connect(): Promise<void>;
2373
+ disconnect(): Promise<void>;
2374
+ query<T = unknown>(sql: string, params?: QueryParams): CacheableQuery<T>;
2375
+ execute<T = unknown>(sql: string, params?: QueryParams): Promise<QueryResult<T>>;
2376
+ table<T = unknown>(tableName: string): QueryBuilder<T>;
2377
+ from<T = unknown>(tableName: string): QueryBuilder<T>;
2378
+ transaction<T>(callback: (trx: Transaction) => Promise<T>, options?: TransactionOptions): Promise<T>;
2379
+ getAdapter(): DatabaseAdapter | undefined;
2380
+ getCacheAdapter(): CacheAdapter | undefined;
2381
+ ping(): Promise<boolean>;
2382
+ get isConnected(): boolean;
2383
+ private setupCache;
2384
+ private loadAdapter;
2385
+ private loadMySQLAdapter;
2386
+ private loadPostgreSQLAdapter;
2387
+ private loadRedisAdapter;
2388
+ private configureQueryBuilder;
2389
+ private ensureConnected;
2390
+ private extractTables;
2391
+ }
2392
+
2393
+ type DatabaseType = 'mysql' | 'postgresql' | 'postgres';
2394
+ interface DBBridgeConfig {
2395
+ type: DatabaseType;
2396
+ connection: ConnectionConfig;
2397
+ options?: {
2398
+ logging?: boolean;
2399
+ logger?: any;
2400
+ pool?: {
2401
+ min?: number;
2402
+ max?: number;
2403
+ };
2404
+ };
2405
+ }
2406
+ interface AdapterFactory {
2407
+ createAdapter(config: DBBridgeConfig): DatabaseAdapter;
2408
+ }
2409
+ declare function registerAdapterFactory(type: DatabaseType, factory: AdapterFactory): void;
2410
+ declare function createAdapter(config: DBBridgeConfig): DatabaseAdapter;
2411
+ declare class DBBridge {
2412
+ private adapter?;
2413
+ private readonly config;
2414
+ constructor(config: DBBridgeConfig);
2415
+ static mysql(connection: ConnectionConfig, options?: any): DBBridge;
2416
+ static postgresql(connection: ConnectionConfig, options?: any): DBBridge;
2417
+ connect(): Promise<void>;
2418
+ disconnect(): Promise<void>;
2419
+ query<T = any>(sql: string, params?: any[]): Promise<{
2420
+ rows: T[];
2421
+ fields?: any[];
2422
+ }>;
2423
+ execute(sql: string, params?: any[]): Promise<any>;
2424
+ table<T = any>(tableName: string): QueryBuilder<T>;
2425
+ private configureQueryBuilder;
2426
+ from<T = any>(tableName: string): QueryBuilder<T>;
2427
+ transaction<T>(callback: (trx: any) => Promise<T>): Promise<T>;
2428
+ prepare(sql: string, options?: any): Promise<any>;
2429
+ private ensureConnected;
2430
+ getAdapter(): DatabaseAdapter | undefined;
2431
+ }
2432
+
2433
+ export { ANALYSIS_DEFAULTS, type AdapterFactory, type AggregateContext, type AggregateFunction, BaseAdapter, type BaseAdapterOptions, BaseQueryBuilder, BaseTransaction, type BetweenOperator, CACHE_DEFAULTS, CONNECTION_DEFAULTS, CRYPTO_DEFAULTS, CacheAPI, type CacheAPIOptions, type CacheAPIStats, type CacheAdapter, type CacheConfig, type CacheEntry, CacheError, type CacheInvalidateOptions, CacheKeyGenerator, type CacheKeyOptions, type CacheKeyPattern, CacheManager, type CacheManagerOptions, type CacheMiddlewareOptions, type CacheOption, type CacheOptions$1 as CacheOptions, type CacheSetOptions, type CacheStats, type CacheStrategy, type CacheWarmupQuery, CacheableQuery, CachedAdapter, type CachedAdapterOptions, CachedDBBridge, type CachedDBBridgeConfig, DBBridge$2 as Client, type ClientOptions, type ColumnDefinition, type ColumnName, type ComparisonOperator, type CompressionOptions, type ConnectionConfig, ConnectionError, type ConnectionMetrics, type ConnectionStringConfig, type CryptoAlgorithm, CryptoAlgorithms, type CryptoConfig, CryptoProvider, type CursorPaginationResult, DBBridge$1 as DBBridge, type DBBridgeConfig$1 as DBBridgeConfig, DBBridgeError, DBBridge as DBBridgeFactory, DEFAULT_POOL_CONFIG, DEFAULT_TIMEOUTS, DURATION_BUCKETS, type DatabaseAdapter, DatabaseError, DatabaseType$2 as DatabaseType, type DateFilterContext, type DeepPartial, type DeepRequired, DefaultCacheStrategy, DeleteBuilder, type DeleteResult, type DialectConfig, type DialectDatabaseType, DialectFactory, type EncryptedData, type EncryptionContext, type EncryptionOptions, type ExecuteResult, type ExtractRow, type FieldInfo, type FieldType, HEALTH_DEFAULTS, type HealthCheckOptions, type HealthCheckResult, HealthChecker, type HostConnectionConfig, ISOLATION_LEVELS, type InOperator, type InferQueryResult, InsertBuilder, type InsertData, type InsertResult, IsolationLevel, type JoinClause, type JoinType, LOGGING_DEFAULTS, type LikeOperator, type LogLevel, type Logger, type LoggingMiddlewareOptions, MetricsCollector, type MetricsSnapshot, type MiddlewareCacheAdapter, MiddlewareChain, type MiddlewareConfig, type MiddlewareLogger, type MiddlewareQueryMetrics, type Migration, type MigrationHistory, MigrationRunner, type MigrationRunnerOptions, ModularCacheManager, ModularPerformanceMonitor, type ModularQueryBuilder, type ModularQueryBuilderOptions, MySQLDialect, type NextMiddleware, NotImplementedError, type NullOperator, type Nullable, type OptionalKeys, type OrderByClause, type OrderDirection, POOL_DEFAULTS, POOL_DEFAULTS_LEGACY, type PaginationContext, type PaginationResult, type PaginationState, PerformanceMonitor, type PerformanceReport$1 as PerformanceReport, type PerformanceTrace$1 as PerformanceTrace, type PoolConfig, PoolExhaustedError, type PoolStats, PostgreSQLDialect, type PreparedStatement, QUERY_DEFAULTS, type QueryBuilder, type QueryBuilderCacheConfig, type QueryBuilderOptions, type QueryCacheConfig, type QueryCacheOptions, QueryContext, type QueryContextCacheConfig, QueryError, type QueryExecutor, type QueryMetrics, type QueryMiddleware, type QueryMiddlewareContext, type QueryMiddlewareResult, type QueryOptions, type QueryParams, type QueryPlan$1 as QueryPlan, type QueryResult, type QueryState, QueryTimeoutError, type QueryValue, RETRY_DEFAULTS, type RequireKeys, type RetryMiddlewareOptions, type RetryOptions, SIZE_UNITS, type SQLCommand, SQLDialect, type SSLConfig, type SafeSQL, SelectBuilder, type SelectResult, SmartCacheStrategy, type StrictConnectionConfig, type StrictFieldInfo, type StrictIsolationLevel, type StrictPoolConfig, type StrictQueryResult, type SystemMetrics, TIME_UNITS, type TableName, type TableSchema, TimeoutError, type TimeoutMiddlewareOptions, type Transaction, type TransactionConnection, TransactionError, type TransactionMetrics, type TransactionOptions, UpdateBuilder, type UpdateData, type UpdateResult, ValidationError, WhereBuilder, type WhereClause, type WhereConditionInput, type WhereOperator, avg, cacheKey, chunk, composeMiddleware, compress, count, createAdapter, createCacheInvalidationMiddleware, createCacheKeyPattern, createCacheMiddleware, createCachedAdapter, createCircuitBreakerMiddleware, createDeadlineMiddleware, createLoggingMiddleware, createMetricsMiddleware, createModularQueryBuilder, createQueryState, createRetryMiddleware, createTimeoutMiddleware, crypto, cursorPaginate, decompress, encryptRow, exists, generateCacheKey, generateUUID, getCompressionRatio, isCompressed, isDeleteResult, isInsertResult, isSelectResult, isUpdateResult, max, min, paginate, parseCacheKey, processDataForEncryption, processResultsForDecryption, registerAdapterFactory, retry, sanitizeCacheKey, shouldCompress, sql, sum, validateColumnName, validateConnectionConfig, validateSQL, validateTableName, whereBetweenDates, whereDate, whereDay, whereLastDays, whereMonth, whereToday, whereYear, whereYesterday, withTimeout };