UNPKG

nedux-persist

Version:

the next redux state management

51 lines (39 loc) 1.43 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = global || self, factory(global['nedux-persist'] = {})); }(this, (function (exports) { 'use strict'; const PREFIX = '@nedux-persist'; const persistKeys = (keys, { storage = localStorage, version = '' } = {}) => store => { const getter = async key => JSON.parse((await Promise.resolve(storage.getItem(`${PREFIX}-${version}:${key}`)))); const setter = (key, value) => Promise.resolve(storage.setItem(`${PREFIX}-${version}:${key}`, JSON.stringify(value))); const remover = key => Promise.resolve(storage.removeItem(`${PREFIX}-${version}:${key}`)); const persistKey = key => { let isHydrated = false; const next = async value => { if (isHydrated) { if (value !== null && value !== undefined) { setter(key, value); } else { remover(key); } } else { isHydrated = true; const persistedValue = await getter(key); if (persistedValue !== null) { store.set(key, persistedValue); } } }; store.subscribe(key, next, { withInitialValue: true }); }; keys.forEach(key => persistKey(key)); }; exports.persistKeys = persistKeys; Object.defineProperty(exports, '__esModule', { value: true }); })));