@framers/sql-storage-adapter 0.3.5 → 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 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
- /** Validate SQL statements before execution (default: true) */
38
- validateSQL?: boolean;
39
- /** Track performance metrics (default: true) */
78
+ /**
79
+ * Enable performance tracking and metrics collection.
80
+ * @defaultValue true when tier is 'balanced' or 'accurate'
81
+ */
40
82
  trackPerformance?: boolean;
41
- /** Max retry attempts for transient errors (default: 3) */
42
- maxRetries?: number;
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: Required<BaseAdapterOptions>;
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":"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"}
1
+ {"version":3,"file":"baseStorageAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/baseStorageAdapter.ts"],"names":[],"mappings":"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"}