@framers/sql-storage-adapter 0.3.4 → 0.4.1
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/README.md +93 -0
- package/dist/adapters/baseStorageAdapter.d.ts +172 -8
- package/dist/adapters/baseStorageAdapter.d.ts.map +1 -1
- package/dist/adapters/baseStorageAdapter.js +487 -21
- package/dist/adapters/baseStorageAdapter.js.map +1 -1
- package/dist/core/contracts/hooks.d.ts +481 -0
- package/dist/core/contracts/hooks.d.ts.map +1 -0
- package/dist/core/contracts/hooks.js +215 -0
- package/dist/core/contracts/hooks.js.map +1 -0
- package/dist/core/contracts/index.d.ts +10 -0
- package/dist/core/contracts/index.d.ts.map +1 -1
- package/dist/core/contracts/index.js +13 -0
- package/dist/core/contracts/index.js.map +1 -1
- package/dist/core/contracts/performance.d.ts +308 -0
- package/dist/core/contracts/performance.d.ts.map +1 -0
- package/dist/core/contracts/performance.js +186 -0
- package/dist/core/contracts/performance.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -38,9 +38,12 @@ The SQL Storage Adapter provides a single, ergonomic interface over SQLite (nati
|
|
|
38
38
|
- **Auto-detected adapters** – `createDatabase()` inspects environment signals and picks the best backend (native SQLite, PostgreSQL, Capacitor, sql.js, **IndexedDB**, memory, etc.).
|
|
39
39
|
- **Capability-aware API** – consistent CRUD, transactions, batching, and event hooks across adapters with runtime capability introspection.
|
|
40
40
|
- **🆕 IndexedDB** – sql.js + IndexedDB persistence wrapper for browser-native, offline-first web apps (uses sql.js for SQL execution, IndexedDB for storage).
|
|
41
|
+
- **🆕 Performance Tiers** – Configurable `fast`, `balanced`, `accurate`, `efficient` presets for cost/accuracy tradeoffs. See [Optimization Guide](./docs/OPTIMIZATION_GUIDE.md).
|
|
42
|
+
- **🆕 Lifecycle Hooks** – Extensible hooks (`onBeforeQuery`, `onAfterQuery`, `onBeforeWrite`, `onAfterWrite`) for logging, analytics, caching, and custom extensions.
|
|
41
43
|
- **Cloud backups & migrations** – built-in backup manager with compression, retention policies, and restore helpers plus migration utilities.
|
|
42
44
|
- **Portable packaging** – optional native dependencies; falls back to pure TypeScript/WASM adapters when native modules are unavailable.
|
|
43
45
|
- **Browser-friendly** – Dynamic imports prevent bundlers from including server-only dependencies (`pg`, `path`) in browser builds.
|
|
46
|
+
- **Mobile/Offline Parity** – Same APIs work across desktop, mobile (Capacitor), and browser with automatic sync support.
|
|
44
47
|
- **CI-first design** – Vitest coverage, Codecov integration, and GitHub Actions workflows for linting, testing, releasing, and npm publish/tag automation.
|
|
45
48
|
|
|
46
49
|
## Installation
|
|
@@ -213,6 +216,96 @@ See [**PLATFORM_STRATEGY.md**](./PLATFORM_STRATEGY.md) for a comprehensive guide
|
|
|
213
216
|
|
|
214
217
|
**TL;DR:** Use IndexedDB for web, better-sqlite3 for desktop, capacitor for mobile, Postgres for cloud.
|
|
215
218
|
|
|
219
|
+
## Performance Tiers & Cost Optimization
|
|
220
|
+
|
|
221
|
+
The adapter supports configurable performance tiers for different use cases:
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
import { createDatabase } from '@framers/sql-storage-adapter';
|
|
225
|
+
|
|
226
|
+
// Development: Fast tier - prioritize speed
|
|
227
|
+
const devDb = await createDatabase({
|
|
228
|
+
type: 'memory',
|
|
229
|
+
performance: { tier: 'fast' }
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// Production: Balanced tier (default)
|
|
233
|
+
const prodDb = await createDatabase({
|
|
234
|
+
priority: ['indexeddb', 'sqljs'],
|
|
235
|
+
performance: { tier: 'balanced' }
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
// Analytics/Reporting: Accurate tier - no caching, full validation
|
|
239
|
+
const analyticsDb = await createDatabase({
|
|
240
|
+
postgres: { connectionString: process.env.DATABASE_URL },
|
|
241
|
+
performance: { tier: 'accurate', trackMetrics: true }
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
// Mobile: Efficient tier - battery optimization
|
|
245
|
+
const mobileDb = await createDatabase({
|
|
246
|
+
priority: ['capacitor', 'indexeddb'],
|
|
247
|
+
performance: { tier: 'efficient', batchWrites: true }
|
|
248
|
+
});
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
| Tier | Caching | Batching | Validation | Use Case |
|
|
252
|
+
|------|---------|----------|------------|----------|
|
|
253
|
+
| `fast` | Aggressive | Yes | Minimal | Development, testing |
|
|
254
|
+
| `balanced` | Moderate | No | Standard | General production |
|
|
255
|
+
| `accurate` | Disabled | No | Full | Analytics, reporting |
|
|
256
|
+
| `efficient` | Moderate | Yes | Minimal | Mobile, IoT |
|
|
257
|
+
|
|
258
|
+
See [**docs/OPTIMIZATION_GUIDE.md**](./docs/OPTIMIZATION_GUIDE.md) for detailed configuration options.
|
|
259
|
+
|
|
260
|
+
## Lifecycle Hooks
|
|
261
|
+
|
|
262
|
+
The adapter provides lifecycle hooks for extending behavior:
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
import { createDatabase, type StorageHooks } from '@framers/sql-storage-adapter';
|
|
266
|
+
|
|
267
|
+
const myHooks: StorageHooks = {
|
|
268
|
+
// Log all writes
|
|
269
|
+
onBeforeWrite: async (context) => {
|
|
270
|
+
console.log(`Write operation: ${context.statement}`);
|
|
271
|
+
return context;
|
|
272
|
+
},
|
|
273
|
+
|
|
274
|
+
// Track metrics after writes
|
|
275
|
+
onAfterWrite: async (context, result) => {
|
|
276
|
+
if (result.changes > 0) {
|
|
277
|
+
console.log(`Modified ${result.changes} rows`);
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
|
|
281
|
+
// Log slow queries for optimization
|
|
282
|
+
onAfterQuery: async (context, result) => {
|
|
283
|
+
const duration = Date.now() - context.startTime;
|
|
284
|
+
if (duration > 100) {
|
|
285
|
+
console.warn(`Slow query (${duration}ms):`, context.statement);
|
|
286
|
+
}
|
|
287
|
+
return result;
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
const db = await createDatabase({
|
|
292
|
+
performance: { tier: 'balanced' },
|
|
293
|
+
hooks: myHooks
|
|
294
|
+
});
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Available Hooks
|
|
298
|
+
|
|
299
|
+
| Hook | Trigger | Use Cases |
|
|
300
|
+
|------|---------|-----------|
|
|
301
|
+
| `onBeforeQuery` | Before SELECT/exec | Query transformation, caching, logging |
|
|
302
|
+
| `onAfterQuery` | After successful query | Result transformation, metrics |
|
|
303
|
+
| `onBeforeWrite` | Before INSERT/UPDATE/DELETE | Validation, auditing, transformation |
|
|
304
|
+
| `onAfterWrite` | After successful write | Cache invalidation, sync triggers |
|
|
305
|
+
| `onError` | On any error | Error transformation, alerting |
|
|
306
|
+
|
|
307
|
+
See [**docs/OPTIMIZATION_GUIDE.md**](./docs/OPTIMIZATION_GUIDE.md) for complete configuration options.
|
|
308
|
+
|
|
216
309
|
## CI, Releases, and Badges
|
|
217
310
|
|
|
218
311
|
- GitHub Actions workflows:
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
* - Parameter validation and sanitization
|
|
10
10
|
* - Error handling and standardization
|
|
11
11
|
* - Lifecycle management (open/close state tracking)
|
|
12
|
-
* - Performance monitoring
|
|
12
|
+
* - Performance monitoring with configurable tiers
|
|
13
|
+
* - Query result caching (optional)
|
|
14
|
+
* - Lifecycle hooks for RAG integration
|
|
13
15
|
* - Logging and diagnostics
|
|
14
16
|
*
|
|
15
17
|
* @example Implementing a new adapter
|
|
@@ -26,20 +28,75 @@
|
|
|
26
28
|
* // ... implement other abstract methods
|
|
27
29
|
* }
|
|
28
30
|
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example Using with performance tiers and hooks
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const adapter = new MyAdapter({
|
|
35
|
+
* performance: { tier: 'balanced', trackMetrics: true },
|
|
36
|
+
* hooks: {
|
|
37
|
+
* onBeforeWrite: async (ctx) => {
|
|
38
|
+
* // Generate embedding for RAG
|
|
39
|
+
* ctx.metadata = { embedding: await embed(ctx.parameters?.[0]) };
|
|
40
|
+
* return ctx;
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
29
45
|
*/
|
|
30
46
|
import type { StorageAdapter, StorageCapability, StorageOpenOptions, StorageParameters, StorageRunResult, BatchOperation, BatchResult, PreparedStatement } from '../core/contracts';
|
|
47
|
+
import type { PerformanceConfig, PerformanceSettings, CacheStats } from '../core/contracts/performance';
|
|
48
|
+
import type { StorageHooks } from '../core/contracts/hooks';
|
|
31
49
|
/**
|
|
32
50
|
* Options for BaseStorageAdapter configuration.
|
|
51
|
+
*
|
|
52
|
+
* @example Basic options
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const adapter = new MyAdapter({ verbose: true });
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @example With performance tier
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const adapter = new MyAdapter({
|
|
60
|
+
* performance: { tier: 'fast' }
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @example With hooks for RAG
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const adapter = new MyAdapter({
|
|
67
|
+
* hooks: {
|
|
68
|
+
* onAfterWrite: async (ctx, result) => {
|
|
69
|
+
* await updateVectorIndex(result.lastInsertRowid, ctx.metadata?.embedding);
|
|
70
|
+
* }
|
|
71
|
+
* }
|
|
72
|
+
* });
|
|
73
|
+
* ```
|
|
33
74
|
*/
|
|
34
75
|
export interface BaseAdapterOptions {
|
|
35
76
|
/** Enable detailed logging (default: false) */
|
|
36
77
|
verbose?: boolean;
|
|
37
|
-
/**
|
|
38
|
-
|
|
39
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Enable performance tracking and metrics collection.
|
|
80
|
+
* @defaultValue true when tier is 'balanced' or 'accurate'
|
|
81
|
+
*/
|
|
40
82
|
trackPerformance?: boolean;
|
|
41
|
-
/**
|
|
42
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Performance tier configuration.
|
|
85
|
+
* Controls caching, batching, validation, and retry behavior.
|
|
86
|
+
* @defaultValue { tier: 'balanced' }
|
|
87
|
+
*/
|
|
88
|
+
performance?: PerformanceConfig;
|
|
89
|
+
/**
|
|
90
|
+
* Lifecycle hooks for extending adapter behavior.
|
|
91
|
+
* Useful for RAG integration, logging, analytics, and auditing.
|
|
92
|
+
*/
|
|
93
|
+
hooks?: StorageHooks;
|
|
94
|
+
/**
|
|
95
|
+
* Validate SQL statements before execution.
|
|
96
|
+
* Convenience option that overrides performance.validateSql.
|
|
97
|
+
* @defaultValue true
|
|
98
|
+
*/
|
|
99
|
+
validateSQL?: boolean;
|
|
43
100
|
}
|
|
44
101
|
/**
|
|
45
102
|
* Performance metrics tracked by the base adapter.
|
|
@@ -57,6 +114,12 @@ export interface AdapterMetrics {
|
|
|
57
114
|
averageQueryDuration: number;
|
|
58
115
|
/** Time when adapter was opened */
|
|
59
116
|
openedAt: Date | null;
|
|
117
|
+
/** Cache statistics (if caching enabled) */
|
|
118
|
+
cache?: CacheStats;
|
|
119
|
+
/** Slow query count */
|
|
120
|
+
slowQueries: number;
|
|
121
|
+
/** Retry count */
|
|
122
|
+
retries: number;
|
|
60
123
|
}
|
|
61
124
|
/**
|
|
62
125
|
* Abstract base class for SQL storage adapters.
|
|
@@ -65,21 +128,52 @@ export interface AdapterMetrics {
|
|
|
65
128
|
* - State management (open/close tracking)
|
|
66
129
|
* - Parameter validation
|
|
67
130
|
* - Error handling and wrapping
|
|
68
|
-
* - Performance metrics
|
|
131
|
+
* - Performance metrics with configurable tiers
|
|
132
|
+
* - Query result caching (tier-dependent)
|
|
133
|
+
* - Lifecycle hooks for RAG and analytics
|
|
69
134
|
* - Logging and diagnostics
|
|
70
135
|
*/
|
|
71
136
|
export declare abstract class BaseStorageAdapter implements StorageAdapter {
|
|
72
137
|
abstract readonly kind: string;
|
|
73
138
|
abstract readonly capabilities: ReadonlySet<StorageCapability>;
|
|
74
139
|
private state;
|
|
75
|
-
protected readonly options:
|
|
140
|
+
protected readonly options: BaseAdapterOptions;
|
|
141
|
+
protected readonly performanceSettings: PerformanceSettings;
|
|
142
|
+
protected readonly hooks: StorageHooks;
|
|
76
143
|
private metrics;
|
|
144
|
+
private queryCache;
|
|
145
|
+
private cacheStats;
|
|
77
146
|
private queryDurations;
|
|
78
147
|
private readonly MAX_DURATION_SAMPLES;
|
|
79
148
|
/**
|
|
80
149
|
* Creates a new adapter instance.
|
|
81
150
|
*
|
|
82
151
|
* @param options - Configuration options for the adapter
|
|
152
|
+
*
|
|
153
|
+
* @example Default balanced tier
|
|
154
|
+
* ```typescript
|
|
155
|
+
* const adapter = new MyAdapter();
|
|
156
|
+
* ```
|
|
157
|
+
*
|
|
158
|
+
* @example Fast tier for development
|
|
159
|
+
* ```typescript
|
|
160
|
+
* const adapter = new MyAdapter({
|
|
161
|
+
* performance: { tier: 'fast' },
|
|
162
|
+
* verbose: true
|
|
163
|
+
* });
|
|
164
|
+
* ```
|
|
165
|
+
*
|
|
166
|
+
* @example With RAG hooks
|
|
167
|
+
* ```typescript
|
|
168
|
+
* const adapter = new MyAdapter({
|
|
169
|
+
* hooks: {
|
|
170
|
+
* onBeforeWrite: async (ctx) => {
|
|
171
|
+
* ctx.metadata = { embedding: await embed(ctx.parameters) };
|
|
172
|
+
* return ctx;
|
|
173
|
+
* }
|
|
174
|
+
* }
|
|
175
|
+
* });
|
|
176
|
+
* ```
|
|
83
177
|
*/
|
|
84
178
|
constructor(options?: BaseAdapterOptions);
|
|
85
179
|
/**
|
|
@@ -89,14 +183,21 @@ export declare abstract class BaseStorageAdapter implements StorageAdapter {
|
|
|
89
183
|
open(options?: StorageOpenOptions): Promise<void>;
|
|
90
184
|
/**
|
|
91
185
|
* Executes a mutation statement (INSERT, UPDATE, DELETE).
|
|
186
|
+
*
|
|
187
|
+
* Invokes `onBeforeWrite` and `onAfterWrite` hooks if configured.
|
|
188
|
+
* Supports retry on transient errors based on performance tier.
|
|
92
189
|
*/
|
|
93
190
|
run(statement: string, parameters?: StorageParameters): Promise<StorageRunResult>;
|
|
94
191
|
/**
|
|
95
192
|
* Retrieves a single row.
|
|
193
|
+
*
|
|
194
|
+
* Supports caching based on performance tier and invokes query hooks.
|
|
96
195
|
*/
|
|
97
196
|
get<T = unknown>(statement: string, parameters?: StorageParameters): Promise<T | null>;
|
|
98
197
|
/**
|
|
99
198
|
* Retrieves all rows.
|
|
199
|
+
*
|
|
200
|
+
* Supports caching based on performance tier and invokes query hooks.
|
|
100
201
|
*/
|
|
101
202
|
all<T = unknown>(statement: string, parameters?: StorageParameters): Promise<T[]>;
|
|
102
203
|
/**
|
|
@@ -105,6 +206,8 @@ export declare abstract class BaseStorageAdapter implements StorageAdapter {
|
|
|
105
206
|
exec(script: string): Promise<void>;
|
|
106
207
|
/**
|
|
107
208
|
* Executes a transaction.
|
|
209
|
+
*
|
|
210
|
+
* Invokes transaction hooks and invalidates cache on completion.
|
|
108
211
|
*/
|
|
109
212
|
transaction<T>(fn: (trx: StorageAdapter) => Promise<T>): Promise<T>;
|
|
110
213
|
/**
|
|
@@ -168,6 +271,55 @@ export declare abstract class BaseStorageAdapter implements StorageAdapter {
|
|
|
168
271
|
* @throws {Error} If statement is invalid
|
|
169
272
|
*/
|
|
170
273
|
protected validateStatement(statement: string): void;
|
|
274
|
+
/**
|
|
275
|
+
* Generates a cache key for a query.
|
|
276
|
+
* Includes operation type to prevent get/all cache collisions.
|
|
277
|
+
*/
|
|
278
|
+
private getCacheKey;
|
|
279
|
+
/**
|
|
280
|
+
* Gets a value from cache if valid.
|
|
281
|
+
*/
|
|
282
|
+
private getFromCache;
|
|
283
|
+
/**
|
|
284
|
+
* Sets a value in cache.
|
|
285
|
+
*/
|
|
286
|
+
private setCache;
|
|
287
|
+
/**
|
|
288
|
+
* Invalidates cache entries for specific tables.
|
|
289
|
+
*/
|
|
290
|
+
private invalidateCache;
|
|
291
|
+
/**
|
|
292
|
+
* Clears entire cache.
|
|
293
|
+
*/
|
|
294
|
+
private clearCache;
|
|
295
|
+
/**
|
|
296
|
+
* Evicts least recently used cache entry.
|
|
297
|
+
*/
|
|
298
|
+
private evictLRU;
|
|
299
|
+
/**
|
|
300
|
+
* Updates cache hit ratio.
|
|
301
|
+
*/
|
|
302
|
+
private updateCacheHitRatio;
|
|
303
|
+
/**
|
|
304
|
+
* Executes an operation with retry logic.
|
|
305
|
+
*/
|
|
306
|
+
private executeWithRetry;
|
|
307
|
+
/**
|
|
308
|
+
* Sleep utility for retry delays.
|
|
309
|
+
*/
|
|
310
|
+
private sleep;
|
|
311
|
+
/**
|
|
312
|
+
* Extracts table names from a SQL statement.
|
|
313
|
+
*
|
|
314
|
+
* @remarks
|
|
315
|
+
* Simple regex-based extraction. For complex queries, consider
|
|
316
|
+
* using a proper SQL parser.
|
|
317
|
+
*/
|
|
318
|
+
private extractTables;
|
|
319
|
+
/**
|
|
320
|
+
* Checks if query duration exceeds slow query threshold.
|
|
321
|
+
*/
|
|
322
|
+
private checkSlowQuery;
|
|
171
323
|
/**
|
|
172
324
|
* Wraps an error with adapter context.
|
|
173
325
|
*/
|
|
@@ -176,6 +328,10 @@ export declare abstract class BaseStorageAdapter implements StorageAdapter {
|
|
|
176
328
|
* Logs a message if verbose mode is enabled.
|
|
177
329
|
*/
|
|
178
330
|
protected log(message: string): void;
|
|
331
|
+
/**
|
|
332
|
+
* Logs a warning message (always outputs regardless of verbose).
|
|
333
|
+
*/
|
|
334
|
+
protected logWarn(message: string): void;
|
|
179
335
|
/**
|
|
180
336
|
* Tracks query duration for performance metrics.
|
|
181
337
|
*/
|
|
@@ -188,6 +344,14 @@ export declare abstract class BaseStorageAdapter implements StorageAdapter {
|
|
|
188
344
|
* Gets performance metrics.
|
|
189
345
|
*/
|
|
190
346
|
getMetrics(): Readonly<AdapterMetrics>;
|
|
347
|
+
/**
|
|
348
|
+
* Gets cache statistics.
|
|
349
|
+
*/
|
|
350
|
+
getCacheStats(): Readonly<CacheStats> | null;
|
|
351
|
+
/**
|
|
352
|
+
* Gets current performance settings.
|
|
353
|
+
*/
|
|
354
|
+
getPerformanceSettings(): Readonly<PerformanceSettings>;
|
|
191
355
|
/**
|
|
192
356
|
* Checks if adapter is open.
|
|
193
357
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseStorageAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/baseStorageAdapter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"baseStorageAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/baseStorageAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EAEnB,UAAU,EAEX,MAAM,+BAA+B,CAAC;AAOvC,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,yBAAyB,CAAC;AAejC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC;;;OAGG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mCAAmC;IACnC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,8BAAsB,kBAAmB,YAAW,cAAc;IAEhE,kBAAyB,IAAI,EAAE,MAAM,CAAC;IACtC,kBAAyB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAGtE,OAAO,CAAC,KAAK,CAAqC;IAGlD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC5D,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAGvC,OAAO,CAAC,OAAO,CASb;IAGF,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,UAAU,CAQhB;IAGF,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;gBACS,OAAO,GAAE,kBAAuB;IAwB5C;;;OAGG;IACU,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9D;;;;;OAKG;IACU,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuE9F;;;;OAIG;IACU,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAgFnG;;;;OAIG;IACU,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAgF9F;;OAEG;IACU,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhD;;;;OAIG;IACU,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAgEhF;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBnC;;OAEG;IACU,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA8BtE;;OAEG;IACI,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAmBpE;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3E;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE3G;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAEtG;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAEjG;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE7D;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAE7F;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhD;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAE3E;;;OAGG;IACH,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAMrE;;;OAGG;IACH,SAAS,CAAC,UAAU,IAAI,IAAI;IAM5B;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAmBpD;;;OAGG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,YAAY;IA2BpB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAoBhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAehB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;YACW,gBAAgB;IA+B9B;;OAEG;IACH,OAAO,CAAC,KAAK;IAQb;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IA6CrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IAY3D;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMpC;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACI,QAAQ,IAAI,MAAM;IAIzB;;OAEG;IACI,UAAU,IAAI,QAAQ,CAAC,cAAc,CAAC;IAO7C;;OAEG;IACI,aAAa,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI;IAOnD;;OAEG;IACI,sBAAsB,IAAI,QAAQ,CAAC,mBAAmB,CAAC;IAI9D;;OAEG;IACI,MAAM,IAAI,OAAO;IAIxB;;OAEG;IACI,QAAQ,IAAI,OAAO;IAI1B;;OAEG;IACI,SAAS,IAAI,MAAM;CAM3B"}
|