@plyaz/db 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -134
- package/dist/adapters/drizzle/DrizzleAdapter.d.ts +109 -9
- package/dist/adapters/drizzle/DrizzleAdapter.d.ts.map +1 -1
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/mock/MockAdapter.d.ts +88 -0
- package/dist/adapters/mock/MockAdapter.d.ts.map +1 -0
- package/dist/adapters/sql/SQLAdapter.d.ts +29 -6
- package/dist/adapters/sql/SQLAdapter.d.ts.map +1 -1
- package/dist/adapters/supabase/SupabaseAdapter.d.ts +9 -2
- package/dist/adapters/supabase/SupabaseAdapter.d.ts.map +1 -1
- package/dist/advanced/multi-tenancy/TenantRepository.d.ts +1 -7
- package/dist/advanced/multi-tenancy/TenantRepository.d.ts.map +1 -1
- package/dist/advanced/read-replica/ReadReplicaAdapter.d.ts +3 -2
- package/dist/advanced/read-replica/ReadReplicaAdapter.d.ts.map +1 -1
- package/dist/cli/index.d.ts +27 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +9201 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/extensions/AuditExtension.d.ts +56 -9
- package/dist/extensions/AuditExtension.d.ts.map +1 -1
- package/dist/extensions/CachingAdapter.d.ts +5 -4
- package/dist/extensions/CachingAdapter.d.ts.map +1 -1
- package/dist/extensions/EncryptionExtension.d.ts +5 -4
- package/dist/extensions/EncryptionExtension.d.ts.map +1 -1
- package/dist/extensions/MultiReadExtension.d.ts +95 -0
- package/dist/extensions/MultiReadExtension.d.ts.map +1 -0
- package/dist/extensions/MultiWriteExtension.d.ts +67 -0
- package/dist/extensions/MultiWriteExtension.d.ts.map +1 -0
- package/dist/extensions/ReadReplicaAdapter.d.ts +4 -3
- package/dist/extensions/ReadReplicaAdapter.d.ts.map +1 -1
- package/dist/extensions/SoftDeleteExtension.d.ts +5 -4
- package/dist/extensions/SoftDeleteExtension.d.ts.map +1 -1
- package/dist/extensions/index.d.ts +4 -0
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/factory/AdapterFactory.d.ts.map +1 -1
- package/dist/factory/createDatabaseService.d.ts.map +1 -1
- package/dist/index.cjs +3298 -396
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +4441 -1562
- package/dist/index.mjs.map +1 -1
- package/dist/migrations/MigrationManager.d.ts +128 -0
- package/dist/migrations/MigrationManager.d.ts.map +1 -0
- package/dist/migrations/generateDownMigration.d.ts +25 -0
- package/dist/migrations/generateDownMigration.d.ts.map +1 -0
- package/dist/migrations/index.d.ts +10 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/repository/BaseRepository.d.ts +109 -23
- package/dist/repository/BaseRepository.d.ts.map +1 -1
- package/dist/seeds/SeedManager.d.ts +120 -0
- package/dist/seeds/SeedManager.d.ts.map +1 -0
- package/dist/seeds/index.d.ts +10 -0
- package/dist/seeds/index.d.ts.map +1 -0
- package/dist/service/DatabaseService.d.ts +89 -13
- package/dist/service/DatabaseService.d.ts.map +1 -1
- package/dist/service/EventEmitter.d.ts +3 -14
- package/dist/service/EventEmitter.d.ts.map +1 -1
- package/dist/service/HealthManager.d.ts +42 -3
- package/dist/service/HealthManager.d.ts.map +1 -1
- package/package.json +9 -5
|
@@ -17,7 +17,7 @@ import type { DatabaseAdapterType, DatabaseResult, Filter, DatabaseHealthStatus,
|
|
|
17
17
|
*
|
|
18
18
|
* **Called by:** ReadReplicaAdapter (or DatabaseService if no read replicas)
|
|
19
19
|
* **Calls:** CachingAdapter (or next adapter in chain)
|
|
20
|
-
* **Writes to:** Daily audit tables (
|
|
20
|
+
* **Writes to:** Daily partitioned audit tables ({schema}.audit_log_yyyy_mm_dd)
|
|
21
21
|
*
|
|
22
22
|
* **Audit Flow:**
|
|
23
23
|
* 1. **CREATE:** Records after-state only
|
|
@@ -64,9 +64,13 @@ import type { DatabaseAdapterType, DatabaseResult, Filter, DatabaseHealthStatus,
|
|
|
64
64
|
* ```
|
|
65
65
|
*/
|
|
66
66
|
export declare class AuditAdapter implements DatabaseAdapterType {
|
|
67
|
-
|
|
67
|
+
baseAdapter: DatabaseAdapterType;
|
|
68
68
|
private config;
|
|
69
69
|
private auditContext;
|
|
70
|
+
/** Cached schema-qualified table name */
|
|
71
|
+
private auditSchema;
|
|
72
|
+
/** Whether to use daily partitioned tables */
|
|
73
|
+
private usePartitionedTables;
|
|
70
74
|
/**
|
|
71
75
|
* Creates a new AuditAdapter instance.
|
|
72
76
|
*
|
|
@@ -80,9 +84,11 @@ export declare class AuditAdapter implements DatabaseAdapterType {
|
|
|
80
84
|
* ```typescript
|
|
81
85
|
* const auditAdapter = new AuditAdapter(baseAdapter, {
|
|
82
86
|
* enabled: true,
|
|
83
|
-
* retentionDays:
|
|
87
|
+
* retentionDays: 180,
|
|
84
88
|
* excludeFields: ['password', 'token'],
|
|
85
89
|
* excludeTables: ['temp_data'],
|
|
90
|
+
* schema: 'audit',
|
|
91
|
+
* usePartitionedTables: true,
|
|
86
92
|
* onAuditAfterWrite: async (event) => {
|
|
87
93
|
* await complianceService.recordAudit(event);
|
|
88
94
|
* }
|
|
@@ -94,7 +100,13 @@ export declare class AuditAdapter implements DatabaseAdapterType {
|
|
|
94
100
|
retentionDays?: number;
|
|
95
101
|
excludeFields?: string[];
|
|
96
102
|
excludeTables?: string[];
|
|
103
|
+
/** Database schema for audit tables (default: 'audit') */
|
|
104
|
+
schema?: string;
|
|
105
|
+
/** Use daily partitioned tables (audit_log_yyyy_mm_dd format) (default: true) */
|
|
106
|
+
usePartitionedTables?: boolean;
|
|
97
107
|
onAuditAfterWrite?: (event: AuditEvent) => void | Promise<void>;
|
|
108
|
+
/** Encrypted fields config from encryption extension (for audit metadata) */
|
|
109
|
+
encryptedFields?: Record<string, string[]>;
|
|
98
110
|
});
|
|
99
111
|
/**
|
|
100
112
|
* Initializes the audit adapter and underlying adapter.
|
|
@@ -139,6 +151,7 @@ export declare class AuditAdapter implements DatabaseAdapterType {
|
|
|
139
151
|
* ```
|
|
140
152
|
*/
|
|
141
153
|
disconnect(): Promise<void>;
|
|
154
|
+
close(): Promise<DatabaseResult<void>>;
|
|
142
155
|
/**
|
|
143
156
|
* Gets the underlying database client.
|
|
144
157
|
*
|
|
@@ -262,12 +275,33 @@ export declare class AuditAdapter implements DatabaseAdapterType {
|
|
|
262
275
|
* console.log('Found users:', users.value?.data.length);
|
|
263
276
|
* ```
|
|
264
277
|
*/
|
|
265
|
-
findMany<T
|
|
266
|
-
create<T
|
|
278
|
+
findMany<T extends Record<string, unknown>>(table: string, options?: QueryOptions<T>): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
279
|
+
create<T extends Record<string, unknown>>(table: string, data: T): Promise<DatabaseResult<T>>;
|
|
267
280
|
private validateCreateParams;
|
|
268
|
-
private handleCreateAudit;
|
|
269
281
|
update<T>(table: string, id: string, data: Partial<T>): Promise<DatabaseResult<T>>;
|
|
270
282
|
delete(table: string, id: string): Promise<DatabaseResult<void>>;
|
|
283
|
+
/**
|
|
284
|
+
* Logs operation failures to audit for compliance tracking.
|
|
285
|
+
* Captures the before state, attempted changes, and error details.
|
|
286
|
+
*/
|
|
287
|
+
private logOperationFailure;
|
|
288
|
+
/**
|
|
289
|
+
* Maps a successful operation to its failed counterpart.
|
|
290
|
+
*/
|
|
291
|
+
private getFailedOperation;
|
|
292
|
+
/**
|
|
293
|
+
* Determines which extension/layer caused the error based on error details.
|
|
294
|
+
*/
|
|
295
|
+
private getErrorSource;
|
|
296
|
+
/**
|
|
297
|
+
* Matches a text against a list of pattern groups.
|
|
298
|
+
*/
|
|
299
|
+
private matchPatterns;
|
|
300
|
+
/**
|
|
301
|
+
* Gets the list of encrypted fields for a table.
|
|
302
|
+
* Returns undefined if no fields are encrypted for this table.
|
|
303
|
+
*/
|
|
304
|
+
private getEncryptedFields;
|
|
271
305
|
/**
|
|
272
306
|
* Executes operations within a transaction with audit logging.
|
|
273
307
|
*
|
|
@@ -335,7 +369,7 @@ export declare class AuditAdapter implements DatabaseAdapterType {
|
|
|
335
369
|
* console.log('Active users:', activeUsers.value);
|
|
336
370
|
* ```
|
|
337
371
|
*/
|
|
338
|
-
count(table: string, filter?: Filter): Promise<DatabaseResult<number>>;
|
|
372
|
+
count<T extends Record<string, unknown> = Record<string, unknown>>(table: string, filter?: Filter<T>): Promise<DatabaseResult<number>>;
|
|
339
373
|
/**
|
|
340
374
|
* Performs health check through base adapter.
|
|
341
375
|
*
|
|
@@ -416,11 +450,24 @@ export declare class AuditAdapter implements DatabaseAdapterType {
|
|
|
416
450
|
* ```
|
|
417
451
|
*/
|
|
418
452
|
private validateAuditEvent;
|
|
453
|
+
/**
|
|
454
|
+
* Generates the audit table name based on configuration.
|
|
455
|
+
*
|
|
456
|
+
* **RESPONSIBILITY:** Determines the correct table name for audit records
|
|
457
|
+
* **TABLE NAMING:**
|
|
458
|
+
* - Partitioned: `{schema}.audit_log_yyyy_mm_dd` (e.g., audit.audit_log_2024_12_01)
|
|
459
|
+
* - Non-partitioned: `{schema}.audit_logs` (e.g., audit.audit_logs)
|
|
460
|
+
*
|
|
461
|
+
* @private
|
|
462
|
+
* @param timestamp - Timestamp to use for partition date
|
|
463
|
+
* @returns Schema-qualified table name
|
|
464
|
+
*/
|
|
465
|
+
private getAuditTableName;
|
|
419
466
|
/**
|
|
420
467
|
* Writes audit record to daily audit table.
|
|
421
468
|
*
|
|
422
469
|
* **RESPONSIBILITY:** Persists audit event to database
|
|
423
|
-
* **TABLE NAMING:** Uses daily tables (
|
|
470
|
+
* **TABLE NAMING:** Uses daily partitioned tables (audit.audit_log_yyyy_mm_dd) by default
|
|
424
471
|
* **STRUCTURE:** Converts event to database record format
|
|
425
472
|
*
|
|
426
473
|
* @private
|
|
@@ -429,7 +476,7 @@ export declare class AuditAdapter implements DatabaseAdapterType {
|
|
|
429
476
|
*
|
|
430
477
|
* @example
|
|
431
478
|
* ```typescript
|
|
432
|
-
* // Internal usage - writes to
|
|
479
|
+
* // Internal usage - writes to audit.audit_log_2024_12_01 table
|
|
433
480
|
* await this.writeAuditRecord({
|
|
434
481
|
* operation: 'UPDATE',
|
|
435
482
|
* table: 'users',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuditExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/AuditExtension.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACX,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"AuditExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/AuditExtension.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,7 +50,7 @@ import type { DatabaseAdapterType, DatabaseResult, DBCacheConfig, Filter, Databa
|
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
52
|
export declare class CachingAdapter implements DatabaseAdapterType {
|
|
53
|
-
|
|
53
|
+
baseAdapter: DatabaseAdapterType;
|
|
54
54
|
private config;
|
|
55
55
|
private cache;
|
|
56
56
|
/**
|
|
@@ -116,6 +116,7 @@ export declare class CachingAdapter implements DatabaseAdapterType {
|
|
|
116
116
|
* ```
|
|
117
117
|
*/
|
|
118
118
|
disconnect(): Promise<void>;
|
|
119
|
+
close(): Promise<DatabaseResult<void>>;
|
|
119
120
|
/**
|
|
120
121
|
* Gets the underlying database client.
|
|
121
122
|
*
|
|
@@ -196,7 +197,7 @@ export declare class CachingAdapter implements DatabaseAdapterType {
|
|
|
196
197
|
* // Always queries database directly
|
|
197
198
|
* ```
|
|
198
199
|
*/
|
|
199
|
-
findMany<T
|
|
200
|
+
findMany<T extends Record<string, unknown>>(table: string, options?: QueryOptions<T>): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
200
201
|
/**
|
|
201
202
|
* Creates a new record with cache invalidation.
|
|
202
203
|
*
|
|
@@ -222,7 +223,7 @@ export declare class CachingAdapter implements DatabaseAdapterType {
|
|
|
222
223
|
* }
|
|
223
224
|
* ```
|
|
224
225
|
*/
|
|
225
|
-
create<T
|
|
226
|
+
create<T extends Record<string, unknown>>(table: string, data: T): Promise<DatabaseResult<T>>;
|
|
226
227
|
/**
|
|
227
228
|
* Updates an existing record with cache invalidation.
|
|
228
229
|
*
|
|
@@ -342,7 +343,7 @@ export declare class CachingAdapter implements DatabaseAdapterType {
|
|
|
342
343
|
* // Always queries database directly
|
|
343
344
|
* ```
|
|
344
345
|
*/
|
|
345
|
-
count(table: string, filter?: Filter): Promise<DatabaseResult<number>>;
|
|
346
|
+
count<T extends Record<string, unknown> = Record<string, unknown>>(table: string, filter?: Filter<T>): Promise<DatabaseResult<number>>;
|
|
346
347
|
/**
|
|
347
348
|
* Performs health check through base adapter.
|
|
348
349
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CachingAdapter.d.ts","sourceRoot":"","sources":["../../src/extensions/CachingAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,qBAAa,cAAe,YAAW,mBAAmB;IA+
|
|
1
|
+
{"version":3,"file":"CachingAdapter.d.ts","sourceRoot":"","sources":["../../src/extensions/CachingAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ import { type DatabaseAdapterType, type DatabaseResult, type QueryOptions, type
|
|
|
51
51
|
* ```
|
|
52
52
|
*/
|
|
53
53
|
export declare class EncryptionAdapter implements DatabaseAdapterType {
|
|
54
|
-
|
|
54
|
+
baseAdapter: DatabaseAdapterType;
|
|
55
55
|
private config;
|
|
56
56
|
constructor(baseAdapter: DatabaseAdapterType, config: {
|
|
57
57
|
enabled: boolean;
|
|
@@ -62,17 +62,18 @@ export declare class EncryptionAdapter implements DatabaseAdapterType {
|
|
|
62
62
|
initialize(): Promise<DatabaseResult<void>>;
|
|
63
63
|
connect(): Promise<void>;
|
|
64
64
|
disconnect(): Promise<void>;
|
|
65
|
+
close(): Promise<DatabaseResult<void>>;
|
|
65
66
|
getClient(): object;
|
|
66
67
|
query<T>(sql: string, params?: T[]): Promise<T[]>;
|
|
67
68
|
registerTable<T, U>(name: string, table: T, idColumn?: U): void;
|
|
68
69
|
findById<T>(table: string, id: string): Promise<DatabaseResult<T | null>>;
|
|
69
|
-
findMany<T
|
|
70
|
-
create<T
|
|
70
|
+
findMany<T extends Record<string, unknown>>(table: string, options?: QueryOptions<T>): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
71
|
+
create<T extends Record<string, unknown>>(table: string, data: T): Promise<DatabaseResult<T>>;
|
|
71
72
|
update<T>(table: string, id: string, data: Partial<T>): Promise<DatabaseResult<T>>;
|
|
72
73
|
delete(table: string, id: string): Promise<DatabaseResult<void>>;
|
|
73
74
|
transaction<T>(callback: (trx: Transaction) => Promise<T>): Promise<DatabaseResult<T>>;
|
|
74
75
|
exists(table: string, id: string): Promise<DatabaseResult<boolean>>;
|
|
75
|
-
count(table: string, filter?: Filter): Promise<DatabaseResult<number>>;
|
|
76
|
+
count<T extends Record<string, unknown> = Record<string, unknown>>(table: string, filter?: Filter<T>): Promise<DatabaseResult<number>>;
|
|
76
77
|
healthCheck(): Promise<DatabaseResult<DatabaseHealthStatus>>;
|
|
77
78
|
private encryptFields;
|
|
78
79
|
private shouldProcessFields;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptionExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/EncryptionExtension.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,oBAAoB,EAE1B,MAAM,iBAAiB,CAAC;AAKzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,qBAAa,iBAAkB,YAAW,mBAAmB;
|
|
1
|
+
{"version":3,"file":"EncryptionExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/EncryptionExtension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MultiReadExtension - Read from primary + multiple read replicas
|
|
3
|
+
*
|
|
4
|
+
* Decorator that wraps the base adapter to distribute reads across
|
|
5
|
+
* multiple read replicas using configurable load balancing strategies.
|
|
6
|
+
* Supports automatic failover to primary on replica failure.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const db = await createDatabaseService({
|
|
11
|
+
* adapter: 'sql',
|
|
12
|
+
* config: { connectionString: process.env.DATABASE_URL },
|
|
13
|
+
*
|
|
14
|
+
* multiRead: {
|
|
15
|
+
* enabled: true,
|
|
16
|
+
* adapters: [
|
|
17
|
+
* { adapter: 'sql', config: { connectionString: process.env.REPLICA1_URL } },
|
|
18
|
+
* { adapter: 'sql', config: { connectionString: process.env.REPLICA2_URL } }
|
|
19
|
+
* ],
|
|
20
|
+
* strategy: 'round-robin', // or 'random', 'fastest', 'least-conn'
|
|
21
|
+
* fallbackToPrimary: true,
|
|
22
|
+
* healthCheckInterval: 30000
|
|
23
|
+
* }
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import type { DatabaseAdapterType, DatabaseResult, PaginatedResult, QueryOptions, Transaction, DatabaseHealthStatus, Filter, MultiReadConfig, ReplicaHealth } from "@plyaz/types/db";
|
|
28
|
+
/**
|
|
29
|
+
* MultiReadAdapter - Extension for multi-replica read distribution
|
|
30
|
+
*
|
|
31
|
+
* Decorates a base adapter to distribute read operations across multiple
|
|
32
|
+
* read replicas. Writes always go to the primary adapter. Supports automatic
|
|
33
|
+
* failover and health tracking.
|
|
34
|
+
*/
|
|
35
|
+
export declare class MultiReadAdapter implements DatabaseAdapterType {
|
|
36
|
+
baseAdapter: DatabaseAdapterType;
|
|
37
|
+
private config;
|
|
38
|
+
private currentReadIndex;
|
|
39
|
+
private replicaHealth;
|
|
40
|
+
private healthCheckTimer?;
|
|
41
|
+
constructor(baseAdapter: DatabaseAdapterType, config: MultiReadConfig);
|
|
42
|
+
initialize(): Promise<DatabaseResult<void>>;
|
|
43
|
+
close(): Promise<DatabaseResult<void>>;
|
|
44
|
+
connect(): Promise<void>;
|
|
45
|
+
disconnect(): Promise<void>;
|
|
46
|
+
getClient(): object;
|
|
47
|
+
query<T>(sql: string, params?: unknown[]): Promise<T[]>;
|
|
48
|
+
registerTable<TTable = string, TIdColumn = string>(name: string, table?: TTable, idColumn?: TIdColumn): void;
|
|
49
|
+
findById<T>(table: string, id: string): Promise<DatabaseResult<T | null>>;
|
|
50
|
+
findMany<T extends Record<string, unknown>>(table: string, options?: QueryOptions<T>): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
51
|
+
exists(table: string, id: string): Promise<DatabaseResult<boolean>>;
|
|
52
|
+
count<T extends Record<string, unknown> = Record<string, unknown>>(table: string, filter?: Filter<T>): Promise<DatabaseResult<number>>;
|
|
53
|
+
create<T extends Record<string, unknown>>(table: string, data: T): Promise<DatabaseResult<T>>;
|
|
54
|
+
update<T>(table: string, id: string, data: Partial<T>): Promise<DatabaseResult<T>>;
|
|
55
|
+
delete(table: string, id: string): Promise<DatabaseResult<void>>;
|
|
56
|
+
transaction<T>(callback: (trx: Transaction) => Promise<T>): Promise<DatabaseResult<T>>;
|
|
57
|
+
healthCheck(): Promise<DatabaseResult<DatabaseHealthStatus>>;
|
|
58
|
+
/**
|
|
59
|
+
* Read from replica adapters using configured strategy
|
|
60
|
+
*/
|
|
61
|
+
private readFromReplicas;
|
|
62
|
+
/**
|
|
63
|
+
* Select a replica based on load balancing strategy
|
|
64
|
+
*/
|
|
65
|
+
private selectReplica;
|
|
66
|
+
/**
|
|
67
|
+
* Initialize health tracking for all replicas
|
|
68
|
+
*/
|
|
69
|
+
private initializeHealthTracking;
|
|
70
|
+
/**
|
|
71
|
+
* Update health metrics for a replica
|
|
72
|
+
*/
|
|
73
|
+
private updateHealthMetrics;
|
|
74
|
+
/**
|
|
75
|
+
* Check if replica is healthy
|
|
76
|
+
*/
|
|
77
|
+
private isReplicaHealthy;
|
|
78
|
+
/**
|
|
79
|
+
* Start health check interval
|
|
80
|
+
*/
|
|
81
|
+
private startHealthChecks;
|
|
82
|
+
/**
|
|
83
|
+
* Stop health checks
|
|
84
|
+
*/
|
|
85
|
+
private stopHealthChecks;
|
|
86
|
+
/**
|
|
87
|
+
* Get health status of all replicas
|
|
88
|
+
*/
|
|
89
|
+
getHealthStatus(): Record<string, ReplicaHealth>;
|
|
90
|
+
/**
|
|
91
|
+
* Cleanup resources
|
|
92
|
+
*/
|
|
93
|
+
dispose(): void;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=MultiReadExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiReadExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/MultiReadExtension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,MAAM,EACN,eAAe,EACf,aAAa,EACd,MAAM,iBAAiB,CAAC;AAUzB;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,mBAAmB;IACnD,WAAW,EAAE,mBAAmB,CAAC;IACxC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAsD;IAC3E,OAAO,CAAC,gBAAgB,CAAC,CAA4B;gBAEzC,WAAW,EAAE,mBAAmB,EAAE,MAAM,EAAE,eAAe;IAmB/D,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAI3C,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAKtC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,SAAS,IAAI,MAAM;IAIb,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAI7D,aAAa,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,GAAG,MAAM,EAC/C,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,SAAS,GACnB,IAAI;IAYD,QAAQ,CAAC,CAAC,EACd,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAI9B,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9C,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAMxC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAInE,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GACjB,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAK5B,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAIvB,MAAM,CAAC,CAAC,EACZ,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAIvB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAIhE,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAKvB,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAIlE;;OAEG;YACW,gBAAgB;IA+D9B;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAWhD;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MultiWriteExtension - Write to primary + multiple secondary adapters
|
|
3
|
+
*
|
|
4
|
+
* Decorator that wraps the base adapter to replicate writes across
|
|
5
|
+
* multiple secondary adapters for redundancy, cross-region replication,
|
|
6
|
+
* or analytics syncing.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const db = await createDatabaseService({
|
|
11
|
+
* adapter: 'sql',
|
|
12
|
+
* config: { connectionString: process.env.DATABASE_URL },
|
|
13
|
+
*
|
|
14
|
+
* multiWrite: {
|
|
15
|
+
* enabled: true,
|
|
16
|
+
* adapters: [
|
|
17
|
+
* { adapter: 'supabase', config: { ... } },
|
|
18
|
+
* { adapter: 'sql', config: { connectionString: process.env.ANALYTICS_DB } }
|
|
19
|
+
* ],
|
|
20
|
+
* mode: 'best-effort', // or 'strict'
|
|
21
|
+
* onSecondaryFailure: 'log', // or 'warn', 'throw'
|
|
22
|
+
* timeout: 5000
|
|
23
|
+
* }
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import type { DatabaseAdapterType, DatabaseResult, PaginatedResult, QueryOptions, Transaction, DatabaseHealthStatus, Filter, MultiWriteConfig } from "@plyaz/types/db";
|
|
28
|
+
/**
|
|
29
|
+
* MultiWriteAdapter - Extension for multi-adapter write replication
|
|
30
|
+
*
|
|
31
|
+
* Decorates a base adapter to replicate all write operations (create, update, delete)
|
|
32
|
+
* to multiple secondary adapters. Reads always go to the primary adapter.
|
|
33
|
+
*/
|
|
34
|
+
export declare class MultiWriteAdapter implements DatabaseAdapterType {
|
|
35
|
+
baseAdapter: DatabaseAdapterType;
|
|
36
|
+
private config;
|
|
37
|
+
constructor(baseAdapter: DatabaseAdapterType, config: MultiWriteConfig);
|
|
38
|
+
initialize(): Promise<DatabaseResult<void>>;
|
|
39
|
+
close(): Promise<DatabaseResult<void>>;
|
|
40
|
+
connect(): Promise<void>;
|
|
41
|
+
disconnect(): Promise<void>;
|
|
42
|
+
getClient(): object;
|
|
43
|
+
query<T>(sql: string, params?: unknown[]): Promise<T[]>;
|
|
44
|
+
registerTable<TTable = string, TIdColumn = string>(name: string, table?: TTable, idColumn?: TIdColumn): void;
|
|
45
|
+
findById<T>(table: string, id: string): Promise<DatabaseResult<T | null>>;
|
|
46
|
+
findMany<T extends Record<string, unknown>>(table: string, options?: QueryOptions<T>): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
47
|
+
exists(table: string, id: string): Promise<DatabaseResult<boolean>>;
|
|
48
|
+
count<T extends Record<string, unknown> = Record<string, unknown>>(table: string, filter?: Filter<T>): Promise<DatabaseResult<number>>;
|
|
49
|
+
create<T extends Record<string, unknown>>(table: string, data: T): Promise<DatabaseResult<T>>;
|
|
50
|
+
update<T>(table: string, id: string, data: Partial<T>): Promise<DatabaseResult<T>>;
|
|
51
|
+
delete(table: string, id: string): Promise<DatabaseResult<void>>;
|
|
52
|
+
transaction<T>(callback: (trx: Transaction) => Promise<T>): Promise<DatabaseResult<T>>;
|
|
53
|
+
healthCheck(): Promise<DatabaseResult<DatabaseHealthStatus>>;
|
|
54
|
+
/**
|
|
55
|
+
* Replicate write operation to secondary adapters
|
|
56
|
+
*/
|
|
57
|
+
private replicateWrite;
|
|
58
|
+
/**
|
|
59
|
+
* Execute operation with timeout
|
|
60
|
+
*/
|
|
61
|
+
private executeWithTimeout;
|
|
62
|
+
/**
|
|
63
|
+
* Handle secondary adapter failures
|
|
64
|
+
*/
|
|
65
|
+
private handleSecondaryFailure;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=MultiWriteExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiWriteExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/MultiWriteExtension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,MAAM,EACN,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAIzB;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,mBAAmB;IACpD,WAAW,EAAE,mBAAmB,CAAC;IACxC,OAAO,CAAC,MAAM,CAA6B;gBAE/B,WAAW,EAAE,mBAAmB,EAAE,MAAM,EAAE,gBAAgB;IAUhE,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAI3C,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAItC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,SAAS,IAAI,MAAM;IAIb,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAI7D,aAAa,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,GAAG,MAAM,EAC/C,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,SAAS,GACnB,IAAI;IAYD,QAAQ,CAAC,CAAC,EACd,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAI9B,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9C,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAIxC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAInE,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GACjB,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAK5B,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAkBvB,MAAM,CAAC,CAAC,EACZ,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAkBvB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAkBhE,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAKvB,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAIlE;;OAEG;YACW,cAAc;IAmC5B;;OAEG;YACW,kBAAkB;IAehC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAsB/B"}
|
|
@@ -11,17 +11,18 @@ export declare class ReadReplicaAdapter implements DatabaseAdapterType {
|
|
|
11
11
|
initialize(): Promise<DatabaseResult<void>>;
|
|
12
12
|
connect(): Promise<void>;
|
|
13
13
|
disconnect(): Promise<void>;
|
|
14
|
+
close(): Promise<DatabaseResult<void>>;
|
|
14
15
|
getClient(): object;
|
|
15
16
|
query<T>(sql: string, params?: T[]): Promise<T[]>;
|
|
16
17
|
registerTable<T, U>(name: string, table: T, idColumn?: U): void;
|
|
17
18
|
findById<T>(table: string, id: string): Promise<DatabaseResult<T | null>>;
|
|
18
|
-
findMany<T
|
|
19
|
-
create<T
|
|
19
|
+
findMany<T extends Record<string, unknown>>(table: string, options?: QueryOptions<T>): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
20
|
+
create<T extends Record<string, unknown>>(table: string, data: T): Promise<DatabaseResult<T>>;
|
|
20
21
|
update<T>(table: string, id: string, data: Partial<T>): Promise<DatabaseResult<T>>;
|
|
21
22
|
delete(table: string, id: string): Promise<DatabaseResult<void>>;
|
|
22
23
|
transaction<T>(callback: (trx: Transaction) => Promise<T>): Promise<DatabaseResult<T>>;
|
|
23
24
|
exists(table: string, id: string): Promise<DatabaseResult<boolean>>;
|
|
24
|
-
count(table: string, filter?: Filter): Promise<DatabaseResult<number>>;
|
|
25
|
+
count<T extends Record<string, unknown> = Record<string, unknown>>(table: string, filter?: Filter<T>): Promise<DatabaseResult<number>>;
|
|
25
26
|
healthCheck(): Promise<DatabaseResult<DatabaseHealthStatus>>;
|
|
26
27
|
/**
|
|
27
28
|
* Get the appropriate adapter for read operations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReadReplicaAdapter.d.ts","sourceRoot":"","sources":["../../src/extensions/ReadReplicaAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,WAAW,EACX,MAAM,EACN,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAI1D,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,mBAAmB,CAAK;gBAGtB,cAAc,EAAE,mBAAmB,EACnC,MAAM,EAAE,iBAAiB;IAG7B,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAI3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ReadReplicaAdapter.d.ts","sourceRoot":"","sources":["../../src/extensions/ReadReplicaAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,WAAW,EACX,MAAM,EACN,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAI1D,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,mBAAmB,CAAK;gBAGtB,cAAc,EAAE,mBAAmB,EACnC,MAAM,EAAE,iBAAiB;IAG7B,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAI3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAI5C,SAAS,IAAI,MAAM;IAIb,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIvD,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI;IAIzD,QAAQ,CAAC,CAAC,EACd,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAM9B,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9C,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAMxC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAKvB,MAAM,CAAC,CAAC,EACZ,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAKvB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAKhE,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAKvB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAMnE,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GACjB,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAM5B,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAIlE;;;OAGG;IACH,OAAO,CAAC,cAAc;CAyBvB"}
|
|
@@ -64,7 +64,7 @@ import type { DatabaseAdapterType, DatabaseResult, PaginatedResult, QueryOptions
|
|
|
64
64
|
* ```
|
|
65
65
|
*/
|
|
66
66
|
export declare class SoftDeleteAdapter implements DatabaseAdapterType {
|
|
67
|
-
|
|
67
|
+
baseAdapter: DatabaseAdapterType;
|
|
68
68
|
private config;
|
|
69
69
|
/**
|
|
70
70
|
* Creates a new SoftDeleteAdapter instance.
|
|
@@ -132,6 +132,7 @@ export declare class SoftDeleteAdapter implements DatabaseAdapterType {
|
|
|
132
132
|
* ```
|
|
133
133
|
*/
|
|
134
134
|
disconnect(): Promise<void>;
|
|
135
|
+
close(): Promise<DatabaseResult<void>>;
|
|
135
136
|
/**
|
|
136
137
|
* Gets the underlying database client.
|
|
137
138
|
*
|
|
@@ -214,7 +215,7 @@ export declare class SoftDeleteAdapter implements DatabaseAdapterType {
|
|
|
214
215
|
* ```
|
|
215
216
|
*/
|
|
216
217
|
findById<T>(table: string, id: string): Promise<DatabaseResult<T | null>>;
|
|
217
|
-
findMany<T
|
|
218
|
+
findMany<T extends Record<string, unknown>>(table: string, options?: QueryOptions<T>): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
218
219
|
/**
|
|
219
220
|
* Creates a new record through base adapter.
|
|
220
221
|
*
|
|
@@ -238,7 +239,7 @@ export declare class SoftDeleteAdapter implements DatabaseAdapterType {
|
|
|
238
239
|
* }
|
|
239
240
|
* ```
|
|
240
241
|
*/
|
|
241
|
-
create<T
|
|
242
|
+
create<T extends Record<string, unknown>>(table: string, data: T): Promise<DatabaseResult<T>>;
|
|
242
243
|
/**
|
|
243
244
|
* Updates an existing record through base adapter.
|
|
244
245
|
*
|
|
@@ -346,7 +347,7 @@ export declare class SoftDeleteAdapter implements DatabaseAdapterType {
|
|
|
346
347
|
* // Returns count of premium users that are NOT soft-deleted
|
|
347
348
|
* ```
|
|
348
349
|
*/
|
|
349
|
-
count(table: string, filter?: Filter): Promise<DatabaseResult<number>>;
|
|
350
|
+
count<T extends Record<string, unknown> = Record<string, unknown>>(table: string, filter?: Filter<T>): Promise<DatabaseResult<number>>;
|
|
350
351
|
/**
|
|
351
352
|
* Performs health check through base adapter.
|
|
352
353
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SoftDeleteExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/SoftDeleteExtension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,MAAM,EACN,oBAAoB,EACpB,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAKzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,qBAAa,iBAAkB,YAAW,mBAAmB;
|
|
1
|
+
{"version":3,"file":"SoftDeleteExtension.d.ts","sourceRoot":"","sources":["../../src/extensions/SoftDeleteExtension.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,4 +76,8 @@ export { EncryptionAdapter } from "./EncryptionExtension";
|
|
|
76
76
|
export { CachingAdapter } from "./CachingAdapter";
|
|
77
77
|
/** Read/write splitting with replica load balancing and failover */
|
|
78
78
|
export { ReadReplicaAdapter } from "./ReadReplicaAdapter";
|
|
79
|
+
/** Write replication across primary + multiple secondary adapters */
|
|
80
|
+
export { MultiWriteAdapter } from "./MultiWriteExtension";
|
|
81
|
+
/** Read distribution across multiple read replicas with load balancing */
|
|
82
|
+
export { MultiReadAdapter } from "./MultiReadExtension";
|
|
79
83
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAEH,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,wDAAwD;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,2DAA2D;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,oDAAoD;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,oEAAoE;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAEH,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,wDAAwD;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,2DAA2D;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,oDAAoD;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,oEAAoE;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qEAAqE;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,0EAA0E;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdapterFactory.d.ts","sourceRoot":"","sources":["../../src/factory/AdapterFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"AdapterFactory.d.ts","sourceRoot":"","sources":["../../src/factory/AdapterFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EAKf,MAAM,iBAAiB,CAAC;AAKzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,qBAAa,cAAc;IACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwDG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,cAAc,EACpC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,EAClB,MAAM,EAAE,CAAC,GACR,mBAAmB;CAqEvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDatabaseService.d.ts","sourceRoot":"","sources":["../../src/factory/createDatabaseService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAmBH,OAAO,KAAK,EACV,wBAAwB,EAKxB,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"createDatabaseService.d.ts","sourceRoot":"","sources":["../../src/factory/createDatabaseService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAmBH,OAAO,KAAK,EACV,wBAAwB,EAKxB,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AAyMzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,wBAAwB,CAAC,CAmDnC"}
|