ngrx-store-persist
Version:
ngrx-store-persist depends on @ngrx/store and angular 2+
77 lines • 10 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.syncStateUpdate = exports.rehydrateApplicationState = exports.storageSync = void 0;
const deepmerge = require("deepmerge");
const helpers_1 = require("./helpers");
const options_1 = require("./options");
const INIT_ACTION = '@ngrx/store/init';
const UPDATE_ACTION = '@ngrx/store/update-reducers';
function storageSync(reducer) {
const stateKeys = (0, helpers_1.validateStateKeys)(options_1.config.keys);
const rehydratedState = (0, exports.rehydrateApplicationState)(stateKeys, options_1.config.storage);
return function (state, action) {
let nextState;
if ((action.type === INIT_ACTION) && !state) {
nextState = reducer(state, action);
}
else {
nextState = Object.assign({}, state);
}
if (action.type === INIT_ACTION || action.type === UPDATE_ACTION) {
// @ts-ignore
const overwriteMerge = (destinationArray, sourceArray) => sourceArray;
const options = {
arrayMerge: overwriteMerge
};
nextState = deepmerge(nextState, rehydratedState, options);
}
nextState = reducer(nextState, action);
if (action.type !== INIT_ACTION) {
(0, exports.syncStateUpdate)(nextState, stateKeys, options_1.config.storage);
}
return nextState;
};
}
exports.storageSync = storageSync;
const rehydrateApplicationState = (keys, storage) => {
return keys.reduce((acc, curr) => {
let key = curr;
if (storage !== undefined) {
let stateSlice = storage.getItem(key);
if (stateSlice) {
return Object.assign({}, acc, {
[key]: stateSlice
});
}
}
return acc;
}, {});
};
exports.rehydrateApplicationState = rehydrateApplicationState;
const syncStateUpdate = (state, keys, storage) => {
keys.forEach(key => {
let stateSlice = state[key];
let replacer = undefined;
let space = undefined;
if (typeof stateSlice !== 'undefined' && storage !== undefined) {
try {
storage.setItem(key, typeof stateSlice === 'string'
? stateSlice
: JSON.stringify(stateSlice, replacer, space));
}
catch (e) {
console.warn('Unable to save state to localStorage:', e);
}
}
else if (typeof stateSlice === 'undefined') {
try {
storage.removeItem(key);
}
catch (e) {
console.warn(`Exception on removing/cleaning undefined '${key}' state`, e);
}
}
});
};
exports.syncStateUpdate = syncStateUpdate;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0b3JhZ2Utc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBdUM7QUFDdkMsdUNBQThDO0FBQzlDLHVDQUFtQztBQUVuQyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztBQUN2QyxNQUFNLGFBQWEsR0FBRyw2QkFBNkIsQ0FBQztBQUVwRCxTQUFnQixXQUFXLENBQUMsT0FBWTtJQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFBLDJCQUFpQixFQUFDLGdCQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTSxlQUFlLEdBQUcsSUFBQSxpQ0FBeUIsRUFBQyxTQUFTLEVBQUUsZ0JBQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU3RSxPQUFPLFVBQVUsS0FBVSxFQUFFLE1BQVc7UUFDcEMsSUFBSSxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN6QyxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN0QzthQUFNO1lBQ0gsU0FBUyxxQkFBUSxLQUFLLENBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUU7WUFDOUQsYUFBYTtZQUNiLE1BQU0sY0FBYyxHQUFHLENBQUMsZ0JBQXFCLEVBQUUsV0FBZ0IsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ2hGLE1BQU0sT0FBTyxHQUFzQjtnQkFDL0IsVUFBVSxFQUFFLGNBQWM7YUFDN0IsQ0FBQztZQUNGLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM5RDtRQUVELFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFDN0IsSUFBQSx1QkFBZSxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsZ0JBQU0sQ0FBQyxPQUFPLENBQ2pCLENBQUM7U0FDTDtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztBQUNOLENBQUM7QUFqQ0Qsa0NBaUNDO0FBRU0sTUFBTSx5QkFBeUIsR0FBRyxDQUNyQyxJQUFXLEVBQ1gsT0FBZ0IsRUFDbEIsRUFBRTtJQUNBLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM3QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFFZixJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDdkIsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxJQUFJLFVBQVUsRUFBRTtnQkFDWixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRTtvQkFDMUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVO2lCQUNwQixDQUFDLENBQUM7YUFDTjtTQUNKO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFqQlcsUUFBQSx5QkFBeUIsNkJBaUJwQztBQUVLLE1BQU0sZUFBZSxHQUFHLENBQzNCLEtBQVUsRUFDVixJQUFXLEVBQ1gsT0FBZ0IsRUFDbEIsRUFBRTtJQUNBLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDZixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUV0QixJQUFJLE9BQU8sVUFBVSxLQUFLLFdBQVcsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQzVELElBQUk7Z0JBQ0EsT0FBTyxDQUFDLE9BQU8sQ0FDWCxHQUFHLEVBQ0gsT0FBTyxVQUFVLEtBQUssUUFBUTtvQkFDMUIsQ0FBQyxDQUFDLFVBQVU7b0JBQ1osQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FDcEQsQ0FBQzthQUNMO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1RDtTQUNKO2FBQU0sSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFDMUMsSUFBSTtnQkFDQSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLElBQUksQ0FDUiw2Q0FBNkMsR0FBRyxTQUFTLEVBQ3pELENBQUMsQ0FDSixDQUFDO2FBQ0w7U0FDSjtJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBaENXLFFBQUEsZUFBZSxtQkFnQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZGVlcG1lcmdlIGZyb20gXCJkZWVwbWVyZ2VcIjtcclxuaW1wb3J0IHsgdmFsaWRhdGVTdGF0ZUtleXMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL29wdGlvbnNcIjtcclxuXHJcbmNvbnN0IElOSVRfQUNUSU9OID0gJ0BuZ3J4L3N0b3JlL2luaXQnO1xyXG5jb25zdCBVUERBVEVfQUNUSU9OID0gJ0BuZ3J4L3N0b3JlL3VwZGF0ZS1yZWR1Y2Vycyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RvcmFnZVN5bmMocmVkdWNlcjogYW55KSB7XHJcbiAgICBjb25zdCBzdGF0ZUtleXMgPSB2YWxpZGF0ZVN0YXRlS2V5cyhjb25maWcua2V5cyk7XHJcbiAgICBjb25zdCByZWh5ZHJhdGVkU3RhdGUgPSByZWh5ZHJhdGVBcHBsaWNhdGlvblN0YXRlKHN0YXRlS2V5cywgY29uZmlnLnN0b3JhZ2UpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGU6IGFueSwgYWN0aW9uOiBhbnkpIHtcclxuICAgICAgICBsZXQgbmV4dFN0YXRlO1xyXG5cclxuICAgICAgICBpZiAoKGFjdGlvbi50eXBlID09PSBJTklUX0FDVElPTikgJiYgIXN0YXRlKSB7XHJcbiAgICAgICAgICAgIG5leHRTdGF0ZSA9IHJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV4dFN0YXRlID0geyAuLi5zdGF0ZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IElOSVRfQUNUSU9OIHx8IGFjdGlvbi50eXBlID09PSBVUERBVEVfQUNUSU9OKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgY29uc3Qgb3ZlcndyaXRlTWVyZ2UgPSAoZGVzdGluYXRpb25BcnJheTogYW55LCBzb3VyY2VBcnJheTogYW55KSA9PiBzb3VyY2VBcnJheTtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uczogZGVlcG1lcmdlLk9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheU1lcmdlOiBvdmVyd3JpdGVNZXJnZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBuZXh0U3RhdGUgPSBkZWVwbWVyZ2UobmV4dFN0YXRlLCByZWh5ZHJhdGVkU3RhdGUsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbmV4dFN0YXRlID0gcmVkdWNlcihuZXh0U3RhdGUsIGFjdGlvbik7XHJcblxyXG4gICAgICAgIGlmIChhY3Rpb24udHlwZSAhPT0gSU5JVF9BQ1RJT04pIHtcclxuICAgICAgICAgICAgc3luY1N0YXRlVXBkYXRlKFxyXG4gICAgICAgICAgICAgICAgbmV4dFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgc3RhdGVLZXlzLFxyXG4gICAgICAgICAgICAgICAgY29uZmlnLnN0b3JhZ2VcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXh0U3RhdGU7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcmVoeWRyYXRlQXBwbGljYXRpb25TdGF0ZSA9IChcclxuICAgIGtleXM6IGFueVtdLFxyXG4gICAgc3RvcmFnZTogU3RvcmFnZVxyXG4pID0+IHtcclxuICAgIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XHJcbiAgICAgICAgbGV0IGtleSA9IGN1cnI7XHJcblxyXG4gICAgICAgIGlmIChzdG9yYWdlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgbGV0IHN0YXRlU2xpY2UgPSBzdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKHN0YXRlU2xpY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBhY2MsIHtcclxuICAgICAgICAgICAgICAgICAgICBba2V5XTogc3RhdGVTbGljZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9KTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzeW5jU3RhdGVVcGRhdGUgPSAoXHJcbiAgICBzdGF0ZTogYW55LFxyXG4gICAga2V5czogYW55W10sXHJcbiAgICBzdG9yYWdlOiBTdG9yYWdlXHJcbikgPT4ge1xyXG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgbGV0IHN0YXRlU2xpY2UgPSBzdGF0ZVtrZXldO1xyXG4gICAgICAgIGxldCByZXBsYWNlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICBsZXQgc3BhY2UgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVTbGljZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc3RvcmFnZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBzdGF0ZVNsaWNlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN0YXRlU2xpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeShzdGF0ZVNsaWNlLCByZXBsYWNlciwgc3BhY2UpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBzYXZlIHN0YXRlIHRvIGxvY2FsU3RvcmFnZTonLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlU2xpY2UgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgIGBFeGNlcHRpb24gb24gcmVtb3ZpbmcvY2xlYW5pbmcgdW5kZWZpbmVkICcke2tleX0nIHN0YXRlYCxcclxuICAgICAgICAgICAgICAgICAgICBlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcbiJdfQ==