UNPKG

nedux-persist

Version:

the next redux state management

45 lines (34 loc) 1.14 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); 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;