UNPKG

ngrx-store-persist

Version:

ngrx-store-persist depends on @ngrx/store and angular 2+

77 lines 10 kB
"use strict"; 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==