mobx-persist-store
Version:
Mobx Persist Store
51 lines (50 loc) • 2.38 kB
JavaScript
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));
}
}