UNPKG

respond-framework

Version:
78 lines (75 loc) 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.native = exports.default = void 0; var _asyncStorage = require("@react-native-async-storage/async-storage"); var _constants = require("../helpers/constants.js"); // todo: replace with fast sync storage: https://github.com/mrousavy/react-native-mmkv const prefix = '__respond_session.'; const mock = { getItem(k) { return this[k]; }, setItem(k, v) { this[k] = v; }, removeItem(k) { delete this[k]; }, clear() { Object.keys(this).forEach(k => delete this[k]); } }; const web = { getItem(k) { return sessionStorage.getItem(prefix + k); }, setItem(k, v) { return sessionStorage.setItem(prefix + k, v); }, removeItem(k) { return sessionStorage.removeItem(prefix + k); }, clear() { sessionStorage.clear(); } }; const native = exports.native = { getItem(k) { return this[k]; }, removeItem(k) { delete this[k]; _asyncStorage.default.removeItem(prefix + k).catch(swallowed => swallowed); }, setItem(k, v) { this[k] = v; // mimic browser sessionStorage behavior if (v === null) v = 'null'; if (v === undefined) v = 'undefined'; _asyncStorage.default.setItem(prefix + k, v).catch(swallowed => swallowed); }, clear() { Object.keys(native).forEach(k => { if (typeof native[k] === 'function') return; delete native[k]; }); return _asyncStorage.default.clear(); }, async populate() { // until sync storage is available as a dep on native, await sessionStorage.populate() must be called on app start try { const keys = await _asyncStorage.default.getAllKeys(); const appKeys = keys.filter(k => k.startsWith(prefix)); const values = await _asyncStorage.default.multiGet(appKeys); values.forEach(([k, v]) => { const key = k.slice(prefix.length); this[key] = v; }); } catch (e) { console.log('populate.error', e); } } }; var _default = exports.default = _constants.isNative ? native : typeof sessionStorage === 'undefined' ? mock : web;