typesafe-storage
Version:
Typesafe Web Storage API wrapper to support objects and arrays
129 lines (102 loc) • 3.25 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
var AltStorage = /*#__PURE__*/function () {
function AltStorage() {
this.values = {};
}
var _proto = AltStorage.prototype;
_proto.clear = function clear() {
this.values = {};
};
_proto.getItem = function getItem(key) {
return this.values[key] || null;
};
_proto.key = function key(index) {
return Object.keys(this.values)[index] || null;
};
_proto.setItem = function setItem(key, value) {
this.values[key] = value;
};
_proto.removeItem = function removeItem(key) {
delete this.values[key];
};
_createClass(AltStorage, [{
key: "length",
get: function get() {
return Object.keys(this.values).length;
}
}]);
return AltStorage;
}();
var StorageWrapper = /*#__PURE__*/function () {
function StorageWrapper(storage) {
this.storage = storage;
}
var _proto = StorageWrapper.prototype;
_proto.clear = function clear() {
this.storage.clear();
};
_proto.getItem = function getItem(key) {
var value = this.storage.getItem(key);
if (typeof value !== 'string') {
return value;
}
try {
return JSON.parse(value);
} catch (e) {
return null;
}
};
_proto.key = function key(index) {
return this.storage.key(index);
};
_proto.setItem = function setItem(key, value) {
this.storage.setItem(key, JSON.stringify(value));
};
_proto.removeItem = function removeItem(key) {
this.storage.removeItem(key);
};
_createClass(StorageWrapper, [{
key: "length",
get: function get() {
return this.storage.length;
}
}]);
return StorageWrapper;
}();
// https://developer.mozilla.org/ja/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API
var isStorageAvailable = function isStorageAvailable(storage) {
try {
var key = '__typesafe-storage_test__';
storage.setItem(key, key);
storage.removeItem(key);
return true;
} catch (e) {
return e instanceof DOMException && ( // everything except Firefox
e.code === 22 || // Firefox
e.code === 1014 || // test name field too, because code might not be present
// everything except Firefox
e.name === 'QuotaExceededError' || // Firefox
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && // acknowledge QuotaExceededError only if there's something already stored
storage && storage.length !== 0;
}
};
var createStorage = function createStorage(storage) {
return new StorageWrapper(!storage || !isStorageAvailable(storage) ? new AltStorage() : storage);
};
exports.createStorage = createStorage;
//# sourceMappingURL=typesafestorage.cjs.development.js.map