pinia-lasting
Version:
一个基于pinia的插件,自动数据持久化,直接引入就是持久化
57 lines (50 loc) • 1.83 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _ = require('lodash');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
const mergeStoreObject = (options) => {
if (!options.state)
throw new Error('No current undefined state');
let storeObject = options.state();
return Object.assign({}, storeObject);
};
const setStorage = (storageKey, storageObject) => {
sessionStorage.setItem(storageKey, JSON.stringify(storageObject));
};
const getStorage = (storageKey) => {
return sessionStorage.getItem(storageKey);
};
const moveStorage = (storageKey, store, storageObject) => {
const storage = getStorage(storageKey) ? JSON.parse(getStorage(storageKey)) : '';
if (storage && storage !== '') {
Object.keys(storage).forEach(key => {
if (store.hasOwnProperty(key)) {
store[key] = storage[key];
}
});
}
else {
setStorage(storageKey, storageObject);
}
};
const subscribe = (store) => {
store.$subscribe((subscribeObject, store) => {
const storeId = subscribeObject.storeId;
if (subscribeObject.events) {
if (subscribeObject.events.type !== 'set')
return;
}
___default["default"].debounce(setStorage, 300)(storeId, store);
});
};
const piniaLasting = (context) => {
const { store, options } = context;
const storeName = store.$id;
if (!storeName)
throw new Error('No current id');
const afterMerger = mergeStoreObject(options);
moveStorage(storeName, store, afterMerger);
subscribe(store);
};
exports.piniaLasting = piniaLasting;