UNPKG

typesafe-storage

Version:

Typesafe Web Storage API wrapper to support objects and arrays

129 lines (102 loc) 3.25 kB
'use strict'; 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