Skip to content

Commit 45b7c02

Browse files
feat: add WebStorage type check and optimize storage adapter usage
1 parent 47a8cc2 commit 45b7c02

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/storages/inLocalStorage/index.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { EventsCacheInMemory } from '../inMemory/EventsCacheInMemory';
44
import { IStorageFactoryParams, IStorageSync, IStorageSyncFactory, StorageAdapter } from '../types';
55
import { validatePrefix } from '../KeyBuilder';
66
import { KeyBuilderCS, myLargeSegmentsKeyBuilder } from '../KeyBuilderCS';
7-
import { isLocalStorageAvailable, isValidStorageWrapper } from '../../utils/env/isLocalStorageAvailable';
7+
import { isLocalStorageAvailable, isValidStorageWrapper, isWebStorage } from '../../utils/env/isLocalStorageAvailable';
88
import { SplitsCacheInLocal } from './SplitsCacheInLocal';
99
import { RBSegmentsCacheInLocal } from './RBSegmentsCacheInLocal';
1010
import { MySegmentsCacheInLocal } from './MySegmentsCacheInLocal';
@@ -66,7 +66,11 @@ export function storageAdapter(log: ILogger, prefix: string, wrapper: SplitIO.St
6666

6767
function validateStorage(log: ILogger, prefix: string, wrapper?: SplitIO.StorageWrapper): StorageAdapter | undefined {
6868
if (wrapper) {
69-
if (isValidStorageWrapper(wrapper)) return storageAdapter(log, prefix, wrapper);
69+
if (isValidStorageWrapper(wrapper)) {
70+
return isWebStorage(wrapper) ?
71+
wrapper as StorageAdapter: // localStorage and sessionStorage don't need adapter
72+
storageAdapter(log, prefix, wrapper);
73+
}
7074
log.warn(LOG_PREFIX + 'Invalid storage provided. Falling back to LocalStorage API');
7175
}
7276

src/utils/env/isLocalStorageAvailable.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,17 @@ export function isValidStorageWrapper(wrapper: any): boolean {
1414
wrapper.getItem(mod);
1515
wrapper.removeItem(mod);
1616
return true;
17-
} catch (e) {
18-
return false;
17+
} catch (e) { }
18+
return false;
19+
}
20+
21+
export function isWebStorage(wrapper: any): boolean {
22+
if (typeof wrapper.length === 'number') {
23+
try {
24+
wrapper.key(0);
25+
return true;
26+
} catch (e) { }
1927
}
28+
29+
return false;
2030
}

0 commit comments

Comments
 (0)