UNPKG

onix-core

Version:
47 lines 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.tempStorage = exports.storage = void 0; const tslib_1 = require("tslib"); const sri_1 = tslib_1.__importDefault(require("../common/sri")); const builder = (storage) => { const api = { get: (k) => storage.getItem(k), set: (k, v) => storage.setItem(k, v), fire: (k, v) => storage.setItem(k, JSON.stringify({ sri: sri_1.default, nonce: Math.random(), value: v })), remove: (k) => storage.removeItem(k), make: (k) => ({ get: () => api.get(k), set: (v) => api.set(k, v), fire: (v) => api.fire(k, v), remove: () => api.remove(k), listen: (f) => window.addEventListener('storage', e => { if (e.key !== k || e.storageArea !== storage || e.newValue === null) return; let parsed; try { parsed = JSON.parse(e.newValue); } catch (_) { return; } // check sri, because Safari fires events also in the original // document when there are multiple tabs if ((parsed === null || parsed === void 0 ? void 0 : parsed.sri) && parsed.sri !== sri_1.default) f(parsed); }) }), makeBoolean: (k) => ({ get: () => api.get(k) == '1', set: (v) => api.set(k, v ? '1' : '0'), toggle: () => api.set(k, api.get(k) == '1' ? '0' : '1') }) }; return api; }; exports.storage = builder(window.localStorage); exports.tempStorage = builder(window.sessionStorage); //# sourceMappingURL=Builder.js.map