@bhushanpawar/sqldb 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +811 -0
  3. package/dist/best-practice-example.d.ts +35 -0
  4. package/dist/best-practice-example.d.ts.map +1 -0
  5. package/dist/best-practice-example.js +171 -0
  6. package/dist/best-practice-example.js.map +1 -0
  7. package/dist/cache/cache-key-builder.d.ts +17 -0
  8. package/dist/cache/cache-key-builder.d.ts.map +1 -0
  9. package/dist/cache/cache-key-builder.js +100 -0
  10. package/dist/cache/cache-key-builder.js.map +1 -0
  11. package/dist/cache/cache-manager.d.ts +22 -0
  12. package/dist/cache/cache-manager.d.ts.map +1 -0
  13. package/dist/cache/cache-manager.js +124 -0
  14. package/dist/cache/cache-manager.js.map +1 -0
  15. package/dist/cache/invalidation.d.ts +15 -0
  16. package/dist/cache/invalidation.d.ts.map +1 -0
  17. package/dist/cache/invalidation.js +59 -0
  18. package/dist/cache/invalidation.js.map +1 -0
  19. package/dist/client.d.ts +40 -0
  20. package/dist/client.d.ts.map +1 -0
  21. package/dist/client.js +146 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/connection/mariadb.d.ts +17 -0
  24. package/dist/connection/mariadb.d.ts.map +1 -0
  25. package/dist/connection/mariadb.js +116 -0
  26. package/dist/connection/mariadb.js.map +1 -0
  27. package/dist/connection/redis.d.ts +20 -0
  28. package/dist/connection/redis.d.ts.map +1 -0
  29. package/dist/connection/redis.js +168 -0
  30. package/dist/connection/redis.js.map +1 -0
  31. package/dist/demo-debug.d.ts +2 -0
  32. package/dist/demo-debug.d.ts.map +1 -0
  33. package/dist/demo-debug.js +36 -0
  34. package/dist/demo-debug.js.map +1 -0
  35. package/dist/discovery/dependency-graph.d.ts +20 -0
  36. package/dist/discovery/dependency-graph.d.ts.map +1 -0
  37. package/dist/discovery/dependency-graph.js +89 -0
  38. package/dist/discovery/dependency-graph.js.map +1 -0
  39. package/dist/discovery/relationship-parser.d.ts +10 -0
  40. package/dist/discovery/relationship-parser.d.ts.map +1 -0
  41. package/dist/discovery/relationship-parser.js +40 -0
  42. package/dist/discovery/relationship-parser.js.map +1 -0
  43. package/dist/discovery/schema-reader.d.ts +15 -0
  44. package/dist/discovery/schema-reader.d.ts.map +1 -0
  45. package/dist/discovery/schema-reader.js +82 -0
  46. package/dist/discovery/schema-reader.js.map +1 -0
  47. package/dist/hooks/hooks-manager.d.ts +22 -0
  48. package/dist/hooks/hooks-manager.d.ts.map +1 -0
  49. package/dist/hooks/hooks-manager.js +117 -0
  50. package/dist/hooks/hooks-manager.js.map +1 -0
  51. package/dist/index.d.ts +20 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +52 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/query/operations.d.ts +31 -0
  56. package/dist/query/operations.d.ts.map +1 -0
  57. package/dist/query/operations.js +204 -0
  58. package/dist/query/operations.js.map +1 -0
  59. package/dist/query/query-builder.d.ts +15 -0
  60. package/dist/query/query-builder.d.ts.map +1 -0
  61. package/dist/query/query-builder.js +169 -0
  62. package/dist/query/query-builder.js.map +1 -0
  63. package/dist/query/query-tracker.d.ts +13 -0
  64. package/dist/query/query-tracker.d.ts.map +1 -0
  65. package/dist/query/query-tracker.js +84 -0
  66. package/dist/query/query-tracker.js.map +1 -0
  67. package/dist/query/table-proxy.d.ts +11 -0
  68. package/dist/query/table-proxy.d.ts.map +1 -0
  69. package/dist/query/table-proxy.js +25 -0
  70. package/dist/query/table-proxy.js.map +1 -0
  71. package/dist/smart-cache/cache/cache-key-builder.d.ts +17 -0
  72. package/dist/smart-cache/cache/cache-key-builder.d.ts.map +1 -0
  73. package/dist/smart-cache/cache/cache-key-builder.js +100 -0
  74. package/dist/smart-cache/cache/cache-key-builder.js.map +1 -0
  75. package/dist/smart-cache/cache/cache-manager.d.ts +22 -0
  76. package/dist/smart-cache/cache/cache-manager.d.ts.map +1 -0
  77. package/dist/smart-cache/cache/cache-manager.js +124 -0
  78. package/dist/smart-cache/cache/cache-manager.js.map +1 -0
  79. package/dist/smart-cache/cache/invalidation.d.ts +15 -0
  80. package/dist/smart-cache/cache/invalidation.d.ts.map +1 -0
  81. package/dist/smart-cache/cache/invalidation.js +59 -0
  82. package/dist/smart-cache/cache/invalidation.js.map +1 -0
  83. package/dist/smart-cache/client.d.ts +36 -0
  84. package/dist/smart-cache/client.d.ts.map +1 -0
  85. package/dist/smart-cache/client.js +138 -0
  86. package/dist/smart-cache/client.js.map +1 -0
  87. package/dist/smart-cache/connection/mariadb.d.ts +14 -0
  88. package/dist/smart-cache/connection/mariadb.d.ts.map +1 -0
  89. package/dist/smart-cache/connection/mariadb.js +82 -0
  90. package/dist/smart-cache/connection/mariadb.js.map +1 -0
  91. package/dist/smart-cache/connection/redis.d.ts +20 -0
  92. package/dist/smart-cache/connection/redis.d.ts.map +1 -0
  93. package/dist/smart-cache/connection/redis.js +168 -0
  94. package/dist/smart-cache/connection/redis.js.map +1 -0
  95. package/dist/smart-cache/discovery/dependency-graph.d.ts +20 -0
  96. package/dist/smart-cache/discovery/dependency-graph.d.ts.map +1 -0
  97. package/dist/smart-cache/discovery/dependency-graph.js +89 -0
  98. package/dist/smart-cache/discovery/dependency-graph.js.map +1 -0
  99. package/dist/smart-cache/discovery/relationship-parser.d.ts +10 -0
  100. package/dist/smart-cache/discovery/relationship-parser.d.ts.map +1 -0
  101. package/dist/smart-cache/discovery/relationship-parser.js +40 -0
  102. package/dist/smart-cache/discovery/relationship-parser.js.map +1 -0
  103. package/dist/smart-cache/discovery/schema-reader.d.ts +15 -0
  104. package/dist/smart-cache/discovery/schema-reader.d.ts.map +1 -0
  105. package/dist/smart-cache/discovery/schema-reader.js +82 -0
  106. package/dist/smart-cache/discovery/schema-reader.js.map +1 -0
  107. package/dist/smart-cache/examples/basic-usage.d.ts +3 -0
  108. package/dist/smart-cache/examples/basic-usage.d.ts.map +1 -0
  109. package/dist/smart-cache/examples/basic-usage.js +105 -0
  110. package/dist/smart-cache/examples/basic-usage.js.map +1 -0
  111. package/dist/smart-cache/examples/hooks-example.d.ts +3 -0
  112. package/dist/smart-cache/examples/hooks-example.d.ts.map +1 -0
  113. package/dist/smart-cache/examples/hooks-example.js +133 -0
  114. package/dist/smart-cache/examples/hooks-example.js.map +1 -0
  115. package/dist/smart-cache/examples/relationships-example.d.ts +3 -0
  116. package/dist/smart-cache/examples/relationships-example.d.ts.map +1 -0
  117. package/dist/smart-cache/examples/relationships-example.js +88 -0
  118. package/dist/smart-cache/examples/relationships-example.js.map +1 -0
  119. package/dist/smart-cache/hooks/hooks-manager.d.ts +22 -0
  120. package/dist/smart-cache/hooks/hooks-manager.d.ts.map +1 -0
  121. package/dist/smart-cache/hooks/hooks-manager.js +117 -0
  122. package/dist/smart-cache/hooks/hooks-manager.js.map +1 -0
  123. package/dist/smart-cache/index.d.ts +19 -0
  124. package/dist/smart-cache/index.d.ts.map +1 -0
  125. package/dist/smart-cache/index.js +49 -0
  126. package/dist/smart-cache/index.js.map +1 -0
  127. package/dist/smart-cache/query/operations.d.ts +31 -0
  128. package/dist/smart-cache/query/operations.d.ts.map +1 -0
  129. package/dist/smart-cache/query/operations.js +187 -0
  130. package/dist/smart-cache/query/operations.js.map +1 -0
  131. package/dist/smart-cache/query/query-builder.d.ts +15 -0
  132. package/dist/smart-cache/query/query-builder.d.ts.map +1 -0
  133. package/dist/smart-cache/query/query-builder.js +169 -0
  134. package/dist/smart-cache/query/query-builder.js.map +1 -0
  135. package/dist/smart-cache/query/table-proxy.d.ts +11 -0
  136. package/dist/smart-cache/query/table-proxy.d.ts.map +1 -0
  137. package/dist/smart-cache/query/table-proxy.js +25 -0
  138. package/dist/smart-cache/query/table-proxy.js.map +1 -0
  139. package/dist/smart-cache/types/cache.d.ts +29 -0
  140. package/dist/smart-cache/types/cache.d.ts.map +1 -0
  141. package/dist/smart-cache/types/cache.js +10 -0
  142. package/dist/smart-cache/types/cache.js.map +1 -0
  143. package/dist/smart-cache/types/config.d.ts +47 -0
  144. package/dist/smart-cache/types/config.d.ts.map +1 -0
  145. package/dist/smart-cache/types/config.js +27 -0
  146. package/dist/smart-cache/types/config.js.map +1 -0
  147. package/dist/smart-cache/types/query.d.ts +36 -0
  148. package/dist/smart-cache/types/query.d.ts.map +1 -0
  149. package/dist/smart-cache/types/query.js +3 -0
  150. package/dist/smart-cache/types/query.js.map +1 -0
  151. package/dist/smart-cache/types/schema.d.ts +25 -0
  152. package/dist/smart-cache/types/schema.d.ts.map +1 -0
  153. package/dist/smart-cache/types/schema.js +3 -0
  154. package/dist/smart-cache/types/schema.js.map +1 -0
  155. package/dist/trial.d.ts +7 -0
  156. package/dist/trial.d.ts.map +1 -0
  157. package/dist/trial.js +30 -0
  158. package/dist/trial.js.map +1 -0
  159. package/dist/types/cache.d.ts +29 -0
  160. package/dist/types/cache.d.ts.map +1 -0
  161. package/dist/types/cache.js +10 -0
  162. package/dist/types/cache.js.map +1 -0
  163. package/dist/types/config.d.ts +47 -0
  164. package/dist/types/config.d.ts.map +1 -0
  165. package/dist/types/config.js +27 -0
  166. package/dist/types/config.js.map +1 -0
  167. package/dist/types/query.d.ts +55 -0
  168. package/dist/types/query.d.ts.map +1 -0
  169. package/dist/types/query.js +3 -0
  170. package/dist/types/query.js.map +1 -0
  171. package/dist/types/schema.d.ts +25 -0
  172. package/dist/types/schema.d.ts.map +1 -0
  173. package/dist/types/schema.js +3 -0
  174. package/dist/types/schema.js.map +1 -0
  175. package/package.json +71 -0
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CacheKeyBuilder = void 0;
37
+ const crypto = __importStar(require("crypto"));
38
+ class CacheKeyBuilder {
39
+ constructor(prefix = 'sdc') {
40
+ this.prefix = prefix;
41
+ }
42
+ buildKey(table, operation, params) {
43
+ const hash = this.generateHash(params);
44
+ return `${this.prefix}:${table}:${operation}:${hash}`;
45
+ }
46
+ buildIdKey(table, id) {
47
+ return `${this.prefix}:${table}:id:${id}`;
48
+ }
49
+ buildTablePattern(table) {
50
+ return `${this.prefix}:${table}:*`;
51
+ }
52
+ buildOperationPattern(table, operation) {
53
+ return `${this.prefix}:${table}:${operation}:*`;
54
+ }
55
+ generateHash(params) {
56
+ // Normalize the params for consistent hashing
57
+ const normalized = this.normalizeParams(params);
58
+ const jsonString = JSON.stringify(normalized);
59
+ // For short strings, use the string directly
60
+ if (jsonString.length <= 50) {
61
+ return Buffer.from(jsonString).toString('base64url').substring(0, 20);
62
+ }
63
+ // For longer strings, use MD5 hash
64
+ return crypto.createHash('md5').update(jsonString).digest('hex').substring(0, 16);
65
+ }
66
+ normalizeParams(params) {
67
+ if (params === null || params === undefined) {
68
+ return null;
69
+ }
70
+ if (Array.isArray(params)) {
71
+ return params.map((item) => this.normalizeParams(item));
72
+ }
73
+ if (typeof params === 'object') {
74
+ const normalized = {};
75
+ const keys = Object.keys(params).sort();
76
+ for (const key of keys) {
77
+ normalized[key] = this.normalizeParams(params[key]);
78
+ }
79
+ return normalized;
80
+ }
81
+ return params;
82
+ }
83
+ parseKey(key) {
84
+ const parts = key.split(':');
85
+ if (parts.length < 4 || parts[0] !== this.prefix) {
86
+ return null;
87
+ }
88
+ return {
89
+ table: parts[1],
90
+ operation: parts[2],
91
+ hash: parts[3],
92
+ };
93
+ }
94
+ matchesPattern(key, pattern) {
95
+ const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
96
+ return regex.test(key);
97
+ }
98
+ }
99
+ exports.CacheKeyBuilder = CacheKeyBuilder;
100
+ //# sourceMappingURL=cache-key-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-key-builder.js","sourceRoot":"","sources":["../../../src/smart-cache/cache/cache-key-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { RedisConnectionManager } from '../connection/redis';
2
+ import { CacheConfig } from '../types/config';
3
+ import { CacheStats } from '../types/cache';
4
+ import { CacheKeyBuilder } from './cache-key-builder';
5
+ export declare class CacheManager {
6
+ private redis;
7
+ private config;
8
+ private keyBuilder;
9
+ private stats;
10
+ constructor(redis: RedisConnectionManager, config: Required<CacheConfig>, keyPrefix?: string);
11
+ get<T = any>(key: string): Promise<T | null>;
12
+ set(key: string, value: any, ttl?: number): Promise<void>;
13
+ delete(key: string): Promise<void>;
14
+ deletePattern(pattern: string): Promise<number>;
15
+ exists(key: string): Promise<boolean>;
16
+ getKeyBuilder(): CacheKeyBuilder;
17
+ getStats(): CacheStats;
18
+ resetStats(): void;
19
+ isEnabled(): boolean;
20
+ clear(): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=cache-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../../../src/smart-cache/cache/cache-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,KAAK,CAIX;gBAGA,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC7B,SAAS,CAAC,EAAE,MAAM;IAOd,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAsB5C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAezD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa3C,aAAa,IAAI,eAAe;IAIhC,QAAQ,IAAI,UAAU;IAetB,UAAU,IAAI,IAAI;IAMlB,SAAS,IAAI,OAAO;IAId,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CacheManager = void 0;
4
+ const cache_key_builder_1 = require("./cache-key-builder");
5
+ class CacheManager {
6
+ constructor(redis, config, keyPrefix) {
7
+ this.stats = {
8
+ hits: 0,
9
+ misses: 0,
10
+ evictions: 0,
11
+ };
12
+ this.redis = redis;
13
+ this.config = config;
14
+ this.keyBuilder = new cache_key_builder_1.CacheKeyBuilder(keyPrefix);
15
+ }
16
+ async get(key) {
17
+ if (!this.config.enabled || !this.redis.isConnected()) {
18
+ return null;
19
+ }
20
+ try {
21
+ const cached = await this.redis.get(key);
22
+ if (cached === null) {
23
+ this.stats.misses++;
24
+ return null;
25
+ }
26
+ this.stats.hits++;
27
+ return JSON.parse(cached);
28
+ }
29
+ catch (error) {
30
+ console.error('[CacheManager] Get error:', error);
31
+ this.stats.misses++;
32
+ return null;
33
+ }
34
+ }
35
+ async set(key, value, ttl) {
36
+ if (!this.config.enabled || !this.redis.isConnected()) {
37
+ return;
38
+ }
39
+ try {
40
+ const serialized = JSON.stringify(value);
41
+ const ttlSeconds = ttl || this.config.defaultTTL;
42
+ await this.redis.set(key, serialized, ttlSeconds);
43
+ }
44
+ catch (error) {
45
+ console.error('[CacheManager] Set error:', error);
46
+ }
47
+ }
48
+ async delete(key) {
49
+ if (!this.redis.isConnected()) {
50
+ return;
51
+ }
52
+ try {
53
+ await this.redis.del(key);
54
+ }
55
+ catch (error) {
56
+ console.error('[CacheManager] Delete error:', error);
57
+ }
58
+ }
59
+ async deletePattern(pattern) {
60
+ if (!this.redis.isConnected()) {
61
+ return 0;
62
+ }
63
+ try {
64
+ const count = await this.redis.deletePattern(pattern);
65
+ this.stats.evictions += count;
66
+ return count;
67
+ }
68
+ catch (error) {
69
+ console.error('[CacheManager] DeletePattern error:', error);
70
+ return 0;
71
+ }
72
+ }
73
+ async exists(key) {
74
+ if (!this.redis.isConnected()) {
75
+ return false;
76
+ }
77
+ try {
78
+ return await this.redis.exists(key);
79
+ }
80
+ catch (error) {
81
+ console.error('[CacheManager] Exists error:', error);
82
+ return false;
83
+ }
84
+ }
85
+ getKeyBuilder() {
86
+ return this.keyBuilder;
87
+ }
88
+ getStats() {
89
+ const total = this.stats.hits + this.stats.misses;
90
+ const hitRate = total > 0
91
+ ? ((this.stats.hits / total) * 100).toFixed(2)
92
+ : '0.00';
93
+ return {
94
+ hits: this.stats.hits,
95
+ misses: this.stats.misses,
96
+ evictions: this.stats.evictions,
97
+ size: 0, // Redis doesn't provide easy size lookup
98
+ hitRate: `${hitRate}%`,
99
+ };
100
+ }
101
+ resetStats() {
102
+ this.stats.hits = 0;
103
+ this.stats.misses = 0;
104
+ this.stats.evictions = 0;
105
+ }
106
+ isEnabled() {
107
+ return this.config.enabled && this.redis.isConnected();
108
+ }
109
+ async clear() {
110
+ if (!this.redis.isConnected()) {
111
+ return;
112
+ }
113
+ try {
114
+ // Clear all keys with our prefix
115
+ const count = await this.redis.deletePattern('*');
116
+ this.stats.evictions += count;
117
+ }
118
+ catch (error) {
119
+ console.error('[CacheManager] Clear error:', error);
120
+ }
121
+ }
122
+ }
123
+ exports.CacheManager = CacheManager;
124
+ //# sourceMappingURL=cache-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../../../src/smart-cache/cache/cache-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { CacheManager } from './cache-manager';
2
+ import { DependencyGraph } from '../discovery/dependency-graph';
3
+ import { InvalidationOptions } from '../types/cache';
4
+ export declare class InvalidationManager {
5
+ private cacheManager;
6
+ private dependencyGraph;
7
+ constructor(cacheManager: CacheManager, dependencyGraph: DependencyGraph);
8
+ invalidateTable(table: string, options?: InvalidationOptions): Promise<void>;
9
+ private invalidateTableCache;
10
+ invalidatePattern(pattern: string): Promise<number>;
11
+ invalidateKey(key: string): Promise<void>;
12
+ invalidateMultipleTables(tables: string[], cascade?: boolean): Promise<void>;
13
+ invalidateAll(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=invalidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidation.d.ts","sourceRoot":"","sources":["../../../src/smart-cache/cache/invalidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAwB,MAAM,gBAAgB,CAAC;AAE3E,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAkB;gBAE7B,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe;IAKlE,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC;YA2BF,oBAAoB;IAK5B,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAInD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,wBAAwB,CAC5B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,GAAE,OAAc,GACtB,OAAO,CAAC,IAAI,CAAC;IAiBV,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAGrC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvalidationManager = void 0;
4
+ const cache_1 = require("../types/cache");
5
+ class InvalidationManager {
6
+ constructor(cacheManager, dependencyGraph) {
7
+ this.cacheManager = cacheManager;
8
+ this.dependencyGraph = dependencyGraph;
9
+ }
10
+ async invalidateTable(table, options = {}) {
11
+ const { cascade = true, strategy = cache_1.InvalidationStrategy.IMMEDIATE, } = options;
12
+ if (strategy === cache_1.InvalidationStrategy.TTL_ONLY) {
13
+ // Don't actively invalidate, rely on TTL
14
+ return;
15
+ }
16
+ const tablesToInvalidate = cascade
17
+ ? this.dependencyGraph.getInvalidationTargets(table)
18
+ : [table];
19
+ if (strategy === cache_1.InvalidationStrategy.LAZY) {
20
+ // Mark for invalidation but don't delete immediately
21
+ // This could be implemented with a flag or separate tracking
22
+ // For now, we'll do immediate invalidation
23
+ }
24
+ // Invalidate cache for all affected tables
25
+ for (const targetTable of tablesToInvalidate) {
26
+ await this.invalidateTableCache(targetTable);
27
+ }
28
+ }
29
+ async invalidateTableCache(table) {
30
+ const pattern = this.cacheManager.getKeyBuilder().buildTablePattern(table);
31
+ await this.cacheManager.deletePattern(pattern);
32
+ }
33
+ async invalidatePattern(pattern) {
34
+ return await this.cacheManager.deletePattern(pattern);
35
+ }
36
+ async invalidateKey(key) {
37
+ await this.cacheManager.delete(key);
38
+ }
39
+ async invalidateMultipleTables(tables, cascade = true) {
40
+ const allTables = new Set();
41
+ for (const table of tables) {
42
+ if (cascade) {
43
+ const targets = this.dependencyGraph.getInvalidationTargets(table);
44
+ targets.forEach((t) => allTables.add(t));
45
+ }
46
+ else {
47
+ allTables.add(table);
48
+ }
49
+ }
50
+ for (const table of allTables) {
51
+ await this.invalidateTableCache(table);
52
+ }
53
+ }
54
+ async invalidateAll() {
55
+ await this.cacheManager.clear();
56
+ }
57
+ }
58
+ exports.InvalidationManager = InvalidationManager;
59
+ //# sourceMappingURL=invalidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidation.js","sourceRoot":"","sources":["../../../src/smart-cache/cache/invalidation.ts"],"names":[],"mappings":";;;AAEA,0CAA2E;AAE3E,MAAa,mBAAmB;IAI9B,YAAY,YAA0B,EAAE,eAAgC;QACtE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAa,EACb,UAA+B,EAAE;QAEjC,MAAM,EACJ,OAAO,GAAG,IAAI,EACd,QAAQ,GAAG,4BAAoB,CAAC,SAAS,GAC1C,GAAG,OAAO,CAAC;QAEZ,IAAI,QAAQ,KAAK,4BAAoB,CAAC,QAAQ,EAAE,CAAC;YAC/C,yCAAyC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,OAAO;YAChC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,KAAK,CAAC;YACpD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEZ,IAAI,QAAQ,KAAK,4BAAoB,CAAC,IAAI,EAAE,CAAC;YAC3C,qDAAqD;YACrD,6DAA6D;YAC7D,2CAA2C;QAC7C,CAAC;QAED,2CAA2C;QAC3C,KAAK,MAAM,WAAW,IAAI,kBAAkB,EAAE,CAAC;YAC7C,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAAa;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe;QACrC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAW;QAC7B,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,MAAgB,EAChB,UAAmB,IAAI;QAEvB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;gBACnE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACF;AA3ED,kDA2EC"}
@@ -0,0 +1,36 @@
1
+ import { SmartDBConfig } from './types/config';
2
+ import { TableOperations } from './types/query';
3
+ import { DependencyGraph } from './discovery/dependency-graph';
4
+ import { CacheManager } from './cache/cache-manager';
5
+ import { InvalidationManager } from './cache/invalidation';
6
+ import { HooksManager } from './hooks/hooks-manager';
7
+ export declare class SmartDBClient {
8
+ private config;
9
+ private dbManager;
10
+ private redisManager;
11
+ private cacheManager;
12
+ private invalidationManager;
13
+ private dependencyGraph;
14
+ private queryBuilder;
15
+ private tableProxyFactory;
16
+ hooks: HooksManager;
17
+ private initialized;
18
+ private discoveredTables;
19
+ constructor(config: SmartDBConfig);
20
+ initialize(): Promise<void>;
21
+ private discoverSchema;
22
+ refreshSchema(): Promise<void>;
23
+ getTableOperations<T = any>(tableName: string): TableOperations<T>;
24
+ getCacheManager(): CacheManager;
25
+ getInvalidationManager(): InvalidationManager;
26
+ getDependencyGraph(): DependencyGraph;
27
+ getDiscoveredTables(): string[];
28
+ healthCheck(): Promise<{
29
+ mariadb: boolean;
30
+ redis: boolean;
31
+ overall: boolean;
32
+ }>;
33
+ close(): Promise<void>;
34
+ private log;
35
+ }
36
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/smart-cache/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAId,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKhD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,iBAAiB,CAAqB;IACvC,KAAK,EAAG,YAAY,CAAC;IAE5B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,gBAAgB,CAA0B;gBAEtC,MAAM,EAAE,aAAa;IAS3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAsEnB,cAAc;IA4BtB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAWpC,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;IAiBlE,eAAe,IAAI,YAAY;IAI/B,sBAAsB,IAAI,mBAAmB;IAI7C,kBAAkB,IAAI,eAAe;IAIrC,mBAAmB,IAAI,MAAM,EAAE;IAIzB,WAAW,IAAI,OAAO,CAAC;QAC3B,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IAWI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,OAAO,CAAC,GAAG;CAKZ"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SmartDBClient = void 0;
4
+ const config_1 = require("./types/config");
5
+ const mariadb_1 = require("./connection/mariadb");
6
+ const redis_1 = require("./connection/redis");
7
+ const schema_reader_1 = require("./discovery/schema-reader");
8
+ const relationship_parser_1 = require("./discovery/relationship-parser");
9
+ const dependency_graph_1 = require("./discovery/dependency-graph");
10
+ const cache_manager_1 = require("./cache/cache-manager");
11
+ const invalidation_1 = require("./cache/invalidation");
12
+ const query_builder_1 = require("./query/query-builder");
13
+ const operations_1 = require("./query/operations");
14
+ const table_proxy_1 = require("./query/table-proxy");
15
+ const hooks_manager_1 = require("./hooks/hooks-manager");
16
+ class SmartDBClient {
17
+ constructor(config) {
18
+ this.initialized = false;
19
+ this.discoveredTables = new Set();
20
+ this.config = {
21
+ ...config,
22
+ cache: { ...config_1.DEFAULT_CACHE_CONFIG, ...config.cache },
23
+ discovery: { ...config_1.DEFAULT_DISCOVERY_CONFIG, ...config.discovery },
24
+ logging: { ...config_1.DEFAULT_LOGGING_CONFIG, ...config.logging },
25
+ };
26
+ }
27
+ async initialize() {
28
+ if (this.initialized) {
29
+ return;
30
+ }
31
+ this.log('info', 'Initializing SmartDBClient...');
32
+ // Initialize connection managers
33
+ this.dbManager = new mariadb_1.MariaDBConnectionManager(this.config.mariadb);
34
+ await this.dbManager.connect();
35
+ this.log('info', 'MariaDB connected');
36
+ this.redisManager = new redis_1.RedisConnectionManager(this.config.redis);
37
+ await this.redisManager.connect();
38
+ this.log('info', 'Redis connected');
39
+ // Initialize core components
40
+ this.queryBuilder = new query_builder_1.QueryBuilder();
41
+ this.dependencyGraph = new dependency_graph_1.DependencyGraph(this.config.discovery.maxGraphDepth);
42
+ this.cacheManager = new cache_manager_1.CacheManager(this.redisManager, this.config.cache, this.config.redis.keyPrefix);
43
+ this.invalidationManager = new invalidation_1.InvalidationManager(this.cacheManager, this.dependencyGraph);
44
+ this.hooks = new hooks_manager_1.HooksManager();
45
+ this.tableProxyFactory = new table_proxy_1.TableProxyFactory(this);
46
+ // Run schema discovery
47
+ if (this.config.discovery.autoDiscover) {
48
+ await this.discoverSchema();
49
+ }
50
+ // Set up refresh interval if configured
51
+ if (this.config.discovery.refreshInterval && this.config.discovery.refreshInterval > 0) {
52
+ setInterval(() => this.refreshSchema(), this.config.discovery.refreshInterval);
53
+ }
54
+ this.initialized = true;
55
+ this.log('info', 'SmartDBClient initialized successfully');
56
+ // Create dynamic table accessors using Proxy
57
+ return new Proxy(this, {
58
+ get(target, prop) {
59
+ // If prop exists on target, return it
60
+ if (prop in target) {
61
+ return target[prop];
62
+ }
63
+ // Otherwise, treat it as a table name
64
+ if (typeof prop === 'string' && !prop.startsWith('_')) {
65
+ return target.getTableOperations(prop);
66
+ }
67
+ return undefined;
68
+ },
69
+ });
70
+ }
71
+ async discoverSchema() {
72
+ this.log('info', 'Discovering database schema...');
73
+ const schemaReader = new schema_reader_1.SchemaReader(this.dbManager, this.config.discovery);
74
+ const relationshipParser = new relationship_parser_1.RelationshipParser(this.dbManager);
75
+ // Discover tables
76
+ const tables = await schemaReader.discoverTables();
77
+ this.log('info', `Discovered ${tables.length} tables`);
78
+ for (const table of tables) {
79
+ this.discoveredTables.add(table.tableName);
80
+ }
81
+ // Discover relationships
82
+ const relationships = await relationshipParser.parseRelationships();
83
+ this.log('info', `Discovered ${relationships.length} relationships`);
84
+ // Build dependency graph
85
+ this.dependencyGraph.buildFromRelationships(relationships);
86
+ const graphInfo = this.dependencyGraph.getGraphInfo();
87
+ this.log('info', `Dependency graph built`, graphInfo);
88
+ }
89
+ async refreshSchema() {
90
+ this.log('info', 'Refreshing database schema...');
91
+ this.discoveredTables.clear();
92
+ this.dependencyGraph.clear();
93
+ await this.discoverSchema();
94
+ this.log('info', 'Schema refreshed successfully');
95
+ }
96
+ getTableOperations(tableName) {
97
+ if (!this.initialized) {
98
+ throw new Error('SmartDBClient not initialized. Call initialize() first.');
99
+ }
100
+ return new operations_1.TableOperationsImpl(tableName, this.dbManager, this.cacheManager, this.invalidationManager, this.queryBuilder, this.config.cache);
101
+ }
102
+ getCacheManager() {
103
+ return this.cacheManager;
104
+ }
105
+ getInvalidationManager() {
106
+ return this.invalidationManager;
107
+ }
108
+ getDependencyGraph() {
109
+ return this.dependencyGraph;
110
+ }
111
+ getDiscoveredTables() {
112
+ return Array.from(this.discoveredTables);
113
+ }
114
+ async healthCheck() {
115
+ const mariadbHealthy = await this.dbManager.healthCheck();
116
+ const redisHealthy = await this.redisManager.healthCheck();
117
+ return {
118
+ mariadb: mariadbHealthy,
119
+ redis: redisHealthy,
120
+ overall: mariadbHealthy && redisHealthy,
121
+ };
122
+ }
123
+ async close() {
124
+ this.log('info', 'Closing SmartDBClient...');
125
+ await this.cacheManager.clear();
126
+ await this.dbManager.close();
127
+ await this.redisManager.close();
128
+ this.initialized = false;
129
+ this.log('info', 'SmartDBClient closed');
130
+ }
131
+ log(level, message, meta) {
132
+ if (this.config.logging?.logger) {
133
+ this.config.logging.logger(level, message, meta);
134
+ }
135
+ }
136
+ }
137
+ exports.SmartDBClient = SmartDBClient;
138
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/smart-cache/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import * as mariadb from 'mariadb';
2
+ import { MariaDBConfig } from '../types/config';
3
+ export declare class MariaDBConnectionManager {
4
+ private pool;
5
+ private config;
6
+ constructor(config: MariaDBConfig);
7
+ connect(): Promise<mariadb.Pool>;
8
+ getConnection(): Promise<mariadb.PoolConnection>;
9
+ query<T = any>(sql: string, params?: any[]): Promise<T>;
10
+ healthCheck(): Promise<boolean>;
11
+ close(): Promise<void>;
12
+ isConnected(): boolean;
13
+ }
14
+ //# sourceMappingURL=mariadb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mariadb.d.ts","sourceRoot":"","sources":["../../../src/smart-cache/connection/mariadb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAI3B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAchC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;IAKhD,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAKvD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,WAAW,IAAI,OAAO;CAGvB"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MariaDBConnectionManager = void 0;
37
+ const mariadb = __importStar(require("mariadb"));
38
+ class MariaDBConnectionManager {
39
+ constructor(config) {
40
+ this.pool = null;
41
+ this.config = config;
42
+ }
43
+ async connect() {
44
+ if (this.pool) {
45
+ return this.pool;
46
+ }
47
+ this.pool = mariadb.createPool({
48
+ ...this.config,
49
+ port: this.config.port || 3306,
50
+ connectionLimit: this.config.connectionLimit || 10,
51
+ });
52
+ return this.pool;
53
+ }
54
+ async getConnection() {
55
+ const pool = await this.connect();
56
+ return pool.getConnection();
57
+ }
58
+ async query(sql, params) {
59
+ const pool = await this.connect();
60
+ return pool.query(sql, params);
61
+ }
62
+ async healthCheck() {
63
+ try {
64
+ await this.query('SELECT 1');
65
+ return true;
66
+ }
67
+ catch (error) {
68
+ return false;
69
+ }
70
+ }
71
+ async close() {
72
+ if (this.pool) {
73
+ await this.pool.end();
74
+ this.pool = null;
75
+ }
76
+ }
77
+ isConnected() {
78
+ return this.pool !== null;
79
+ }
80
+ }
81
+ exports.MariaDBConnectionManager = MariaDBConnectionManager;
82
+ //# sourceMappingURL=mariadb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mariadb.js","sourceRoot":"","sources":["../../../src/smart-cache/connection/mariadb.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AAGnC,MAAa,wBAAwB;IAInC,YAAY,MAAqB;QAHzB,SAAI,GAAwB,IAAI,CAAC;QAIvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;YAC7B,GAAG,IAAI,CAAC,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI;YAC9B,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE;SACnD,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAU,GAAW,EAAE,MAAc;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;IAC5B,CAAC;CACF;AAnDD,4DAmDC"}