UNPKG

esspired

Version:

session storage with an expiration

119 lines (100 loc) 3.33 kB
'use strict'; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Esspired = function () { function Esspired() { _classCallCheck(this, Esspired); } _createClass(Esspired, [{ key: 'length', value: function length() { return window.sessionStorage.length; } }, { key: 'key', value: function key(n) { return window.sessionStorage.key(n); } }, { key: 'getItem', value: function getItem(key) { var item = window.sessionStorage.getItem(key); try { var entry = JSON.parse(item); /* return entry as is if not an esspired entry. */ if (!entry.data && !entry.expire) { return entry; } var data = entry.data; var expire = entry.expire; var now = new Date(); var expiration = new Date(expire); if (expire !== -1 && now.getTime() > expiration.getTime()) { window.sessionStorage.removeItem(key); return null; } return data; } catch (e) { /* return item as is if not an object. */ return item; } } }, { key: 'setItem', value: function setItem(key, data) { var expire = arguments.length <= 2 || arguments[2] === undefined ? -1 : arguments[2]; var entry = { data: data, expire: expire }; return window.sessionStorage.setItem(key, JSON.stringify(entry)); } }, { key: 'removeItem', value: function removeItem(key) { return window.sessionStorage.removeItem(key); } }, { key: 'clear', value: function clear() { return window.sessionStorage.clear(); } }]); return Esspired; }(); /* polyfill sessionStorage but it wont be persistant. */ var StoragePolyfill = function () { function StoragePolyfill() { _classCallCheck(this, StoragePolyfill); this._data = {}; } _createClass(StoragePolyfill, [{ key: 'setItem', value: function setItem(key, data) { return this._data[key] = String(data); } }, { key: 'getItem', value: function getItem(key) { return this._data.hasOwnProperty(key) ? this._data[key] : null; } }, { key: 'removeItem', value: function removeItem(key) { return delete this._data[key]; } }, { key: 'clear', value: function clear() { return this._data = {}; } }]); return StoragePolyfill; }(); function hasSessionStorage() { try { window.sessionStorage.setItem('test', 'test'); window.sessionStorage.removeItem('test'); return true; } catch (e) { return false; } } module.exports = hasSessionStorage() ? new Esspired() : new StoragePolyfill();