ngrx-store-localstorage
Advanced tools
Comparing version 7.0.1 to 8.0.0
@@ -14,2 +14,3 @@ export declare const dateReviver: (key: string, value: any) => any; | ||
syncCondition?: (state: any) => any; | ||
checkStorageAvailability?: boolean; | ||
} |
@@ -12,3 +12,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var merge = require("lodash.merge"); | ||
var deepmerge = require("deepmerge"); | ||
var INIT_ACTION = '@ngrx/store/init'; | ||
@@ -25,2 +25,5 @@ var UPDATE_ACTION = '@ngrx/store/update-reducers'; | ||
var dummyReviver = function (key, value) { return value; }; | ||
var checkIsBrowserEnv = function () { | ||
return typeof window !== 'undefined'; | ||
}; | ||
var validateStateKeys = function (keys) { | ||
@@ -76,16 +79,18 @@ return keys.map(function (key) { | ||
} | ||
var stateSlice = storage.getItem(storageKeySerializer(key)); | ||
if (stateSlice) { | ||
// Use provided decrypt function | ||
if (decrypt) { | ||
stateSlice = decrypt(stateSlice); | ||
if (storage !== undefined) { | ||
var stateSlice = storage.getItem(storageKeySerializer(key)); | ||
if (stateSlice) { | ||
// Use provided decrypt function | ||
if (decrypt) { | ||
stateSlice = decrypt(stateSlice); | ||
} | ||
var isObjectRegex = new RegExp('{|\\['); | ||
var raw = stateSlice; | ||
if (stateSlice === 'null' || isObjectRegex.test(stateSlice.charAt(0))) { | ||
raw = JSON.parse(stateSlice, reviver); | ||
} | ||
return Object.assign({}, acc, (_a = {}, | ||
_a[key] = deserialize ? deserialize(raw) : raw, | ||
_a)); | ||
} | ||
var isObjectRegex = new RegExp('{|\\['); | ||
var raw = stateSlice; | ||
if (stateSlice === 'null' || isObjectRegex.test(stateSlice.charAt(0))) { | ||
raw = JSON.parse(stateSlice, reviver); | ||
} | ||
return Object.assign({}, acc, (_a = {}, | ||
_a[key] = deserialize ? deserialize(raw) : raw, | ||
_a)); | ||
} | ||
@@ -159,3 +164,3 @@ return acc; | ||
} | ||
if (typeof stateSlice !== 'undefined') { | ||
if (typeof stateSlice !== 'undefined' && storage !== undefined) { | ||
try { | ||
@@ -187,3 +192,4 @@ if (encrypt) { | ||
exports.localStorageSync = function (config) { return function (reducer) { | ||
if (config.storage === undefined) { | ||
if (config.storage === undefined && | ||
!config.checkStorageAvailability || (config.checkStorageAvailability && checkIsBrowserEnv())) { | ||
config.storage = localStorage || window.localStorage; | ||
@@ -212,3 +218,7 @@ } | ||
if ((action.type === INIT_ACTION || action.type === UPDATE_ACTION) && rehydratedState) { | ||
nextState = merge({}, nextState, rehydratedState); | ||
var overwriteMerge = function (destinationArray, sourceArray, options) { return sourceArray; }; | ||
var options = { | ||
arrayMerge: overwriteMerge | ||
}; | ||
nextState = deepmerge(nextState, rehydratedState, options); | ||
} | ||
@@ -215,0 +225,0 @@ nextState = reducer(nextState, action); |
{ | ||
"name": "ngrx-store-localstorage", | ||
"version": "7.0.1", | ||
"version": "8.0.0", | ||
"description": "State and local storage syncing for @ngrx/store", | ||
@@ -59,4 +59,4 @@ "main": "./dist/index.js", | ||
"dependencies": { | ||
"lodash.merge": "^4.6.1" | ||
"deepmerge": "^3.2.0" | ||
} | ||
} |
@@ -80,2 +80,4 @@ # ngrx-store-localstorage | ||
* `syncCondition` (optional) `(state) => boolean`: When set, sync to storage medium will only occur when this function returns a true boolean. Example: `(state) => state.config.syncToStorage` will check the state tree under config.syncToStorage and if true, it will sync to the storage. If undefined or false it will not sync to storage. Often useful for "remember me" options in login. | ||
* `checkStorageAvailability` \(*boolean? = false*): Specify if the storage availability checking is expected, i.e. for server side rendering / Universal. | ||
Usage: `localStorageSync({keys: ['todos', 'visibilityFilter'], storageKeySerializer: (key) => 'cool_' + key, ... })`. In this example `Storage` will use keys `cool_todos` and `cool_visibilityFilter` keys to store `todos` and `visibilityFilter` slices of state). The key itself is used by default - `(key) => key`. | ||
@@ -115,1 +117,2 @@ | ||
* `removeOnUndefined` \(*boolean? = false*): Specify if the state is removed from the storage when the new value is undefined. | ||
* `checkStorageAvailability` \(*boolean? = false*): Specify if the storage availability checking is expected, i.e. for server side rendering / Universal. |
@@ -1,2 +0,2 @@ | ||
import * as merge from 'lodash.merge'; | ||
import * as deepmerge from 'deepmerge'; | ||
@@ -17,2 +17,6 @@ const INIT_ACTION = '@ngrx/store/init'; | ||
const checkIsBrowserEnv = () => { | ||
return typeof window !== 'undefined' | ||
}; | ||
const validateStateKeys = (keys: any[]) => { | ||
@@ -87,20 +91,21 @@ return keys.map(key => { | ||
} | ||
if (storage !== undefined) { | ||
let stateSlice = storage.getItem(storageKeySerializer(key)); | ||
if (stateSlice) { | ||
// Use provided decrypt function | ||
if (decrypt) { | ||
stateSlice = decrypt(stateSlice); | ||
} | ||
let stateSlice = storage.getItem(storageKeySerializer(key)); | ||
if (stateSlice) { | ||
// Use provided decrypt function | ||
if (decrypt) { | ||
stateSlice = decrypt(stateSlice); | ||
} | ||
const isObjectRegex = new RegExp('{|\\['); | ||
let raw = stateSlice; | ||
const isObjectRegex = new RegExp('{|\\['); | ||
let raw = stateSlice; | ||
if (stateSlice === 'null' || isObjectRegex.test(stateSlice.charAt(0))) { | ||
raw = JSON.parse(stateSlice, reviver); | ||
} | ||
if (stateSlice === 'null' || isObjectRegex.test(stateSlice.charAt(0))) { | ||
raw = JSON.parse(stateSlice, reviver); | ||
return Object.assign({}, acc, { | ||
[key]: deserialize ? deserialize(raw) : raw | ||
}); | ||
} | ||
return Object.assign({}, acc, { | ||
[key]: deserialize ? deserialize(raw) : raw | ||
}); | ||
} | ||
@@ -187,3 +192,3 @@ return acc; | ||
if (typeof stateSlice !== 'undefined') { | ||
if (typeof stateSlice !== 'undefined' && storage !== undefined) { | ||
try { | ||
@@ -223,3 +228,5 @@ if (encrypt) { | ||
) => { | ||
if (config.storage === undefined) { | ||
if (config.storage === undefined && | ||
!config.checkStorageAvailability || (config.checkStorageAvailability && checkIsBrowserEnv()) | ||
) { | ||
config.storage = localStorage || window.localStorage; | ||
@@ -258,3 +265,7 @@ } | ||
if ((action.type === INIT_ACTION || action.type === UPDATE_ACTION) && rehydratedState) { | ||
nextState = merge({}, nextState, rehydratedState); | ||
const overwriteMerge = (destinationArray, sourceArray, options) => sourceArray; | ||
const options: deepmerge.Options = { | ||
arrayMerge: overwriteMerge | ||
}; | ||
nextState = deepmerge(nextState, rehydratedState, options); | ||
} | ||
@@ -309,2 +320,3 @@ | ||
syncCondition?: (state: any) => any; | ||
checkStorageAvailability?: boolean; | ||
} |
Sorry, the diff of this file is not supported yet
62328
1027
117
+ Addeddeepmerge@^3.2.0
+ Addeddeepmerge@3.3.0(transitive)
- Removedlodash.merge@^4.6.1
- Removedlodash.merge@4.6.2(transitive)