@plyaz/db 0.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.
Files changed (118) hide show
  1. package/README.md +169 -0
  2. package/dist/adapters/drizzle/DrizzleAdapter.d.ts +269 -0
  3. package/dist/adapters/drizzle/DrizzleAdapter.d.ts.map +1 -0
  4. package/dist/adapters/index.d.ts +20 -0
  5. package/dist/adapters/index.d.ts.map +1 -0
  6. package/dist/adapters/sql/SQLAdapter.d.ts +282 -0
  7. package/dist/adapters/sql/SQLAdapter.d.ts.map +1 -0
  8. package/dist/adapters/supabase/SupabaseAdapter.d.ts +305 -0
  9. package/dist/adapters/supabase/SupabaseAdapter.d.ts.map +1 -0
  10. package/dist/advanced/backup/BackupService.d.ts +159 -0
  11. package/dist/advanced/backup/BackupService.d.ts.map +1 -0
  12. package/dist/advanced/backup/index.d.ts +2 -0
  13. package/dist/advanced/backup/index.d.ts.map +1 -0
  14. package/dist/advanced/caching/CacheEvict.decorator.d.ts +3 -0
  15. package/dist/advanced/caching/CacheEvict.decorator.d.ts.map +1 -0
  16. package/dist/advanced/caching/Cacheable.decorator.d.ts +99 -0
  17. package/dist/advanced/caching/Cacheable.decorator.d.ts.map +1 -0
  18. package/dist/advanced/caching/RedisCache.d.ts +417 -0
  19. package/dist/advanced/caching/RedisCache.d.ts.map +1 -0
  20. package/dist/advanced/caching/index.d.ts +4 -0
  21. package/dist/advanced/caching/index.d.ts.map +1 -0
  22. package/dist/advanced/connection-pool/DynamicPool.d.ts +234 -0
  23. package/dist/advanced/connection-pool/DynamicPool.d.ts.map +1 -0
  24. package/dist/advanced/connection-pool/index.d.ts +2 -0
  25. package/dist/advanced/connection-pool/index.d.ts.map +1 -0
  26. package/dist/advanced/index.d.ts +8 -0
  27. package/dist/advanced/index.d.ts.map +1 -0
  28. package/dist/advanced/monitoring/AlertManager.d.ts +72 -0
  29. package/dist/advanced/monitoring/AlertManager.d.ts.map +1 -0
  30. package/dist/advanced/monitoring/MetricsCollector.d.ts +81 -0
  31. package/dist/advanced/monitoring/MetricsCollector.d.ts.map +1 -0
  32. package/dist/advanced/monitoring/index.d.ts +3 -0
  33. package/dist/advanced/monitoring/index.d.ts.map +1 -0
  34. package/dist/advanced/multi-tenancy/TenantContext.d.ts +52 -0
  35. package/dist/advanced/multi-tenancy/TenantContext.d.ts.map +1 -0
  36. package/dist/advanced/multi-tenancy/TenantRepository.d.ts +292 -0
  37. package/dist/advanced/multi-tenancy/TenantRepository.d.ts.map +1 -0
  38. package/dist/advanced/multi-tenancy/index.d.ts +3 -0
  39. package/dist/advanced/multi-tenancy/index.d.ts.map +1 -0
  40. package/dist/advanced/read-replica/ReadReplicaAdapter.d.ts +516 -0
  41. package/dist/advanced/read-replica/ReadReplicaAdapter.d.ts.map +1 -0
  42. package/dist/advanced/read-replica/ReadReplicaManager.d.ts +68 -0
  43. package/dist/advanced/read-replica/ReadReplicaManager.d.ts.map +1 -0
  44. package/dist/advanced/read-replica/UseReplica.decorator.d.ts +24 -0
  45. package/dist/advanced/read-replica/UseReplica.decorator.d.ts.map +1 -0
  46. package/dist/advanced/read-replica/index.d.ts +3 -0
  47. package/dist/advanced/read-replica/index.d.ts.map +1 -0
  48. package/dist/advanced/sharding/ShardKey.d.ts +80 -0
  49. package/dist/advanced/sharding/ShardKey.d.ts.map +1 -0
  50. package/dist/advanced/sharding/ShardRouter.d.ts +66 -0
  51. package/dist/advanced/sharding/ShardRouter.d.ts.map +1 -0
  52. package/dist/advanced/sharding/index.d.ts +3 -0
  53. package/dist/advanced/sharding/index.d.ts.map +1 -0
  54. package/dist/builder/query/index.d.ts +7 -0
  55. package/dist/builder/query/index.d.ts.map +1 -0
  56. package/dist/builder/query/orm.d.ts +22 -0
  57. package/dist/builder/query/orm.d.ts.map +1 -0
  58. package/dist/builder/query/sql.d.ts +29 -0
  59. package/dist/builder/query/sql.d.ts.map +1 -0
  60. package/dist/extensions/AuditExtension.d.ts +468 -0
  61. package/dist/extensions/AuditExtension.d.ts.map +1 -0
  62. package/dist/extensions/CachingAdapter.d.ts +451 -0
  63. package/dist/extensions/CachingAdapter.d.ts.map +1 -0
  64. package/dist/extensions/EncryptionExtension.d.ts +95 -0
  65. package/dist/extensions/EncryptionExtension.d.ts.map +1 -0
  66. package/dist/extensions/ReadReplicaAdapter.d.ts +32 -0
  67. package/dist/extensions/ReadReplicaAdapter.d.ts.map +1 -0
  68. package/dist/extensions/SoftDeleteExtension.d.ts +430 -0
  69. package/dist/extensions/SoftDeleteExtension.d.ts.map +1 -0
  70. package/dist/extensions/index.d.ts +79 -0
  71. package/dist/extensions/index.d.ts.map +1 -0
  72. package/dist/factory/AdapterFactory.d.ts +111 -0
  73. package/dist/factory/AdapterFactory.d.ts.map +1 -0
  74. package/dist/factory/createDatabaseService.d.ts +121 -0
  75. package/dist/factory/createDatabaseService.d.ts.map +1 -0
  76. package/dist/index.cjs +8518 -0
  77. package/dist/index.cjs.map +1 -0
  78. package/dist/index.d.ts +19 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.mjs +8480 -0
  81. package/dist/index.mjs.map +1 -0
  82. package/dist/repository/BaseRepository.d.ts +209 -0
  83. package/dist/repository/BaseRepository.d.ts.map +1 -0
  84. package/dist/repository/index.d.ts +80 -0
  85. package/dist/repository/index.d.ts.map +1 -0
  86. package/dist/security/index.cjs +118 -0
  87. package/dist/security/index.cjs.map +1 -0
  88. package/dist/security/index.d.ts +3 -0
  89. package/dist/security/index.d.ts.map +1 -0
  90. package/dist/security/index.mjs +114 -0
  91. package/dist/security/index.mjs.map +1 -0
  92. package/dist/security/sanitizers/html.sanitizer.d.ts +31 -0
  93. package/dist/security/sanitizers/html.sanitizer.d.ts.map +1 -0
  94. package/dist/security/serializers/DataValidation.d.ts +34 -0
  95. package/dist/security/serializers/DataValidation.d.ts.map +1 -0
  96. package/dist/service/DatabaseService.d.ts +136 -0
  97. package/dist/service/DatabaseService.d.ts.map +1 -0
  98. package/dist/service/EventEmitter.d.ts +110 -0
  99. package/dist/service/EventEmitter.d.ts.map +1 -0
  100. package/dist/service/HealthManager.d.ts +166 -0
  101. package/dist/service/HealthManager.d.ts.map +1 -0
  102. package/dist/utils/ConfigMerger.d.ts +227 -0
  103. package/dist/utils/ConfigMerger.d.ts.map +1 -0
  104. package/dist/utils/databaseResultHelpers.d.ts +98 -0
  105. package/dist/utils/databaseResultHelpers.d.ts.map +1 -0
  106. package/dist/utils/index.d.ts +7 -0
  107. package/dist/utils/index.d.ts.map +1 -0
  108. package/dist/utils/normalizeDetails.d.ts +111 -0
  109. package/dist/utils/normalizeDetails.d.ts.map +1 -0
  110. package/dist/utils/pagination.d.ts +77 -0
  111. package/dist/utils/pagination.d.ts.map +1 -0
  112. package/dist/utils/regex.d.ts +199 -0
  113. package/dist/utils/regex.d.ts.map +1 -0
  114. package/dist/utils/typeGuards.d.ts +57 -0
  115. package/dist/utils/typeGuards.d.ts.map +1 -0
  116. package/dist/utils/validation.d.ts +146 -0
  117. package/dist/utils/validation.d.ts.map +1 -0
  118. package/package.json +156 -0
@@ -0,0 +1,136 @@
1
+ /**
2
+ * @fileoverview Internal Database Service Implementation for @plyaz/db package
3
+ *
4
+ * This module provides the internal DatabaseService class that orchestrates all database
5
+ * operations. It is NOT exported and is created internally by the createDatabaseService() factory.
6
+ *
7
+ * Part of the @plyaz/db package - a TypeScript database abstraction layer with
8
+ * support for multiple adapters (Drizzle, Supabase, SQL), extensions (audit, encryption,
9
+ * soft delete), and advanced features (caching, read replicas, multi-tenancy).
10
+ *
11
+ */
12
+ import { DatabaseEventEmitter } from "./EventEmitter";
13
+ import type { AuditContext, BatchUpdate, CreateInput, DatabaseAdapterType, DatabaseEvent, DatabaseEvents, DatabaseHealthStatus, DatabaseResult, DatabaseServiceConfig, DatabaseServiceInterface, Filter, OperationConfig, PaginatedResult, QueryOptions, ServiceStatus, TableName, TransactionFn, UpdateInput } from "@plyaz/types/db";
14
+ /**
15
+ * 🛠️ DATABASE SERVICE - Internal Service Layer
16
+ *
17
+ * Core service implementation that orchestrates all database operations.
18
+ * NOT EXPORTED - created internally by createDatabaseService() factory.
19
+ *
20
+ * **Application Flow Position:**
21
+ * createDatabaseService() → **DatabaseService** → Adapter Chain → Database
22
+ *
23
+ * **What this class does:**
24
+ * 1. Stores global configuration from createDatabaseService()
25
+ * 2. Receives calls from repositories via IDatabaseService interface
26
+ * 3. Merges per-operation config with global config using ConfigMerger
27
+ * 4. Fires before/after events (onBeforeWrite, onAfterWrite, etc.)
28
+ * 5. Delegates to adapter chain with resolved configuration
29
+ * 6. Returns results back to repositories
30
+ *
31
+ * **Called by:** Repository layer (BaseRepository, UserRepository, etc.)
32
+ * **Calls:** ConfigMerger.mergeConfigs(), adapter chain methods, event handlers
33
+ * **Delegates to:** Final wrapped adapter (ReadReplicaAdapter → AuditAdapter → ... → BaseAdapter)
34
+ *
35
+ * **Key Responsibilities:**
36
+ * - Configuration merging and resolution
37
+ * - Event system orchestration
38
+ * - Audit context management
39
+ * - Error handling and propagation
40
+ * - Service status tracking
41
+ *
42
+ * @internal This class is not part of the public API
43
+ */
44
+ export declare class DatabaseService implements DatabaseServiceInterface {
45
+ private readonly globalConfig;
46
+ private readonly adapter;
47
+ private readonly eventHandlers;
48
+ private readonly eventEmitter;
49
+ private readonly healthManager;
50
+ private readonly startTime;
51
+ private auditContext;
52
+ constructor(config: {
53
+ adapter: DatabaseAdapterType;
54
+ globalConfig: DatabaseServiceConfig;
55
+ eventHandlers?: DatabaseEvents;
56
+ });
57
+ /**
58
+ * 🔍 Get a single record by ID
59
+ *
60
+ * **Flow:** Repository.findById() → **DatabaseService.get()** → ConfigMerger → Adapter Chain → Database
61
+ *
62
+ * **What happens:**
63
+ * 1. Merges operation config with global config using ConfigMerger
64
+ * 2. Fires onBeforeRead event (if configured)
65
+ * 3. Delegates to adapter chain: ReadReplica → Audit → Cache → SoftDelete → Encryption → Base
66
+ * 4. Fires onAfterRead event on success
67
+ * 5. Returns result to repository
68
+ *
69
+ * **Called by:** BaseRepository.findById(), custom repository methods
70
+ * **Calls:** ConfigMerger.mergeConfigs(), this.adapter.findById(), event handlers
71
+ *
72
+ * @param table Table name (from Tables enum)
73
+ * @param id Record ID to retrieve
74
+ * @param operationConfig Optional per-operation configuration overrides
75
+ * @returns Promise resolving to the record or null if not found
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * // Called by UserRepository.findById()
80
+ * const user = await this.db.get(Tables.USERS, 'user-123');
81
+ *
82
+ * // With operation config override
83
+ * const user = await this.db.get(Tables.USERS, 'user-123', {
84
+ * forceAdapter: 'primary', // Force primary DB
85
+ * cache: { enabled: false } // Skip cache
86
+ * });
87
+ * ```
88
+ */
89
+ get<T>(table: TableName, id: string, operationConfig?: OperationConfig): Promise<DatabaseResult<T | null>>;
90
+ /**
91
+ * List records with optional filtering, sorting, and pagination
92
+ * Merges operation config with global config before delegating
93
+ */
94
+ list<T>(table: TableName, options?: QueryOptions, operationConfig?: OperationConfig): Promise<DatabaseResult<PaginatedResult<T>>>;
95
+ /**
96
+ * Create a new record
97
+ * Merges operation config with global config before delegating
98
+ */
99
+ create<T>(table: TableName, input: CreateInput<T>, operationConfig?: OperationConfig): Promise<DatabaseResult<T>>;
100
+ /**
101
+ * Update an existing record
102
+ * Merges operation config with global config before delegating
103
+ */
104
+ update<T>(table: TableName, id: string, input: UpdateInput<T>, operationConfig?: OperationConfig): Promise<DatabaseResult<T>>;
105
+ /**
106
+ * Delete a record
107
+ * Merges operation config with global config before delegating
108
+ */
109
+ delete(table: TableName, id: string, operationConfig?: OperationConfig): Promise<DatabaseResult<void>>;
110
+ batchCreate<T>(table: TableName, inputs: CreateInput<T>[], operationConfig?: OperationConfig): Promise<DatabaseResult<T[]>>;
111
+ batchUpdate<T>(table: TableName, updates: BatchUpdate<T>[], operationConfig?: OperationConfig): Promise<DatabaseResult<T[]>>;
112
+ batchDelete(table: TableName, ids: string[], operationConfig?: OperationConfig): Promise<DatabaseResult<void>>;
113
+ query<T>(table: TableName, query: QueryOptions, operationConfig?: OperationConfig): Promise<DatabaseResult<PaginatedResult<T>>>;
114
+ count(table: TableName, filter?: Filter, operationConfig?: OperationConfig): Promise<DatabaseResult<number>>;
115
+ transaction<T>(fn: TransactionFn<T>): Promise<DatabaseResult<T>>;
116
+ setAuditContext(context: AuditContext): Promise<DatabaseResult<void>>;
117
+ on<T extends DatabaseEvent["type"]>(event: T, handler: (event: Extract<DatabaseEvent, {
118
+ type: T;
119
+ }>) => void | Promise<void>): void;
120
+ off<T extends DatabaseEvent["type"]>(event: T, handler: (event: Extract<DatabaseEvent, {
121
+ type: T;
122
+ }>) => void | Promise<void>): void;
123
+ healthCheck(): Promise<DatabaseResult<DatabaseHealthStatus>>;
124
+ getStatus(): ServiceStatus;
125
+ findById<T>(table: string, id: string): Promise<DatabaseResult<T | null>>;
126
+ findMany<T>(table: string, options?: QueryOptions): Promise<DatabaseResult<PaginatedResult<T>>>;
127
+ initialize(): Promise<DatabaseResult<void>>;
128
+ registerTable(): void;
129
+ exists(table: string, id: string): Promise<DatabaseResult<boolean>>;
130
+ private fireBeforeReadEvent;
131
+ private fireAfterReadEvent;
132
+ findOne<T>(table: TableName, filter: Filter, operationConfig?: OperationConfig): Promise<DatabaseResult<T | null>>;
133
+ softDelete(table: TableName, id: string, operationConfig?: OperationConfig): Promise<DatabaseResult<void>>;
134
+ get events(): DatabaseEventEmitter;
135
+ }
136
+ //# sourceMappingURL=DatabaseService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseService.d.ts","sourceRoot":"","sources":["../../src/service/DatabaseService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @fileoverview DatabaseEventEmitter - Event management for database operations
3
+ *
4
+ * Provides a comprehensive event system for monitoring and reacting to database
5
+ * operations. The DatabaseEventEmitter implements the Observer pattern to enable
6
+ * decoupled monitoring of database activities, allowing multiple components to
7
+ * subscribe to and react to various database events.
8
+ *
9
+ * **Application Flow Context:**
10
+ * ```
11
+ * Database Operations → DatabaseEventEmitter → Event Handlers
12
+ * ↓ ↓ ↓
13
+ * Query Execution → Event Emission → Logging
14
+ * Transaction → Handler Dispatch → Monitoring
15
+ * Health Changes → Error Handling → Alerting
16
+ * ```
17
+ *
18
+ * **Supported Events:**
19
+ * - **BeforeQuery**: Emitted before database queries
20
+ * - **AfterQuery**: Emitted after successful queries
21
+ * - **QueryError**: Emitted when queries fail
22
+ * - **BeforeTransaction**: Emitted before transactions start
23
+ * - **AfterTransaction**: Emitted after transactions complete
24
+ * - **TransactionRollback**: Emitted when transactions rollback
25
+ * - **HealthChange**: Emitted when database health status changes
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * // Event emitter setup
30
+ * const eventEmitter = new DatabaseEventEmitter('drizzle');
31
+ *
32
+ * // Subscribe to query events
33
+ * eventEmitter.on('BeforeQuery', (event) => {
34
+ * console.log(`Executing ${event.operation} on ${event.table}`);
35
+ * });
36
+ *
37
+ * eventEmitter.on('QueryError', (event) => {
38
+ * console.error(`Query failed: ${event.error.message}`);
39
+ * });
40
+ *
41
+ * // Emit events during database operations
42
+ * eventEmitter.emitBeforeQuery('users', 'SELECT', { id: '123' });
43
+ * ```
44
+ *
45
+ */
46
+ import type { ContextType } from "@nestjs/common";
47
+ import type { DatabaseEvent, DatabaseOperationType, DBEventHandler } from "@plyaz/types";
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
+ /**
60
+ * Event emitter for database events that implements the observer pattern.
61
+ * This class manages event subscriptions and emissions for various database operations,
62
+ * allowing decoupled monitoring of database activities.
63
+ *
64
+ * @class
65
+ * @implements {DatabaseEventEmitter}
66
+ */
67
+ export declare class DatabaseEventEmitter implements DatabaseEventEmitter {
68
+ private readonly adapter;
69
+ private readonly eventHandlers;
70
+ constructor(adapter: ADAPTERS);
71
+ /**
72
+ * Register an event handler for a specific event type
73
+ */
74
+ on<T extends DatabaseEvent>(eventType: T["type"], handler: DBEventHandler<T>): void;
75
+ /**
76
+ * Remove an event handler for a specific event type
77
+ */
78
+ off<T extends DatabaseEvent>(eventType: T["type"], handler: DBEventHandler<T>): void;
79
+ /**
80
+ * Emit an event to all registered handlers
81
+ */
82
+ emit(event: DatabaseEvent): void;
83
+ /**
84
+ * Emit a before query event
85
+ */
86
+ emitBeforeQuery(table: string, operation: DatabaseOperationType, params?: Record<string, object>, context?: ContextType): void;
87
+ /**
88
+ * Emit an after query event
89
+ */
90
+ emitAfterQuery(table: string, operation: DatabaseOperationType, duration: number, affectedRows?: number): void;
91
+ emitQueryError(options: EmitQueryErrorOptions): void;
92
+ /**
93
+ * Emit a before transaction event
94
+ */
95
+ emitBeforeTransaction(transactionId: string, context?: ContextType): void;
96
+ /**
97
+ * Emit an after transaction event
98
+ */
99
+ emitAfterTransaction(transactionId: string, duration: number): void;
100
+ /**
101
+ * Emit a transaction rollback event
102
+ */
103
+ emitTransactionRollback(transactionId: string, error?: Error): void;
104
+ /**
105
+ * Emit a health change event
106
+ */
107
+ emitHealthChange(previousStatus: boolean, currentStatus: boolean, details?: Record<string, string | number | boolean>): void;
108
+ }
109
+ export {};
110
+ //# sourceMappingURL=EventEmitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../src/service/EventEmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAKV,aAAa,EACb,qBAAqB,EACrB,cAAc,EAIf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM7C;;GAEG;AACH,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,qBAAqB,CAAC;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;;;;;;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,WAAW,GACpB,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,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;IAWzE;;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"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * @fileoverview Health Manager for @plyaz/db package
3
+ *
4
+ * This module provides the HealthManager class responsible for monitoring database
5
+ * connection health, performing periodic health checks, and managing the lifecycle
6
+ * of database connections. It provides a centralized way to track database status.
7
+ *
8
+ * Part of the @plyaz/db package - a TypeScript database abstraction layer with
9
+ * support for multiple adapters (Drizzle, Supabase, SQL), extensions (audit, encryption,
10
+ * soft delete), and advanced features (caching, read replicas, multi-tenancy).
11
+ *
12
+ */
13
+ import type { DatabaseAdapterType, DatabaseHealthStatus, DatabaseResult } from "@plyaz/types/db";
14
+ /**
15
+ * 🌡️ HEALTH MANAGER - Database Health Monitoring
16
+ *
17
+ * Manages database health checks and monitoring functionality for all database adapters.
18
+ * This class is responsible for performing health checks on the database connection,
19
+ * storing the last known health status, and providing methods to quickly check
20
+ * the current health state of the database.
21
+ *
22
+ * **Application Flow Position:**
23
+ * DatabaseService → **HealthManager** → Adapter.healthCheck() → Database
24
+ *
25
+ * **What this class does:**
26
+ * 1. Initializes database connections on startup
27
+ * 2. Performs periodic health checks via adapter.healthCheck()
28
+ * 3. Caches last known health status for quick access
29
+ * 4. Normalizes health details across different adapters
30
+ * 5. Manages connection lifecycle (connect/disconnect)
31
+ *
32
+ * **Called by:** DatabaseService.healthCheck(), application health endpoints
33
+ * **Calls:** DatabaseAdapter.healthCheck(), DatabaseAdapter.connect/disconnect
34
+ * **Used for:** Application health monitoring, load balancer health checks
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * // Create health manager with adapter
39
+ * const healthManager = new HealthManager(drizzleAdapter);
40
+ *
41
+ * // Initialize connection and perform initial health check
42
+ * await healthManager.init();
43
+ *
44
+ * // Perform health check
45
+ * const healthResult = await healthManager.checkHealth();
46
+ * if (healthResult.success) {
47
+ * console.log('Database is healthy:', healthResult.value);
48
+ * }
49
+ *
50
+ * // Quick health status check (uses cached result)
51
+ * const isHealthy = healthManager.isHealthy();
52
+ *
53
+ * // Get last known status without new check
54
+ * const lastStatus = healthManager.getLastHealthStatus();
55
+ *
56
+ * // Cleanup on shutdown
57
+ * await healthManager.shutdown();
58
+ * ```
59
+ *
60
+ */
61
+ export declare class HealthManager {
62
+ private readonly adapter;
63
+ private lastHealthStatus;
64
+ private initialized;
65
+ constructor(adapter: DatabaseAdapterType);
66
+ /**
67
+ * Initializes the health manager by establishing database connection and performing initial health check
68
+ *
69
+ * Sets up the database connection and performs an initial health check to establish
70
+ * baseline health status. This method should be called during application startup
71
+ * to ensure the database is ready for operations.
72
+ *
73
+ * **Initialization Process:**
74
+ * 1. Checks if already initialized (prevents double initialization)
75
+ * 2. Calls adapter.connect() if available (establishes connection)
76
+ * 3. Performs initial health check via checkHealth()
77
+ * 4. Sets initialized flag to prevent re-initialization
78
+ *
79
+ * @returns {Promise<void>} Promise that resolves when initialization is complete
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * const healthManager = new HealthManager(adapter);
84
+ *
85
+ * // Initialize during application startup
86
+ * await healthManager.init();
87
+ * console.log('Health manager initialized');
88
+ *
89
+ * // Subsequent calls are no-ops
90
+ * await healthManager.init(); // Does nothing, already initialized
91
+ * ```
92
+ *
93
+ */
94
+ init(): Promise<void>;
95
+ /**
96
+ * Performs a comprehensive health check on the database connection
97
+ *
98
+ * Executes a health check via the database adapter and normalizes the results
99
+ * into a standardized health status format. Measures response time and handles
100
+ * both successful and failed health checks gracefully.
101
+ *
102
+ * **Health Check Process:**
103
+ * 1. Records start time for response time measurement
104
+ * 2. Calls adapter.healthCheck() to test database connectivity
105
+ * 3. Normalizes adapter-specific response into standard format
106
+ * 4. Caches result as lastHealthStatus for quick access
107
+ * 5. Returns standardized DatabaseResult with health information
108
+ *
109
+ * **Health Status Fields:**
110
+ * - isHealthy: Boolean indicating if database is operational
111
+ * - responseTime: Time in milliseconds for health check to complete
112
+ * - details: Normalized adapter-specific details (connection info, errors, etc.)
113
+ *
114
+ * @returns {Promise<DatabaseResult<DatabaseHealthStatus>>} Promise resolving to health status result
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * // Perform health check
119
+ * const healthResult = await healthManager.checkHealth();
120
+ *
121
+ * if (healthResult.success) {
122
+ * const status = healthResult.value;
123
+ * console.log(`Database healthy: ${status.isHealthy}`);
124
+ * console.log(`Response time: ${status.responseTime}ms`);
125
+ * console.log('Details:', status.details);
126
+ * } else {
127
+ * console.error('Health check failed:', healthResult.error.message);
128
+ * }
129
+ *
130
+ * // Example healthy response:
131
+ * // {
132
+ * // success: true,
133
+ * // value: {
134
+ * // isHealthy: true,
135
+ * // responseTime: 45,
136
+ * // details: { adapter: "drizzle", connections: "5" }
137
+ * // }
138
+ * // }
139
+ *
140
+ * // Example unhealthy response:
141
+ * // {
142
+ * // success: true,
143
+ * // value: {
144
+ * // isHealthy: false,
145
+ * // responseTime: 5000,
146
+ * // details: { error: "Connection timeout" }
147
+ * // }
148
+ * // }
149
+ * ```
150
+ *
151
+ */
152
+ checkHealth(): Promise<DatabaseResult<DatabaseHealthStatus>>;
153
+ /**
154
+ * Get the last known health status
155
+ */
156
+ getLastHealthStatus(): DatabaseHealthStatus | null;
157
+ /**
158
+ * Check if the database is currently healthy
159
+ */
160
+ isHealthy(): boolean;
161
+ /**
162
+ * Gracefully shut down the health manager
163
+ */
164
+ shutdown(): Promise<void>;
165
+ }
166
+ //# sourceMappingURL=HealthManager.d.ts.map
@@ -0,0 +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,EACf,MAAM,iBAAiB,CAAC;AAMzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAAa,aAAa;IAIZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,WAAW,CAAS;gBAEC,OAAO,EAAE,mBAAmB;IAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwDG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IAsClE;;OAEG;IACH,mBAAmB,IAAI,oBAAoB,GAAG,IAAI;IAIlD;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAQhC"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * @fileoverview Configuration Merger for @plyaz/db package
3
+ *
4
+ * This module provides the ConfigMerger utility class responsible for deep merging
5
+ * database configurations. It handles merging global database service configuration
6
+ * with per-operation overrides to create resolved configurations for the adapter chain.
7
+ *
8
+ * Part of the @plyaz/db package - a TypeScript database abstraction layer with
9
+ * support for multiple adapters (Drizzle, Supabase, SQL), extensions (audit, encryption,
10
+ * soft delete), and advanced features (caching, read replicas, multi-tenancy).
11
+ */
12
+ import type { DatabaseServiceConfig, OperationConfig, ResolvedOperationConfig } from "@plyaz/types/db";
13
+ /**
14
+ * CONFIG MERGER - Configuration Resolution Engine
15
+ *
16
+ * Utility class for deep merging database configurations.
17
+ * Handles merging global database service configuration with per-operation overrides
18
+ *
19
+ * Application Flow Position:**
20
+ * DatabaseService → **ConfigMerger** → Resolved Config → Adapter Chain
21
+ *
22
+ * **What this class does:**
23
+ * 1. Receives global config (from createDatabaseService) and operation config (from method calls)
24
+ * 2. Deep merges nested objects (encryption, softDelete, cache, etc.)
25
+ * 3. Operation config takes precedence over global config
26
+ * 4. Returns resolved configuration for adapter chain
27
+ *
28
+ * **Called by:** DatabaseService methods (get, create, update, delete, etc.)
29
+ * **Calls:** Internal merge methods for each config section
30
+ * **Returns to:** DatabaseService for delegation to adapter chain
31
+ *
32
+ * **Merge Strategy:**
33
+ * - Operation config overrides global config
34
+ * - Nested objects are deep merged (not replaced)
35
+ * - Arrays use replace strategy for fields, concat for others
36
+ * - Undefined values in operation config fall back to global defaults
37
+ *
38
+ * @example
39
+ * ### Configuration Merging Flow
40
+ * ```typescript
41
+ * // Global config (from createDatabaseService)
42
+ * const globalConfig = {
43
+ * softDelete: { enabled: true, field: 'deletedAt' },
44
+ * cache: { enabled: true, ttl: 300 }
45
+ * };
46
+ *
47
+ * // Operation config (from method call)
48
+ * const operationConfig = {
49
+ * cache: { enabled: false },
50
+ * includeSoftDeleted: true
51
+ * };
52
+ *
53
+ * // ConfigMerger.mergeConfigs() produces:
54
+ * const resolved = {
55
+ * softDelete: { enabled: true, field: 'deletedAt' }, // From global
56
+ * cache: { enabled: false, ttl: 300 }, // Merged
57
+ * includeSoftDeleted: true, // From operation
58
+ * skipAudit: false // Default
59
+ * };
60
+ * ```
61
+ */
62
+ export declare class ConfigMerger {
63
+ /**
64
+ * Merges global database configuration with operation-specific overrides
65
+ *
66
+ * This is the main entry point for configuration resolution in the DatabaseService.
67
+ * It performs deep merging of nested configuration objects while preserving type safety
68
+ * and applying proper precedence rules.
69
+ *
70
+ * **Merge Precedence (highest to lowest):**
71
+ * 1. Operation-specific config (method-level overrides)
72
+ * 2. Global service config (from createDatabaseService)
73
+ * 3. Default values (built-in fallbacks)
74
+ *
75
+ * **Configuration Sections Merged:**
76
+ * - softDelete: Logical deletion settings
77
+ * - encryption: Field-level encryption settings
78
+ * - cache: Caching behavior and TTL
79
+ * - timestamps: Automatic timestamp management
80
+ * - Operation flags: skipAudit, includeSoftDeleted, etc.
81
+ *
82
+ * @param {DatabaseServiceConfig} global - Global database service configuration from createDatabaseService()
83
+ * @param {OperationConfig} [operation] - Optional operation-specific configuration overrides
84
+ * @returns {ResolvedOperationConfig} Fully resolved configuration with all defaults applied
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * // In DatabaseService.get() method
89
+ * const resolvedConfig = ConfigMerger.mergeConfigs(
90
+ * this.globalConfig, // From createDatabaseService
91
+ * operationConfig // From method parameter
92
+ * );
93
+ *
94
+ * // Example global config
95
+ * const globalConfig = {
96
+ * softDelete: { enabled: true, field: 'deletedAt' },
97
+ * encryption: { enabled: true, fields: { users: ['ssn'] } },
98
+ * cache: { enabled: true, ttl: 300 }
99
+ * };
100
+ *
101
+ * // Example operation config (disable cache for this operation)
102
+ * const operationConfig = {
103
+ * cache: { enabled: false },
104
+ * skipAudit: true
105
+ * };
106
+ *
107
+ * // Resulting merged config
108
+ * const result = {
109
+ * softDelete: { enabled: true, field: 'deletedAt' }, // From global
110
+ * encryption: { enabled: true, fields: { users: ['ssn'] } }, // From global
111
+ * cache: { enabled: false, ttl: 300 }, // Merged (enabled overridden)
112
+ * timestamps: undefined, // Not specified
113
+ * skipAudit: true, // From operation
114
+ * includeSoftDeleted: false, // Default
115
+ * forceAdapter: undefined, // Not specified
116
+ * timeout: 30000 // Default
117
+ * };
118
+ * ```
119
+ *
120
+ */
121
+ static mergeConfigs(global: DatabaseServiceConfig, operation?: OperationConfig): ResolvedOperationConfig;
122
+ /**
123
+ * Merges soft delete configuration with operation-specific overrides
124
+ *
125
+ * Handles deep merging of soft delete settings, allowing operation-level
126
+ * overrides while preserving base configuration values.
127
+ *
128
+ * @private
129
+ * @param {SoftDeleteConfig} [base] - Base soft delete configuration from global config
130
+ * @param {Partial<SoftDeleteConfig>} [override] - Operation-specific soft delete overrides
131
+ * @returns {SoftDeleteConfig | undefined} Merged soft delete configuration or undefined if neither provided
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * // Base config: { enabled: true, field: 'deletedAt', excludeTables: ['logs'] }
136
+ * // Override: { enabled: false }
137
+ * // Result: { enabled: false, field: 'deletedAt', excludeTables: ['logs'] }
138
+ * ```
139
+ *
140
+ */
141
+ private static mergeSoftDeleteConfig;
142
+ /**
143
+ * Merges encryption configuration with operation-specific overrides
144
+ *
145
+ * Handles deep merging of field-level encryption settings, allowing operation-level
146
+ * overrides for encryption behavior while preserving base configuration.
147
+ *
148
+ * @private
149
+ * @param {DBEncryptionConfig} [base] - Base encryption configuration from global config
150
+ * @param {Partial<DBEncryptionConfig>} [override] - Operation-specific encryption overrides
151
+ * @returns {DBEncryptionConfig | undefined} Merged encryption configuration or undefined if neither provided
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * // Base config: { enabled: true, key: 'base64key', fields: { users: ['ssn'] } }
156
+ * // Override: { enabled: false }
157
+ * // Result: { enabled: false, key: 'base64key', fields: { users: ['ssn'] } }
158
+ * ```
159
+ *
160
+ */
161
+ private static mergeEncryptionConfig;
162
+ /**
163
+ * Merges cache configuration with operation-specific overrides
164
+ *
165
+ * Handles deep merging of caching settings, allowing operation-level
166
+ * overrides for cache behavior (enable/disable, TTL changes, etc.).
167
+ *
168
+ * @private
169
+ * @param {DBCacheConfig} [base] - Base cache configuration from global config
170
+ * @param {Partial<DBCacheConfig>} [override] - Operation-specific cache overrides
171
+ * @returns {DBCacheConfig | undefined} Merged cache configuration or undefined if neither provided
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * // Base config: { enabled: true, ttl: 300, provider: 'redis' }
176
+ * // Override: { enabled: false }
177
+ * // Result: { enabled: false, ttl: 300, provider: 'redis' }
178
+ * ```
179
+ *
180
+
181
+ */
182
+ private static mergeCacheConfig;
183
+ /**
184
+ * Merges timestamps configuration with operation-specific overrides
185
+ *
186
+ * Handles deep merging of automatic timestamp settings, allowing operation-level
187
+ * overrides for timestamp field names and auto-update behavior.
188
+ *
189
+ * @private
190
+ * @param {TimestampsConfig} [base] - Base timestamps configuration from global config
191
+ * @param {Partial<TimestampsConfig>} [override] - Operation-specific timestamp overrides
192
+ * @returns {TimestampsConfig | undefined} Merged timestamps configuration or undefined if neither provided
193
+ *
194
+ * @example
195
+ * ```typescript
196
+ * // Base config: { enabled: true, createdAtField: 'createdAt', updatedAtField: 'updatedAt' }
197
+ * // Override: { autoUpdate: false }
198
+ * // Result: { enabled: true, createdAtField: 'createdAt', updatedAtField: 'updatedAt', autoUpdate: false }
199
+ * ```
200
+ */
201
+ private static mergeTimestampsConfig;
202
+ /**
203
+ * Converts global database service configuration to resolved operation configuration
204
+ *
205
+ * Used when no operation-specific overrides are provided. Applies default values
206
+ * for operation-specific flags while preserving global configuration settings.
207
+ *
208
+ * @private
209
+ * @param {DatabaseServiceConfig} global - Global database service configuration
210
+ * @returns {ResolvedOperationConfig} Resolved configuration with defaults applied
211
+ *
212
+ * @example
213
+ * ```typescript
214
+ * // Global config: { softDelete: { enabled: true }, cache: { enabled: true, ttl: 300 } }
215
+ * // Result: {
216
+ * // softDelete: { enabled: true },
217
+ * // cache: { enabled: true, ttl: 300 },
218
+ * // skipAudit: false, // Default
219
+ * // includeSoftDeleted: false, // Default
220
+ * // timeout: 30000 // Default
221
+ * // }
222
+ * ```
223
+ *
224
+ */
225
+ private static convertGlobalToResolved;
226
+ }
227
+ //# sourceMappingURL=ConfigMerger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigMerger.d.ts","sourceRoot":"","sources":["../../src/utils/ConfigMerger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAGrB,eAAe,EACf,uBAAuB,EAGxB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,qBAAa,YAAY;IACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyDG;IACH,MAAM,CAAC,YAAY,CACjB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,CAAC,EAAE,eAAe,GAC1B,uBAAuB;IA0B1B;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAmBpC;;;;;;;;;;;;;;;;;;OAkBG;IAEH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAqBpC;;;;;;;;;;;;;;;;;;;OAmBG;IAEH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAoB/B;;;;;;;;;;;;;;;;;OAiBG;IAEH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAoBpC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAevC"}