nedux-persist
Version:
the next redux state management
51 lines (39 loc) • 1.43 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 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 });
})));