ng2-webstorage
Version:
Angular webstorage manager
102 lines • 3.94 kB
JavaScript
import { STORAGE } from '../enums/storage';
import { StorageObserverHelper } from './storageObserver';
import { KeyStorageHelper } from './keyStorage';
import { MockStorageHelper } from './mockStorage';
import { STORAGE_NAMES } from '../constants/lib';
var CACHED = (_a = {}, _a[STORAGE.local] = {}, _a[STORAGE.session] = {}, _a);
var STORAGEAVAILABILITY = (_b = {}, _b[STORAGE.local] = null, _b[STORAGE.session] = null, _b);
var WebStorageHelper = (function () {
function WebStorageHelper() {
}
WebStorageHelper.store = function (sType, sKey, value) {
this.getStorage(sType).setItem(sKey, JSON.stringify(value));
CACHED[sType][sKey] = value;
StorageObserverHelper.emit(sType, sKey, value);
};
WebStorageHelper.retrieve = function (sType, sKey) {
if (CACHED[sType][sKey])
return CACHED[sType][sKey];
return CACHED[sType][sKey] = WebStorageHelper.retrieveFromStorage(sType, sKey);
};
WebStorageHelper.retrieveFromStorage = function (sType, sKey) {
var data = null;
try {
data = JSON.parse(this.getStorage(sType).getItem(sKey));
}
catch (err) {
console.warn("invalid value for " + sKey);
}
return data;
};
WebStorageHelper.refresh = function (sType, sKey) {
if (!KeyStorageHelper.isManagedKey(sKey))
return;
var value = WebStorageHelper.retrieveFromStorage(sType, sKey);
if (value === null) {
delete CACHED[sType][sKey];
StorageObserverHelper.emit(sType, sKey, null);
}
else if (value !== CACHED[sType][sKey]) {
CACHED[sType][sKey] = value;
StorageObserverHelper.emit(sType, sKey, value);
}
};
WebStorageHelper.clearAll = function (sType) {
var storage = this.getStorage(sType);
KeyStorageHelper.retrieveKeysFromStorage(storage)
.forEach(function (sKey) {
storage.removeItem(sKey);
delete CACHED[sType][sKey];
StorageObserverHelper.emit(sType, sKey, null);
});
};
WebStorageHelper.clear = function (sType, sKey) {
this.getStorage(sType).removeItem(sKey);
delete CACHED[sType][sKey];
StorageObserverHelper.emit(sType, sKey, null);
};
WebStorageHelper.getStorage = function (sType) {
if (this.isStorageAvailable(sType))
return this.getWStorage(sType);
else
return MockStorageHelper.getStorage(sType);
};
WebStorageHelper.getWStorage = function (sType) {
var storage;
switch (sType) {
case STORAGE.local:
storage = localStorage;
break;
case STORAGE.session:
storage = sessionStorage;
break;
default:
throw Error('invalid storage type');
}
return storage;
};
WebStorageHelper.isStorageAvailable = function (sType) {
if (typeof STORAGEAVAILABILITY[sType] === 'boolean')
return STORAGEAVAILABILITY[sType];
var isAvailable = true, storage;
try {
storage = this.getWStorage(sType);
if (typeof storage === 'object') {
storage.setItem('test-storage', 'foobar');
storage.removeItem('test-storage');
}
else
isAvailable = false;
}
catch (e) {
isAvailable = false;
}
if (!isAvailable)
console.warn(STORAGE_NAMES[sType] + " storage unavailable, Ng2Webstorage will use a fallback strategy instead");
return STORAGEAVAILABILITY[sType] = isAvailable;
};
return WebStorageHelper;
}());
export { WebStorageHelper };
var _a, _b;
//# sourceMappingURL=webStorage.js.map