onix-core
Version:
Onix library core
47 lines • 1.8 kB
JavaScript
;
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