UNPKG

modern-api.storage

Version:
71 lines (67 loc) 1.82 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); // index.ts var StorageEnhancer = class { constructor(storage) { this.storage = storage; } hasItem(key) { return typeof this.storage.getItem(key) === "string"; } staleItem(key) { if (!this.hasItem(key)) return false; const { start, ttl } = this._parseValue(this.storage.getItem(key)); return this._isStale(start, ttl); } getItem(key, { removeStale, updateAge } = {}) { if (!this.hasItem(key)) return null; const { value, start, ttl } = this._parseValue(this.storage.getItem(key)); if (this._isStale(start, ttl)) { removeStale && this.removeItem(key); return null; } if (updateAge) this.setItem(key, value, { ttl }); return value; } setItem(key, value, { ttl } = {}) { this.storage.setItem(key, this._prependExpire(value, ttl)); } getJson(key, options = {}) { try { return JSON.parse(this.getItem(key, options)); } catch { return null; } } setJson(key, value, options = {}) { this.setItem(key, JSON.stringify(value), options); } removeItem(key) { this.storage.removeItem(key); } clear() { this.storage.clear(); } _prependExpire(value, ttl) { return this._isNumber(ttl) ? `start:${+new Date()}:ttl:${ttl}:${value}` : value; } _parseValue(value) { const reg = /^start:(\d+):ttl:(\d+):/; const result = value.match(reg); return { value: value.replace(reg, ""), start: result && result[1], ttl: result && result[2] }; } _isStale(start, ttl) { return this._isNumber(start) && this._isNumber(ttl) && Number(start) + Number(ttl) < +new Date(); } _isNumber(n) { return !isNaN(parseFloat(n)); } }; exports.StorageEnhancer = StorageEnhancer;