strata-storage 2.6.1 → 2.7.0

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 (130) hide show
  1. package/AI-INTEGRATION-GUIDE.md +88 -10
  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/CookieAdapter.d.ts +2 -2
  27. package/dist/adapters/web/IndexedDBAdapter.d.ts +10 -3
  28. package/dist/adapters/web/IndexedDBAdapter.d.ts.map +1 -1
  29. package/dist/adapters/web/IndexedDBAdapter.js +14 -3
  30. package/dist/adapters/web/LocalStorageAdapter.d.ts +2 -2
  31. package/dist/adapters/web/MemoryAdapter.d.ts +2 -2
  32. package/dist/adapters/web/SessionStorageAdapter.d.ts +10 -10
  33. package/dist/adapters/web/SessionStorageAdapter.d.ts.map +1 -1
  34. package/dist/adapters/web/SessionStorageAdapter.js +3 -2
  35. package/dist/adapters/web/URLAdapter.d.ts +2 -2
  36. package/dist/adapters/web/index.d.ts +7 -7
  37. package/dist/capacitor.d.ts +6 -6
  38. package/dist/capacitor.d.ts.map +1 -1
  39. package/dist/capacitor.js +5 -4
  40. package/dist/core/AdapterRegistry.d.ts +1 -1
  41. package/dist/core/BaseAdapter.d.ts +21 -5
  42. package/dist/core/BaseAdapter.d.ts.map +1 -1
  43. package/dist/core/BaseAdapter.js +29 -1
  44. package/dist/core/Strata.d.ts +41 -7
  45. package/dist/core/Strata.d.ts.map +1 -1
  46. package/dist/core/Strata.js +476 -118
  47. package/dist/features/compression/index.d.ts +1 -1
  48. package/dist/features/compression.d.ts +5 -1
  49. package/dist/features/compression.d.ts.map +1 -1
  50. package/dist/features/encryption/index.d.ts +1 -1
  51. package/dist/features/encryption.d.ts +55 -2
  52. package/dist/features/encryption.d.ts.map +1 -1
  53. package/dist/features/encryption.js +139 -26
  54. package/dist/features/migration.d.ts +1 -1
  55. package/dist/features/observer/index.d.ts +1 -1
  56. package/dist/features/observer.d.ts +1 -1
  57. package/dist/features/query/index.d.ts +1 -1
  58. package/dist/features/query.d.ts +1 -1
  59. package/dist/features/query.d.ts.map +1 -1
  60. package/dist/features/query.js +3 -1
  61. package/dist/features/sync/index.d.ts +1 -1
  62. package/dist/features/sync.d.ts +19 -3
  63. package/dist/features/sync.d.ts.map +1 -1
  64. package/dist/features/sync.js +57 -9
  65. package/dist/features/ttl/index.d.ts +1 -1
  66. package/dist/features/ttl.d.ts +2 -2
  67. package/dist/firebase.d.ts +1 -1
  68. package/dist/firebase.d.ts.map +1 -1
  69. package/dist/firebase.js +34 -9
  70. package/dist/index.d.ts +24 -22
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +6 -1
  73. package/dist/integrations/angular/index.d.ts +2 -2
  74. package/dist/integrations/angular/index.d.ts.map +1 -1
  75. package/dist/integrations/angular/index.js +7 -8
  76. package/dist/integrations/react/index.d.ts +3 -3
  77. package/dist/integrations/react/index.d.ts.map +1 -1
  78. package/dist/integrations/react/index.js +16 -4
  79. package/dist/integrations/vue/index.d.ts +2 -2
  80. package/dist/integrations/vue/index.d.ts.map +1 -1
  81. package/dist/integrations/vue/index.js +5 -2
  82. package/dist/package.json +11 -2
  83. package/dist/plugin/definitions.d.ts +29 -3
  84. package/dist/plugin/definitions.d.ts.map +1 -1
  85. package/dist/plugin/index.d.ts +2 -2
  86. package/dist/plugin/index.d.ts.map +1 -1
  87. package/dist/plugin/index.js +3 -0
  88. package/dist/plugin/web.d.ts +11 -2
  89. package/dist/plugin/web.d.ts.map +1 -1
  90. package/dist/plugin/web.js +23 -4
  91. package/dist/types/index.d.ts +50 -20
  92. package/dist/types/index.d.ts.map +1 -1
  93. package/dist/types/index.js +1 -10
  94. package/dist/utils/index.d.ts +5 -0
  95. package/dist/utils/index.d.ts.map +1 -1
  96. package/dist/utils/index.js +7 -0
  97. package/ios/AGENTS.md +14 -3
  98. package/ios/CLAUDE.md +25 -3
  99. package/ios/Plugin/FilesystemStorage.swift +19 -0
  100. package/ios/Plugin/SQLiteStorage.swift +59 -9
  101. package/ios/Plugin/StrataStoragePlugin.m +1 -0
  102. package/ios/Plugin/StrataStoragePlugin.swift +87 -34
  103. package/ios/Plugin/UserDefaultsStorage.swift +47 -46
  104. package/package.json +27 -24
  105. package/scripts/build.js +16 -14
  106. package/scripts/cli.js +1 -1
  107. package/scripts/configure.js +2 -2
  108. package/scripts/postinstall.js +3 -2
  109. package/dist/android/AGENTS.md +0 -51
  110. package/dist/android/CLAUDE.md +0 -89
  111. package/dist/android/build.gradle +0 -58
  112. package/dist/android/proguard-rules.pro +0 -11
  113. package/dist/android/settings.gradle +0 -2
  114. package/dist/android/src/main/AndroidManifest.xml +0 -2
  115. package/dist/android/src/main/java/com/strata/storage/EncryptedStorage.java +0 -218
  116. package/dist/android/src/main/java/com/strata/storage/FilesystemStorage.java +0 -287
  117. package/dist/android/src/main/java/com/strata/storage/SQLiteStorage.java +0 -371
  118. package/dist/android/src/main/java/com/strata/storage/SharedPreferencesStorage.java +0 -209
  119. package/dist/android/src/main/java/com/stratastorage/StrataStoragePlugin.java +0 -616
  120. package/dist/core/StorageStrategy.d.ts +0 -55
  121. package/dist/core/StorageStrategy.d.ts.map +0 -1
  122. package/dist/core/StorageStrategy.js +0 -200
  123. package/dist/ios/AGENTS.md +0 -48
  124. package/dist/ios/CLAUDE.md +0 -84
  125. package/dist/ios/Plugin/FilesystemStorage.swift +0 -218
  126. package/dist/ios/Plugin/KeychainStorage.swift +0 -233
  127. package/dist/ios/Plugin/SQLiteStorage.swift +0 -426
  128. package/dist/ios/Plugin/StrataStoragePlugin.m +0 -23
  129. package/dist/ios/Plugin/StrataStoragePlugin.swift +0 -411
  130. package/dist/ios/Plugin/UserDefaultsStorage.swift +0 -87
package/dist/firebase.js CHANGED
@@ -1,4 +1,29 @@
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 normalizeRemoteValue(value) {
10
+ if (!value)
11
+ return null;
12
+ if (isStorageValue(value))
13
+ return value;
14
+ if (typeof value === 'object' && value !== null && 'value' in value) {
15
+ const now = Date.now();
16
+ const timestamp = value.timestamp;
17
+ const created = typeof timestamp === 'number' ? timestamp : now;
18
+ return {
19
+ value: value.value,
20
+ created,
21
+ updated: created,
22
+ };
23
+ }
24
+ const now = Date.now();
25
+ return { value, created: now, updated: now };
26
+ }
2
27
  /**
3
28
  * Enable Firebase sync for Strata Storage
4
29
  * This dynamically imports Firebase SDK only when needed
@@ -42,11 +67,11 @@ export async function enableFirebaseSync(storage, config) {
42
67
  async get(key) {
43
68
  const docRef = doc(db, collectionName, key);
44
69
  const docSnap = await getDoc(docRef);
45
- return docSnap.exists() ? docSnap.data() : null;
70
+ return docSnap.exists() ? normalizeRemoteValue(docSnap.data()) : null;
46
71
  },
47
72
  async set(key, value) {
48
73
  const docRef = doc(db, collectionName, key);
49
- await setDoc(docRef, { value, timestamp: Date.now() });
74
+ await setDoc(docRef, value);
50
75
  },
51
76
  async remove(key) {
52
77
  const docRef = doc(db, collectionName, key);
@@ -99,11 +124,11 @@ export async function enableFirebaseSync(storage, config) {
99
124
  snapshot
100
125
  .docChanges()
101
126
  .forEach((change) => {
102
- const docData = change.doc.data();
127
+ const docData = normalizeRemoteValue(change.doc.data());
103
128
  callback({
104
129
  key: change.doc.id,
105
- oldValue: change.type === 'removed' ? docData.value : undefined,
106
- newValue: change.type !== 'removed' ? docData.value : undefined,
130
+ oldValue: change.type === 'removed' ? docData : undefined,
131
+ newValue: change.type !== 'removed' ? docData : undefined,
107
132
  source: 'remote',
108
133
  storage: 'firestore',
109
134
  timestamp: Date.now(),
@@ -140,7 +165,7 @@ export async function enableFirebaseSync(storage, config) {
140
165
  },
141
166
  async get(key) {
142
167
  const snapshot = await get(ref(db, `strata-storage/${key}`));
143
- return snapshot.exists() ? snapshot.val() : null;
168
+ return snapshot.exists() ? normalizeRemoteValue(snapshot.val()) : null;
144
169
  },
145
170
  async set(key, value) {
146
171
  await set(ref(db, `strata-storage/${key}`), value);
@@ -180,9 +205,9 @@ export async function enableFirebaseSync(storage, config) {
180
205
  : {};
181
206
  const allKeys = new Set([...Object.keys(previousData), ...Object.keys(currentData)]);
182
207
  allKeys.forEach((key) => {
183
- const oldValue = previousData[key];
184
- const newValue = currentData[key];
185
- if (oldValue !== newValue) {
208
+ const oldValue = normalizeRemoteValue(previousData[key]);
209
+ const newValue = normalizeRemoteValue(currentData[key]);
210
+ if (JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
186
211
  callback({
187
212
  key,
188
213
  oldValue,
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.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.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":"AAAA;;GAEG;AAEH,OAAO,EAEL,cAAc,EAQf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,MAAM,EACN,QAAQ,EACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAA+D,MAAM,MAAM,CAAC;AAU/F,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG3F,eAAO,MAAM,aAAa,8BAAoD,CAAC;AAC/E,eAAO,MAAM,eAAe,wBAAgD,CAAC;AAE7E;;GAEG;AACH,qBAGa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,QAAQ,CAAgC;gBAGT,QAAQ,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,YAAY;YAS5C,UAAU;IAexB;;OAEG;IACH,IAAI,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAKhC;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,UAAU,CAAC,aAAa,CAAC,CAEvC;IAED;;OAEG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC;IAU7E;;OAEG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;IAUnF;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;IAU/D;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC;IAO/D;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;IAUjD;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IAO/E;;OAEG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EACf,SAAS,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,cAAc,GACvB,UAAU,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAO/C;;OAEG;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAOtE;;OAEG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC;IAiB/E;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;IAOxE;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;IAUrF;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;IAUhE;;OAEG;IACH,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAIzC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAItC,WAAW,IAAI,IAAI;CAKpB;AAED;;GAEG;AACH,qBAIa,WAAY,YAAW,aAAa;IAKnC,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,YAAY,CAAwC;gBAExC,MAAM,EAAE,aAAa;IAEzC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO;IAWvD,WAAW,IAAI,IAAI;IAInB,OAAO,CAAC,OAAO;CAMhB;AAED;;GAEG;AACH,qBAIa,OAAQ,YAAW,aAAa;IAK/B,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,YAAY,CAAwC;gBAExC,MAAM,EAAE,aAAa;IAEzC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAsBrC,WAAW,IAAI,IAAI;IAInB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,SAAS;CAgBlB;AAED;;GAEG;AACH,qBAGa,gBAAiB,YAAW,MAAM,EAAE,SAAS;IAStD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IATQ,GAAG,EAAG,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,cAAc,SAAO;IAE9B,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,OAAO,CAA8C;gBAGnD,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,aAAa;IAG/B,QAAQ,IAAI,IAAI;IAWhB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IASnC,WAAW,IAAI,IAAI;CAQpB;AAED;;GAEG;AACH,qBAIa,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC;CAMzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,EAAE,CAKlF;AAGD,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
@@ -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":"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"}
@@ -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.0",
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":"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"}
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"}
@@ -57,19 +57,38 @@ export class StrataStorageWeb {
57
57
  async clear(options) {
58
58
  await this.initializeAdapters();
59
59
  const adapter = this.getAdapter(options.storage || 'preferences');
60
- await adapter.clear();
60
+ // Forward the pattern filter instead of always wiping the whole adapter.
61
+ await adapter.clear(options.pattern ? { pattern: options.pattern } : undefined);
61
62
  }
62
63
  async keys(options) {
63
64
  await this.initializeAdapters();
64
65
  const adapter = this.getAdapter(options.storage || 'preferences');
65
- const keys = await adapter.keys();
66
+ const keys = await adapter.keys(options.pattern);
66
67
  return { keys };
67
68
  }
68
69
  async size(options) {
69
70
  await this.initializeAdapters();
70
71
  const adapter = this.getAdapter(options.storage || 'preferences');
71
- const sizeInfo = await adapter.size();
72
- return { total: sizeInfo.total, count: sizeInfo.count };
72
+ const sizeInfo = await adapter.size(options.detailed);
73
+ const result = { total: sizeInfo.total, count: sizeInfo.count };
74
+ if (options.detailed && sizeInfo.detailed) {
75
+ result.detailed = sizeInfo.detailed;
76
+ }
77
+ return result;
78
+ }
79
+ /**
80
+ * Web fallback for the native `cleanupExpired`. Delegates to the underlying
81
+ * web adapter's expired-only clear and reports a best-effort removed count
82
+ * (difference in key count). The real SQLite N+1 win is native-only; this
83
+ * keeps the bridge contract satisfied when running under Capacitor-web.
84
+ */
85
+ async cleanupExpired(options) {
86
+ await this.initializeAdapters();
87
+ const adapter = this.getAdapter(options.storage || 'sqlite');
88
+ const before = (await adapter.keys()).length;
89
+ await adapter.clear({ expiredOnly: true });
90
+ const after = (await adapter.keys()).length;
91
+ return { removed: Math.max(0, before - after) };
73
92
  }
74
93
  /**
75
94
  * Get suggestion for web alternative based on native storage type