UNPKG

mobx-persist-store

Version:
51 lines (50 loc) 2.38 kB
import { buildExpireTimestamp, consoleDebug, hasTimestampExpired, omitObjectProperties } from './utils'; export class StorageAdapter { constructor(options) { this.options = options; } async setItem(key, item) { var _a; const { stringify = true, debugMode = false } = this.options; const __mps__ = omitObjectProperties({ expireInTimestamp: this.options.expireIn ? buildExpireTimestamp(this.options.expireIn) : undefined, version: this.options.version, }, (value) => value === undefined); const data = Object.keys(__mps__).length ? Object.assign({}, item, { __mps__, }) : item; const content = stringify ? JSON.stringify(data) : data; consoleDebug(debugMode, `${key} - setItem:`, content); await ((_a = this.options.storage) === null || _a === void 0 ? void 0 : _a.setItem(key, content)); } async getItem(key) { var _a, _b, _c; const { removeOnExpiration = true, debugMode = false, version } = this.options; const storageData = await ((_a = this.options.storage) === null || _a === void 0 ? void 0 : _a.getItem(key)); let parsedData; try { parsedData = JSON.parse(storageData) || {}; } catch (error) { parsedData = storageData || {}; } const hasExpired = hasTimestampExpired((_b = parsedData.__mps__) === null || _b === void 0 ? void 0 : _b.expireInTimestamp); const mismatchedVersion = version && ((_c = parsedData.__mps__) === null || _c === void 0 ? void 0 : _c.version) !== version; consoleDebug(debugMode, `${key} - hasExpired`, hasExpired); consoleDebug(debugMode, `${key} - mismatchedVersion`, mismatchedVersion); if ((hasExpired && removeOnExpiration) || mismatchedVersion) { await this.removeItem(key); } parsedData = hasExpired || mismatchedVersion ? {} : parsedData; consoleDebug(debugMode, `${key} - (getItem):`, parsedData); return parsedData; } async removeItem(key) { var _a; const { debugMode = false } = this.options; consoleDebug(debugMode, `${key} - (removeItem): storage was removed`); await ((_a = this.options.storage) === null || _a === void 0 ? void 0 : _a.removeItem(key)); } }