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.
- package/AI-INTEGRATION-GUIDE.md +88 -10
- package/README.md +42 -64
- package/android/AGENTS.md +18 -3
- package/android/CLAUDE.md +36 -3
- package/android/build.gradle +5 -1
- package/android/src/main/java/com/strata/storage/EncryptedStorage.java +31 -18
- package/android/src/main/java/com/strata/storage/FilesystemStorage.java +62 -10
- package/android/src/main/java/com/strata/storage/SQLiteStorage.java +65 -13
- package/android/src/main/java/com/strata/storage/SharedPreferencesStorage.java +63 -51
- package/android/src/main/java/com/stratastorage/StrataStoragePlugin.java +80 -11
- package/dist/README.md +42 -64
- package/dist/adapters/capacitor/FilesystemAdapter.d.ts +2 -2
- package/dist/adapters/capacitor/FilesystemAdapter.d.ts.map +1 -1
- package/dist/adapters/capacitor/FilesystemAdapter.js +6 -2
- package/dist/adapters/capacitor/PreferencesAdapter.d.ts +2 -2
- package/dist/adapters/capacitor/PreferencesAdapter.d.ts.map +1 -1
- package/dist/adapters/capacitor/PreferencesAdapter.js +6 -2
- package/dist/adapters/capacitor/SecureAdapter.d.ts +3 -3
- package/dist/adapters/capacitor/SecureAdapter.d.ts.map +1 -1
- package/dist/adapters/capacitor/SecureAdapter.js +6 -2
- package/dist/adapters/capacitor/SqliteAdapter.d.ts +24 -3
- package/dist/adapters/capacitor/SqliteAdapter.d.ts.map +1 -1
- package/dist/adapters/capacitor/SqliteAdapter.js +105 -23
- package/dist/adapters/capacitor/index.d.ts +4 -4
- package/dist/adapters/web/CacheAdapter.d.ts +2 -2
- package/dist/adapters/web/CookieAdapter.d.ts +2 -2
- package/dist/adapters/web/IndexedDBAdapter.d.ts +10 -3
- package/dist/adapters/web/IndexedDBAdapter.d.ts.map +1 -1
- package/dist/adapters/web/IndexedDBAdapter.js +14 -3
- package/dist/adapters/web/LocalStorageAdapter.d.ts +2 -2
- package/dist/adapters/web/MemoryAdapter.d.ts +2 -2
- package/dist/adapters/web/SessionStorageAdapter.d.ts +10 -10
- package/dist/adapters/web/SessionStorageAdapter.d.ts.map +1 -1
- package/dist/adapters/web/SessionStorageAdapter.js +3 -2
- package/dist/adapters/web/URLAdapter.d.ts +2 -2
- package/dist/adapters/web/index.d.ts +7 -7
- package/dist/capacitor.d.ts +6 -6
- package/dist/capacitor.d.ts.map +1 -1
- package/dist/capacitor.js +5 -4
- package/dist/core/AdapterRegistry.d.ts +1 -1
- package/dist/core/BaseAdapter.d.ts +21 -5
- package/dist/core/BaseAdapter.d.ts.map +1 -1
- package/dist/core/BaseAdapter.js +29 -1
- package/dist/core/Strata.d.ts +41 -7
- package/dist/core/Strata.d.ts.map +1 -1
- package/dist/core/Strata.js +476 -118
- package/dist/features/compression/index.d.ts +1 -1
- package/dist/features/compression.d.ts +5 -1
- package/dist/features/compression.d.ts.map +1 -1
- package/dist/features/encryption/index.d.ts +1 -1
- package/dist/features/encryption.d.ts +55 -2
- package/dist/features/encryption.d.ts.map +1 -1
- package/dist/features/encryption.js +139 -26
- package/dist/features/migration.d.ts +1 -1
- package/dist/features/observer/index.d.ts +1 -1
- package/dist/features/observer.d.ts +1 -1
- package/dist/features/query/index.d.ts +1 -1
- package/dist/features/query.d.ts +1 -1
- package/dist/features/query.d.ts.map +1 -1
- package/dist/features/query.js +3 -1
- package/dist/features/sync/index.d.ts +1 -1
- package/dist/features/sync.d.ts +19 -3
- package/dist/features/sync.d.ts.map +1 -1
- package/dist/features/sync.js +57 -9
- package/dist/features/ttl/index.d.ts +1 -1
- package/dist/features/ttl.d.ts +2 -2
- package/dist/firebase.d.ts +1 -1
- package/dist/firebase.d.ts.map +1 -1
- package/dist/firebase.js +34 -9
- package/dist/index.d.ts +24 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/integrations/angular/index.d.ts +2 -2
- package/dist/integrations/angular/index.d.ts.map +1 -1
- package/dist/integrations/angular/index.js +7 -8
- package/dist/integrations/react/index.d.ts +3 -3
- package/dist/integrations/react/index.d.ts.map +1 -1
- package/dist/integrations/react/index.js +16 -4
- package/dist/integrations/vue/index.d.ts +2 -2
- package/dist/integrations/vue/index.d.ts.map +1 -1
- package/dist/integrations/vue/index.js +5 -2
- package/dist/package.json +11 -2
- package/dist/plugin/definitions.d.ts +29 -3
- package/dist/plugin/definitions.d.ts.map +1 -1
- package/dist/plugin/index.d.ts +2 -2
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +3 -0
- package/dist/plugin/web.d.ts +11 -2
- package/dist/plugin/web.d.ts.map +1 -1
- package/dist/plugin/web.js +23 -4
- package/dist/types/index.d.ts +50 -20
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -10
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +7 -0
- package/ios/AGENTS.md +14 -3
- package/ios/CLAUDE.md +25 -3
- package/ios/Plugin/FilesystemStorage.swift +19 -0
- package/ios/Plugin/SQLiteStorage.swift +59 -9
- package/ios/Plugin/StrataStoragePlugin.m +1 -0
- package/ios/Plugin/StrataStoragePlugin.swift +87 -34
- package/ios/Plugin/UserDefaultsStorage.swift +47 -46
- package/package.json +27 -24
- package/scripts/build.js +16 -14
- package/scripts/cli.js +1 -1
- package/scripts/configure.js +2 -2
- package/scripts/postinstall.js +3 -2
- package/dist/android/AGENTS.md +0 -51
- package/dist/android/CLAUDE.md +0 -89
- package/dist/android/build.gradle +0 -58
- package/dist/android/proguard-rules.pro +0 -11
- package/dist/android/settings.gradle +0 -2
- package/dist/android/src/main/AndroidManifest.xml +0 -2
- package/dist/android/src/main/java/com/strata/storage/EncryptedStorage.java +0 -218
- package/dist/android/src/main/java/com/strata/storage/FilesystemStorage.java +0 -287
- package/dist/android/src/main/java/com/strata/storage/SQLiteStorage.java +0 -371
- package/dist/android/src/main/java/com/strata/storage/SharedPreferencesStorage.java +0 -209
- package/dist/android/src/main/java/com/stratastorage/StrataStoragePlugin.java +0 -616
- package/dist/core/StorageStrategy.d.ts +0 -55
- package/dist/core/StorageStrategy.d.ts.map +0 -1
- package/dist/core/StorageStrategy.js +0 -200
- package/dist/ios/AGENTS.md +0 -48
- package/dist/ios/CLAUDE.md +0 -84
- package/dist/ios/Plugin/FilesystemStorage.swift +0 -218
- package/dist/ios/Plugin/KeychainStorage.swift +0 -233
- package/dist/ios/Plugin/SQLiteStorage.swift +0 -426
- package/dist/ios/Plugin/StrataStoragePlugin.m +0 -23
- package/dist/ios/Plugin/StrataStoragePlugin.swift +0 -411
- 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,
|
|
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
|
|
106
|
-
newValue: change.type !== 'removed' ? docData
|
|
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
|
|
2
|
-
export { BaseAdapter } from
|
|
3
|
-
export { AdapterRegistry } from
|
|
4
|
-
export { LocalStorageAdapter } from
|
|
5
|
-
export { SessionStorageAdapter } from
|
|
6
|
-
export { IndexedDBAdapter } from
|
|
7
|
-
export { CookieAdapter } from
|
|
8
|
-
export { CacheAdapter } from
|
|
9
|
-
export { MemoryAdapter } from
|
|
10
|
-
export { URLAdapter, type URLAdapterConfig } from
|
|
11
|
-
export { EncryptionManager } from
|
|
12
|
-
export { CompressionManager } from
|
|
13
|
-
export { TTLManager } from
|
|
14
|
-
export { QueryEngine } from
|
|
15
|
-
export { SyncManager } from
|
|
16
|
-
export { StorageObserver } from
|
|
17
|
-
export { computeChecksum, verifyChecksum } from
|
|
18
|
-
export {
|
|
19
|
-
export type {
|
|
20
|
-
export {
|
|
21
|
-
|
|
22
|
-
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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: ['
|
|
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
|
|
9
|
-
import type { StrataConfig, StorageOptions, StorageChange, QueryCondition } from
|
|
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":"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,
|
|
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,
|
|
20
|
-
import {
|
|
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
|
-
|
|
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
|
|
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
|
|
20
|
-
import type { StrataConfig, StorageOptions, QueryCondition } from
|
|
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
|
|
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;
|
|
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
|
-
|
|
47
|
+
let active = true;
|
|
48
|
+
const unsubscribe = strata.subscribe((change) => {
|
|
47
49
|
if (change.key === key) {
|
|
48
|
-
|
|
50
|
+
void strata.get(key, options).then((val) => {
|
|
51
|
+
if (active)
|
|
52
|
+
setValue(val ?? defaultValue ?? null);
|
|
53
|
+
});
|
|
49
54
|
}
|
|
50
55
|
}, options);
|
|
51
|
-
|
|
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
|
-
|
|
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
|
|
6
|
-
import type { StrataConfig, StorageOptions, QueryCondition } from
|
|
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":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAgB,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/plugin/definitions.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin/index.d.ts
CHANGED
|
@@ -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
|
|
6
|
+
import type { StrataStoragePlugin } from "./definitions.js";
|
|
7
7
|
export declare const StrataStorage: StrataStoragePlugin;
|
|
8
|
-
export * from
|
|
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;
|
|
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"}
|
package/dist/plugin/index.js
CHANGED
package/dist/plugin/web.d.ts
CHANGED
|
@@ -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
|
|
6
|
-
import type { StorageValue } from
|
|
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
|
*/
|
package/dist/plugin/web.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/plugin/web.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|