@xbg.solutions/utils-cache-connector 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.
- package/lib/cache-connector.d.ts +139 -0
- package/lib/cache-connector.d.ts.map +1 -0
- package/lib/cache-connector.js +277 -0
- package/lib/cache-connector.js.map +1 -0
- package/lib/index.d.ts +52 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +103 -0
- package/lib/index.js.map +1 -0
- package/lib/providers/base-cache-provider.d.ts +95 -0
- package/lib/providers/base-cache-provider.d.ts.map +1 -0
- package/lib/providers/base-cache-provider.js +120 -0
- package/lib/providers/base-cache-provider.js.map +1 -0
- package/lib/providers/firestore-cache-provider.d.ts +58 -0
- package/lib/providers/firestore-cache-provider.d.ts.map +1 -0
- package/lib/providers/firestore-cache-provider.js +418 -0
- package/lib/providers/firestore-cache-provider.js.map +1 -0
- package/lib/providers/memory-cache-provider.d.ts +57 -0
- package/lib/providers/memory-cache-provider.d.ts.map +1 -0
- package/lib/providers/memory-cache-provider.js +217 -0
- package/lib/providers/memory-cache-provider.js.map +1 -0
- package/lib/providers/noop-cache-provider.d.ts +21 -0
- package/lib/providers/noop-cache-provider.d.ts.map +1 -0
- package/lib/providers/noop-cache-provider.js +42 -0
- package/lib/providers/noop-cache-provider.js.map +1 -0
- package/lib/providers/redis-cache-provider.d.ts +64 -0
- package/lib/providers/redis-cache-provider.d.ts.map +1 -0
- package/lib/providers/redis-cache-provider.js +414 -0
- package/lib/providers/redis-cache-provider.js.map +1 -0
- package/lib/types.d.ts +342 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +8 -0
- package/lib/types.js.map +1 -0
- package/package.json +31 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Memory Cache Provider
|
|
4
|
+
*
|
|
5
|
+
* In-memory cache provider using Map data structure.
|
|
6
|
+
* Features:
|
|
7
|
+
* - TTL-based expiration
|
|
8
|
+
* - LRU eviction when max size is reached
|
|
9
|
+
* - Automatic cleanup of expired entries
|
|
10
|
+
* - Tag-based invalidation
|
|
11
|
+
*
|
|
12
|
+
* Best for:
|
|
13
|
+
* - Request-scoped caching
|
|
14
|
+
* - Hot data within a single function instance
|
|
15
|
+
* - Auth/permissions data
|
|
16
|
+
* - Configuration values
|
|
17
|
+
*
|
|
18
|
+
* Limitations:
|
|
19
|
+
* - Not shared across function instances
|
|
20
|
+
* - Lost on cold starts
|
|
21
|
+
* - Limited by instance memory
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.MemoryCacheProvider = void 0;
|
|
25
|
+
const base_cache_provider_1 = require("./base-cache-provider");
|
|
26
|
+
class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
27
|
+
constructor(config) {
|
|
28
|
+
super();
|
|
29
|
+
this.config = config;
|
|
30
|
+
this.cleanupInterval = null;
|
|
31
|
+
this.currentSize = 0;
|
|
32
|
+
this.cache = new Map();
|
|
33
|
+
// Start automatic cleanup
|
|
34
|
+
this.startCleanup();
|
|
35
|
+
}
|
|
36
|
+
getType() {
|
|
37
|
+
return 'memory';
|
|
38
|
+
}
|
|
39
|
+
async get(key) {
|
|
40
|
+
const entry = this.cache.get(key);
|
|
41
|
+
if (!entry) {
|
|
42
|
+
this.recordMiss();
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
// Check if expired
|
|
46
|
+
if (this.isExpired(entry.metadata.expiresAt)) {
|
|
47
|
+
this.cache.delete(key);
|
|
48
|
+
this.recordExpiration();
|
|
49
|
+
this.recordMiss();
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
// Update access metadata
|
|
53
|
+
entry.metadata.hitCount++;
|
|
54
|
+
entry.metadata.lastAccessedAt = new Date();
|
|
55
|
+
this.recordHit();
|
|
56
|
+
// Return clone if configured (prevents mutations)
|
|
57
|
+
if (this.config.useClones) {
|
|
58
|
+
return JSON.parse(JSON.stringify(entry.value));
|
|
59
|
+
}
|
|
60
|
+
return entry.value;
|
|
61
|
+
}
|
|
62
|
+
async getWithMetadata(key) {
|
|
63
|
+
const value = await this.get(key);
|
|
64
|
+
if (value === null) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const entry = this.cache.get(key);
|
|
68
|
+
return {
|
|
69
|
+
key,
|
|
70
|
+
value,
|
|
71
|
+
metadata: Object.assign({}, entry.metadata),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
async set(key, value, options = {}) {
|
|
75
|
+
const ttl = options.ttl || 300; // Default 5 minutes
|
|
76
|
+
const tags = options.tags || [];
|
|
77
|
+
// Estimate size
|
|
78
|
+
const size = this.estimateSize(value);
|
|
79
|
+
// Check if we need to evict (before adding new entry)
|
|
80
|
+
if (this.currentSize + size > this.config.maxSize) {
|
|
81
|
+
await this.evictLRU(size);
|
|
82
|
+
}
|
|
83
|
+
// Create entry
|
|
84
|
+
const entry = {
|
|
85
|
+
value: this.config.useClones ? JSON.parse(JSON.stringify(value)) : value,
|
|
86
|
+
metadata: Object.assign(Object.assign({}, this.createMetadata(ttl, tags)), { size }),
|
|
87
|
+
};
|
|
88
|
+
// Store in cache
|
|
89
|
+
this.cache.set(key, entry);
|
|
90
|
+
this.currentSize += size;
|
|
91
|
+
this.updateEntryCount(this.cache.size);
|
|
92
|
+
this.updateSize(this.currentSize);
|
|
93
|
+
}
|
|
94
|
+
async delete(key) {
|
|
95
|
+
const entry = this.cache.get(key);
|
|
96
|
+
if (!entry) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
this.cache.delete(key);
|
|
100
|
+
this.currentSize -= entry.metadata.size || 0;
|
|
101
|
+
this.updateEntryCount(this.cache.size);
|
|
102
|
+
this.updateSize(this.currentSize);
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
async has(key) {
|
|
106
|
+
const entry = this.cache.get(key);
|
|
107
|
+
if (!entry) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
// Check if expired
|
|
111
|
+
if (this.isExpired(entry.metadata.expiresAt)) {
|
|
112
|
+
this.cache.delete(key);
|
|
113
|
+
this.recordExpiration();
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
async invalidateByTags(tags) {
|
|
119
|
+
let count = 0;
|
|
120
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
121
|
+
// Check if entry has any of the specified tags
|
|
122
|
+
const hasTag = tags.some((tag) => entry.metadata.tags.includes(tag));
|
|
123
|
+
if (hasTag) {
|
|
124
|
+
this.cache.delete(key);
|
|
125
|
+
this.currentSize -= entry.metadata.size || 0;
|
|
126
|
+
count++;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
this.updateEntryCount(this.cache.size);
|
|
130
|
+
this.updateSize(this.currentSize);
|
|
131
|
+
return count;
|
|
132
|
+
}
|
|
133
|
+
async invalidateByPattern(pattern, mode = 'prefix') {
|
|
134
|
+
let count = 0;
|
|
135
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
136
|
+
if (this.matchPattern(key, pattern, mode)) {
|
|
137
|
+
this.cache.delete(key);
|
|
138
|
+
this.currentSize -= entry.metadata.size || 0;
|
|
139
|
+
count++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
this.updateEntryCount(this.cache.size);
|
|
143
|
+
this.updateSize(this.currentSize);
|
|
144
|
+
return count;
|
|
145
|
+
}
|
|
146
|
+
async clear() {
|
|
147
|
+
this.cache.clear();
|
|
148
|
+
this.currentSize = 0;
|
|
149
|
+
this.updateEntryCount(0);
|
|
150
|
+
this.updateSize(0);
|
|
151
|
+
}
|
|
152
|
+
async cleanup() {
|
|
153
|
+
let count = 0;
|
|
154
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
155
|
+
if (this.isExpired(entry.metadata.expiresAt)) {
|
|
156
|
+
this.cache.delete(key);
|
|
157
|
+
this.currentSize -= entry.metadata.size || 0;
|
|
158
|
+
this.recordExpiration();
|
|
159
|
+
count++;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
this.updateEntryCount(this.cache.size);
|
|
163
|
+
this.updateSize(this.currentSize);
|
|
164
|
+
return count;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Evict least recently used entries to make space
|
|
168
|
+
*/
|
|
169
|
+
async evictLRU(requiredSpace) {
|
|
170
|
+
// Sort entries by last accessed time
|
|
171
|
+
const entries = Array.from(this.cache.entries()).sort((a, b) => a[1].metadata.lastAccessedAt.getTime() - b[1].metadata.lastAccessedAt.getTime());
|
|
172
|
+
let freedSpace = 0;
|
|
173
|
+
for (const [key, entry] of entries) {
|
|
174
|
+
if (freedSpace >= requiredSpace) {
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
this.cache.delete(key);
|
|
178
|
+
const entrySize = entry.metadata.size || 0;
|
|
179
|
+
this.currentSize -= entrySize;
|
|
180
|
+
freedSpace += entrySize;
|
|
181
|
+
this.recordEviction();
|
|
182
|
+
}
|
|
183
|
+
this.updateEntryCount(this.cache.size);
|
|
184
|
+
this.updateSize(this.currentSize);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Start automatic cleanup of expired entries
|
|
188
|
+
*/
|
|
189
|
+
startCleanup() {
|
|
190
|
+
if (this.cleanupInterval) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
this.cleanupInterval = setInterval(async () => {
|
|
194
|
+
await this.cleanup();
|
|
195
|
+
}, this.config.checkPeriod * 1000);
|
|
196
|
+
// Don't prevent Node.js from exiting
|
|
197
|
+
this.cleanupInterval.unref();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Stop automatic cleanup
|
|
201
|
+
*/
|
|
202
|
+
stopCleanup() {
|
|
203
|
+
if (this.cleanupInterval) {
|
|
204
|
+
clearInterval(this.cleanupInterval);
|
|
205
|
+
this.cleanupInterval = null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Cleanup on provider destruction
|
|
210
|
+
*/
|
|
211
|
+
destroy() {
|
|
212
|
+
this.stopCleanup();
|
|
213
|
+
this.cache.clear();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.MemoryCacheProvider = MemoryCacheProvider;
|
|
217
|
+
//# sourceMappingURL=memory-cache-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cache-provider.js","sourceRoot":"","sources":["../../src/providers/memory-cache-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NoOp Cache Provider
|
|
3
|
+
*
|
|
4
|
+
* A no-operation cache provider used when caching is globally disabled.
|
|
5
|
+
* All operations are no-ops that return immediately without doing anything.
|
|
6
|
+
* This ensures zero performance overhead when caching is turned off.
|
|
7
|
+
*/
|
|
8
|
+
import { BaseCacheProvider } from './base-cache-provider';
|
|
9
|
+
import { CacheProviderType, CacheSetOptions, CacheEntry } from '../types';
|
|
10
|
+
export declare class NoOpCacheProvider extends BaseCacheProvider {
|
|
11
|
+
getType(): CacheProviderType;
|
|
12
|
+
get<T>(_key: string): Promise<T | null>;
|
|
13
|
+
getWithMetadata<T>(_key: string): Promise<CacheEntry<T> | null>;
|
|
14
|
+
set<T>(_key: string, _value: T, _options?: CacheSetOptions): Promise<void>;
|
|
15
|
+
delete(_key: string): Promise<boolean>;
|
|
16
|
+
has(_key: string): Promise<boolean>;
|
|
17
|
+
invalidateByTags(_tags: string[]): Promise<number>;
|
|
18
|
+
invalidateByPattern(_pattern: string, _mode?: 'prefix' | 'suffix' | 'contains'): Promise<number>;
|
|
19
|
+
clear(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=noop-cache-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop-cache-provider.d.ts","sourceRoot":"","sources":["../../src/providers/noop-cache-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE1E,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,IAAI,iBAAiB;IAItB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAIvC,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAI/D,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1E,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAInC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* NoOp Cache Provider
|
|
4
|
+
*
|
|
5
|
+
* A no-operation cache provider used when caching is globally disabled.
|
|
6
|
+
* All operations are no-ops that return immediately without doing anything.
|
|
7
|
+
* This ensures zero performance overhead when caching is turned off.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.NoOpCacheProvider = void 0;
|
|
11
|
+
const base_cache_provider_1 = require("./base-cache-provider");
|
|
12
|
+
class NoOpCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
13
|
+
getType() {
|
|
14
|
+
return 'noop';
|
|
15
|
+
}
|
|
16
|
+
async get(_key) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
async getWithMetadata(_key) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
async set(_key, _value, _options) {
|
|
23
|
+
// No-op
|
|
24
|
+
}
|
|
25
|
+
async delete(_key) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
async has(_key) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
async invalidateByTags(_tags) {
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
async invalidateByPattern(_pattern, _mode) {
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
async clear() {
|
|
38
|
+
// No-op
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.NoOpCacheProvider = NoOpCacheProvider;
|
|
42
|
+
//# sourceMappingURL=noop-cache-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop-cache-provider.js","sourceRoot":"","sources":["../../src/providers/noop-cache-provider.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,+DAA0D;AAG1D,MAAa,iBAAkB,SAAQ,uCAAiB;IACtD,OAAO;QACL,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CAAI,IAAY;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,MAAS,EAAE,QAA0B;QAC9D,QAAQ;IACV,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAe;QACpC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAgB,EAAE,KAAwC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CAAC,KAAK;QACT,QAAQ;IACV,CAAC;CACF;AApCD,8CAoCC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis Cache Provider
|
|
3
|
+
*
|
|
4
|
+
* Redis-based cache provider for high-performance distributed caching.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Sub-10ms response times
|
|
8
|
+
* - Distributed caching across all instances
|
|
9
|
+
* - Pub/sub for distributed invalidation
|
|
10
|
+
* - Advanced data structures (Sets for tags)
|
|
11
|
+
* - Connection pooling
|
|
12
|
+
* - Automatic reconnection
|
|
13
|
+
*
|
|
14
|
+
* Best for:
|
|
15
|
+
* - High-traffic applications (>1M requests/month)
|
|
16
|
+
* - Sub-10ms response time requirements
|
|
17
|
+
* - Large cache sizes exceeding Firestore limits
|
|
18
|
+
* - Advanced caching patterns
|
|
19
|
+
*
|
|
20
|
+
* Trade-offs:
|
|
21
|
+
* - Cost: ~$50/month minimum (Google Cloud Memorystore)
|
|
22
|
+
* - Infrastructure: Requires Redis server
|
|
23
|
+
* - Complexity: Additional service to manage
|
|
24
|
+
*/
|
|
25
|
+
import { BaseCacheProvider } from './base-cache-provider';
|
|
26
|
+
import { CacheProviderType, CacheSetOptions, CacheEntry, RedisCacheProviderConfig } from '../types';
|
|
27
|
+
export declare class RedisCacheProvider extends BaseCacheProvider {
|
|
28
|
+
private config;
|
|
29
|
+
private client;
|
|
30
|
+
private isConnected;
|
|
31
|
+
constructor(config: RedisCacheProviderConfig);
|
|
32
|
+
/**
|
|
33
|
+
* Setup Redis event handlers
|
|
34
|
+
*/
|
|
35
|
+
private setupEventHandlers;
|
|
36
|
+
getType(): CacheProviderType;
|
|
37
|
+
/**
|
|
38
|
+
* Build tag set key
|
|
39
|
+
*/
|
|
40
|
+
private buildTagKey;
|
|
41
|
+
/**
|
|
42
|
+
* Build metadata key
|
|
43
|
+
*/
|
|
44
|
+
private buildMetaKey;
|
|
45
|
+
get<T>(key: string): Promise<T | null>;
|
|
46
|
+
getWithMetadata<T>(key: string): Promise<CacheEntry<T> | null>;
|
|
47
|
+
set<T>(key: string, value: T, options?: CacheSetOptions): Promise<void>;
|
|
48
|
+
delete(key: string): Promise<boolean>;
|
|
49
|
+
has(key: string): Promise<boolean>;
|
|
50
|
+
invalidateByTags(tags: string[]): Promise<number>;
|
|
51
|
+
invalidateByPattern(pattern: string, mode?: 'prefix' | 'suffix' | 'contains'): Promise<number>;
|
|
52
|
+
clear(): Promise<void>;
|
|
53
|
+
cleanup(): Promise<number>;
|
|
54
|
+
getStats(): Promise<any>;
|
|
55
|
+
/**
|
|
56
|
+
* Check if Redis is connected
|
|
57
|
+
*/
|
|
58
|
+
isReady(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Cleanup on provider destruction
|
|
61
|
+
*/
|
|
62
|
+
destroy(): void;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=redis-cache-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-cache-provider.d.ts","sourceRoot":"","sources":["../../src/providers/redis-cache-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAelB,qBAAa,kBAAmB,SAAQ,iBAAiB;IAI3C,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,WAAW,CAAkB;gBAEjB,MAAM,EAAE,wBAAwB;IAqBpD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,IAAI,iBAAiB;IAI5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,YAAY;IAId,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA4DtC,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAkD9D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD3E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA2CjD,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,QAAQ,GAAG,QAAQ,GAAG,UAAqB,GAChD,OAAO,CAAC,MAAM,CAAC;IA4DZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAM1B,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAwB9B;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB"}
|