@xbg.solutions/bpsk-utils-api-client 1.2.3

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 (49) hide show
  1. package/lib/index.d.ts +10 -0
  2. package/lib/index.d.ts.map +1 -0
  3. package/lib/index.js +14 -0
  4. package/lib/index.js.map +1 -0
  5. package/lib/services/api/api.service.d.ts +67 -0
  6. package/lib/services/api/api.service.d.ts.map +1 -0
  7. package/lib/services/api/api.service.js +344 -0
  8. package/lib/services/api/api.service.js.map +1 -0
  9. package/lib/services/api/index.d.ts +13 -0
  10. package/lib/services/api/index.d.ts.map +1 -0
  11. package/lib/services/api/index.js +15 -0
  12. package/lib/services/api/index.js.map +1 -0
  13. package/lib/services/api/request-handler.d.ts +17 -0
  14. package/lib/services/api/request-handler.d.ts.map +1 -0
  15. package/lib/services/api/request-handler.js +289 -0
  16. package/lib/services/api/request-handler.js.map +1 -0
  17. package/lib/services/api/response-handler.d.ts +16 -0
  18. package/lib/services/api/response-handler.d.ts.map +1 -0
  19. package/lib/services/api/response-handler.js +254 -0
  20. package/lib/services/api/response-handler.js.map +1 -0
  21. package/lib/services/caching/api-cache.service.d.ts +97 -0
  22. package/lib/services/caching/api-cache.service.d.ts.map +1 -0
  23. package/lib/services/caching/api-cache.service.js +294 -0
  24. package/lib/services/caching/api-cache.service.js.map +1 -0
  25. package/lib/services/caching/cache.service.d.ts +86 -0
  26. package/lib/services/caching/cache.service.d.ts.map +1 -0
  27. package/lib/services/caching/cache.service.js +519 -0
  28. package/lib/services/caching/cache.service.js.map +1 -0
  29. package/lib/services/caching/index.d.ts +5 -0
  30. package/lib/services/caching/index.d.ts.map +1 -0
  31. package/lib/services/caching/index.js +3 -0
  32. package/lib/services/caching/index.js.map +1 -0
  33. package/lib/stores/api.service.d.ts +6 -0
  34. package/lib/stores/api.service.d.ts.map +1 -0
  35. package/lib/stores/api.service.js +6 -0
  36. package/lib/stores/api.service.js.map +1 -0
  37. package/lib/stores/request-handler.d.ts +6 -0
  38. package/lib/stores/request-handler.d.ts.map +1 -0
  39. package/lib/stores/request-handler.js +6 -0
  40. package/lib/stores/request-handler.js.map +1 -0
  41. package/lib/stores/response-handler.d.ts +6 -0
  42. package/lib/stores/response-handler.d.ts.map +1 -0
  43. package/lib/stores/response-handler.js +6 -0
  44. package/lib/stores/response-handler.js.map +1 -0
  45. package/lib/utils/cache-helpers.d.ts +112 -0
  46. package/lib/utils/cache-helpers.d.ts.map +1 -0
  47. package/lib/utils/cache-helpers.js +302 -0
  48. package/lib/utils/cache-helpers.js.map +1 -0
  49. package/package.json +27 -0
@@ -0,0 +1,97 @@
1
+ /**
2
+ * API Response Caching Service
3
+ *
4
+ * Provides intelligent caching for API responses with support for
5
+ * different caching strategies and automatic cache invalidation.
6
+ */
7
+ import { type CacheOptions } from './cache.service';
8
+ export interface APIResponse<T = any> {
9
+ data: T;
10
+ status: number;
11
+ statusText: string;
12
+ headers: Record<string, string>;
13
+ cached?: boolean;
14
+ cacheTimestamp?: number;
15
+ }
16
+ export interface APICacheOptions extends Omit<CacheOptions, 'storage'> {
17
+ method?: string;
18
+ headers?: Record<string, string>;
19
+ body?: any;
20
+ strategy?: 'cache-first' | 'network-first' | 'cache-only' | 'network-only';
21
+ staleWhileRevalidate?: boolean;
22
+ storage?: 'memory' | 'localStorage' | 'sessionStorage' | 'indexedDB';
23
+ keyPrefix?: string;
24
+ }
25
+ declare class APICacheService {
26
+ private logger;
27
+ /**
28
+ * Generate cache key for request
29
+ */
30
+ private generateCacheKey;
31
+ /**
32
+ * Check if response should be cached
33
+ */
34
+ private shouldCache;
35
+ /**
36
+ * Get TTL from response headers
37
+ */
38
+ private getTTLFromHeaders;
39
+ /**
40
+ * Create response object from Response
41
+ */
42
+ private createAPIResponse;
43
+ /**
44
+ * Fetch with caching
45
+ */
46
+ fetch<T = any>(url: string, options?: APICacheOptions): Promise<APIResponse<T>>;
47
+ /**
48
+ * Fetch from network
49
+ */
50
+ private fetchFromNetwork;
51
+ /**
52
+ * Cache response if appropriate
53
+ */
54
+ private cacheResponse;
55
+ /**
56
+ * Invalidate cache for URL pattern
57
+ */
58
+ invalidate(urlPattern: string, options?: Partial<APICacheOptions>): Promise<void>;
59
+ /**
60
+ * Invalidate by URL pattern with wildcards
61
+ */
62
+ private invalidateByPattern;
63
+ /**
64
+ * Invalidate cache by tags
65
+ */
66
+ invalidateByTags(tags: string[], storage?: string): Promise<void>;
67
+ /**
68
+ * Prefetch and cache API responses
69
+ */
70
+ prefetch<T = any>(urls: string[], options?: APICacheOptions): Promise<void>;
71
+ /**
72
+ * Warmup cache with common requests
73
+ */
74
+ warmup(requests: Array<{
75
+ url: string;
76
+ options?: APICacheOptions;
77
+ }>): Promise<void>;
78
+ /**
79
+ * GET request with caching
80
+ */
81
+ get<T = any>(url: string, options?: Omit<APICacheOptions, 'method'>): Promise<APIResponse<T>>;
82
+ /**
83
+ * POST request (typically not cached)
84
+ */
85
+ post<T = any>(url: string, body?: any, options?: Omit<APICacheOptions, 'method' | 'body'>): Promise<APIResponse<T>>;
86
+ /**
87
+ * PUT request with cache invalidation
88
+ */
89
+ put<T = any>(url: string, body?: any, options?: Omit<APICacheOptions, 'method' | 'body'>): Promise<APIResponse<T>>;
90
+ /**
91
+ * DELETE request with cache invalidation
92
+ */
93
+ delete<T = any>(url: string, options?: Omit<APICacheOptions, 'method'>): Promise<APIResponse<T>>;
94
+ }
95
+ export declare const apiCacheService: APICacheService;
96
+ export {};
97
+ //# sourceMappingURL=api-cache.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-cache.service.d.ts","sourceRoot":"","sources":["../../../src/services/caching/api-cache.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,294 @@
1
+ /**
2
+ * API Response Caching Service
3
+ *
4
+ * Provides intelligent caching for API responses with support for
5
+ * different caching strategies and automatic cache invalidation.
6
+ */
7
+ import { cacheService } from './cache.service';
8
+ import { loggerService } from '@xbg.solutions/bpsk-core';
9
+ class APICacheService {
10
+ constructor() {
11
+ this.logger = loggerService.withContext('APICacheService');
12
+ }
13
+ /**
14
+ * Generate cache key for request
15
+ */
16
+ generateCacheKey(url, options) {
17
+ const key = `${options.keyPrefix || 'api'}:${options.method || 'GET'}:${url}`;
18
+ // Include body and relevant headers in key for uniqueness
19
+ if (options.body) {
20
+ const bodyKey = typeof options.body === 'string'
21
+ ? options.body
22
+ : JSON.stringify(options.body);
23
+ return `${key}:${btoa(bodyKey).substring(0, 16)}`;
24
+ }
25
+ return key;
26
+ }
27
+ /**
28
+ * Check if response should be cached
29
+ */
30
+ shouldCache(response, options) {
31
+ // Don't cache errors by default
32
+ if (!response.ok) {
33
+ return false;
34
+ }
35
+ // Don't cache non-GET requests by default
36
+ const method = options.method?.toUpperCase() || 'GET';
37
+ if (method !== 'GET' && method !== 'HEAD') {
38
+ return false;
39
+ }
40
+ // Check cache-control headers
41
+ const cacheControl = response.headers.get('cache-control');
42
+ if (cacheControl?.includes('no-cache') || cacheControl?.includes('no-store')) {
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+ /**
48
+ * Get TTL from response headers
49
+ */
50
+ getTTLFromHeaders(response, defaultTTL = 5 * 60 * 1000) {
51
+ const cacheControl = response.headers.get('cache-control');
52
+ if (cacheControl) {
53
+ const maxAgeMatch = cacheControl.match(/max-age=(\d+)/);
54
+ if (maxAgeMatch) {
55
+ return parseInt(maxAgeMatch[1]) * 1000; // Convert seconds to milliseconds
56
+ }
57
+ }
58
+ const expires = response.headers.get('expires');
59
+ if (expires) {
60
+ const expiresTime = new Date(expires).getTime();
61
+ const now = Date.now();
62
+ if (expiresTime > now) {
63
+ return expiresTime - now;
64
+ }
65
+ }
66
+ return defaultTTL;
67
+ }
68
+ /**
69
+ * Create response object from Response
70
+ */
71
+ async createAPIResponse(response, cached = false, cacheTimestamp) {
72
+ const data = await response.json();
73
+ const headers = {};
74
+ response.headers.forEach((value, key) => {
75
+ headers[key] = value;
76
+ });
77
+ return {
78
+ data,
79
+ status: response.status,
80
+ statusText: response.statusText,
81
+ headers,
82
+ cached,
83
+ cacheTimestamp
84
+ };
85
+ }
86
+ /**
87
+ * Fetch with caching
88
+ */
89
+ async fetch(url, options = {}) {
90
+ const cacheKey = this.generateCacheKey(url, options);
91
+ const strategy = options.strategy || 'cache-first';
92
+ const storage = options.storage || 'memory';
93
+ // Cache-only strategy
94
+ if (strategy === 'cache-only') {
95
+ const cached = await cacheService.get(cacheKey, storage);
96
+ if (cached) {
97
+ this.logger.debug('Cache hit (cache-only)', { url, cacheKey });
98
+ return { ...cached, cached: true };
99
+ }
100
+ throw new Error(`No cached response for ${url}`);
101
+ }
102
+ // Network-only strategy
103
+ if (strategy === 'network-only') {
104
+ return this.fetchFromNetwork(url, options);
105
+ }
106
+ // Cache-first strategy
107
+ if (strategy === 'cache-first') {
108
+ const cached = await cacheService.get(cacheKey, storage);
109
+ if (cached) {
110
+ this.logger.debug('Cache hit (cache-first)', { url, cacheKey });
111
+ // Stale while revalidate
112
+ if (options.staleWhileRevalidate) {
113
+ this.fetchFromNetwork(url, options).then(response => {
114
+ this.cacheResponse(cacheKey, response, options);
115
+ }).catch(error => {
116
+ this.logger.warn('Background revalidation failed', error);
117
+ });
118
+ }
119
+ return { ...cached, cached: true };
120
+ }
121
+ this.logger.debug('Cache miss (cache-first)', { url, cacheKey });
122
+ const response = await this.fetchFromNetwork(url, options);
123
+ await this.cacheResponse(cacheKey, response, options);
124
+ return response;
125
+ }
126
+ // Network-first strategy
127
+ if (strategy === 'network-first') {
128
+ try {
129
+ const response = await this.fetchFromNetwork(url, options);
130
+ await this.cacheResponse(cacheKey, response, options);
131
+ return response;
132
+ }
133
+ catch (error) {
134
+ this.logger.warn('Network request failed, falling back to cache', error);
135
+ const cached = await cacheService.get(cacheKey, storage);
136
+ if (cached) {
137
+ this.logger.debug('Cache hit (network-first fallback)', { url, cacheKey });
138
+ return { ...cached, cached: true };
139
+ }
140
+ throw error;
141
+ }
142
+ }
143
+ throw new Error(`Unknown cache strategy: ${strategy}`);
144
+ }
145
+ /**
146
+ * Fetch from network
147
+ */
148
+ async fetchFromNetwork(url, options) {
149
+ const fetchOptions = {
150
+ method: options.method || 'GET',
151
+ headers: options.headers,
152
+ body: options.body
153
+ };
154
+ const response = await fetch(url, fetchOptions);
155
+ if (!response.ok) {
156
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
157
+ }
158
+ return this.createAPIResponse(response);
159
+ }
160
+ /**
161
+ * Cache response if appropriate
162
+ */
163
+ async cacheResponse(cacheKey, response, options) {
164
+ const mockResponse = new Response(JSON.stringify(response.data), {
165
+ status: response.status,
166
+ statusText: response.statusText,
167
+ headers: response.headers
168
+ });
169
+ if (!this.shouldCache(mockResponse, options)) {
170
+ return;
171
+ }
172
+ const ttl = options.ttl || this.getTTLFromHeaders(mockResponse);
173
+ const cacheOptions = {
174
+ ttl,
175
+ tags: options.tags,
176
+ storage: options.storage || 'memory'
177
+ };
178
+ await cacheService.set(cacheKey, response, cacheOptions);
179
+ this.logger.debug('Response cached', {
180
+ cacheKey,
181
+ ttl,
182
+ storage: cacheOptions.storage
183
+ });
184
+ }
185
+ /**
186
+ * Invalidate cache for URL pattern
187
+ */
188
+ async invalidate(urlPattern, options = {}) {
189
+ const storage = options.storage || 'memory';
190
+ const keyPrefix = options.keyPrefix || 'api';
191
+ // Simple pattern matching - could be enhanced with regex
192
+ const pattern = `${keyPrefix}:${options.method || 'GET'}:${urlPattern}`;
193
+ if (pattern.includes('*')) {
194
+ // Wildcard invalidation
195
+ await this.invalidateByPattern(pattern, storage);
196
+ }
197
+ else {
198
+ // Exact match invalidation
199
+ await cacheService.delete(pattern, storage);
200
+ }
201
+ }
202
+ /**
203
+ * Invalidate by URL pattern with wildcards
204
+ */
205
+ async invalidateByPattern(pattern, storage) {
206
+ // Convert pattern to regex
207
+ const regexPattern = pattern.replace(/\*/g, '.*');
208
+ const regex = new RegExp(`^${regexPattern}$`);
209
+ // This is a simplified implementation
210
+ // In a production system, you might want to use tags for more efficient invalidation
211
+ const allKeys = await cacheService.keys(storage);
212
+ const matchingKeys = allKeys.filter(key => regex.test(key));
213
+ await Promise.all(matchingKeys.map(key => cacheService.delete(key, storage)));
214
+ this.logger.info(`Invalidated ${matchingKeys.length} cached responses`, { pattern, storage });
215
+ }
216
+ /**
217
+ * Invalidate cache by tags
218
+ */
219
+ async invalidateByTags(tags, storage = 'memory') {
220
+ await cacheService.invalidateByTags(tags, storage);
221
+ this.logger.info('Invalidated cache by tags', { tags, storage });
222
+ }
223
+ /**
224
+ * Prefetch and cache API responses
225
+ */
226
+ async prefetch(urls, options = {}) {
227
+ const prefetchOptions = {
228
+ ...options,
229
+ strategy: 'network-first'
230
+ };
231
+ const promises = urls.map(url => this.fetch(url, prefetchOptions).catch(error => {
232
+ this.logger.warn(`Prefetch failed for ${url}`, error);
233
+ }));
234
+ await Promise.allSettled(promises);
235
+ this.logger.info(`Prefetched ${urls.length} URLs`);
236
+ }
237
+ /**
238
+ * Warmup cache with common requests
239
+ */
240
+ async warmup(requests) {
241
+ const promises = requests.map(({ url, options = {} }) => this.fetch(url, { ...options, strategy: 'network-first' }).catch(error => {
242
+ this.logger.warn(`Warmup failed for ${url}`, error);
243
+ }));
244
+ await Promise.allSettled(promises);
245
+ this.logger.info(`Warmed up cache with ${requests.length} requests`);
246
+ }
247
+ /**
248
+ * GET request with caching
249
+ */
250
+ async get(url, options = {}) {
251
+ return this.fetch(url, { ...options, method: 'GET' });
252
+ }
253
+ /**
254
+ * POST request (typically not cached)
255
+ */
256
+ async post(url, body, options = {}) {
257
+ return this.fetch(url, {
258
+ ...options,
259
+ method: 'POST',
260
+ body: typeof body === 'string' ? body : JSON.stringify(body),
261
+ strategy: 'network-only' // POST requests shouldn't be cached by default
262
+ });
263
+ }
264
+ /**
265
+ * PUT request with cache invalidation
266
+ */
267
+ async put(url, body, options = {}) {
268
+ const response = await this.fetch(url, {
269
+ ...options,
270
+ method: 'PUT',
271
+ body: typeof body === 'string' ? body : JSON.stringify(body),
272
+ strategy: 'network-only'
273
+ });
274
+ // Invalidate related cache entries
275
+ await this.invalidate(url.split('?')[0] + '*', options);
276
+ return response;
277
+ }
278
+ /**
279
+ * DELETE request with cache invalidation
280
+ */
281
+ async delete(url, options = {}) {
282
+ const response = await this.fetch(url, {
283
+ ...options,
284
+ method: 'DELETE',
285
+ strategy: 'network-only'
286
+ });
287
+ // Invalidate related cache entries
288
+ await this.invalidate(url.split('?')[0] + '*', options);
289
+ return response;
290
+ }
291
+ }
292
+ // Export singleton instance
293
+ export const apiCacheService = new APICacheService();
294
+ //# sourceMappingURL=api-cache.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-cache.service.js","sourceRoot":"","sources":["../../../src/services/caching/api-cache.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Caching Service
3
+ *
4
+ * Provides multiple levels of caching: memory, localStorage, sessionStorage,
5
+ * and IndexedDB for different use cases and data sizes.
6
+ */
7
+ import { type Writable } from 'svelte/store';
8
+ export interface CacheItem<T = any> {
9
+ key: string;
10
+ value: T;
11
+ expiresAt: number;
12
+ createdAt: number;
13
+ tags?: string[];
14
+ size?: number;
15
+ }
16
+ export interface CacheOptions {
17
+ ttl?: number;
18
+ tags?: string[];
19
+ storage?: 'memory' | 'localStorage' | 'sessionStorage' | 'indexedDB';
20
+ compress?: boolean;
21
+ maxSize?: number;
22
+ }
23
+ export interface CacheStats {
24
+ hitCount: number;
25
+ missCount: number;
26
+ hitRate: number;
27
+ itemCount: number;
28
+ totalSize: number;
29
+ evictedCount: number;
30
+ }
31
+ /**
32
+ * Main cache service
33
+ */
34
+ declare class CacheService {
35
+ private storages;
36
+ private stats;
37
+ private logger;
38
+ constructor();
39
+ /**
40
+ * Get item from cache
41
+ */
42
+ get<T = any>(key: string, storage?: string): Promise<T | null>;
43
+ /**
44
+ * Set item in cache
45
+ */
46
+ set<T = any>(key: string, value: T, options?: CacheOptions): Promise<void>;
47
+ /**
48
+ * Delete item from cache
49
+ */
50
+ delete(key: string, storage?: string): Promise<void>;
51
+ /**
52
+ * Clear all items from cache
53
+ */
54
+ clear(storage?: string): Promise<void>;
55
+ /**
56
+ * Get or set cached value
57
+ */
58
+ getOrSet<T = any>(key: string, factory: () => Promise<T> | T, options?: CacheOptions): Promise<T>;
59
+ /**
60
+ * Invalidate cache by tags
61
+ */
62
+ invalidateByTags(tags: string[], storage?: string): Promise<void>;
63
+ /**
64
+ * Clean up expired items
65
+ */
66
+ cleanupExpired(): Promise<void>;
67
+ /**
68
+ * Get all keys from a specific storage
69
+ */
70
+ keys(storage?: string): Promise<string[]>;
71
+ /**
72
+ * Get cache statistics
73
+ */
74
+ getStats(): Writable<CacheStats>;
75
+ /**
76
+ * Estimate object size in bytes
77
+ */
78
+ private estimateSize;
79
+ /**
80
+ * Update cache statistics
81
+ */
82
+ private updateStats;
83
+ }
84
+ export declare const cacheService: CacheService;
85
+ export {};
86
+ //# sourceMappingURL=cache.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../../src/services/caching/cache.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,GAAG;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,gBAAgB,GAAG,WAAW,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AA2UD;;GAEG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,KAAK,CAOV;IACH,OAAO,CAAC,MAAM,CAA6C;;IAc3D;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA+B9E;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BpF;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;OAEG;IACG,KAAK,CAAC,OAAO,GAAE,MAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD;;OAEG;IACG,QAAQ,CAAC,CAAC,GAAG,GAAG,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC7B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC;IAWb;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,MAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBjF;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BrC;;OAEG;IACG,IAAI,CAAC,OAAO,GAAE,MAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMzD;;OAEG;IACH,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC;IAIhC;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,WAAW;CAcpB;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}