trucostars-core-module 0.0.7 → 0.0.8

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.
@@ -13,12 +13,15 @@ export declare class CacheInvalidationMiddleware implements NestMiddleware {
13
13
  private readonly logger;
14
14
  private mode;
15
15
  private mutationMethods;
16
- constructor(cacheManager: Cache, initialMode?: CacheInvalidationMode);
16
+ constructor(cacheManager: Cache);
17
17
  setMutationMethods(method: string[]): void;
18
18
  getMutationMethods(): string[];
19
19
  use(req: Request, res: Response, next: NextFunction): Promise<void>;
20
20
  private clearCache;
21
21
  private extractCacheKey;
22
+ private extractPathSegments;
23
+ private isKeyRelatedToPath;
24
+ private findKeysInStore;
22
25
  private deleteByPrefix;
23
26
  private buildPattern;
24
27
  private deleteByPattern;
@@ -27,11 +27,10 @@ var CacheInvalidationMode;
27
27
  let CacheInvalidationMiddleware = CacheInvalidationMiddleware_1 = class CacheInvalidationMiddleware {
28
28
  cacheManager;
29
29
  logger = new common_1.Logger(CacheInvalidationMiddleware_1.name);
30
- mode = CacheInvalidationMode.FULL;
30
+ mode = CacheInvalidationMode.SELECTIVE;
31
31
  mutationMethods = ['POST', 'PUT', 'PATCH', 'DELETE'];
32
- constructor(cacheManager, initialMode = CacheInvalidationMode.SELECTIVE) {
32
+ constructor(cacheManager) {
33
33
  this.cacheManager = cacheManager;
34
- this.mode = initialMode;
35
34
  }
36
35
  setMutationMethods(method) {
37
36
  this.mutationMethods = method;
@@ -41,15 +40,16 @@ let CacheInvalidationMiddleware = CacheInvalidationMiddleware_1 = class CacheInv
41
40
  }
42
41
  async use(req, res, next) {
43
42
  const method = req.method.toUpperCase();
44
- if (this.mutationMethods.includes(method)) {
45
- const originalSend = res.send.bind(res);
46
- res.send = (body) => {
47
- if (res.statusCode >= 200 && res.statusCode < 300) {
48
- this.clearCache(req.path, method);
49
- }
50
- return originalSend(body);
51
- };
43
+ if (!this.mutationMethods.includes(method)) {
44
+ return next();
52
45
  }
46
+ const originalSend = res.send.bind(res);
47
+ res.send = (body) => {
48
+ if (res.statusCode >= 200 && res.statusCode < 300) {
49
+ this.clearCache(req.path, method);
50
+ }
51
+ return originalSend(body);
52
+ };
53
53
  next();
54
54
  }
55
55
  async clearCache(path, method) {
@@ -59,17 +59,111 @@ let CacheInvalidationMiddleware = CacheInvalidationMiddleware_1 = class CacheInv
59
59
  this.logger.debug(`Cache invalidation skipped (mode: NONE) after ${method} on ${path}`);
60
60
  return;
61
61
  case CacheInvalidationMode.FULL:
62
- const cacheStore = this.cacheManager.store;
63
- if (cacheStore && typeof cacheStore.reset === 'function') {
64
- await cacheStore.reset();
65
- this.logger.log(`✓ Full cache invalidated after ${method} on ${path}`);
62
+ try {
63
+ const cacheManager = this.cacheManager;
64
+ let store = cacheManager.store;
65
+ if (!store) {
66
+ const symbols = Object.getOwnPropertySymbols(cacheManager);
67
+ for (const sym of symbols) {
68
+ if (cacheManager[sym] && typeof cacheManager[sym] === 'object') {
69
+ store = cacheManager[sym];
70
+ break;
71
+ }
72
+ }
73
+ }
74
+ if (store) {
75
+ this.logger.debug(`Found store: ${store.constructor?.name}`);
76
+ if (typeof store.clear === 'function') {
77
+ await store.clear();
78
+ this.logger.log(`✓ Full cache invalidated (store.clear) after ${method} on ${path}`);
79
+ }
80
+ else if (typeof store.reset === 'function') {
81
+ await store.reset();
82
+ this.logger.log(`✓ Full cache invalidated (store.reset) after ${method} on ${path}`);
83
+ }
84
+ else {
85
+ const props = ['data', 'cache', '_cache', 'store', 'storage', '_storage', 'map', '_map'];
86
+ let cleared = false;
87
+ for (const prop of props) {
88
+ const cacheData = store[prop];
89
+ if (cacheData instanceof Map) {
90
+ cacheData.clear();
91
+ this.logger.log(`✓ Cache cleared (Map.clear on ${prop}) after ${method} on ${path}`);
92
+ cleared = true;
93
+ break;
94
+ }
95
+ }
96
+ if (!cleared) {
97
+ this.logger.warn(`Store found but no clear method available. Store keys: ${Object.keys(store).join(', ')}`);
98
+ }
99
+ }
100
+ }
101
+ else {
102
+ this.logger.warn(`Cache store not accessible. Using del() fallback. This may not clear all keys.`);
103
+ const commonKeys = ['cached_data', 'all_items_list'];
104
+ for (const key of commonKeys) {
105
+ try {
106
+ await this.cacheManager.del(key);
107
+ }
108
+ catch (e) {
109
+ }
110
+ }
111
+ this.logger.log(`Cache invalidation attempted (deleted common keys) after ${method} on ${path}`);
112
+ }
113
+ }
114
+ catch (error) {
115
+ this.logger.error('Error invalidating cache:', error);
66
116
  }
67
117
  break;
68
118
  case CacheInvalidationMode.SELECTIVE:
69
- const cacheKey = this.extractCacheKey(path);
70
- if (cacheKey) {
71
- await this.cacheManager.del(cacheKey);
72
- this.logger.log(`✓ Cache invalidated for key '${cacheKey}' after ${method}`);
119
+ try {
120
+ const cacheManager = this.cacheManager;
121
+ let store = null;
122
+ if (cacheManager.stores && Array.isArray(cacheManager.stores) && cacheManager.stores.length > 0) {
123
+ store = cacheManager.stores[0];
124
+ this.logger.debug(`Store found from stores array: ${store.constructor?.name || 'Unknown'}`);
125
+ }
126
+ if (!store && cacheManager.store) {
127
+ store = cacheManager.store;
128
+ this.logger.debug(`Store found from direct property: ${store.constructor?.name || 'Unknown'}`);
129
+ }
130
+ if (!store) {
131
+ const symbols = Object.getOwnPropertySymbols(cacheManager);
132
+ for (const sym of symbols) {
133
+ if (cacheManager[sym] && typeof cacheManager[sym] === 'object') {
134
+ store = cacheManager[sym];
135
+ this.logger.debug(`Store found from Symbol: ${store.constructor?.name || 'Unknown'}`);
136
+ break;
137
+ }
138
+ }
139
+ }
140
+ if (store) {
141
+ const allKeys = this.findKeysInStore(store);
142
+ if (allKeys && allKeys.length > 0) {
143
+ const pathSegments = this.extractPathSegments(path);
144
+ const keysToDelete = allKeys.filter(key => this.isKeyRelatedToPath(key, path, pathSegments));
145
+ if (keysToDelete.length > 0) {
146
+ this.logger.debug(`Found ${allKeys.length} total keys in cache`);
147
+ this.logger.debug(`Keys to delete: ${keysToDelete.join(', ')}`);
148
+ for (const key of keysToDelete) {
149
+ await this.cacheManager.del(key);
150
+ }
151
+ this.logger.log(`✓ Selective cache invalidation: deleted ${keysToDelete.length} key(s) after ${method} on ${path}`);
152
+ }
153
+ else {
154
+ this.logger.debug(`No matching cache keys found for ${path}. Available keys: ${allKeys.join(', ')}`);
155
+ }
156
+ }
157
+ else {
158
+ this.logger.debug('No cache keys found in store');
159
+ }
160
+ }
161
+ else {
162
+ this.logger.warn('Cache store not accessible for selective invalidation');
163
+ }
164
+ }
165
+ catch (error) {
166
+ this.logger.error(`Error in selective cache invalidation: ${error.message}`);
73
167
  }
74
168
  break;
75
169
  case CacheInvalidationMode.BY_PREFIX:
@@ -96,20 +190,85 @@ let CacheInvalidationMiddleware = CacheInvalidationMiddleware_1 = class CacheInv
96
190
  }
97
191
  }
98
192
  extractCacheKey(path) {
99
- const matches = path.match(/\/api\/([^\/]+)/);
100
- if (matches && matches[1]) {
101
- return matches[1];
193
+ const segments = this.extractPathSegments(path);
194
+ if (segments.length === 0) {
195
+ return null;
196
+ }
197
+ const resourceSegment = segments.find(seg => !/^\d+$/.test(seg));
198
+ return resourceSegment || null;
199
+ }
200
+ extractPathSegments(path) {
201
+ const segments = path.replace(/^\/|\/$/g, '').split('/');
202
+ return segments.filter(segment => segment.length > 0 &&
203
+ segment !== 'api' &&
204
+ segment !== 'v1' &&
205
+ segment !== 'v2');
206
+ }
207
+ isKeyRelatedToPath(key, path, pathSegments) {
208
+ const keyLower = key.toLowerCase();
209
+ const pathLower = path.toLowerCase();
210
+ if (keyLower.includes(pathLower)) {
211
+ return true;
212
+ }
213
+ if (keyLower.startsWith('cache:') && keyLower.includes(pathLower.replace(/^\//, ''))) {
214
+ return true;
215
+ }
216
+ for (const segment of pathSegments) {
217
+ const segmentLower = segment.toLowerCase();
218
+ if (/^\d+$/.test(segment)) {
219
+ continue;
220
+ }
221
+ const singularForm = segmentLower.endsWith('s')
222
+ ? segmentLower.slice(0, -1)
223
+ : segmentLower;
224
+ if (keyLower.includes(singularForm) || keyLower.includes(segmentLower)) {
225
+ return true;
226
+ }
227
+ }
228
+ return false;
229
+ }
230
+ findKeysInStore(store, filterFn) {
231
+ const props = ['data', 'cache', '_cache', 'store', 'storage', '_storage', 'map', '_map'];
232
+ for (const prop of props) {
233
+ const cacheData = store[prop];
234
+ if (cacheData instanceof Map) {
235
+ const keys = Array.from(cacheData.keys());
236
+ return filterFn ? keys.filter(filterFn) : keys;
237
+ }
238
+ else if (cacheData && typeof cacheData === 'object' && !Array.isArray(cacheData)) {
239
+ const keys = Object.keys(cacheData);
240
+ return filterFn ? keys.filter(filterFn) : keys;
241
+ }
102
242
  }
103
243
  return null;
104
244
  }
105
245
  async deleteByPrefix(prefix) {
106
- const store = this.cacheManager.store;
246
+ const cacheManager = this.cacheManager;
247
+ let store = cacheManager.store;
248
+ if (!store) {
249
+ const symbols = Object.getOwnPropertySymbols(cacheManager);
250
+ for (const sym of symbols) {
251
+ if (cacheManager[sym] && typeof cacheManager[sym] === 'object') {
252
+ store = cacheManager[sym];
253
+ break;
254
+ }
255
+ }
256
+ }
107
257
  if (store && typeof store.keys === 'function') {
108
258
  const keys = await store.keys(`${prefix}*`);
109
259
  if (keys && keys.length > 0) {
110
260
  await Promise.all(keys.map((key) => this.cacheManager.del(key)));
111
261
  }
112
262
  }
263
+ else if (store) {
264
+ const matchingKeys = this.findKeysInStore(store, key => key.startsWith(prefix));
265
+ if (matchingKeys && matchingKeys.length > 0) {
266
+ await Promise.all(matchingKeys.map(key => this.cacheManager.del(key)));
267
+ }
268
+ else {
269
+ await this.cacheManager.del(prefix);
270
+ }
271
+ }
113
272
  else {
114
273
  await this.cacheManager.del(prefix);
115
274
  }
@@ -119,15 +278,35 @@ let CacheInvalidationMiddleware = CacheInvalidationMiddleware_1 = class CacheInv
119
278
  return resource ? `${resource}:*` : null;
120
279
  }
121
280
  async deleteByPattern(pattern) {
122
- const store = this.cacheManager.store;
281
+ const cacheManager = this.cacheManager;
282
+ let store = cacheManager.store;
283
+ if (!store) {
284
+ const symbols = Object.getOwnPropertySymbols(cacheManager);
285
+ for (const sym of symbols) {
286
+ if (cacheManager[sym] && typeof cacheManager[sym] === 'object') {
287
+ store = cacheManager[sym];
288
+ break;
289
+ }
290
+ }
291
+ }
123
292
  if (store && typeof store.keys === 'function') {
124
293
  const keys = await store.keys(pattern);
125
294
  if (keys && keys.length > 0) {
126
295
  await Promise.all(keys.map((key) => this.cacheManager.del(key)));
127
296
  }
128
297
  }
298
+ else if (store) {
299
+ const regexPattern = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
300
+ const matchingKeys = this.findKeysInStore(store, key => regexPattern.test(key));
301
+ if (matchingKeys && matchingKeys.length > 0) {
302
+ await Promise.all(matchingKeys.map(key => this.cacheManager.del(key)));
303
+ }
304
+ else {
305
+ this.logger.warn('Pattern-based cache invalidation: no matching keys found');
306
+ }
307
+ }
129
308
  else {
130
- this.logger.warn('Pattern-based cache invalidation not supported by current store');
309
+ this.logger.warn('Pattern-based cache invalidation not supported - store not accessible');
131
310
  }
132
311
  }
133
312
  };
@@ -135,6 +314,6 @@ exports.CacheInvalidationMiddleware = CacheInvalidationMiddleware;
135
314
  exports.CacheInvalidationMiddleware = CacheInvalidationMiddleware = CacheInvalidationMiddleware_1 = __decorate([
136
315
  (0, common_1.Injectable)(),
137
316
  __param(0, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)),
138
- __metadata("design:paramtypes", [Object, Number])
317
+ __metadata("design:paramtypes", [Object])
139
318
  ], CacheInvalidationMiddleware);
140
319
  //# sourceMappingURL=cache-invalidation.middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache-invalidation.middleware.js","sourceRoot":"","sources":["../../src/middleware/cache-invalidation.middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache-invalidation.middleware.js","sourceRoot":"","sources":["../../src/middleware/cache-invalidation.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4E;AAE5E,yDAAsD;AAGtD,IAAY,qBAOX;AAPD,WAAY,qBAAqB;IAE7B,iEAAQ,CAAA;IACR,2EAAa,CAAA;IACb,2EAAa,CAAA;IACb,6EAAc,CAAA;IACd,iEAAQ,CAAA;AACZ,CAAC,EAPW,qBAAqB,qCAArB,qBAAqB,QAOhC;AAOM,IAAM,2BAA2B,mCAAjC,MAAM,2BAA2B;IAOL;IANhB,MAAM,GAAG,IAAI,eAAM,CAAC,6BAA2B,CAAC,IAAI,CAAC,CAAC;IAE/D,IAAI,GAA2B,qBAAqB,CAAC,SAAS,CAAC;IAC/D,eAAe,GAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEvE,YACiC,YAAmB;QAAnB,iBAAY,GAAZ,YAAY,CAAO;IAGpD,CAAC;IAGM,kBAAkB,CAAC,MAAgB;QAExC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;IAChC,CAAC;IAEM,kBAAkB;QAEvB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAGD,KAAK,CAAC,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;QACvD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAGxC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAE3C,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAGD,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAGxC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAS,EAAE,EAAE;YAEvB,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAClD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,IAAI,EAAE,CAAC;IACT,CAAC;IAQO,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,MAAc;QACnD,IAAI,CAAC;YAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChB,KAAK,qBAAqB,CAAC,IAAI;oBAE7B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,iDAAiD,MAAM,OAAO,IAAI,EAAE,CACrE,CAAC;oBACF,OAAO;gBAET,KAAK,qBAAqB,CAAC,IAAI;oBAE7B,IAAI,CAAC;wBAEH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAmB,CAAC;wBAG9C,IAAI,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;wBAG/B,IAAI,CAAC,KAAK,EAAE,CAAC;4BACX,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;4BAC3D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gCAC1B,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;oCAC/D,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;oCAC1B,MAAM;gCACR,CAAC;4BACH,CAAC;wBACH,CAAC;wBAGD,IAAI,KAAK,EAAE,CAAC;4BACV,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;4BAG7D,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gCACtC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gCACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,gDAAgD,MAAM,OAAO,IAAI,EAAE,CACpE,CAAC;4BACJ,CAAC;iCAEI,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gCAC3C,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gCACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,gDAAgD,MAAM,OAAO,IAAI,EAAE,CACpE,CAAC;4BACJ,CAAC;iCAEI,CAAC;gCACJ,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gCACzF,IAAI,OAAO,GAAG,KAAK,CAAC;gCAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oCACzB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;oCAC9B,IAAI,SAAS,YAAY,GAAG,EAAE,CAAC;wCAC7B,SAAS,CAAC,KAAK,EAAE,CAAC;wCAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,iCAAiC,IAAI,WAAW,MAAM,OAAO,IAAI,EAAE,CACpE,CAAC;wCACF,OAAO,GAAG,IAAI,CAAC;wCACf,MAAM;oCACR,CAAC;gCACH,CAAC;gCAED,IAAI,CAAC,OAAO,EAAE,CAAC;oCACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0DAA0D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gCAC9G,CAAC;4BACH,CAAC;wBACH,CAAC;6BAAM,CAAC;4BAGN,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,gFAAgF,CACjF,CAAC;4BAGF,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;4BACrD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gCAC7B,IAAI,CAAC;oCACH,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gCACnC,CAAC;gCAAC,OAAO,CAAC,EAAE,CAAC;gCAEb,CAAC;4BACH,CAAC;4BAED,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,4DAA4D,MAAM,OAAO,IAAI,EAAE,CAChF,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;oBACxD,CAAC;oBACD,MAAM;gBAER,KAAK,qBAAqB,CAAC,SAAS;oBAElC,IAAI,CAAC;wBACH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAmB,CAAC;wBAC9C,IAAI,KAAK,GAAG,IAAI,CAAC;wBAGjB,IAAI,YAAY,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAChG,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;wBAC9F,CAAC;wBAGD,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;4BACjC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;4BAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;wBACjG,CAAC;wBAGD,IAAI,CAAC,KAAK,EAAE,CAAC;4BACX,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;4BAC3D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gCAC1B,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;oCAC/D,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;oCAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;oCACtF,MAAM;gCACR,CAAC;4BACH,CAAC;wBACH,CAAC;wBAED,IAAI,KAAK,EAAE,CAAC;4BAEV,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;4BAE5C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAElC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gCAGpD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACxC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CACjD,CAAC;gCAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oCAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,MAAM,sBAAsB,CAAC,CAAC;oCACjE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oCAGhE,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;wCAC/B,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oCACnC,CAAC;oCAED,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,2CAA2C,YAAY,CAAC,MAAM,iBAAiB,MAAM,OAAO,IAAI,EAAE,CACnG,CAAC;gCACJ,CAAC;qCAAM,CAAC;oCACN,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,oCAAoC,IAAI,qBAAqB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClF,CAAC;gCACJ,CAAC;4BACH,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;4BACpD,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;wBAC5E,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC/E,CAAC;oBACD,MAAM;gBAER,KAAK,qBAAqB,CAAC,SAAS;oBAElC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;oBAC1C,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;wBAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,mCAAmC,MAAM,YAAY,MAAM,EAAE,CAC9D,CAAC;oBACJ,CAAC;oBACD,MAAM;gBAER,KAAK,qBAAqB,CAAC,UAAU;oBAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACxC,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;wBACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,oCAAoC,OAAO,WAAW,MAAM,EAAE,CAC/D,CAAC;oBACJ,CAAC;oBACD,MAAM;gBAER;oBACE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBAClE,MAAM;YACZ,CAAC;QAEL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,kCAAkC,MAAM,OAAO,IAAI,GAAG,EACtD,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;IAQO,eAAe,CAAC,IAAY;QAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAMD,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEjE,OAAO,eAAe,IAAI,IAAI,CAAC;IACjC,CAAC;IAOO,mBAAmB,CAAC,IAAY;QAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAGzD,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAC/B,OAAO,CAAC,MAAM,GAAG,CAAC;YAClB,OAAO,KAAK,KAAK;YACjB,OAAO,KAAK,IAAI;YAChB,OAAO,KAAK,IAAI,CACjB,CAAC;IACJ,CAAC;IASO,kBAAkB,CAAC,GAAW,EAAE,IAAY,EAAE,YAAsB;QAC1E,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAGrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YACrF,OAAO,IAAI,CAAC;QACd,CAAC;QAID,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAG3C,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,SAAS;YACX,CAAC;YAKD,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC7C,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,CAAC,CAAC,YAAY,CAAC;YAEjB,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvE,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAQO,eAAe,CAAC,KAAU,EAAE,QAAmC;QACrE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEzF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,SAAS,YAAY,GAAG,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAa,CAAC;gBACtD,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjD,CAAC;iBAAM,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpC,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAMO,KAAK,CAAC,cAAc,CAAC,MAAc;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAmB,CAAC;QAC9C,IAAI,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;QAG/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAC3D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC/D,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;oBAC1B,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAE9C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;YAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YAEjB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAEhF,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBAEN,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;aAAM,CAAC;YAEN,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAOO,YAAY,CAAC,IAAY;QAG/B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAMO,KAAK,CAAC,eAAe,CAAC,OAAe;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAmB,CAAC;QAC9C,IAAI,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;QAG/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAC3D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC/D,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;oBAC1B,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAE9C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YAGjB,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAEhF,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;CAGF,CAAA;AA7cY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,mBAAU,GAAE;IAQR,WAAA,IAAA,eAAM,EAAC,6BAAa,CAAC,CAAA;;GAPb,2BAA2B,CA6cvC"}