@plyaz/db 0.0.1 → 0.1.1
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 +28 -6
- package/dist/adapters/sql/SQLAdapter.d.ts.map +1 -1
- package/dist/adapters/supabase/SupabaseAdapter.d.ts +11 -6
- 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 +8420 -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 +3017 -401
- 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 +3443 -850
- package/dist/index.mjs.map +1 -1
- package/dist/migrations/MigrationManager.d.ts +106 -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 +96 -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 +6 -2
|
@@ -43,7 +43,7 @@ import type { AuditContext, BatchUpdate, CreateInput, DatabaseAdapterType, Datab
|
|
|
43
43
|
*/
|
|
44
44
|
export declare class DatabaseService implements DatabaseServiceInterface {
|
|
45
45
|
private readonly globalConfig;
|
|
46
|
-
|
|
46
|
+
readonly adapter: DatabaseAdapterType;
|
|
47
47
|
private readonly eventHandlers;
|
|
48
48
|
private readonly eventEmitter;
|
|
49
49
|
private readonly healthManager;
|
|
@@ -54,6 +54,38 @@ export declare class DatabaseService implements DatabaseServiceInterface {
|
|
|
54
54
|
globalConfig: DatabaseServiceConfig;
|
|
55
55
|
eventHandlers?: DatabaseEvents;
|
|
56
56
|
});
|
|
57
|
+
/**
|
|
58
|
+
* 🔧 Prepare table name and configuration for operation
|
|
59
|
+
*
|
|
60
|
+
* Handles per-operation overrides for:
|
|
61
|
+
* 1. Schema - prepends schema to table name (e.g., "audit.logs")
|
|
62
|
+
* 2. ID Column - temporarily registers table with custom ID column
|
|
63
|
+
*
|
|
64
|
+
* Priority order:
|
|
65
|
+
* - Operation config (highest) - per-query override
|
|
66
|
+
* - TABLE_REGISTRY - global registration
|
|
67
|
+
* - Default (lowest) - 'id' column, 'public' schema
|
|
68
|
+
*
|
|
69
|
+
* @param table Base table name
|
|
70
|
+
* @param operationConfig Optional operation configuration with idColumn/schema
|
|
71
|
+
* @returns Final table name to use (with schema prefix if applicable)
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* // With schema override
|
|
76
|
+
* const tableName = this.prepareTable('logs', { schema: 'audit' });
|
|
77
|
+
* // Returns: 'audit.logs'
|
|
78
|
+
*
|
|
79
|
+
* // With ID column override
|
|
80
|
+
* const tableName = this.prepareTable('feature_flags', { idColumn: 'key' });
|
|
81
|
+
* // Registers table with 'key' as ID column, returns: 'feature_flags'
|
|
82
|
+
*
|
|
83
|
+
* // With both
|
|
84
|
+
* const tableName = this.prepareTable('users', { schema: 'backoffice', idColumn: 'user_id' });
|
|
85
|
+
* // Returns: 'backoffice.users' with 'user_id' as ID column
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
private prepareTable;
|
|
57
89
|
/**
|
|
58
90
|
* 🔍 Get a single record by ID
|
|
59
91
|
*
|
|
@@ -84,34 +116,51 @@ export declare class DatabaseService implements DatabaseServiceInterface {
|
|
|
84
116
|
* forceAdapter: 'primary', // Force primary DB
|
|
85
117
|
* cache: { enabled: false } // Skip cache
|
|
86
118
|
* });
|
|
119
|
+
*
|
|
120
|
+
* // With custom ID column (per-query override)
|
|
121
|
+
* const flag = await this.db.get('feature_flags', 'my-flag-key', {
|
|
122
|
+
* idColumn: 'key' // Use 'key' instead of 'id' as primary key
|
|
123
|
+
* });
|
|
124
|
+
*
|
|
125
|
+
* // With custom schema
|
|
126
|
+
* const auditLog = await this.db.get('logs', '123', {
|
|
127
|
+
* schema: 'audit' // Query from audit.logs table
|
|
128
|
+
* });
|
|
129
|
+
*
|
|
130
|
+
* // Combining multiple overrides
|
|
131
|
+
* const backofficeUser = await this.db.get('users', 'admin-456', {
|
|
132
|
+
* schema: 'backoffice',
|
|
133
|
+
* idColumn: 'user_id',
|
|
134
|
+
* forceAdapter: 'primary'
|
|
135
|
+
* });
|
|
87
136
|
* ```
|
|
88
137
|
*/
|
|
89
|
-
get<T
|
|
138
|
+
get<T extends Record<string, unknown>>(table: TableName, id: string, operationConfig?: OperationConfig): Promise<DatabaseResult<T | null>>;
|
|
90
139
|
/**
|
|
91
140
|
* List records with optional filtering, sorting, and pagination
|
|
92
141
|
* Merges operation config with global config before delegating
|
|
93
142
|
*/
|
|
94
|
-
list<T
|
|
143
|
+
list<T extends Record<string, unknown>>(table: TableName, options?: QueryOptions<T>, operationConfig?: OperationConfig): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
95
144
|
/**
|
|
96
145
|
* Create a new record
|
|
97
146
|
* Merges operation config with global config before delegating
|
|
98
147
|
*/
|
|
99
|
-
create<T
|
|
148
|
+
create<T extends Record<string, unknown>>(table: TableName, input: CreateInput<T>, operationConfig?: OperationConfig): Promise<DatabaseResult<T>>;
|
|
100
149
|
/**
|
|
101
150
|
* Update an existing record
|
|
102
151
|
* Merges operation config with global config before delegating
|
|
103
152
|
*/
|
|
104
|
-
update<T
|
|
153
|
+
update<T extends Record<string, unknown>>(table: TableName, id: string, input: UpdateInput<T>, operationConfig?: OperationConfig): Promise<DatabaseResult<T>>;
|
|
105
154
|
/**
|
|
106
155
|
* Delete a record
|
|
107
156
|
* Merges operation config with global config before delegating
|
|
108
157
|
*/
|
|
109
158
|
delete(table: TableName, id: string, operationConfig?: OperationConfig): Promise<DatabaseResult<void>>;
|
|
110
|
-
batchCreate<T
|
|
111
|
-
batchUpdate<T
|
|
159
|
+
batchCreate<T extends Record<string, unknown>>(table: TableName, inputs: CreateInput<T>[], operationConfig?: OperationConfig): Promise<DatabaseResult<T[]>>;
|
|
160
|
+
batchUpdate<T extends Record<string, unknown>>(table: TableName, updates: BatchUpdate<T>[], operationConfig?: OperationConfig): Promise<DatabaseResult<T[]>>;
|
|
112
161
|
batchDelete(table: TableName, ids: string[], operationConfig?: OperationConfig): Promise<DatabaseResult<void>>;
|
|
113
|
-
query<T
|
|
114
|
-
count(table: TableName, filter?: Filter
|
|
162
|
+
query<T extends Record<string, unknown>>(table: TableName, query: QueryOptions<T>, operationConfig?: OperationConfig): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
163
|
+
count<T extends Record<string, unknown> = Record<string, unknown>>(table: TableName, filter?: Filter<T>, operationConfig?: OperationConfig): Promise<DatabaseResult<number>>;
|
|
115
164
|
transaction<T>(fn: TransactionFn<T>): Promise<DatabaseResult<T>>;
|
|
116
165
|
setAuditContext(context: AuditContext): Promise<DatabaseResult<void>>;
|
|
117
166
|
on<T extends DatabaseEvent["type"]>(event: T, handler: (event: Extract<DatabaseEvent, {
|
|
@@ -122,15 +171,42 @@ export declare class DatabaseService implements DatabaseServiceInterface {
|
|
|
122
171
|
}>) => void | Promise<void>): void;
|
|
123
172
|
healthCheck(): Promise<DatabaseResult<DatabaseHealthStatus>>;
|
|
124
173
|
getStatus(): ServiceStatus;
|
|
125
|
-
findById<T
|
|
126
|
-
findMany<T
|
|
174
|
+
findById<T extends Record<string, unknown>>(table: string, id: string): Promise<DatabaseResult<T | null>>;
|
|
175
|
+
findMany<T extends Record<string, unknown>>(table: string, options?: QueryOptions<T>): Promise<DatabaseResult<PaginatedResult<T>>>;
|
|
127
176
|
initialize(): Promise<DatabaseResult<void>>;
|
|
128
|
-
|
|
177
|
+
/**
|
|
178
|
+
* Registers a table with the underlying adapter.
|
|
179
|
+
*
|
|
180
|
+
* @param name - Logical table name (e.g., 'users')
|
|
181
|
+
* @param table - Physical table name or Drizzle table object
|
|
182
|
+
* @param idColumn - ID column name (defaults to 'id')
|
|
183
|
+
*
|
|
184
|
+
* @example SQL Adapter
|
|
185
|
+
* ```typescript
|
|
186
|
+
* db.registerTable('users', 'users', 'id');
|
|
187
|
+
* db.registerTable('feature_flags', 'feature_flags', 'key');
|
|
188
|
+
* ```
|
|
189
|
+
*
|
|
190
|
+
* @example Drizzle Adapter (requires PgTable objects)
|
|
191
|
+
* ```typescript
|
|
192
|
+
* db.registerTable('users', usersTable, usersTable.id);
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
registerTable<TTable = string, TIdColumn = string>(name: string, table?: TTable, idColumn?: TIdColumn): void;
|
|
129
196
|
exists(table: string, id: string): Promise<DatabaseResult<boolean>>;
|
|
130
197
|
private fireBeforeReadEvent;
|
|
131
198
|
private fireAfterReadEvent;
|
|
132
|
-
findOne<T
|
|
199
|
+
findOne<T extends Record<string, unknown>>(table: TableName, filter: Filter<T>, operationConfig?: OperationConfig): Promise<DatabaseResult<T | null>>;
|
|
133
200
|
softDelete(table: TableName, id: string, operationConfig?: OperationConfig): Promise<DatabaseResult<void>>;
|
|
134
201
|
get events(): DatabaseEventEmitter;
|
|
202
|
+
/**
|
|
203
|
+
* 🔌 Close the database connection
|
|
204
|
+
*
|
|
205
|
+
* Gracefully shuts down the database connection and releases all resources.
|
|
206
|
+
* Should be called when the service is no longer needed.
|
|
207
|
+
*
|
|
208
|
+
* @returns Promise resolving to DatabaseResult indicating success or failure
|
|
209
|
+
*/
|
|
210
|
+
close(): Promise<DatabaseResult<void>>;
|
|
135
211
|
}
|
|
136
212
|
//# sourceMappingURL=DatabaseService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseService.d.ts","sourceRoot":"","sources":["../../src/service/DatabaseService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAKtD,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,MAAM,EACN,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,EACb,SAAS,EACT,aAAa,EACb,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAIzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,eAAgB,YAAW,wBAAwB;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"DatabaseService.d.ts","sourceRoot":"","sources":["../../src/service/DatabaseService.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,19 +43,9 @@
|
|
|
43
43
|
* ```
|
|
44
44
|
*
|
|
45
45
|
*/
|
|
46
|
-
import type { ContextType } from "@nestjs/common";
|
|
47
46
|
import type { DatabaseEvent, DatabaseOperationType, DBEventHandler } from "@plyaz/types";
|
|
47
|
+
import type { EmitQueryErrorOptions, DatabaseExecutionContext } from "@plyaz/types/db";
|
|
48
48
|
import type { ADAPTERS } from "@plyaz/types";
|
|
49
|
-
/**
|
|
50
|
-
* Emit a query error event
|
|
51
|
-
*/
|
|
52
|
-
interface EmitQueryErrorOptions {
|
|
53
|
-
table: string;
|
|
54
|
-
operation: DatabaseOperationType;
|
|
55
|
-
error: Error;
|
|
56
|
-
params?: Record<string, object>;
|
|
57
|
-
context?: ContextType;
|
|
58
|
-
}
|
|
59
49
|
/**
|
|
60
50
|
* Event emitter for database events that implements the observer pattern.
|
|
61
51
|
* This class manages event subscriptions and emissions for various database operations,
|
|
@@ -83,7 +73,7 @@ export declare class DatabaseEventEmitter implements DatabaseEventEmitter {
|
|
|
83
73
|
/**
|
|
84
74
|
* Emit a before query event
|
|
85
75
|
*/
|
|
86
|
-
emitBeforeQuery(table: string, operation: DatabaseOperationType, params?: Record<string, object>, context?:
|
|
76
|
+
emitBeforeQuery(table: string, operation: DatabaseOperationType, params?: Record<string, object>, context?: DatabaseExecutionContext): void;
|
|
87
77
|
/**
|
|
88
78
|
* Emit an after query event
|
|
89
79
|
*/
|
|
@@ -92,7 +82,7 @@ export declare class DatabaseEventEmitter implements DatabaseEventEmitter {
|
|
|
92
82
|
/**
|
|
93
83
|
* Emit a before transaction event
|
|
94
84
|
*/
|
|
95
|
-
emitBeforeTransaction(transactionId: string, context?:
|
|
85
|
+
emitBeforeTransaction(transactionId: string, context?: DatabaseExecutionContext): void;
|
|
96
86
|
/**
|
|
97
87
|
* Emit an after transaction event
|
|
98
88
|
*/
|
|
@@ -106,5 +96,4 @@ export declare class DatabaseEventEmitter implements DatabaseEventEmitter {
|
|
|
106
96
|
*/
|
|
107
97
|
emitHealthChange(previousStatus: boolean, currentStatus: boolean, details?: Record<string, string | number | boolean>): void;
|
|
108
98
|
}
|
|
109
|
-
export {};
|
|
110
99
|
//# sourceMappingURL=EventEmitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../src/service/EventEmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../src/service/EventEmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,KAAK,EAKV,aAAa,EACb,qBAAqB,EACrB,cAAc,EAIf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM7C;;;;;;;GAOG;AACH,qBAAa,oBAAqB,YAAW,oBAAoB;IAInD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAClB;gBAEiB,OAAO,EAAE,QAAQ;IAa9C;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,aAAa,EACxB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EACpB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,IAAI;IAuCP;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,aAAa,EACzB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EACpB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,IAAI;IAQP;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA6BhC;;OAEG;IACH,eAAe,CACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,qBAAqB,EAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,CAAC,EAAE,wBAAwB,GACjC,IAAI;IAaP;;OAEG;IACH,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,qBAAqB,EAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI;IAaP,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAiCpD;;OAEG;IACH,qBAAqB,CACnB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,wBAAwB,GACjC,IAAI;IAWP;;OAEG;IACH,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAWnE;;OAEG;IACH,uBAAuB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAWnE;;OAEG;IACH,gBAAgB,CACd,cAAc,EAAE,OAAO,EACvB,aAAa,EAAE,OAAO,EACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAClD,IAAI;CAWR"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* soft delete), and advanced features (caching, read replicas, multi-tenancy).
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
|
-
import type { DatabaseAdapterType, DatabaseHealthStatus, DatabaseResult } from "@plyaz/types/db";
|
|
13
|
+
import type { DatabaseAdapterType, DatabaseHealthStatus, DatabaseResult, HealthManagerConfig } from "@plyaz/types/db";
|
|
14
14
|
/**
|
|
15
15
|
* 🌡️ HEALTH MANAGER - Database Health Monitoring
|
|
16
16
|
*
|
|
@@ -59,10 +59,17 @@ import type { DatabaseAdapterType, DatabaseHealthStatus, DatabaseResult } from "
|
|
|
59
59
|
*
|
|
60
60
|
*/
|
|
61
61
|
export declare class HealthManager {
|
|
62
|
-
private readonly adapter;
|
|
63
62
|
private lastHealthStatus;
|
|
64
63
|
private initialized;
|
|
65
|
-
|
|
64
|
+
private currentAdapter;
|
|
65
|
+
private primaryAdapter;
|
|
66
|
+
private backupAdapters;
|
|
67
|
+
private consecutiveFailures;
|
|
68
|
+
private healthCheckInterval?;
|
|
69
|
+
private failoverThreshold;
|
|
70
|
+
private autoFailover;
|
|
71
|
+
private healthCheckTimer?;
|
|
72
|
+
constructor(config: DatabaseAdapterType | HealthManagerConfig);
|
|
66
73
|
/**
|
|
67
74
|
* Initializes the health manager by establishing database connection and performing initial health check
|
|
68
75
|
*
|
|
@@ -149,6 +156,14 @@ export declare class HealthManager {
|
|
|
149
156
|
* ```
|
|
150
157
|
*
|
|
151
158
|
*/
|
|
159
|
+
/**
|
|
160
|
+
* Handle health check result and update internal state
|
|
161
|
+
*/
|
|
162
|
+
private handleHealthResult;
|
|
163
|
+
/**
|
|
164
|
+
* Create health status from check result
|
|
165
|
+
*/
|
|
166
|
+
private createHealthStatus;
|
|
152
167
|
checkHealth(): Promise<DatabaseResult<DatabaseHealthStatus>>;
|
|
153
168
|
/**
|
|
154
169
|
* Get the last known health status
|
|
@@ -158,6 +173,30 @@ export declare class HealthManager {
|
|
|
158
173
|
* Check if the database is currently healthy
|
|
159
174
|
*/
|
|
160
175
|
isHealthy(): boolean;
|
|
176
|
+
/**
|
|
177
|
+
* Get the current active adapter
|
|
178
|
+
*/
|
|
179
|
+
getCurrentAdapter(): DatabaseAdapterType;
|
|
180
|
+
/**
|
|
181
|
+
* Try to initialize and verify health of a backup adapter
|
|
182
|
+
*/
|
|
183
|
+
private tryBackupAdapter;
|
|
184
|
+
/**
|
|
185
|
+
* Switch to a healthy backup adapter
|
|
186
|
+
*/
|
|
187
|
+
private switchToBackup;
|
|
188
|
+
/**
|
|
189
|
+
* Perform failover to next available backup adapter
|
|
190
|
+
*/
|
|
191
|
+
private performFailover;
|
|
192
|
+
/**
|
|
193
|
+
* Start periodic health checks
|
|
194
|
+
*/
|
|
195
|
+
private startPeriodicHealthChecks;
|
|
196
|
+
/**
|
|
197
|
+
* Stop periodic health checks
|
|
198
|
+
*/
|
|
199
|
+
private stopPeriodicHealthChecks;
|
|
161
200
|
/**
|
|
162
201
|
* Gracefully shut down the health manager
|
|
163
202
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HealthManager.d.ts","sourceRoot":"","sources":["../../src/service/HealthManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,
|
|
1
|
+
{"version":3,"file":"HealthManager.d.ts","sourceRoot":"","sources":["../../src/service/HealthManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AASzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,gBAAgB,CAAC,CAA4B;gBAEzC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB;IAmB7D;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwDG;IACH;;OAEG;YACW,kBAAkB;IAehC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAapB,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAmClE;;OAEG;IACH,mBAAmB,IAAI,oBAAoB,GAAG,IAAI;IAIlD;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,iBAAiB,IAAI,mBAAmB;IAIxC;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,cAAc;IAO5B;;OAEG;YACW,eAAe;IA0B7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAQjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAOhC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAQhC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plyaz/db",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Package description",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [],
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
"main": "./dist/index.cjs",
|
|
9
9
|
"module": "./dist/index.mjs",
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
|
+
"bin": {
|
|
12
|
+
"plyaz-db": "./dist/cli/index.js"
|
|
13
|
+
},
|
|
11
14
|
"exports": {
|
|
12
15
|
".": {
|
|
13
16
|
"types": "./dist/index.d.ts",
|
|
@@ -38,8 +41,9 @@
|
|
|
38
41
|
"@plyaz/errors": "^1.3.5",
|
|
39
42
|
"@plyaz/logger": "^1.3.2",
|
|
40
43
|
"@plyaz/testing": "^1.5.1",
|
|
41
|
-
"@plyaz/types": "^1.
|
|
44
|
+
"@plyaz/types": "^1.19.0",
|
|
42
45
|
"@supabase/supabase-js": "^2.75.0",
|
|
46
|
+
"commander": "^12.1.0",
|
|
43
47
|
"drizzle-orm": "^0.44.6",
|
|
44
48
|
"ioredis": "^5.8.1",
|
|
45
49
|
"next": "15.4.7",
|