@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 @@
1
+ {"version":3,"file":"RedisCache.d.ts","sourceRoot":"","sources":["../../../src/advanced/caching/RedisCache.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0MG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,UAAU,CAAS;IAG3B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;gBACS,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAKxD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAyB3E;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,GAAG,CAAC,CAAC,SAAS,MAAM,EACxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAgBhC;;;;;;;;;;;;;;;;;OAiBG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAqBrD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAwBvE;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,WAAW,CACT,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GACvD,MAAM;IAKT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAoBrD;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -0,0 +1,4 @@
1
+ export { RedisCache } from "./RedisCache";
2
+ export { Cacheable } from "./Cacheable.decorator";
3
+ export { CacheEvict } from "./CacheEvict.decorator";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/advanced/caching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,234 @@
1
+ import { type DatabaseResult, type DatabaseHealthStatus, type DynamicPoolConfig, type PoolMetrics } from "@plyaz/types/db";
2
+ /**
3
+ * Dynamic connection pool that automatically adjusts size based on load.
4
+ * Provides detailed metrics and health monitoring.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * const pool = new DynamicPool('postgres://localhost:5432/db', {
9
+ * min: 2,
10
+ * max: 20,
11
+ * scaling: {
12
+ * enabled: true,
13
+ * scaleUpThreshold: 80,
14
+ * scaleDownThreshold: 20,
15
+ * scaleInterval: 30000,
16
+ * maxScale: 5
17
+ * }
18
+ * });
19
+ *
20
+ * // Execute a query
21
+ * const result = await pool.query('SELECT * FROM users');
22
+ *
23
+ * // Get pool metrics
24
+ * const metrics = pool.getMetrics();
25
+ * console.log(`Active connections: ${metrics.activeConnections}`);
26
+ *
27
+ * // Health check
28
+ * const health = await pool.healthCheck();
29
+ * console.log(`Pool healthy: ${health.value?.isHealthy}`);
30
+ * ```
31
+ *
32
+ * @example
33
+ * ### High-Traffic Application
34
+ * ```typescript
35
+ * class DatabasePool {
36
+ * private pool: DynamicPool;
37
+ *
38
+ * constructor() {
39
+ * this.pool = new DynamicPool(process.env.DATABASE_URL, {
40
+ * min: 5,
41
+ * max: 50,
42
+ * scaling: {
43
+ * enabled: true,
44
+ * scaleUpThreshold: 75,
45
+ * scaleDownThreshold: 25,
46
+ * scaleInterval: 15000, // Check every 15 seconds
47
+ * maxScale: 10
48
+ * }
49
+ * });
50
+ * }
51
+ *
52
+ * async query<T>(sql: string, params: object[] = []): Promise<DatabaseResult<T[]>> {
53
+ * return this.pool.query<T>(sql, params);
54
+ * }
55
+ *
56
+ * async getHealthStatus(): Promise<DatabaseResult<HealthStatus>> {
57
+ * return this.pool.healthCheck();
58
+ * }
59
+ *
60
+ * async shutdown(): Promise<void> {
61
+ * await this.pool.end();
62
+ * }
63
+ * }
64
+ * ```
65
+ *
66
+ * @example
67
+ * ### Connection Pool Monitoring
68
+ * ```typescript
69
+ * class PoolMonitor {
70
+ * constructor(private pool: DynamicPool) {}
71
+ *
72
+ * async startMonitoring(): Promise<void> {
73
+ * setInterval(() => {
74
+ * const metrics = this.pool.getMetrics();
75
+ * const utilization = metrics.totalConnections > 0
76
+ * ? (metrics.activeConnections / metrics.totalConnections) * 100
77
+ * : 0;
78
+ *
79
+ * console.log(`Pool Utilization: ${utilization.toFixed(1)}%`);
80
+ * console.log(`Active: ${metrics.activeConnections}, Idle: ${metrics.idleConnections}`);
81
+ * console.log(`Waiting: ${metrics.waitingRequests}`);
82
+ *
83
+ * // Alert if pool is under pressure
84
+ * if (utilization > 90) {
85
+ * console.warn('Pool utilization is very high!');
86
+ * }
87
+ * }, 30000); // Every 30 seconds
88
+ * }
89
+ * }
90
+ * ```
91
+ *
92
+ * @example
93
+ * ### Auto-scaling Configuration
94
+ * ```typescript
95
+ * const poolConfig: DynamicPoolConfig = {
96
+ * min: 3,
97
+ * max: 30,
98
+ * idleTimeoutMillis: 60000, // 1 minute
99
+ * acquireTimeoutMillis: 5000, // 5 seconds
100
+ * scaling: {
101
+ * enabled: true,
102
+ * scaleUpThreshold: 80, // Scale up when 80% utilized
103
+ * scaleDownThreshold: 20, // Scale down when 20% idle
104
+ * scaleInterval: 10000, // Check every 10 seconds
105
+ * maxScale: 5 // Add/remove up to 5 connections at once
106
+ * }
107
+ * };
108
+ *
109
+ * const pool = new DynamicPool('postgres://localhost:5432/myapp', poolConfig);
110
+ * ```
111
+ */
112
+ export declare class DynamicPool {
113
+ private pool;
114
+ private config;
115
+ private metrics;
116
+ private scalingTimer?;
117
+ /**
118
+ * Creates a new DynamicPool instance.
119
+ * @param connectionString Database connection string
120
+ * @param config Pool configuration options
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * // Basic configuration
125
+ * const pool = new DynamicPool('postgres://localhost:5432/db');
126
+ *
127
+ * // Advanced configuration
128
+ * const pool = new DynamicPool('postgres://localhost:5432/db', {
129
+ * min: 5,
130
+ * max: 25,
131
+ * scaling: {
132
+ * enabled: true,
133
+ * scaleUpThreshold: 75,
134
+ * scaleInterval: 20000
135
+ * }
136
+ * });
137
+ * ```
138
+ */
139
+ constructor(connectionString: string, config?: Partial<DynamicPoolConfig>);
140
+ /**
141
+ * Sets up event listeners for the connection pool.
142
+ */
143
+ private setupEventListeners;
144
+ /**
145
+ * Starts the auto-scaling timer.
146
+ */
147
+ private startScalingTimer;
148
+ /**
149
+ * Adjusts pool size based on current load.
150
+ */
151
+ private adjustPoolSize;
152
+ /**
153
+ * Adjusts the pool connection count.
154
+ * @param newCount New connection count
155
+ */
156
+ private adjustPoolCount;
157
+ /**
158
+ * Executes a database query with timing and error tracking.
159
+ * @param sql SQL query string
160
+ * @param params Query parameters
161
+ * @returns Query result
162
+ *
163
+ * @example
164
+ * ```typescript
165
+ * // Simple query
166
+ * const result = await pool.query('SELECT * FROM users');
167
+ *
168
+ * // Query with parameters
169
+ * const result = await pool.query(
170
+ * 'SELECT * FROM users WHERE id = $1 AND active = $2',
171
+ * [123, true]
172
+ * );
173
+ *
174
+ * // Query with type safety
175
+ * const users = await pool.query<User>('SELECT * FROM users');
176
+ * ```
177
+ */
178
+ query<T extends object>(sql: string, params?: object[]): Promise<DatabaseResult<T[]>>;
179
+ /**
180
+ * Performs a health check on the connection pool.
181
+ * @returns Health status with detailed metrics
182
+ *
183
+ * @example
184
+ * ```typescript
185
+ * const health = await pool.healthCheck();
186
+ * if (health.success && health.value?.isHealthy) {
187
+ * console.log('Pool is healthy');
188
+ * console.log(`Response time: ${health.value.responseTime}ms`);
189
+ * } else {
190
+ * console.log('Pool health check failed');
191
+ * }
192
+ * ```
193
+ */
194
+ healthCheck(): Promise<DatabaseResult<DatabaseHealthStatus>>;
195
+ /**
196
+ * Gets current pool metrics.
197
+ * @returns Pool performance metrics
198
+ *
199
+ * @example
200
+ * ```typescript
201
+ * const metrics = pool.getMetrics();
202
+ * console.log(`Total connections: ${metrics.totalConnections}`);
203
+ * console.log(`Active connections: ${metrics.activeConnections}`);
204
+ * console.log(`Idle connections: ${metrics.idleConnections}`);
205
+ * console.log(`Average acquisition time: ${metrics.averageAcquisitionTime}ms`);
206
+ *
207
+ * // Calculate utilization rate
208
+ * const utilizationRate = metrics.totalConnections > 0
209
+ * ? (metrics.activeConnections / metrics.totalConnections) * 100
210
+ * : 0;
211
+ * console.log(`Utilization rate: ${utilizationRate.toFixed(1)}%`);
212
+ * ```
213
+ */
214
+ getMetrics(): PoolMetrics;
215
+ /**
216
+ * Closes all connections in the pool.
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * // Graceful shutdown
221
+ * async function shutdown() {
222
+ * console.log('Closing database connections...');
223
+ * await pool.end();
224
+ * console.log('Database connections closed');
225
+ * }
226
+ *
227
+ * // Handle process signals
228
+ * process.on('SIGTERM', shutdown);
229
+ * process.on('SIGINT', shutdown);
230
+ * ```
231
+ */
232
+ end(): Promise<void>;
233
+ }
234
+ //# sourceMappingURL=DynamicPool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicPool.d.ts","sourceRoot":"","sources":["../../../src/advanced/connection-pool/DynamicPool.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAIzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6GG;AAEH,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAOE;IACjB,OAAO,CAAC,YAAY,CAAC,CAAiC;IAEtD;;;;;;;;;;;;;;;;;;;;;OAqBG;gBAED,gBAAgB,EAAE,MAAM,EACxB,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAqBzC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA2C3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,cAAc;IA4BtB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,KAAK,CAAC,CAAC,SAAS,MAAM,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAM,EAAO,GACpB,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IA6C/B;;;;;;;;;;;;;;OAcG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IA2ClE;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,IAAI,WAAW;IAIzB;;;;;;;;;;;;;;;;OAgBG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB3B"}
@@ -0,0 +1,2 @@
1
+ export { DynamicPool } from "./DynamicPool";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/advanced/connection-pool/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from "./read-replica";
2
+ export * from "./caching";
3
+ export * from "./connection-pool";
4
+ export * from "./monitoring";
5
+ export * from "./backup";
6
+ export * from "./multi-tenancy";
7
+ export * from "./sharding";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/advanced/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,cAAc,WAAW,CAAC;AAG1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,cAAc,CAAC;AAG7B,cAAc,UAAU,CAAC;AAGzB,cAAc,iBAAiB,CAAC;AAGhC,cAAc,YAAY,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { EventEmitter } from "events";
2
+ import type { Alert, AlertRule } from "@plyaz/types";
3
+ /**
4
+ * Manages database alerts with configurable rules and automatic resolution.
5
+ * Provides real-time alerting for various database issues.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const alertManager = new AlertManager();
10
+ *
11
+ * // Add custom alert rule
12
+ * alertManager.addRule({
13
+ * id: 'high-error-rate',
14
+ * condition: (metrics) => (metrics.errorRate as number) > 5,
15
+ * message: (metrics) => `High error rate: ${metrics.errorRate}%`,
16
+ * severity: 'error',
17
+ * source: 'database'
18
+ * });
19
+ *
20
+ * // Evaluate metrics against rules
21
+ * const metrics = { errorRate: 7.2, poolUtilization: 85 };
22
+ * alertManager.evaluate(metrics);
23
+ *
24
+ * // Get active alerts
25
+ * const activeAlerts = alertManager.getActiveAlerts();
26
+ *
27
+ * // Resolve an alert
28
+ * alertManager.resolveAlert('alert-id');
29
+ * ```
30
+ */
31
+ export declare class AlertManager extends EventEmitter {
32
+ private alerts;
33
+ private alertRules;
34
+ private readonly logger;
35
+ constructor();
36
+ /**
37
+ * Sets up default alert rules for common database issues.
38
+ */
39
+ private setupDefaultRules;
40
+ /**
41
+ * Adds a custom alert rule.
42
+ * @param rule Alert rule definition
43
+ */
44
+ addRule(rule: AlertRule): void;
45
+ /**
46
+ * Evaluates metrics against all alert rules.
47
+ * @param metrics Database and pool metrics
48
+ */
49
+ evaluate(metrics: Record<string, object>): void;
50
+ /**
51
+ * Triggers an alert based on a rule.
52
+ * @param rule Alert rule that was triggered
53
+ * @param metrics Current metrics
54
+ */
55
+ private triggerAlert;
56
+ /**
57
+ * Marks an alert as resolved.
58
+ * @param alertId ID of the alert to resolve
59
+ */
60
+ resolveAlert(alertId: string): void;
61
+ /**
62
+ * Gets all currently active (unresolved) alerts.
63
+ * @returns Array of active alerts
64
+ */
65
+ getActiveAlerts(): Alert[];
66
+ /**
67
+ * Gets all alerts (both active and resolved).
68
+ * @returns Array of all alerts
69
+ */
70
+ getAllAlerts(): Alert[];
71
+ }
72
+ //# sourceMappingURL=AlertManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertManager.d.ts","sourceRoot":"","sources":["../../../src/advanced/monitoring/AlertManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAA6B,MAAM,cAAc,CAAC;AAGhF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;;IAOjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkEzB;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ/C;;;;OAIG;IACH,OAAO,CAAC,YAAY;IA2BpB;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASnC;;;OAGG;IACH,eAAe,IAAI,KAAK,EAAE;IAI1B;;;OAGG;IACH,YAAY,IAAI,KAAK,EAAE;CAGxB"}
@@ -0,0 +1,81 @@
1
+ import type { PoolMetrics, QueryMetrics } from "@plyaz/types";
2
+ import { EventEmitter } from "events";
3
+ /**
4
+ * Collects and analyzes database performance metrics.
5
+ * Provides insights into query performance, pool usage, and potential issues.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const collector = new MetricsCollector();
10
+ *
11
+ * // Record a query metric
12
+ * collector.recordQuery({
13
+ * query: 'SELECT * FROM users WHERE id = $1',
14
+ * duration: 45,
15
+ * timestamp: new Date(),
16
+ * success: true,
17
+ * table: 'users',
18
+ * operation: 'findById'
19
+ * });
20
+ *
21
+ * // Get top slow queries
22
+ * const slowQueries = collector.getTopSlowQueries(10);
23
+ *
24
+ * // Detect N+1 queries
25
+ * const nPlusOneQueries = collector.detectNPlusOneQueries();
26
+ *
27
+ * // Get query frequency
28
+ * const frequency = collector.getQueryFrequency();
29
+ * ```
30
+ */
31
+ export declare class MetricsCollector extends EventEmitter {
32
+ private queryMetrics;
33
+ private poolMetrics;
34
+ private alerts;
35
+ private readonly logger;
36
+ private readonly SLOW_QUERY_THRESHOLD;
37
+ private readonly POOL_EXHAUSTION_THRESHOLD;
38
+ private readonly REPLICA_LAG_THRESHOLD;
39
+ private readonly DISK_SPACE_THRESHOLD;
40
+ /**
41
+ * Records query execution metrics.
42
+ * @param metrics Query execution metrics
43
+ */
44
+ recordQuery(metrics: QueryMetrics): void;
45
+ /**
46
+ * Records connection pool metrics.
47
+ * @param metrics Pool performance metrics
48
+ */
49
+ recordPoolMetrics(metrics: PoolMetrics): void;
50
+ /**
51
+ * Gets the top slow queries.
52
+ * @param limit Number of queries to return
53
+ * @returns Array of slowest queries
54
+ */
55
+ getTopSlowQueries(limit?: number): QueryMetrics[];
56
+ /**
57
+ * Gets query frequency statistics.
58
+ * @returns Object mapping normalized queries to frequency counts
59
+ */
60
+ getQueryFrequency(): Record<string, number>;
61
+ /**
62
+ * Detects potential N+1 query patterns.
63
+ * @returns Array of suspicious queries with their execution counts
64
+ */
65
+ detectNPlusOneQueries(): {
66
+ query: string;
67
+ count: number;
68
+ }[];
69
+ /**
70
+ * Normalizes a query for frequency analysis.
71
+ * @param query Original SQL query
72
+ * @returns Normalized query string
73
+ */
74
+ private normalizeQuery;
75
+ /**
76
+ * Emits an alert event.
77
+ * @param message Alert message
78
+ */
79
+ private emitAlert;
80
+ }
81
+ //# sourceMappingURL=MetricsCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCollector.d.ts","sourceRoot":"","sources":["../../../src/advanced/monitoring/MetricsCollector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAM;IAChD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAE3C;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAkBxC;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IA2B7C;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,GAAE,MAAW,GAAG,YAAY,EAAE;IAOrD;;;OAGG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAW3C;;;OAGG;IACH,qBAAqB,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE;IAa3D;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAKtB;;;OAGG;IACH,OAAO,CAAC,SAAS;CASlB"}
@@ -0,0 +1,3 @@
1
+ export { MetricsCollector } from "./MetricsCollector";
2
+ export { AlertManager } from "./AlertManager";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/advanced/monitoring/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { TenantInfo } from "@plyaz/types";
2
+ /**
3
+ * Manages tenant context throughout the application using AsyncLocalStorage.
4
+ * Provides a way to isolate tenant-specific data and operations.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * const tenant: TenantInfo = {
9
+ * id: 'tenant-123',
10
+ * name: 'Acme Corp',
11
+ * schema: 'acme_corp'
12
+ * };
13
+ *
14
+ * // Run code within tenant context
15
+ * const result = await TenantContext.run(tenant, async () => {
16
+ * // This code has access to the tenant context
17
+ * const currentTenant = TenantContext.current();
18
+ * console.log(`Running as tenant: ${currentTenant?.name}`);
19
+ *
20
+ * // Perform tenant-specific operations
21
+ * return await userService.getUsers();
22
+ * });
23
+ *
24
+ * // Access current tenant from anywhere
25
+ * const current = TenantContext.current();
26
+ * if (current) {
27
+ * console.log(`Current tenant: ${current.name}`);
28
+ * }
29
+ * ```
30
+ */
31
+ export declare class TenantContext {
32
+ private static storage;
33
+ /**
34
+ * Runs a function within a specific tenant context.
35
+ * @param tenant Tenant information
36
+ * @param callback Function to execute within tenant context
37
+ * @returns Result of the callback function
38
+ */
39
+ static run<T>(tenant: TenantInfo, callback: () => Promise<T>): Promise<T>;
40
+ /**
41
+ * Gets the current tenant context.
42
+ * @returns Current tenant information or undefined if no context is set
43
+ */
44
+ static current(): TenantInfo | undefined;
45
+ /**
46
+ * Gets the current tenant context or throws an error if none is set.
47
+ * @returns Current tenant information
48
+ * @throws Error if no tenant context is available
49
+ */
50
+ static requireCurrent(): TenantInfo;
51
+ }
52
+ //# sourceMappingURL=TenantContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TenantContext.d.ts","sourceRoot":"","sources":["../../../src/advanced/multi-tenancy/TenantContext.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAuC;IAE7D;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzE;;;OAGG;IACH,MAAM,CAAC,OAAO,IAAI,UAAU,GAAG,SAAS;IAIxC;;;;OAIG;IACH,MAAM,CAAC,cAAc,IAAI,UAAU;CAepC"}