UNPKG

reactive-localstorage

Version:
360 lines 23.2 kB
"use strict"; var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalStorage = void 0; var env_1 = require("./env"); var $injectMark = Symbol.for('reactive-localstorage-inject-mark'); var $handlers = Symbol.for('reactive-localstorage-handlers'); var LocalStorage = /** @class */ (function () { function LocalStorage(window, storage) { var _this = this; this._events = {}; this._length = 0; this._injected = false; // istanbul ignore next if (window) { this.supported = true; } else { this.supported = false; window = new Window(); } this.native = storage || window.localStorage; this._cache = new Map(); listen(window, function (_a) { var key = _a.key, newValue = _a.newValue, oldValue = _a.oldValue, storageArea = _a.storageArea; if (storageArea !== storage) return; _this.feed(key, newValue, oldValue); }); } Object.defineProperty(LocalStorage.prototype, "version", { get: function () { return env_1.version; }, enumerable: false, configurable: true }); Object.defineProperty(LocalStorage.prototype, "length", { get: function () { return this.native.length; }, enumerable: false, configurable: true }); LocalStorage.prototype.key = function (index) { return this.native.key(index); }; LocalStorage.prototype.getItem = function (key) { this.inject(); var cache = this._cache; if (cache.has(key)) return cache.get(key); var value = getNative('getItem').call(this.native, key); cache.set(key, value); return value; }; LocalStorage.prototype.setItem = function (key, value) { return this.set(key, String(value)); }; LocalStorage.prototype.removeItem = function (key) { return this.set(key, null); }; LocalStorage.prototype.clear = function () { var e_1, _a; getNative('clear').call(this.native); var cache = this._cache; try { for (var _b = __values(cache.keys()), _c = _b.next(); !_c.done; _c = _b.next()) { var key = _c.value; cache.set(key, null); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } this.emit('change', null, null, null); }; LocalStorage.prototype.on = function (name, fn) { this.inject(); var set = this._events[name]; if (!set) { this._events[name] = set = new Set(); } set.add(fn); }; LocalStorage.prototype.off = function (name, fn) { var set = this._events[name]; if (set) { set.delete(fn); } }; LocalStorage.prototype.feed = function (key, newValue, oldValue) { if (typeof key === 'string') { this._cache.set(key, newValue); if (newValue !== oldValue) { try { this.emit('change', key, newValue, oldValue); } catch (e) { // tslint:disable-next-line no-console console.error(e); } } } else { this._cache.clear(); try { this.emit('change', key, newValue, oldValue); } catch (e) { // tslint:disable-next-line no-console console.error(e); } } }; LocalStorage.prototype.set = function (key, value) { var cache = this._cache; var oldValue = cache.has(key) ? cache.get(key) : getNative('getItem').call(this.native, key); if (typeof value === 'string') { getNative('setItem').call(this.native, key, value); } else { getNative('removeItem').call(this.native, key); } cache.set(key, value); this.emit('change', key, value, oldValue); }; LocalStorage.prototype.emit = function (name) { var e_2, _a; var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var set = this._events[name]; if (set) { try { for (var _b = __values(set.values()), _c = _b.next(); !_c.done; _c = _b.next()) { var fn = _c.value; fn.apply(null, args); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_2) throw e_2.error; } } } }; LocalStorage.prototype.inject = function () { if (this._injected) return; this._injected = true; var storage = this.native; var me = this; var cache = this._cache; var handlers = storage[$handlers] || (storage[$handlers] = []); handlers.push({ injector: this, getItem: function (key, value) { cache.set(key, value); }, setItem: function (key, value) { me.feed(key, value, me.getItem(key)); }, removeItem: function (key) { me.feed(key, null, me.getItem(key)); }, clear: function () { me.feed(null, null, null); }, }); }; return LocalStorage; }()); exports.LocalStorage = LocalStorage; function listen(target, cb) { if (target.addEventListener) { target.addEventListener('storage', cb, true); // istanbul ignore next } else if (target.attachEvent) { target.attachEvent('storage', cb); // istanbul ignore next } else { return false; } return true; } inject(); function inject() { var _a; // istanbul ignore next if (Storage.prototype[$injectMark]) { console.warn("Storage has been injected, there might be multi versions of reactive-localstorage"); return; } var _b = Storage.prototype, nativeGetItem = _b.getItem, nativeSetItem = _b.setItem, nativeRemoveItem = _b.removeItem, nativeClear = _b.clear; function injectedGetItem(key) { var e_3, _a; var value = nativeGetItem.call(this, key); var handlers = this[$handlers]; if (handlers) { try { for (var handlers_1 = __values(handlers), handlers_1_1 = handlers_1.next(); !handlers_1_1.done; handlers_1_1 = handlers_1.next()) { var _b = handlers_1_1.value, fn = _b.getItem, native = _b.injector.native; if (this !== native) continue; if (typeof fn === 'function') { fn.call(this, key, value); } } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (handlers_1_1 && !handlers_1_1.done && (_a = handlers_1.return)) _a.call(handlers_1); } finally { if (e_3) throw e_3.error; } } } return value; } injectedGetItem.native = nativeGetItem; function injectedSetItem(key, value) { var e_4, _a; value = String(value); var handlers = this[$handlers]; if (handlers) { try { for (var handlers_2 = __values(handlers), handlers_2_1 = handlers_2.next(); !handlers_2_1.done; handlers_2_1 = handlers_2.next()) { var _b = handlers_2_1.value, fn = _b.setItem, native = _b.injector.native; if (this !== native) continue; if (typeof fn === 'function') { fn.call(this, key, value); } } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (handlers_2_1 && !handlers_2_1.done && (_a = handlers_2.return)) _a.call(handlers_2); } finally { if (e_4) throw e_4.error; } } } return nativeSetItem.call(this, key, value); } injectedSetItem.native = nativeSetItem; function injectedRemoveItem(key) { var e_5, _a; var handlers = this[$handlers]; if (handlers) { try { for (var handlers_3 = __values(handlers), handlers_3_1 = handlers_3.next(); !handlers_3_1.done; handlers_3_1 = handlers_3.next()) { var _b = handlers_3_1.value, fn = _b.removeItem, native = _b.injector.native; if (this !== native) continue; if (typeof fn === 'function') { fn.call(this, key); } } } catch (e_5_1) { e_5 = { error: e_5_1 }; } finally { try { if (handlers_3_1 && !handlers_3_1.done && (_a = handlers_3.return)) _a.call(handlers_3); } finally { if (e_5) throw e_5.error; } } } return nativeRemoveItem.call(this, key); } injectedRemoveItem.native = nativeRemoveItem; function injectedClear() { var e_6, _a; var handlers = this[$handlers]; if (handlers) { try { for (var handlers_4 = __values(handlers), handlers_4_1 = handlers_4.next(); !handlers_4_1.done; handlers_4_1 = handlers_4.next()) { var _b = handlers_4_1.value, fn = _b.clear, native = _b.injector.native; if (this !== native) continue; if (typeof fn === 'function') { fn.call(this); } } } catch (e_6_1) { e_6 = { error: e_6_1 }; } finally { try { if (handlers_4_1 && !handlers_4_1.done && (_a = handlers_4.return)) _a.call(handlers_4); } finally { if (e_6) throw e_6.error; } } } return nativeClear.call(this); } injectedClear.native = nativeClear; Object.defineProperties(Storage.prototype, (_a = {}, _a[$injectMark] = { configurable: true, enumerable: false, writable: true, value: true, }, _a[$handlers] = { configurable: true, enumerable: false, writable: true, value: [], }, _a.getItem = { configurable: true, enumerable: false, writable: true, value: injectedGetItem, }, _a.setItem = { configurable: true, enumerable: false, writable: true, value: injectedSetItem, }, _a.removeItem = { configurable: true, enumerable: false, writable: true, value: injectedRemoveItem, }, _a.clear = { configurable: true, enumerable: false, writable: true, value: injectedClear, }, _a)); } function getNative(key) { var fn = Storage.prototype[key]; return fn && fn.native || fn; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvY2Fsc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUErQjtBQUUvQixJQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUE7QUFDbkUsSUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO0FBRTlEO0lBV0Usc0JBQVksTUFBZSxFQUFFLE9BQWlCO1FBQTlDLGlCQWNDO1FBckJTLFlBQU8sR0FFYixFQUFFLENBQUE7UUFFSSxZQUFPLEdBQUcsQ0FBQyxDQUFBO1FBQ1gsY0FBUyxHQUFHLEtBQUssQ0FBQTtRQUd6Qix1QkFBdUI7UUFDdkIsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDdEIsTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7U0FDdEI7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFBO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUN2QixNQUFNLENBQUMsTUFBTSxFQUFFLFVBQUMsRUFBd0M7Z0JBQXRDLEdBQUcsU0FBQSxFQUFFLFFBQVEsY0FBQSxFQUFFLFFBQVEsY0FBQSxFQUFFLFdBQVcsaUJBQUE7WUFDcEQsSUFBSSxXQUFXLEtBQUssT0FBTztnQkFBRSxPQUFNO1lBQ25DLEtBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNwQyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxzQkFBSSxpQ0FBTzthQUFYO1lBQ0UsT0FBTyxhQUFP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