UNPKG

nedux-logger

Version:

the next redux state management

32 lines (25 loc) 818 B
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 persistKey = key => { let isHydrated = false; const next = async value => { if (isHydrated) { setter(key, value); } else { isHydrated = true; const persistedValue = await getter(key); persistedValue && store.set(key, persistedValue); } }; store.subscribe(key, next, { withInitialValue: true }); }; keys.forEach(key => persistKey(key)); }; export { persistKeys };