nedux-logger
Version:
the next redux state management
42 lines (32 loc) • 1.2 kB
JavaScript
(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 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));
};
exports.persistKeys = persistKeys;
Object.defineProperty(exports, '__esModule', { value: true });
})));