strata-storage 2.6.1 → 2.7.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.
Files changed (143) hide show
  1. package/AI-INTEGRATION-GUIDE.md +129 -11
  2. package/README.md +42 -64
  3. package/android/AGENTS.md +18 -3
  4. package/android/CLAUDE.md +36 -3
  5. package/android/build.gradle +5 -1
  6. package/android/src/main/java/com/strata/storage/EncryptedStorage.java +31 -18
  7. package/android/src/main/java/com/strata/storage/FilesystemStorage.java +62 -10
  8. package/android/src/main/java/com/strata/storage/SQLiteStorage.java +65 -13
  9. package/android/src/main/java/com/strata/storage/SharedPreferencesStorage.java +63 -51
  10. package/android/src/main/java/com/stratastorage/StrataStoragePlugin.java +80 -11
  11. package/dist/README.md +42 -64
  12. package/dist/adapters/capacitor/FilesystemAdapter.d.ts +2 -2
  13. package/dist/adapters/capacitor/FilesystemAdapter.d.ts.map +1 -1
  14. package/dist/adapters/capacitor/FilesystemAdapter.js +6 -2
  15. package/dist/adapters/capacitor/PreferencesAdapter.d.ts +2 -2
  16. package/dist/adapters/capacitor/PreferencesAdapter.d.ts.map +1 -1
  17. package/dist/adapters/capacitor/PreferencesAdapter.js +6 -2
  18. package/dist/adapters/capacitor/SecureAdapter.d.ts +3 -3
  19. package/dist/adapters/capacitor/SecureAdapter.d.ts.map +1 -1
  20. package/dist/adapters/capacitor/SecureAdapter.js +6 -2
  21. package/dist/adapters/capacitor/SqliteAdapter.d.ts +24 -3
  22. package/dist/adapters/capacitor/SqliteAdapter.d.ts.map +1 -1
  23. package/dist/adapters/capacitor/SqliteAdapter.js +105 -23
  24. package/dist/adapters/capacitor/index.d.ts +4 -4
  25. package/dist/adapters/web/CacheAdapter.d.ts +2 -2
  26. package/dist/adapters/web/CacheAdapter.d.ts.map +1 -1
  27. package/dist/adapters/web/CacheAdapter.js +20 -5
  28. package/dist/adapters/web/CookieAdapter.d.ts +2 -2
  29. package/dist/adapters/web/CookieAdapter.d.ts.map +1 -1
  30. package/dist/adapters/web/CookieAdapter.js +27 -3
  31. package/dist/adapters/web/IndexedDBAdapter.d.ts +10 -3
  32. package/dist/adapters/web/IndexedDBAdapter.d.ts.map +1 -1
  33. package/dist/adapters/web/IndexedDBAdapter.js +19 -4
  34. package/dist/adapters/web/LocalStorageAdapter.d.ts +2 -2
  35. package/dist/adapters/web/LocalStorageAdapter.d.ts.map +1 -1
  36. package/dist/adapters/web/LocalStorageAdapter.js +15 -1
  37. package/dist/adapters/web/MemoryAdapter.d.ts +9 -2
  38. package/dist/adapters/web/MemoryAdapter.d.ts.map +1 -1
  39. package/dist/adapters/web/MemoryAdapter.js +22 -5
  40. package/dist/adapters/web/SessionStorageAdapter.d.ts +10 -10
  41. package/dist/adapters/web/SessionStorageAdapter.d.ts.map +1 -1
  42. package/dist/adapters/web/SessionStorageAdapter.js +17 -3
  43. package/dist/adapters/web/URLAdapter.d.ts +2 -2
  44. package/dist/adapters/web/index.d.ts +7 -7
  45. package/dist/capacitor.d.ts +6 -6
  46. package/dist/capacitor.d.ts.map +1 -1
  47. package/dist/capacitor.js +5 -4
  48. package/dist/core/AdapterRegistry.d.ts +1 -1
  49. package/dist/core/BaseAdapter.d.ts +21 -5
  50. package/dist/core/BaseAdapter.d.ts.map +1 -1
  51. package/dist/core/BaseAdapter.js +29 -1
  52. package/dist/core/Strata.d.ts +53 -7
  53. package/dist/core/Strata.d.ts.map +1 -1
  54. package/dist/core/Strata.js +581 -125
  55. package/dist/features/compression/index.d.ts +1 -1
  56. package/dist/features/compression.d.ts +28 -9
  57. package/dist/features/compression.d.ts.map +1 -1
  58. package/dist/features/compression.js +164 -77
  59. package/dist/features/encryption/index.d.ts +1 -1
  60. package/dist/features/encryption.d.ts +55 -2
  61. package/dist/features/encryption.d.ts.map +1 -1
  62. package/dist/features/encryption.js +139 -26
  63. package/dist/features/migration.d.ts +1 -1
  64. package/dist/features/migration.d.ts.map +1 -1
  65. package/dist/features/migration.js +7 -2
  66. package/dist/features/observer/index.d.ts +1 -1
  67. package/dist/features/observer.d.ts +1 -1
  68. package/dist/features/query/index.d.ts +1 -1
  69. package/dist/features/query.d.ts +2 -1
  70. package/dist/features/query.d.ts.map +1 -1
  71. package/dist/features/query.js +32 -7
  72. package/dist/features/sync/index.d.ts +1 -1
  73. package/dist/features/sync.d.ts +19 -3
  74. package/dist/features/sync.d.ts.map +1 -1
  75. package/dist/features/sync.js +75 -12
  76. package/dist/features/ttl/index.d.ts +1 -1
  77. package/dist/features/ttl.d.ts +2 -2
  78. package/dist/features/ttl.d.ts.map +1 -1
  79. package/dist/features/ttl.js +4 -2
  80. package/dist/firebase.d.ts +1 -1
  81. package/dist/firebase.d.ts.map +1 -1
  82. package/dist/firebase.js +72 -10
  83. package/dist/index.d.ts +24 -22
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +6 -1
  86. package/dist/integrations/angular/index.d.ts +2 -2
  87. package/dist/integrations/angular/index.d.ts.map +1 -1
  88. package/dist/integrations/angular/index.js +7 -8
  89. package/dist/integrations/react/index.d.ts +3 -3
  90. package/dist/integrations/react/index.d.ts.map +1 -1
  91. package/dist/integrations/react/index.js +16 -4
  92. package/dist/integrations/vue/index.d.ts +2 -2
  93. package/dist/integrations/vue/index.d.ts.map +1 -1
  94. package/dist/integrations/vue/index.js +5 -2
  95. package/dist/package.json +11 -2
  96. package/dist/plugin/definitions.d.ts +29 -3
  97. package/dist/plugin/definitions.d.ts.map +1 -1
  98. package/dist/plugin/index.d.ts +2 -2
  99. package/dist/plugin/index.d.ts.map +1 -1
  100. package/dist/plugin/index.js +3 -0
  101. package/dist/plugin/web.d.ts +11 -2
  102. package/dist/plugin/web.d.ts.map +1 -1
  103. package/dist/plugin/web.js +23 -4
  104. package/dist/types/index.d.ts +50 -20
  105. package/dist/types/index.d.ts.map +1 -1
  106. package/dist/types/index.js +1 -10
  107. package/dist/utils/index.d.ts +5 -0
  108. package/dist/utils/index.d.ts.map +1 -1
  109. package/dist/utils/index.js +7 -0
  110. package/ios/AGENTS.md +14 -3
  111. package/ios/CLAUDE.md +25 -3
  112. package/ios/Plugin/FilesystemStorage.swift +19 -0
  113. package/ios/Plugin/SQLiteStorage.swift +59 -9
  114. package/ios/Plugin/StrataStoragePlugin.m +1 -0
  115. package/ios/Plugin/StrataStoragePlugin.swift +87 -34
  116. package/ios/Plugin/UserDefaultsStorage.swift +47 -46
  117. package/package.json +27 -24
  118. package/scripts/build.js +46 -27
  119. package/scripts/cli.js +1 -1
  120. package/scripts/configure.js +2 -2
  121. package/scripts/postinstall.js +3 -2
  122. package/dist/android/AGENTS.md +0 -51
  123. package/dist/android/CLAUDE.md +0 -89
  124. package/dist/android/build.gradle +0 -58
  125. package/dist/android/proguard-rules.pro +0 -11
  126. package/dist/android/settings.gradle +0 -2
  127. package/dist/android/src/main/AndroidManifest.xml +0 -2
  128. package/dist/android/src/main/java/com/strata/storage/EncryptedStorage.java +0 -218
  129. package/dist/android/src/main/java/com/strata/storage/FilesystemStorage.java +0 -287
  130. package/dist/android/src/main/java/com/strata/storage/SQLiteStorage.java +0 -371
  131. package/dist/android/src/main/java/com/strata/storage/SharedPreferencesStorage.java +0 -209
  132. package/dist/android/src/main/java/com/stratastorage/StrataStoragePlugin.java +0 -616
  133. package/dist/core/StorageStrategy.d.ts +0 -55
  134. package/dist/core/StorageStrategy.d.ts.map +0 -1
  135. package/dist/core/StorageStrategy.js +0 -200
  136. package/dist/ios/AGENTS.md +0 -48
  137. package/dist/ios/CLAUDE.md +0 -84
  138. package/dist/ios/Plugin/FilesystemStorage.swift +0 -218
  139. package/dist/ios/Plugin/KeychainStorage.swift +0 -233
  140. package/dist/ios/Plugin/SQLiteStorage.swift +0 -426
  141. package/dist/ios/Plugin/StrataStoragePlugin.m +0 -23
  142. package/dist/ios/Plugin/StrataStoragePlugin.swift +0 -411
  143. package/dist/ios/Plugin/UserDefaultsStorage.swift +0 -87
@@ -1,4 +1,4 @@
1
- import type { Strata } from './core/Strata';
1
+ import type { Strata } from "./core/Strata.js";
2
2
  /**
3
3
  * Firebase sync configuration
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"firebase.d.ts","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,IAAI,CAAC,CAyOf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQ5D"}
1
+ {"version":3,"file":"firebase.d.ts","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA4DD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,IAAI,CAAC,CAkPf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQ5D"}
package/dist/firebase.js CHANGED
@@ -1,4 +1,58 @@
1
1
  import { StorageError } from "./utils/errors.js";
2
+ function isStorageValue(value) {
3
+ return (typeof value === 'object' &&
4
+ value !== null &&
5
+ 'value' in value &&
6
+ 'created' in value &&
7
+ 'updated' in value);
8
+ }
9
+ function isPlainObject(value) {
10
+ if (typeof value !== 'object' || value === null)
11
+ return false;
12
+ const proto = Object.getPrototypeOf(value);
13
+ return proto === Object.prototype || proto === null;
14
+ }
15
+ /**
16
+ * Recursively drop `undefined`-valued keys. Firestore `setDoc()` and Realtime
17
+ * Database `set()` both throw on `undefined` field values, and the StorageValue
18
+ * wrapper Strata builds always carries `expires`/`tags`/`metadata` keys that are
19
+ * `undefined` for a plain write — so writing it verbatim breaks the happy path.
20
+ * Only plain objects/arrays are traversed, so Dates and other class instances
21
+ * are preserved as-is.
22
+ */
23
+ function stripUndefined(input) {
24
+ if (Array.isArray(input)) {
25
+ return input.map((item) => stripUndefined(item));
26
+ }
27
+ if (isPlainObject(input)) {
28
+ const out = {};
29
+ for (const [key, val] of Object.entries(input)) {
30
+ if (val === undefined)
31
+ continue;
32
+ out[key] = stripUndefined(val);
33
+ }
34
+ return out;
35
+ }
36
+ return input;
37
+ }
38
+ function normalizeRemoteValue(value) {
39
+ if (!value)
40
+ return null;
41
+ if (isStorageValue(value))
42
+ return value;
43
+ if (typeof value === 'object' && value !== null && 'value' in value) {
44
+ const now = Date.now();
45
+ const timestamp = value.timestamp;
46
+ const created = typeof timestamp === 'number' ? timestamp : now;
47
+ return {
48
+ value: value.value,
49
+ created,
50
+ updated: created,
51
+ };
52
+ }
53
+ const now = Date.now();
54
+ return { value, created: now, updated: now };
55
+ }
2
56
  /**
3
57
  * Enable Firebase sync for Strata Storage
4
58
  * This dynamically imports Firebase SDK only when needed
@@ -42,11 +96,11 @@ export async function enableFirebaseSync(storage, config) {
42
96
  async get(key) {
43
97
  const docRef = doc(db, collectionName, key);
44
98
  const docSnap = await getDoc(docRef);
45
- return docSnap.exists() ? docSnap.data() : null;
99
+ return docSnap.exists() ? normalizeRemoteValue(docSnap.data()) : null;
46
100
  },
47
101
  async set(key, value) {
48
102
  const docRef = doc(db, collectionName, key);
49
- await setDoc(docRef, { value, timestamp: Date.now() });
103
+ await setDoc(docRef, stripUndefined(value));
50
104
  },
51
105
  async remove(key) {
52
106
  const docRef = doc(db, collectionName, key);
@@ -99,11 +153,11 @@ export async function enableFirebaseSync(storage, config) {
99
153
  snapshot
100
154
  .docChanges()
101
155
  .forEach((change) => {
102
- const docData = change.doc.data();
156
+ const docData = normalizeRemoteValue(change.doc.data());
103
157
  callback({
104
158
  key: change.doc.id,
105
- oldValue: change.type === 'removed' ? docData.value : undefined,
106
- newValue: change.type !== 'removed' ? docData.value : undefined,
159
+ oldValue: change.type === 'removed' ? docData : undefined,
160
+ newValue: change.type !== 'removed' ? docData : undefined,
107
161
  source: 'remote',
108
162
  storage: 'firestore',
109
163
  timestamp: Date.now(),
@@ -140,10 +194,10 @@ export async function enableFirebaseSync(storage, config) {
140
194
  },
141
195
  async get(key) {
142
196
  const snapshot = await get(ref(db, `strata-storage/${key}`));
143
- return snapshot.exists() ? snapshot.val() : null;
197
+ return snapshot.exists() ? normalizeRemoteValue(snapshot.val()) : null;
144
198
  },
145
199
  async set(key, value) {
146
- await set(ref(db, `strata-storage/${key}`), value);
200
+ await set(ref(db, `strata-storage/${key}`), stripUndefined(value));
147
201
  },
148
202
  async remove(key) {
149
203
  await remove(ref(db, `strata-storage/${key}`));
@@ -180,9 +234,9 @@ export async function enableFirebaseSync(storage, config) {
180
234
  : {};
181
235
  const allKeys = new Set([...Object.keys(previousData), ...Object.keys(currentData)]);
182
236
  allKeys.forEach((key) => {
183
- const oldValue = previousData[key];
184
- const newValue = currentData[key];
185
- if (oldValue !== newValue) {
237
+ const oldValue = normalizeRemoteValue(previousData[key]);
238
+ const newValue = normalizeRemoteValue(currentData[key]);
239
+ if (JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
186
240
  callback({
187
241
  key,
188
242
  oldValue,
@@ -205,6 +259,14 @@ export async function enableFirebaseSync(storage, config) {
205
259
  // Cast to unknown first to bypass type checking for custom adapter
206
260
  storage.registerAdapter(realtimeAdapter);
207
261
  }
262
+ // Attach the freshly registered adapters to the active set so they join
263
+ // multi-adapter operations (subscribe/keys/clear/size) immediately — not
264
+ // only after an explicit `{ storage: 'firestore' }` call. Mirrors
265
+ // registerCapacitorAdapters(). Without this, a top-level subscribe() issued
266
+ // before any firestore op never wires up the onSnapshot listener.
267
+ if (config.firestore || config.realtimeDatabase) {
268
+ await storage.refreshAdapters();
269
+ }
208
270
  // Firebase sync enabled successfully
209
271
  }
210
272
  catch (error) {
package/dist/index.d.ts CHANGED
@@ -1,25 +1,27 @@
1
- export { Strata } from './core/Strata';
2
- export { BaseAdapter } from './core/BaseAdapter';
3
- export { AdapterRegistry } from './core/AdapterRegistry';
4
- export { LocalStorageAdapter } from './adapters/web/LocalStorageAdapter';
5
- export { SessionStorageAdapter } from './adapters/web/SessionStorageAdapter';
6
- export { IndexedDBAdapter } from './adapters/web/IndexedDBAdapter';
7
- export { CookieAdapter } from './adapters/web/CookieAdapter';
8
- export { CacheAdapter } from './adapters/web/CacheAdapter';
9
- export { MemoryAdapter } from './adapters/web/MemoryAdapter';
10
- export { URLAdapter, type URLAdapterConfig } from './adapters/web/URLAdapter';
11
- export { EncryptionManager } from './features/encryption';
12
- export { CompressionManager } from './features/compression';
13
- export { TTLManager } from './features/ttl';
14
- export { QueryEngine } from './features/query';
15
- export { SyncManager } from './features/sync';
16
- export { StorageObserver } from './features/observer';
17
- export { computeChecksum, verifyChecksum } from './features/integrity';
18
- export { StrataError, StorageError, IntegrityError, QuotaExceededError, EncryptionError, CompressionError, SerializationError, ValidationError, NotSupportedError, AdapterNotAvailableError, } from './utils/errors';
19
- export type { StorageType, StorageOptions, StorageValue, StorageAdapter, AdapterConfig, QueryOptions, SyncConfig, EncryptionConfig, CompressionConfig, ObserverCallback, StorageEvent, StorageCapabilities, StorageMetadata, TTLConfig, StrataConfig, StorageChange, SubscriptionCallback, UnsubscribeFunction, } from './types';
20
- export { isValidKey, isValidValue, serializeValue, deserializeValue, generateId, createError, retry, debounce, throttle, } from './utils';
21
- import { Strata } from './core/Strata';
22
- import type { StrataConfig } from './types';
1
+ export { Strata } from "./core/Strata.js";
2
+ export { BaseAdapter } from "./core/BaseAdapter.js";
3
+ export { AdapterRegistry } from "./core/AdapterRegistry.js";
4
+ export { LocalStorageAdapter } from "./adapters/web/LocalStorageAdapter.js";
5
+ export { SessionStorageAdapter } from "./adapters/web/SessionStorageAdapter.js";
6
+ export { IndexedDBAdapter } from "./adapters/web/IndexedDBAdapter.js";
7
+ export { CookieAdapter } from "./adapters/web/CookieAdapter.js";
8
+ export { CacheAdapter } from "./adapters/web/CacheAdapter.js";
9
+ export { MemoryAdapter } from "./adapters/web/MemoryAdapter.js";
10
+ export { URLAdapter, type URLAdapterConfig } from "./adapters/web/URLAdapter.js";
11
+ export { EncryptionManager } from "./features/encryption.js";
12
+ export { CompressionManager } from "./features/compression.js";
13
+ export { TTLManager } from "./features/ttl.js";
14
+ export { QueryEngine } from "./features/query.js";
15
+ export { SyncManager } from "./features/sync.js";
16
+ export { StorageObserver } from "./features/observer.js";
17
+ export { computeChecksum, verifyChecksum } from "./features/integrity.js";
18
+ export { MigrationManager } from "./features/migration.js";
19
+ export type { Migration } from "./features/migration.js";
20
+ export { StrataError, StorageError, IntegrityError, QuotaExceededError, EncryptionError, CompressionError, SerializationError, ValidationError, NotSupportedError, AdapterNotAvailableError, } from "./utils/errors.js";
21
+ export type { StorageType, StorageOptions, StorageValue, StorageAdapter, AdapterConfig, QueryOptions, SyncConfig, EncryptionConfig, CompressionConfig, ObserverCallback, StorageEvent, StorageCapabilities, StorageMetadata, TTLConfig, StrataConfig, StorageChange, SubscriptionCallback, UnsubscribeFunction, } from "./types/index.js";
22
+ export { isValidKey, isValidValue, serializeValue, deserializeValue, generateId, createError, retry, debounce, throttle, } from "./utils/index.js";
23
+ import { Strata } from "./core/Strata.js";
24
+ import type { StrataConfig } from "./types/index.js";
23
25
  /**
24
26
  * Register the standard web storage adapters on a Strata instance: memory,
25
27
  * localStorage, sessionStorage, indexedDB, cookies, and cache. Exported so any
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,EACL,WAAW,EACX,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY1D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE3D;AAID,QAAA,MAAM,OAAO,QAEX,CAAC;AAEH;;;;GAIG;AACH,iBAAe,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhD;AAGD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAGtC,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY1D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE3D;AAMD,QAAA,MAAM,OAAO,QAEX,CAAC;AAEH;;;;GAIG;AACH,iBAAe,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhD;AAGD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAGtC,eAAe,OAAO,CAAC"}
package/dist/index.js CHANGED
@@ -18,6 +18,9 @@ export { QueryEngine } from "./features/query.js";
18
18
  export { SyncManager } from "./features/sync.js";
19
19
  export { StorageObserver } from "./features/observer.js";
20
20
  export { computeChecksum, verifyChecksum } from "./features/integrity.js";
21
+ // Migrations — standalone, adapter-level utility (experimental). Operates on a
22
+ // StorageAdapter, NOT via StrataConfig. See docs/api/features/migration.md.
23
+ export { MigrationManager } from "./features/migration.js";
21
24
  // Error classes (exported as values so consumers can use `instanceof`)
22
25
  export { StrataError, StorageError, IntegrityError, QuotaExceededError, EncryptionError, CompressionError, SerializationError, ValidationError, NotSupportedError, AdapterNotAvailableError, } from "./utils/errors.js";
23
26
  // Utils
@@ -72,8 +75,10 @@ export function defineStorage(config) {
72
75
  }
73
76
  // Default singleton — created via the same factory so behavior is identical.
74
77
  // It initializes lazily on first use, so importing the package has no I/O cost.
78
+ // Persistent backends are preferred first so default writes survive a reload;
79
+ // volatile `memory` is the last-resort fallback (e.g. SSR / no web storage).
75
80
  const storage = defineStorage({
76
- defaultStorages: ['memory', 'localStorage', 'sessionStorage', 'indexedDB'],
81
+ defaultStorages: ['localStorage', 'indexedDB', 'sessionStorage', 'memory'],
77
82
  });
78
83
  /**
79
84
  * Force initialization of the default `storage` singleton and await readiness.
@@ -5,8 +5,8 @@ import { InjectionToken } from '@angular/core';
5
5
  import type { OnDestroy, ModuleWithProviders, PipeTransform, OnInit, Provider } from '@angular/core';
6
6
  import { NgControl } from '@angular/forms';
7
7
  import { Observable } from 'rxjs';
8
- import { Strata } from '@/core/Strata';
9
- import type { StrataConfig, StorageOptions, StorageChange, QueryCondition } from '@/types';
8
+ import { Strata } from "../../core/Strata.js";
9
+ import type { StrataConfig, StorageOptions, StorageChange, QueryCondition } from "../../types/index.js";
10
10
  export declare const STRATA_CONFIG: InjectionToken<StrataConfig>;
11
11
  export declare const STRATA_INSTANCE: InjectionToken<Strata>;
12
12
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/angular/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/angular/index.ts"],"names":[],"mappings":"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"}
@@ -16,9 +16,10 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
16
16
  var StrataModule_1;
17
17
  import { Injectable, InjectionToken, Inject, Optional, NgModule, Pipe, Directive, Input, HostListener, } from '@angular/core';
18
18
  import { NgControl } from '@angular/forms';
19
- import { Observable, BehaviorSubject, Subject, from, interval, combineLatest, throwError, } from 'rxjs';
20
- import { map, switchMap, catchError, takeUntil, distinctUntilChanged, shareReplay, startWith, filter, } from 'rxjs/operators';
19
+ import { Observable, BehaviorSubject, Subject, from, interval, merge, throwError } from 'rxjs';
20
+ import { switchMap, catchError, takeUntil, distinctUntilChanged, shareReplay, startWith, filter, } from 'rxjs/operators';
21
21
  import { Strata } from "../../core/Strata.js";
22
+ import { registerWebAdapters } from "../../index.js";
22
23
  import { logger } from "../../utils/logger.js";
23
24
  // Configuration / instance injection tokens
24
25
  export const STRATA_CONFIG = new InjectionToken('strata.config');
@@ -33,8 +34,9 @@ let StrataService = class StrataService {
33
34
  changes$ = new Subject();
34
35
  constructor(instance, config) {
35
36
  // Prefer a caller-provided instance (provider-free pattern); otherwise build
36
- // one from the optional config token.
37
- this.strata = instance ?? new Strata(config);
37
+ // one from the optional config token WITH the standard web adapters
38
+ // registered, so the classic service path works out of the box.
39
+ this.strata = instance ?? registerWebAdapters(new Strata(config));
38
40
  this.initialize();
39
41
  }
40
42
  async initialize() {
@@ -127,10 +129,7 @@ let StrataService = class StrataService {
127
129
  * Watch a specific key
128
130
  */
129
131
  watch(key, options) {
130
- return combineLatest([
131
- this.get(key, options),
132
- this.changes.pipe(filter((change) => change.key === key), map((change) => change.newValue)),
133
- ]).pipe(map(([initial]) => initial), distinctUntilChanged(), shareReplay(1), takeUntil(this.destroy$));
132
+ return this.ready$.pipe(switchMap(() => merge(from(this.strata.get(key, options)), this.changes.pipe(filter((change) => change.key === key), switchMap(() => from(this.strata.get(key, options)))))), distinctUntilChanged(), shareReplay(1), takeUntil(this.destroy$));
134
133
  }
135
134
  /**
136
135
  * Get TTL for a key
@@ -16,8 +16,8 @@
16
16
  * 2. Provider-based (classic): wrap the tree in <StrataProvider> and call the
17
17
  * exported hooks, which read the instance from context.
18
18
  */
19
- import { Strata } from '@/core/Strata';
20
- import type { StrataConfig, StorageOptions, QueryCondition } from '@/types';
19
+ import { Strata } from "../../core/Strata.js";
20
+ import type { StrataConfig, StorageOptions, QueryCondition } from "../../types/index.js";
21
21
  /**
22
22
  * Bind the Strata hooks to a specific instance — the framework-agnostic,
23
23
  * no-Provider pattern (mirrors Zustand's `create`). Call once at module scope
@@ -54,7 +54,7 @@ interface StrataProviderProps {
54
54
  loadingComponent?: React.ReactNode;
55
55
  fallback?: React.ReactNode;
56
56
  }
57
- export declare function StrataProvider({ children, config, instance, loadingComponent, fallback, }: StrataProviderProps): import("react/jsx-runtime").JSX.Element;
57
+ export declare function StrataProvider({ children, config, instance, loadingComponent, fallback, }: StrataProviderProps): import("react").JSX.Element;
58
58
  export declare function useStrata(): Strata;
59
59
  export declare function useStrataInitialized(): boolean;
60
60
  export declare function useStorage<T = unknown>(key: string, defaultValue?: T, options?: StorageOptions): [T | null, (value: T | null, options?: StorageOptions) => Promise<void>, boolean];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/react/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAiB,cAAc,EAAE,MAAM,SAAS,CAAC;AA2H3F;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM;iBAC1B,CAAC,iBAAiB,MAAM,iBAAiB,CAAC,YAAY,cAAc,4CA1HhD,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC;sBA6H/C,CAAC,uBAAuB,cAAc,YAAY,cAAc;;iBAhFnE,MAAM;;;iBAAwB,OAAO;iBAAW,MAAM,OAAO,CAAC,IAAI,CAAC;;yBAmF7D,MAAM,YAAY,cAAc;;+BAtCxC,MAAM;;;EA0C3B;AAgBD,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,QAAQ,GACT,EAAE,mBAAmB,2CA+BrB;AAED,wBAAgB,SAAS,IAAI,MAAM,CAalC;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EACpC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,CAAC,EAChB,OAAO,CAAC,EAAE,cAAc,GACvB,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAEnF;AAED,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc;;aAlLxE,MAAM;;;aAAwB,OAAO;aAAW,MAAM,OAAO,CAAC,IAAI,CAAC;EAoL1F;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;;2BAzI7C,MAAM;;EA2I3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/react/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAiB,cAAc,EAAE,MAAM,SAAS,CAAC;AAkI3F;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM;iBAC1B,CAAC,iBAAiB,MAAM,iBAAiB,CAAC,YAAY,cAAc,4CAjIhD,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC;sBAoI/C,CAAC,uBAAuB,cAAc,YAAY,cAAc;;iBAhFnE,MAAM;;;iBAAwB,OAAO;iBAAW,MAAM,OAAO,CAAC,IAAI,CAAC;;yBAmF7D,MAAM,YAAY,cAAc;;+BAtCxC,MAAM;;;EA0C3B;AAgBD,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,QAAQ,GACT,EAAE,mBAAmB,+BAkCrB;AAED,wBAAgB,SAAS,IAAI,MAAM,CAalC;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EACpC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,CAAC,EAChB,OAAO,CAAC,EAAE,cAAc,GACvB,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAEnF;AAED,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc;;aArLxE,MAAM;;;aAAwB,OAAO;aAAW,MAAM,OAAO,CAAC,IAAI,CAAC;EAuL1F;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;;2BA5I7C,MAAM;;EA8I3B"}
@@ -19,6 +19,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
19
19
  */
20
20
  import { createContext, useContext, useEffect, useState, useCallback, useMemo } from 'react';
21
21
  import { Strata } from "../../core/Strata.js";
22
+ import { registerWebAdapters } from "../../index.js";
22
23
  import { ValidationError } from "../../utils/errors.js";
23
24
  // ---------------------------------------------------------------------------
24
25
  // Shared hook implementations (the Strata instance is passed in explicitly).
@@ -43,12 +44,20 @@ function useStorageImpl(strata, key, defaultValue, options) {
43
44
  }, [key, strata, options, defaultValue]);
44
45
  // Subscribe to changes for this key.
45
46
  useEffect(() => {
46
- return strata.subscribe((change) => {
47
+ let active = true;
48
+ const unsubscribe = strata.subscribe((change) => {
47
49
  if (change.key === key) {
48
- setValue(change.newValue);
50
+ void strata.get(key, options).then((val) => {
51
+ if (active)
52
+ setValue(val ?? defaultValue ?? null);
53
+ });
49
54
  }
50
55
  }, options);
51
- }, [key, strata, options]);
56
+ return () => {
57
+ active = false;
58
+ unsubscribe();
59
+ };
60
+ }, [key, strata, options, defaultValue]);
52
61
  const updateValue = useCallback(async (newValue, updateOptions) => {
53
62
  if (newValue === null) {
54
63
  await strata.remove(key, updateOptions ?? options);
@@ -141,7 +150,10 @@ const StrataContext = createContext({
141
150
  initialized: false,
142
151
  });
143
152
  export function StrataProvider({ children, config, instance, loadingComponent, fallback, }) {
144
- const [strata] = useState(() => instance ?? new Strata(config));
153
+ // A caller-provided instance is used as-is; otherwise build one WITH the
154
+ // standard web adapters registered, so the classic Provider path works without
155
+ // the caller having to register adapters (avoids "No available storage adapters").
156
+ const [strata] = useState(() => instance ?? registerWebAdapters(new Strata(config)));
145
157
  const [initialized, setInitialized] = useState(strata.isInitialized);
146
158
  useEffect(() => {
147
159
  let active = true;
@@ -2,8 +2,8 @@
2
2
  * Vue 3 integration for Strata Storage
3
3
  */
4
4
  import type { Ref, ComputedRef, App } from 'vue';
5
- import { Strata } from '@/core/Strata';
6
- import type { StrataConfig, StorageOptions, QueryCondition } from '@/types';
5
+ import { Strata } from "../../core/Strata.js";
6
+ import type { StrataConfig, StorageOptions, QueryCondition } from "../../types/index.js";
7
7
  export declare const StrataPlugin: {
8
8
  install(app: App, config?: StrataConfig): void;
9
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/vue/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/vue/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAgB,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAiB,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ3F,eAAO,MAAM,YAAY;iBACV,GAAG,WAAW,YAAY;CAsBxC,CAAC;AAIF;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAWnD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EACpC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,CAAC,EAChB,OAAO,CAAC,EAAE,cAAc,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB;IACD,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B,CAkEA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EACzC,SAAS,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,cAAc,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB;IACD,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAyCA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,cAAc,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB;IACD,GAAG,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChC,YAAY,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAgDA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,UAAQ,EACnB,eAAe,SAAO,EACtB,QAAQ,CAAC,EAAE,MAAM,GAChB;IACD,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAiCA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM;iBAErC,CAAC,iBAAiB,MAAM,iBAAiB,CAAC,YAAY,cAAc;;iBA5P1E,GAAG,CAAC,OAAO,CAAC;eACd,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;iBACf,MAAM,OAAO,CAAC,IAAI,CAAC;4CACQ,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC;gBAC5D,MAAM,OAAO,CAAC,IAAI,CAAC;;sBA0PP,CAAC,uBAAuB,cAAc,YAAY,cAAc;;iBA7K7D,MAAM;;;iBAAN,MAAM;;;iBACpB,GAAG,CAAC,OAAO,CAAC;eACd,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;iBACf,MAAM,OAAO,CAAC,IAAI,CAAC;;yBA4KL,MAAM,YAAY,cAAc;aAxHlD,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;sBACjB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;mBACrB,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;iBACtC,MAAM,OAAO,CAAC,IAAI,CAAC;;mCAsHK,OAAO,oBAAoB,MAAM;cA3D5D,GAAG,CAAC,MAAM,CAAC;eACV,GAAG,CAAC,MAAM,CAAC;mBACP,WAAW,CAAC,MAAM,CAAC;iBACrB,MAAM,OAAO,CAAC,IAAI,CAAC;;EA2D7B;AA6BD,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { ref, computed, watch, onMounted, onUnmounted, inject } from 'vue';
5
5
  import { Strata } from "../../core/Strata.js";
6
+ import { registerWebAdapters } from "../../index.js";
6
7
  import { ValidationError } from "../../utils/errors.js";
7
8
  import { logger } from "../../utils/logger.js";
8
9
  // Injection key
@@ -10,7 +11,9 @@ const StrataKey = Symbol('strata');
10
11
  // Plugin installation
11
12
  export const StrataPlugin = {
12
13
  install(app, config) {
13
- const strata = new Strata(config);
14
+ // Register the standard web adapters so the classic plugin path works
15
+ // without the caller having to register adapters.
16
+ const strata = registerWebAdapters(new Strata(config));
14
17
  // Initialize asynchronously
15
18
  strata.initialize().catch(logger.error);
16
19
  // Provide globally
@@ -94,7 +97,7 @@ export function useStorage(key, defaultValue, options, instance) {
94
97
  refresh();
95
98
  const unsubscribe = strata.subscribe((change) => {
96
99
  if (change.key === key) {
97
- value.value = change.newValue;
100
+ void refresh();
98
101
  }
99
102
  }, options);
100
103
  onUnmounted(unsubscribe);
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "strata-storage",
3
- "version": "2.6.1",
3
+ "version": "2.7.1",
4
4
  "description": "Zero-dependency universal storage plugin providing a unified API for all storage operations across web, Android, and iOS platforms",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -29,7 +29,8 @@
29
29
  "./angular": {
30
30
  "types": "./integrations/angular/index.d.ts",
31
31
  "default": "./integrations/angular/index.js"
32
- }
32
+ },
33
+ "./package.json": "./package.json"
33
34
  },
34
35
  "author": "Ahsan Mahmood",
35
36
  "license": "Apache-2.0",
@@ -37,6 +38,10 @@
37
38
  "type": "git",
38
39
  "url": "https://github.com/aoneahsan/strata-storage.git"
39
40
  },
41
+ "bugs": {
42
+ "url": "https://stratastorage.aoneahsan.com/contact"
43
+ },
44
+ "homepage": "https://stratastorage.aoneahsan.com",
40
45
  "keywords": [
41
46
  "storage",
42
47
  "capacitor",
@@ -59,6 +64,7 @@
59
64
  "@angular/core": ">=21.0.6",
60
65
  "@angular/forms": ">=21.0.6",
61
66
  "@capacitor/core": ">=8.0.0",
67
+ "firebase": ">=10.0.0",
62
68
  "react": ">=19.2.3",
63
69
  "vue": ">=3.5.26"
64
70
  },
@@ -72,6 +78,9 @@
72
78
  "@capacitor/core": {
73
79
  "optional": true
74
80
  },
81
+ "firebase": {
82
+ "optional": true
83
+ },
75
84
  "react": {
76
85
  "optional": true
77
86
  },
@@ -2,7 +2,7 @@
2
2
  * Strata Storage Capacitor Plugin Definitions
3
3
  * Interface definitions for native platform implementations
4
4
  */
5
- import type { StorageValue } from '@/types';
5
+ import type { StorageValue } from "../types/index.js";
6
6
  /**
7
7
  * Main plugin interface
8
8
  */
@@ -44,14 +44,32 @@ export interface StrataStoragePlugin {
44
44
  */
45
45
  size(options: NativeSizeOptions): Promise<NativeSizeResult>;
46
46
  /**
47
- * Perform native query (if supported)
47
+ * Perform native query (if supported).
48
+ *
49
+ * The native layer enumerates non-expired candidate rows and returns the
50
+ * FULL `StorageValue` wrapper for each in a single round-trip, so the TS
51
+ * adapter can run the query filter in JS without an N+1 `get()` per key.
52
+ * `value` is optional for back-compat with older native builds that only
53
+ * surfaced keys; the adapter falls back to `get()` when it is absent.
48
54
  */
49
55
  query?(options: NativeQueryOptions): Promise<{
50
56
  results: Array<{
51
57
  key: string;
52
- value: unknown;
58
+ value?: StorageValue<unknown>;
53
59
  }>;
54
60
  }>;
61
+ /**
62
+ * Delete every expired row for the target store in a single native
63
+ * round-trip, returning how many rows were removed.
64
+ *
65
+ * Optional: only the SQLite native backend implements it. Because `keys()`
66
+ * and `query()` now exclude expired rows in SQL (no lazy per-key deletion on
67
+ * read), this is what reclaims their physical storage. The TS adapter guards
68
+ * on its presence and falls back to the base per-key sweep otherwise.
69
+ */
70
+ cleanupExpired?(options: NativeCleanupExpiredOptions): Promise<{
71
+ removed: number;
72
+ }>;
55
73
  /**
56
74
  * iOS-specific: Access UserDefaults
57
75
  */
@@ -187,6 +205,14 @@ export interface NativeQueryOptions {
187
205
  table?: string;
188
206
  condition: Record<string, unknown>;
189
207
  }
208
+ /**
209
+ * Native cleanup-expired options
210
+ */
211
+ export interface NativeCleanupExpiredOptions {
212
+ storage: NativeStorageType;
213
+ database?: string;
214
+ table?: string;
215
+ }
190
216
  /**
191
217
  * iOS Keychain accessibility options
192
218
  */
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/plugin/definitions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,iBAAiB,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAEtF;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAEjF;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAE9D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE5D;;OAEG;IACH,KAAK,CAAC,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAElG;;OAEG;IACH,eAAe,CAAC,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAE5F;;OAEG;IACH,eAAe,CAAC,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9F;;OAEG;IACH,WAAW,CAAC,CAAC,OAAO,EAAE;QACpB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAEtC;;OAEG;IACH,WAAW,CAAC,CAAC,OAAO,EAAE;QACpB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,kBAAkB,CAAC;KACjC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElB;;OAEG;IACH,sBAAsB,CAAC,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAElG;;OAEG;IACH,sBAAsB,CAAC,CAAC,OAAO,EAAE;QAC/B,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,OAAO,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,QAAQ,GACR,QAAQ,GACR,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,kBAAkB,GAClB,4BAA4B,GAC5B,gCAAgC,GAChC,+BAA+B,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACzC"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/plugin/definitions.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * Main plugin registration and web implementation
4
4
  * This is now optional and only loaded when Capacitor adapters are used
5
5
  */
6
- import type { StrataStoragePlugin } from './definitions';
6
+ import type { StrataStoragePlugin } from "./definitions.js";
7
7
  export declare const StrataStorage: StrataStoragePlugin;
8
- export * from './definitions';
8
+ export * from "./definitions.js";
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,mBAAmB,EASpB,MAAM,eAAe,CAAC;AA+IvB,eAAO,MAAM,aAAa,EAAE,mBAAmD,CAAC;AAEhF,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,mBAAmB,EASpB,MAAM,eAAe,CAAC;AAmJvB,eAAO,MAAM,aAAa,EAAE,mBAAmD,CAAC;AAEhF,cAAc,eAAe,CAAC"}
@@ -107,6 +107,9 @@ class LazyStrataStoragePlugin {
107
107
  get query() {
108
108
  return this.getPlugin().query;
109
109
  }
110
+ get cleanupExpired() {
111
+ return this.getPlugin().cleanupExpired;
112
+ }
110
113
  get getUserDefaults() {
111
114
  return this.getPlugin().getUserDefaults;
112
115
  }
@@ -2,8 +2,8 @@
2
2
  * Strata Storage Web Implementation
3
3
  * Web platform implementation of the Capacitor plugin
4
4
  */
5
- import type { StrataStoragePlugin, NativeStorageType, NativeGetOptions, NativeSetOptions, NativeRemoveOptions, NativeClearOptions, NativeKeysOptions, NativeSizeOptions, NativeSizeResult } from './definitions';
6
- import type { StorageValue } from '@/types';
5
+ import type { StrataStoragePlugin, NativeStorageType, NativeGetOptions, NativeSetOptions, NativeRemoveOptions, NativeClearOptions, NativeKeysOptions, NativeSizeOptions, NativeSizeResult, NativeCleanupExpiredOptions } from "./definitions.js";
6
+ import type { StorageValue } from "../types/index.js";
7
7
  export declare class StrataStorageWeb implements StrataStoragePlugin {
8
8
  private adapters;
9
9
  private initialized;
@@ -24,6 +24,15 @@ export declare class StrataStorageWeb implements StrataStoragePlugin {
24
24
  keys: string[];
25
25
  }>;
26
26
  size(options: NativeSizeOptions): Promise<NativeSizeResult>;
27
+ /**
28
+ * Web fallback for the native `cleanupExpired`. Delegates to the underlying
29
+ * web adapter's expired-only clear and reports a best-effort removed count
30
+ * (difference in key count). The real SQLite N+1 win is native-only; this
31
+ * keeps the bridge contract satisfied when running under Capacitor-web.
32
+ */
33
+ cleanupExpired(options: NativeCleanupExpiredOptions): Promise<{
34
+ removed: number;
35
+ }>;
27
36
  /**
28
37
  * Get suggestion for web alternative based on native storage type
29
38
  */
@@ -1 +1 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/plugin/web.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;AAM5D,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,QAAQ,CAAqD;IACrE,OAAO,CAAC,WAAW,CAAS;YAEd,kBAAkB;IAahC,OAAO,CAAC,UAAU;IAUZ,WAAW,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,iBAAiB,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAUrF,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;KAAE,CAAC;IAOvE,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjD,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAO7D,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOjE;;OAEG;IACH,OAAO,CAAC,aAAa;CAatB"}
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/plugin/web.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;AAM5D,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,QAAQ,CAAqD;IACrE,OAAO,CAAC,WAAW,CAAS;YAEd,kBAAkB;IAahC,OAAO,CAAC,UAAU;IAUZ,WAAW,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,iBAAiB,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAUrF,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;KAAE,CAAC;IAOvE,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAO7D,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAWjE;;;;;OAKG;IACG,cAAc,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IASxF;;OAEG;IACH,OAAO,CAAC,aAAa;CAatB"}