UNPKG

@vitorluizc/persistence

Version:

Persistence provides a pretty easy API to handle Storage's implementations.

63 lines (53 loc) 1.91 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.persistence = factory()); }(this, function () { 'use strict'; /** * Creates a Persistence, an object to easily get and set values to a persistent * storage like `SessionStorage` or `LocalStorage`. * @example ```js * const state = createPersistence('state@name', { * placeholder: 'Unknown' * }); * * // This creates a persistent field's value. * const el = document.querySelector('input[name="name"]'); * el.value = state.get(); * el.addEventListener('input', () => state.set(el.value));``` * @param name - Persistence uses the name as storage's key. * @param options - Options to set timeout, storage and placeholder value. */ var createPersistence = function (name, options) { if (options === void 0) { options = {}; } var storage = options.storage; if (storage === void 0) { storage = window.localStorage; } var timeout = options.timeout; var placeholder = options.placeholder; var isExpired = function (updatedAt) { return timeout !== undefined && Date.now() > updatedAt + timeout; }; return { set: function (value) { var state = JSON.stringify({ value: value, updatedAt: Date.now() }); storage.setItem(name, state); }, get: function () { var state = storage.getItem(name); if (state === null) { return placeholder; } var record = JSON.parse(state); return isExpired(record.updatedAt) ? placeholder : record.value; }, delete: function () { return storage.removeItem(name); } }; }; var persistence = createPersistence; return persistence; }));