UNPKG

nedux-persist

Version:

the next redux state management

41 lines (32 loc) 1.05 kB
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)); }; export { persistKeys };