redux-storage
Advanced tools
Comparing version 3.0.1 to 4.0.0
@@ -90,4 +90,13 @@ 'use strict'; | ||
var saveState = getState(); | ||
var saveAction = (0, _actions.save)(saveState); | ||
if (process.env.NODE_ENV !== 'production') { | ||
if (!saveAction.meta) { | ||
saveAction.meta = {}; | ||
} | ||
saveAction.meta.origin = action; | ||
} | ||
var dispatchSave = function dispatchSave() { | ||
return dispatch((0, _actions.save)(saveState)); | ||
return dispatch(saveAction); | ||
}; | ||
@@ -103,2 +112,2 @@ engine.save(saveState).then(dispatchSave)['catch'](swallow); | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGVNaWRkbGV3YXJlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxTQUFTLE9BQVQsR0FBbUIsRUFBbkI7O0FBR0EsU0FBUywyQkFBVCxDQUFxQyxTQUFyQyxFQUFnRCxTQUFoRCxFQUEyRDtBQUN2RCxjQUNLLE1BREwsQ0FDWSxVQUFDLElBQUQ7ZUFBVSxVQUFVLE9BQVYsQ0FBa0IsSUFBbEIsTUFBNEIsQ0FBQyxDQUFEO0tBQXRDLENBRFosQ0FFSyxPQUZMLENBRWEsVUFBQyxJQUFELEVBQVU7QUFDZixnQkFBUSxJQUFSO0FBQ0ksb0NBQTBCLDBDQUExQixvQ0FESixFQURlO0tBQVYsQ0FGYixDQUR1RDtDQUEzRDs7QUFXQSxTQUFTLGFBQVQsQ0FBdUIsTUFBdkIsRUFBK0I7QUFDM0IsUUFBTSxTQUFTLHNCQUFXLE1BQVgsQ0FBVCxDQURxQjtBQUUzQixRQUFNLFFBQVEsc0JBQVMsTUFBVCxDQUFSLENBRnFCO0FBRzNCLFFBQU0sVUFBVSxTQUFTLE9BQU8sY0FBUCxDQUFzQixNQUF0QixDQUFULENBSFc7O0FBSzNCLFFBQUksQ0FBQyxNQUFELElBQVcsS0FBWCxJQUFvQixPQUFwQixFQUE2QjtBQUM3QixlQUFPLElBQVAsQ0FENkI7S0FBakM7O0FBSUEsUUFBSSxRQUFRLEdBQVIsQ0FBWSxRQUFaLEtBQXlCLFlBQXpCLEVBQXVDO0FBQ3ZDLFlBQUksTUFBSixFQUFZO0FBQ1Isb0JBQVEsSUFBUjtBQUNJLCtOQURKLEVBRFE7U0FBWixNQU9PLElBQUksQ0FBQyxLQUFELEVBQVE7QUFDZixvQkFBUSxJQUFSO0FBQ0ksb0hBQ3lDLE9BRHpDLENBREosQ0FEZTtTQUFaLE1BS0EsSUFBSSxDQUFDLE9BQUQsRUFBVTtBQUNqQixvQkFBUSxJQUFSO0FBQ0ksOEZBREosRUFEaUI7U0FBZDtLQWJYOztBQXFCQSxXQUFPLEtBQVAsQ0E5QjJCO0NBQS9COztrQkFrQ2UsVUFBQyxNQUFELEVBQXdEO1FBQS9DLHdFQUFrQixrQkFBNkI7UUFBekIsd0VBQWtCLGtCQUFPOzs7QUFFbkUsUUFBTSxrREFBeUIscURBQXpCLENBRjZEOztBQUluRSxRQUFJLFFBQVEsR0FBUixDQUFZLFFBQVosS0FBeUIsWUFBekIsRUFBdUM7QUFDdkMsb0NBQTRCLGVBQTVCLEVBQTZDLGVBQTdDLEVBRHVDO0tBQTNDOztBQUlBLFdBQU8sZ0JBQTRCO1lBQXpCLHlCQUF5QjtZQUFmLHlCQUFlOztBQUMvQixlQUFPLFVBQUMsSUFBRDttQkFBVSxVQUFDLE1BQUQsRUFBWTtBQUN6QixvQkFBTSxTQUFTLEtBQUssTUFBTCxDQUFULENBRG1COztBQUd6QixvQkFBSSxDQUFDLGNBQWMsTUFBZCxDQUFELEVBQXdCO0FBQ3hCLDJCQUFPLE1BQVAsQ0FEd0I7aUJBQTVCOztBQUlBLG9CQUFNLGdCQUFnQixtQkFBbUIsT0FBbkIsQ0FBMkIsT0FBTyxJQUFQLENBQTNCLEtBQTRDLENBQUMsQ0FBRCxDQVB6QztBQVF6QixvQkFBTSxnQkFBZ0IsZ0JBQWdCLE1BQWhCLEtBQTJCLENBQTNCLEdBQ2hCO0FBRGdCLGtCQUVoQixnQkFBZ0IsT0FBaEIsQ0FBd0IsT0FBTyxJQUFQLENBQXhCLEtBQXlDLENBQUMsQ0FBRDs7O0FBVnRCLG9CQWFyQixDQUFDLGFBQUQsSUFBa0IsYUFBbEIsRUFBaUM7O0FBQ2pDLDRCQUFNLFlBQVksVUFBWjtBQUNOLDRCQUFNLGVBQWUsU0FBZixZQUFlO21DQUFNLFNBQVMsbUJBQVcsU0FBWCxDQUFUO3lCQUFOO0FBQ3JCLCtCQUFPLElBQVAsQ0FBWSxTQUFaLEVBQXVCLElBQXZCLENBQTRCLFlBQTVCLFdBQWdELE9BQWhEO3lCQUhpQztpQkFBckM7O0FBTUEsdUJBQU8sTUFBUCxDQW5CeUI7YUFBWjtTQUFWLENBRHdCO0tBQTVCLENBUjREO0NBQXhEIiwiZmlsZSI6ImNyZWF0ZU1pZGRsZXdhcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICdsb2Rhc2guaXNmdW5jdGlvbic7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnbG9kYXNoLmlzb2JqZWN0JztcblxuaW1wb3J0IHsgc2F2ZSBhcyBhY3Rpb25TYXZlIH0gZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCB7IExPQUQsIFNBVkUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmZ1bmN0aW9uIHN3YWxsb3coKSB7XG59XG5cbmZ1bmN0aW9uIHdhcm5BYm91dENvbmZ1c2luZ0ZpbHRlcmluZyhibGFja2xpc3QsIHdoaXRlbGlzdCkge1xuICAgIGJsYWNrbGlzdFxuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiB3aGl0ZWxpc3QuaW5kZXhPZihpdGVtKSAhPT0gLTEpXG4gICAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGBbcmVkdXgtc3RvcmFnZV0gQWN0aW9uICR7aXRlbX0gaXMgb24gQk9USCBibGFjay0gYW5kIHdoaXRlbGlzdC5gXG4gICAgICAgICAgICAgICAgKyBgIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBtaXN0YWtlIWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkQWN0aW9uKGFjdGlvbikge1xuICAgIGNvbnN0IGlzRnVuYyA9IGlzRnVuY3Rpb24oYWN0aW9uKTtcbiAgICBjb25zdCBpc09iaiA9IGlzT2JqZWN0KGFjdGlvbik7XG4gICAgY29uc3QgaGFzVHlwZSA9IGlzT2JqICYmIGFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgndHlwZScpO1xuXG4gICAgaWYgKCFpc0Z1bmMgJiYgaXNPYmogJiYgaGFzVHlwZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoaXNGdW5jKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGBbcmVkdXgtc3RvcmFnZV0gQUNUSU9OIElHTk9SRUQhIEFjdGlvbnMgc2hvdWxkIGJlIG9iamVjdHNgXG4gICAgICAgICAgICAgICAgKyBgIHdpdGggYSB0eXBlIHByb3BlcnR5IGJ1dCByZWNlaXZlZCBhIGZ1bmN0aW9uISBZb3VyYFxuICAgICAgICAgICAgICAgICsgYCBmdW5jdGlvbiByZXNvbHZpbmcgbWlkZGxld2FyZSAoZS5nLiByZWR1eC10aHVuaykgbXVzdCBiZWBcbiAgICAgICAgICAgICAgICArIGAgcGxhY2VkIEJFRk9SRSByZWR1eC1zdG9yYWdlIWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzT2JqKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGBbcmVkdXgtc3RvcmFnZV0gQUNUSU9OIElHTk9SRUQhIEFjdGlvbnMgc2hvdWxkIGJlIG9iamVjdHNgXG4gICAgICAgICAgICAgICAgKyBgIHdpdGggYSB0eXBlIHByb3BlcnR5IGJ1dCByZWNlaXZlZDogJHthY3Rpb259YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghaGFzVHlwZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBgW3JlZHV4LXN0b3JhZ2VdIEFDVElPTiBJR05PUkVEISBBY3Rpb24gb2JqZWN0cyBzaG91bGQgaGF2ZWBcbiAgICAgICAgICAgICAgICArIGAgYSB0eXBlIHByb3BlcnR5LmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgKGVuZ2luZSwgYWN0aW9uQmxhY2tsaXN0ID0gW10sIGFjdGlvbldoaXRlbGlzdCA9IFtdKSA9PiB7XG4gICAgLy8gQWxzbyBkb24ndCBzYXZlIGlmIHdlIHByb2Nlc3Mgb3VyIG93biBhY3Rpb25zXG4gICAgY29uc3QgYmxhY2tsaXN0ZWRBY3Rpb25zID0gWy4uLmFjdGlvbkJsYWNrbGlzdCwgTE9BRCwgU0FWRV07XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuQWJvdXRDb25mdXNpbmdGaWx0ZXJpbmcoYWN0aW9uQmxhY2tsaXN0LCBhY3Rpb25XaGl0ZWxpc3QpO1xuICAgIH1cblxuICAgIHJldHVybiAoeyBkaXNwYXRjaCwgZ2V0U3RhdGUgfSkgPT4ge1xuICAgICAgICByZXR1cm4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5leHQoYWN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKCFpc1ZhbGlkQWN0aW9uKGFjdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc09uQmxhY2tsaXN0ID0gYmxhY2tsaXN0ZWRBY3Rpb25zLmluZGV4T2YoYWN0aW9uLnR5cGUpICE9PSAtMTtcbiAgICAgICAgICAgIGNvbnN0IGlzT25XaGl0ZWxpc3QgPSBhY3Rpb25XaGl0ZWxpc3QubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyB0cnVlIC8vIERvbid0IGZpbHRlciBpZiB0aGUgd2hpdGVsaXN0IGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgOiBhY3Rpb25XaGl0ZWxpc3QuaW5kZXhPZihhY3Rpb24udHlwZSkgIT09IC0xO1xuXG4gICAgICAgICAgICAvLyBTa2lwIGJsYWNrbGlzdGVkIGFjdGlvbnNcbiAgICAgICAgICAgIGlmICghaXNPbkJsYWNrbGlzdCAmJiBpc09uV2hpdGVsaXN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2F2ZVN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwYXRjaFNhdmUgPSAoKSA9PiBkaXNwYXRjaChhY3Rpb25TYXZlKHNhdmVTdGF0ZSkpO1xuICAgICAgICAgICAgICAgIGVuZ2luZS5zYXZlKHNhdmVTdGF0ZSkudGhlbihkaXNwYXRjaFNhdmUpLmNhdGNoKHN3YWxsb3cpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH07XG59O1xuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGVNaWRkbGV3YXJlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxTQUFTLE9BQVQsR0FBbUIsRUFBbkI7O0FBR0EsU0FBUywyQkFBVCxDQUFxQyxTQUFyQyxFQUFnRCxTQUFoRCxFQUEyRDtBQUN2RCxjQUNLLE1BREwsQ0FDWSxVQUFDLElBQUQ7ZUFBVSxVQUFVLE9BQVYsQ0FBa0IsSUFBbEIsTUFBNEIsQ0FBQyxDQUFEO0tBQXRDLENBRFosQ0FFSyxPQUZMLENBRWEsVUFBQyxJQUFELEVBQVU7QUFDZixnQkFBUSxJQUFSO0FBQ0ksb0NBQTBCLDBDQUExQixvQ0FESixFQURlO0tBQVYsQ0FGYixDQUR1RDtDQUEzRDs7QUFXQSxTQUFTLGFBQVQsQ0FBdUIsTUFBdkIsRUFBK0I7QUFDM0IsUUFBTSxTQUFTLHNCQUFXLE1BQVgsQ0FBVCxDQURxQjtBQUUzQixRQUFNLFFBQVEsc0JBQVMsTUFBVCxDQUFSLENBRnFCO0FBRzNCLFFBQU0sVUFBVSxTQUFTLE9BQU8sY0FBUCxDQUFzQixNQUF0QixDQUFULENBSFc7O0FBSzNCLFFBQUksQ0FBQyxNQUFELElBQVcsS0FBWCxJQUFvQixPQUFwQixFQUE2QjtBQUM3QixlQUFPLElBQVAsQ0FENkI7S0FBakM7O0FBSUEsUUFBSSxRQUFRLEdBQVIsQ0FBWSxRQUFaLEtBQXlCLFlBQXpCLEVBQXVDO0FBQ3ZDLFlBQUksTUFBSixFQUFZO0FBQ1Isb0JBQVEsSUFBUjtBQUNJLCtOQURKLEVBRFE7U0FBWixNQU9PLElBQUksQ0FBQyxLQUFELEVBQVE7QUFDZixvQkFBUSxJQUFSO0FBQ0ksb0hBQ3lDLE9BRHpDLENBREosQ0FEZTtTQUFaLE1BS0EsSUFBSSxDQUFDLE9BQUQsRUFBVTtBQUNqQixvQkFBUSxJQUFSO0FBQ0ksOEZBREosRUFEaUI7U0FBZDtLQWJYOztBQXFCQSxXQUFPLEtBQVAsQ0E5QjJCO0NBQS9COztrQkFrQ2UsVUFBQyxNQUFELEVBQXdEO1FBQS9DLHdFQUFrQixrQkFBNkI7UUFBekIsd0VBQWtCLGtCQUFPOzs7QUFFbkUsUUFBTSxrREFBeUIscURBQXpCLENBRjZEOztBQUluRSxRQUFJLFFBQVEsR0FBUixDQUFZLFFBQVosS0FBeUIsWUFBekIsRUFBdUM7QUFDdkMsb0NBQTRCLGVBQTVCLEVBQTZDLGVBQTdDLEVBRHVDO0tBQTNDOztBQUlBLFdBQU8sZ0JBQTRCO1lBQXpCLHlCQUF5QjtZQUFmLHlCQUFlOztBQUMvQixlQUFPLFVBQUMsSUFBRDttQkFBVSxVQUFDLE1BQUQsRUFBWTtBQUN6QixvQkFBTSxTQUFTLEtBQUssTUFBTCxDQUFULENBRG1COztBQUd6QixvQkFBSSxDQUFDLGNBQWMsTUFBZCxDQUFELEVBQXdCO0FBQ3hCLDJCQUFPLE1BQVAsQ0FEd0I7aUJBQTVCOztBQUlBLG9CQUFNLGdCQUFnQixtQkFBbUIsT0FBbkIsQ0FBMkIsT0FBTyxJQUFQLENBQTNCLEtBQTRDLENBQUMsQ0FBRCxDQVB6QztBQVF6QixvQkFBTSxnQkFBZ0IsZ0JBQWdCLE1BQWhCLEtBQTJCLENBQTNCLEdBQ2hCO0FBRGdCLGtCQUVoQixnQkFBZ0IsT0FBaEIsQ0FBd0IsT0FBTyxJQUFQLENBQXhCLEtBQXlDLENBQUMsQ0FBRDs7O0FBVnRCLG9CQWFyQixDQUFDLGFBQUQsSUFBa0IsYUFBbEIsRUFBaUM7O0FBQ2pDLDRCQUFNLFlBQVksVUFBWjtBQUNOLDRCQUFNLGFBQWEsbUJBQVcsU0FBWCxDQUFiOztBQUVOLDRCQUFJLFFBQVEsR0FBUixDQUFZLFFBQVosS0FBeUIsWUFBekIsRUFBdUM7QUFDdkMsZ0NBQUksQ0FBQyxXQUFXLElBQVgsRUFBaUI7QUFDbEIsMkNBQVcsSUFBWCxHQUFrQixFQUFsQixDQURrQjs2QkFBdEI7QUFHQSx1Q0FBVyxJQUFYLENBQWdCLE1BQWhCLEdBQXlCLE1BQXpCLENBSnVDO3lCQUEzQzs7QUFPQSw0QkFBTSxlQUFlLFNBQWYsWUFBZTttQ0FBTSxTQUFTLFVBQVQ7eUJBQU47QUFDckIsK0JBQU8sSUFBUCxDQUFZLFNBQVosRUFBdUIsSUFBdkIsQ0FBNEIsWUFBNUIsV0FBZ0QsT0FBaEQ7eUJBWmlDO2lCQUFyQzs7QUFlQSx1QkFBTyxNQUFQLENBNUJ5QjthQUFaO1NBQVYsQ0FEd0I7S0FBNUIsQ0FSNEQ7Q0FBeEQiLCJmaWxlIjoiY3JlYXRlTWlkZGxld2FyZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJ2xvZGFzaC5pc2Z1bmN0aW9uJztcbmltcG9ydCBpc09iamVjdCBmcm9tICdsb2Rhc2guaXNvYmplY3QnO1xuXG5pbXBvcnQgeyBzYXZlIGFzIGFjdGlvblNhdmUgfSBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHsgTE9BRCwgU0FWRSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZnVuY3Rpb24gc3dhbGxvdygpIHtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0Q29uZnVzaW5nRmlsdGVyaW5nKGJsYWNrbGlzdCwgd2hpdGVsaXN0KSB7XG4gICAgYmxhY2tsaXN0XG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHdoaXRlbGlzdC5pbmRleE9mKGl0ZW0pICE9PSAtMSlcbiAgICAgICAgLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybiggLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgYFtyZWR1eC1zdG9yYWdlXSBBY3Rpb24gJHtpdGVtfSBpcyBvbiBCT1RIIGJsYWNrLSBhbmQgd2hpdGVsaXN0LmBcbiAgICAgICAgICAgICAgICArIGAgVGhpcyBpcyBtb3N0IGxpa2VseSBhIG1pc3Rha2UhYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRBY3Rpb24oYWN0aW9uKSB7XG4gICAgY29uc3QgaXNGdW5jID0gaXNGdW5jdGlvbihhY3Rpb24pO1xuICAgIGNvbnN0IGlzT2JqID0gaXNPYmplY3QoYWN0aW9uKTtcbiAgICBjb25zdCBoYXNUeXBlID0gaXNPYmogJiYgYWN0aW9uLmhhc093blByb3BlcnR5KCd0eXBlJyk7XG5cbiAgICBpZiAoIWlzRnVuYyAmJiBpc09iaiAmJiBoYXNUeXBlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChpc0Z1bmMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybiggLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgYFtyZWR1eC1zdG9yYWdlXSBBQ1RJT04gSUdOT1JFRCEgQWN0aW9ucyBzaG91bGQgYmUgb2JqZWN0c2BcbiAgICAgICAgICAgICAgICArIGAgd2l0aCBhIHR5cGUgcHJvcGVydHkgYnV0IHJlY2VpdmVkIGEgZnVuY3Rpb24hIFlvdXJgXG4gICAgICAgICAgICAgICAgKyBgIGZ1bmN0aW9uIHJlc29sdmluZyBtaWRkbGV3YXJlIChlLmcuIHJlZHV4LXRodW5rKSBtdXN0IGJlYFxuICAgICAgICAgICAgICAgICsgYCBwbGFjZWQgQkVGT1JFIHJlZHV4LXN0b3JhZ2UhYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNPYmopIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybiggLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgYFtyZWR1eC1zdG9yYWdlXSBBQ1RJT04gSUdOT1JFRCEgQWN0aW9ucyBzaG91bGQgYmUgb2JqZWN0c2BcbiAgICAgICAgICAgICAgICArIGAgd2l0aCBhIHR5cGUgcHJvcGVydHkgYnV0IHJlY2VpdmVkOiAke2FjdGlvbn1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKCFoYXNUeXBlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGBbcmVkdXgtc3RvcmFnZV0gQUNUSU9OIElHTk9SRUQhIEFjdGlvbiBvYmplY3RzIHNob3VsZCBoYXZlYFxuICAgICAgICAgICAgICAgICsgYCBhIHR5cGUgcHJvcGVydHkuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuXG5leHBvcnQgZGVmYXVsdCAoZW5naW5lLCBhY3Rpb25CbGFja2xpc3QgPSBbXSwgYWN0aW9uV2hpdGVsaXN0ID0gW10pID0+IHtcbiAgICAvLyBBbHNvIGRvbid0IHNhdmUgaWYgd2UgcHJvY2VzcyBvdXIgb3duIGFjdGlvbnNcbiAgICBjb25zdCBibGFja2xpc3RlZEFjdGlvbnMgPSBbLi4uYWN0aW9uQmxhY2tsaXN0LCBMT0FELCBTQVZFXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm5BYm91dENvbmZ1c2luZ0ZpbHRlcmluZyhhY3Rpb25CbGFja2xpc3QsIGFjdGlvbldoaXRlbGlzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh7IGRpc3BhdGNoLCBnZXRTdGF0ZSB9KSA9PiB7XG4gICAgICAgIHJldHVybiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV4dChhY3Rpb24pO1xuXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWRBY3Rpb24oYWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzT25CbGFja2xpc3QgPSBibGFja2xpc3RlZEFjdGlvbnMuaW5kZXhPZihhY3Rpb24udHlwZSkgIT09IC0xO1xuICAgICAgICAgICAgY29uc3QgaXNPbldoaXRlbGlzdCA9IGFjdGlvbldoaXRlbGlzdC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/IHRydWUgLy8gRG9uJ3QgZmlsdGVyIGlmIHRoZSB3aGl0ZWxpc3QgaXMgZW1wdHlcbiAgICAgICAgICAgICAgICA6IGFjdGlvbldoaXRlbGlzdC5pbmRleE9mKGFjdGlvbi50eXBlKSAhPT0gLTE7XG5cbiAgICAgICAgICAgIC8vIFNraXAgYmxhY2tsaXN0ZWQgYWN0aW9uc1xuICAgICAgICAgICAgaWYgKCFpc09uQmxhY2tsaXN0ICYmIGlzT25XaGl0ZWxpc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzYXZlU3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNhdmVBY3Rpb24gPSBhY3Rpb25TYXZlKHNhdmVTdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNhdmVBY3Rpb24ubWV0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUFjdGlvbi5tZXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2F2ZUFjdGlvbi5tZXRhLm9yaWdpbiA9IGFjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwYXRjaFNhdmUgPSAoKSA9PiBkaXNwYXRjaChzYXZlQWN0aW9uKTtcbiAgICAgICAgICAgICAgICBlbmdpbmUuc2F2ZShzYXZlU3RhdGUpLnRoZW4oZGlzcGF0Y2hTYXZlKS5jYXRjaChzd2FsbG93KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9O1xufTtcbiJdfQ== |
@@ -7,20 +7,6 @@ 'use strict'; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
var _reduxStorageMergerSimple = require('redux-storage-merger-simple'); | ||
var _lodash = require('lodash.isfunction'); | ||
var _reduxStorageMergerSimple2 = _interopRequireDefault(_reduxStorageMergerSimple); | ||
var _lodash2 = _interopRequireDefault(_lodash); | ||
var _lodash3 = require('lodash.isobject'); | ||
var _lodash4 = _interopRequireDefault(_lodash3); | ||
var _lodash5 = require('lodash.isarray'); | ||
var _lodash6 = _interopRequireDefault(_lodash5); | ||
var _lodash7 = require('lodash.merge'); | ||
var _lodash8 = _interopRequireDefault(_lodash7); | ||
var _constants = require('./constants'); | ||
@@ -30,58 +16,9 @@ | ||
var fromJS = undefined; | ||
try { | ||
fromJS = require('immutable').fromJS; | ||
} catch (err) { | ||
// ImmutableJS support is optional! | ||
} | ||
exports.default = function (reducer) { | ||
var merger = arguments.length <= 1 || arguments[1] === undefined ? _reduxStorageMergerSimple2.default : arguments[1]; | ||
function myMerge(oldState, newState) { | ||
// Whole state is ImmutableJS? Easiest way to merge | ||
if ((0, _lodash2.default)(oldState.mergeDeep)) { | ||
return oldState.mergeDeep(newState); | ||
} | ||
// newState is ImmutableJS? We can safely use fromJS and merge | ||
if ((0, _lodash2.default)(newState.mergeDeep)) { | ||
return fromJS(oldState).mergeDeep(newState); | ||
} | ||
// Otherwise we need to carefully merge to avoid deprecated warnings from | ||
// ImmutableJS see #8. We inspect only the first object level, as this is | ||
// a common pattern with redux! | ||
var result = _extends({}, oldState); | ||
// Note: Iterate using OLD STYLE and avoid Symbols for old browsers | ||
for (var key in newState) { | ||
if (!newState.hasOwnProperty(key)) { | ||
continue; | ||
} | ||
var value = newState[key]; | ||
// Assign if we don't need to merge at all | ||
if (!result.hasOwnProperty(key)) { | ||
result[key] = (0, _lodash4.default)(value) && !(0, _lodash6.default)(value) ? (0, _lodash8.default)({}, value) : value; | ||
continue; | ||
} | ||
var oldValue = result[key]; | ||
if (!!oldValue && (0, _lodash2.default)(oldValue.mergeDeep)) { | ||
result[key] = oldValue.mergeDeep(value); | ||
} else if (!!value && (0, _lodash2.default)(value.mergeDeep)) { | ||
result[key] = fromJS(oldValue).mergeDeep(value); | ||
} else if ((0, _lodash4.default)(value) && !(0, _lodash6.default)(value)) { | ||
result[key] = (0, _lodash8.default)({}, oldValue, value); | ||
} else { | ||
result[key] = value; | ||
} | ||
} | ||
return result; | ||
} | ||
exports.default = function (reducer) { | ||
return function (state, action) { | ||
return reducer(action.type === _constants.LOAD ? myMerge(state, action.payload) : state, action); | ||
return reducer(action.type === _constants.LOAD ? merger(state, action.payload) : state, action); | ||
}; | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWR1Y2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxJQUFJLGtCQUFKO0FBQ0EsSUFBSTtBQUNBLGFBQVMsUUFBUSxXQUFSLEVBQXFCLE1BQXJCLENBRFQ7Q0FBSixDQUVFLE9BQU8sR0FBUCxFQUFZOztDQUFaOztBQUlGLFNBQVMsT0FBVCxDQUFpQixRQUFqQixFQUEyQixRQUEzQixFQUFxQzs7QUFFakMsUUFBSSxzQkFBVyxTQUFTLFNBQVQsQ0FBZixFQUFvQztBQUNoQyxlQUFPLFNBQVMsU0FBVCxDQUFtQixRQUFuQixDQUFQLENBRGdDO0tBQXBDOzs7QUFGaUMsUUFPN0Isc0JBQVcsU0FBUyxTQUFULENBQWYsRUFBb0M7QUFDaEMsZUFBTyxPQUFPLFFBQVAsRUFBaUIsU0FBakIsQ0FBMkIsUUFBM0IsQ0FBUCxDQURnQztLQUFwQzs7Ozs7QUFQaUMsUUFjM0Isc0JBQWMsU0FBZDs7QUFkMkIsU0FnQjVCLElBQU0sR0FBTixJQUFhLFFBQWxCLEVBQTRCO0FBQ3hCLFlBQUksQ0FBQyxTQUFTLGNBQVQsQ0FBd0IsR0FBeEIsQ0FBRCxFQUErQjtBQUMvQixxQkFEK0I7U0FBbkM7QUFHQSxZQUFNLFFBQVEsU0FBUyxHQUFULENBQVI7OztBQUprQixZQU9wQixDQUFDLE9BQU8sY0FBUCxDQUFzQixHQUF0QixDQUFELEVBQTZCO0FBQzdCLG1CQUFPLEdBQVAsSUFBYyxzQkFBUyxLQUFULEtBQW1CLENBQUMsc0JBQVEsS0FBUixDQUFELEdBQzNCLHNCQUFNLEVBQU4sRUFBVSxLQUFWLENBRFEsR0FFUixLQUZRLENBRGU7QUFJN0IscUJBSjZCO1NBQWpDOztBQU9BLFlBQU0sV0FBVyxPQUFPLEdBQVAsQ0FBWCxDQWRrQjs7QUFnQnhCLFlBQUksQ0FBQyxDQUFDLFFBQUQsSUFBYSxzQkFBVyxTQUFTLFNBQVQsQ0FBekIsRUFBOEM7QUFDOUMsbUJBQU8sR0FBUCxJQUFjLFNBQVMsU0FBVCxDQUFtQixLQUFuQixDQUFkLENBRDhDO1NBQWxELE1BRU8sSUFBSSxDQUFDLENBQUMsS0FBRCxJQUFVLHNCQUFXLE1BQU0sU0FBTixDQUF0QixFQUF3QztBQUMvQyxtQkFBTyxHQUFQLElBQWMsT0FBTyxRQUFQLEVBQWlCLFNBQWpCLENBQTJCLEtBQTNCLENBQWQsQ0FEK0M7U0FBNUMsTUFFQSxJQUFJLHNCQUFTLEtBQVQsS0FBbUIsQ0FBQyxzQkFBUSxLQUFSLENBQUQsRUFBaUI7QUFDM0MsbUJBQU8sR0FBUCxJQUFjLHNCQUFNLEVBQU4sRUFBVSxRQUFWLEVBQW9CLEtBQXBCLENBQWQsQ0FEMkM7U0FBeEMsTUFFQTtBQUNILG1CQUFPLEdBQVAsSUFBYyxLQUFkLENBREc7U0FGQTtLQXBCWDs7QUEyQkEsV0FBTyxNQUFQLENBM0NpQztDQUFyQzs7a0JBOENlLFVBQUMsT0FBRCxFQUFhO0FBQ3hCLFdBQU8sVUFBQyxLQUFELEVBQVEsTUFBUjtlQUFtQixRQUN0QixPQUFPLElBQVAsdUJBQ00sUUFBUSxLQUFSLEVBQWUsT0FBTyxPQUFQLENBRHJCLEdBRU0sS0FGTixFQUdBLE1BSnNCO0tBQW5CLENBRGlCO0NBQWIiLCJmaWxlIjoicmVkdWNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJ2xvZGFzaC5pc2Z1bmN0aW9uJztcbmltcG9ydCBpc09iamVjdCBmcm9tICdsb2Rhc2guaXNvYmplY3QnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnbG9kYXNoLmlzYXJyYXknO1xuaW1wb3J0IG1lcmdlIGZyb20gJ2xvZGFzaC5tZXJnZSc7XG5cbmltcG9ydCB7IExPQUQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmxldCBmcm9tSlM7XG50cnkge1xuICAgIGZyb21KUyA9IHJlcXVpcmUoJ2ltbXV0YWJsZScpLmZyb21KUztcbn0gY2F0Y2ggKGVycikge1xuICAgIC8vIEltbXV0YWJsZUpTIHN1cHBvcnQgaXMgb3B0aW9uYWwhXG59XG5cbmZ1bmN0aW9uIG15TWVyZ2Uob2xkU3RhdGUsIG5ld1N0YXRlKSB7XG4gICAgLy8gV2hvbGUgc3RhdGUgaXMgSW1tdXRhYmxlSlM/IEVhc2llc3Qgd2F5IHRvIG1lcmdlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2xkU3RhdGUubWVyZ2VEZWVwKSkge1xuICAgICAgICByZXR1cm4gb2xkU3RhdGUubWVyZ2VEZWVwKG5ld1N0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBuZXdTdGF0ZSBpcyBJbW11dGFibGVKUz8gV2UgY2FuIHNhZmVseSB1c2UgZnJvbUpTIGFuZCBtZXJnZVxuICAgIGlmIChpc0Z1bmN0aW9uKG5ld1N0YXRlLm1lcmdlRGVlcCkpIHtcbiAgICAgICAgcmV0dXJuIGZyb21KUyhvbGRTdGF0ZSkubWVyZ2VEZWVwKG5ld1N0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2Ugd2UgbmVlZCB0byBjYXJlZnVsbHkgbWVyZ2UgdG8gYXZvaWQgZGVwcmVjYXRlZCB3YXJuaW5ncyBmcm9tXG4gICAgLy8gSW1tdXRhYmxlSlMgc2VlICM4LiBXZSBpbnNwZWN0IG9ubHkgdGhlIGZpcnN0IG9iamVjdCBsZXZlbCwgYXMgdGhpcyBpc1xuICAgIC8vIGEgY29tbW9uIHBhdHRlcm4gd2l0aCByZWR1eCFcbiAgICBjb25zdCByZXN1bHQgPSB7IC4uLm9sZFN0YXRlIH07XG4gICAgLy8gTm90ZTogSXRlcmF0ZSB1c2luZyBPTEQgU1RZTEUgYW5kIGF2b2lkIFN5bWJvbHMgZm9yIG9sZCBicm93c2Vyc1xuICAgIGZvciAoY29uc3Qga2V5IGluIG5ld1N0YXRlKSB7XG4gICAgICAgIGlmICghbmV3U3RhdGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSBuZXdTdGF0ZVtrZXldO1xuXG4gICAgICAgIC8vIEFzc2lnbiBpZiB3ZSBkb24ndCBuZWVkIHRvIG1lcmdlIGF0IGFsbFxuICAgICAgICBpZiAoIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/IG1lcmdlKHt9LCB2YWx1ZSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHJlc3VsdFtrZXldO1xuXG4gICAgICAgIGlmICghIW9sZFZhbHVlICYmIGlzRnVuY3Rpb24ob2xkVmFsdWUubWVyZ2VEZWVwKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBvbGRWYWx1ZS5tZXJnZURlZXAodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5tZXJnZURlZXApKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IGZyb21KUyhvbGRWYWx1ZSkubWVyZ2VEZWVwKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCBvbGRWYWx1ZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChyZWR1Y2VyKSA9PiB7XG4gICAgcmV0dXJuIChzdGF0ZSwgYWN0aW9uKSA9PiByZWR1Y2VyKFxuICAgICAgICBhY3Rpb24udHlwZSA9PT0gTE9BRFxuICAgICAgICAgICAgPyBteU1lcmdlKHN0YXRlLCBhY3Rpb24ucGF5bG9hZClcbiAgICAgICAgICAgIDogc3RhdGUsXG4gICAgICAgIGFjdGlvblxuICAgICk7XG59O1xuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWR1Y2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O2tCQUllLFVBQUMsT0FBRCxFQUFvQztRQUExQixpSEFBMEI7O0FBQy9DLFdBQU8sVUFBQyxLQUFELEVBQVEsTUFBUjtlQUFtQixRQUN0QixPQUFPLElBQVAsdUJBQ00sT0FBTyxLQUFQLEVBQWMsT0FBTyxPQUFQLENBRHBCLEdBRU0sS0FGTixFQUdBLE1BSnNCO0tBQW5CLENBRHdDO0NBQXBDIiwiZmlsZSI6InJlZHVjZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2ltcGxlTWVyZ2VyIGZyb20gJ3JlZHV4LXN0b3JhZ2UtbWVyZ2VyLXNpbXBsZSc7XG5cbmltcG9ydCB7IExPQUQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IChyZWR1Y2VyLCBtZXJnZXIgPSBzaW1wbGVNZXJnZXIpID0+IHtcbiAgICByZXR1cm4gKHN0YXRlLCBhY3Rpb24pID0+IHJlZHVjZXIoXG4gICAgICAgIGFjdGlvbi50eXBlID09PSBMT0FEXG4gICAgICAgICAgICA/IG1lcmdlcihzdGF0ZSwgYWN0aW9uLnBheWxvYWQpXG4gICAgICAgICAgICA6IHN0YXRlLFxuICAgICAgICBhY3Rpb25cbiAgICApO1xufTtcbiJdfQ== |
{ | ||
"name": "redux-storage", | ||
"version": "3.0.1", | ||
"version": "4.0.0", | ||
"description": "Persistence layer for redux with flexible backends", | ||
@@ -44,3 +44,2 @@ "main": "build/index.js", | ||
"eslint-plugin-mocha-only": "0.0.3", | ||
"immutable": "^3.7.6", | ||
"mocca": "^0.3.0", | ||
@@ -50,8 +49,7 @@ "release-it": "^2.3.1" | ||
"dependencies": { | ||
"lodash.isarray": "^4.0.0", | ||
"lodash.isfunction": "^3.0.7", | ||
"lodash.isobject": "^3.0.2", | ||
"lodash.merge": "^4.0.2", | ||
"loose-envify": "^1.1.0", | ||
"redux-actions": "^0.9.0" | ||
"redux-actions": "^0.9.0", | ||
"redux-storage-merger-simple": "^1.0.1" | ||
}, | ||
@@ -58,0 +56,0 @@ "peerDependencies": { |
@@ -20,2 +20,6 @@ # [redux-storage][] | ||
* [reactNativeAsyncStorage][]: based on `react-native/AsyncStorage` | ||
* Flexible state merger functions | ||
* [simple][merger-simple]: merge plain old JS structures (default) | ||
* [immutablejs][merger-immutablejs]: merge plain old JS **and** [Immutable][] | ||
objects | ||
* Storage engines can be async | ||
@@ -53,2 +57,3 @@ * Load and save actions that can be observed | ||
// action and merge in the provided state :) | ||
// Note: A cusom merger function can be passed as second argument | ||
const reducer = storage.reducer(combineReducers(reducers)); | ||
@@ -96,8 +101,9 @@ | ||
### Engines & Decorators | ||
### Engines, Decorators & Mergers | ||
Both are published as own packages on npm. But as a convention all engines share | ||
the keyword [redux-storage-engine][npm-engine] and decorators can be found with | ||
[redux-storage-decorator][npm-decorator]. So it's pretty trivial to find all | ||
the additions to [redux-storage][] you need | ||
They all are published as own packages on npm. But as a convention all engines | ||
share the keyword [redux-storage-engine][npm-engine], decorators can be found | ||
with [redux-storage-decorator][npm-decorator] and mergers with | ||
[redux-storage-merger][npm-merger]. So it's pretty trivial to find all | ||
the additions to [redux-storage][] you need :smile: | ||
@@ -177,4 +183,7 @@ ### Actions | ||
[merger-simple]: https://github.com/michaelcontento/redux-storage-merger-simple | ||
[merger-immutablejs]: https://github.com/michaelcontento/redux-storage-merger-immutablejs | ||
[npm-engine]: https://www.npmjs.com/browse/keyword/redux-storage-engine | ||
[npm-decorator]: https://www.npmjs.com/browse/keyword/redux-storage-decorator | ||
[npm-merger]: https://www.npmjs.com/browse/keyword/redux-storage-merger | ||
[Redux]: https://github.com/gaearon/redux | ||
@@ -181,0 +190,0 @@ [Immutable]: https://github.com/facebook/immutable-js |
@@ -79,3 +79,12 @@ import isFunction from 'lodash.isfunction'; | ||
const saveState = getState(); | ||
const dispatchSave = () => dispatch(actionSave(saveState)); | ||
const saveAction = actionSave(saveState); | ||
if (process.env.NODE_ENV !== 'production') { | ||
if (!saveAction.meta) { | ||
saveAction.meta = {}; | ||
} | ||
saveAction.meta.origin = action; | ||
} | ||
const dispatchSave = () => dispatch(saveAction); | ||
engine.save(saveState).then(dispatchSave).catch(swallow); | ||
@@ -82,0 +91,0 @@ } |
@@ -1,65 +0,9 @@ | ||
import isFunction from 'lodash.isfunction'; | ||
import isObject from 'lodash.isobject'; | ||
import isArray from 'lodash.isarray'; | ||
import merge from 'lodash.merge'; | ||
import simpleMerger from 'redux-storage-merger-simple'; | ||
import { LOAD } from './constants'; | ||
let fromJS; | ||
try { | ||
fromJS = require('immutable').fromJS; | ||
} catch (err) { | ||
// ImmutableJS support is optional! | ||
} | ||
function myMerge(oldState, newState) { | ||
// Whole state is ImmutableJS? Easiest way to merge | ||
if (isFunction(oldState.mergeDeep)) { | ||
return oldState.mergeDeep(newState); | ||
} | ||
// newState is ImmutableJS? We can safely use fromJS and merge | ||
if (isFunction(newState.mergeDeep)) { | ||
return fromJS(oldState).mergeDeep(newState); | ||
} | ||
// Otherwise we need to carefully merge to avoid deprecated warnings from | ||
// ImmutableJS see #8. We inspect only the first object level, as this is | ||
// a common pattern with redux! | ||
const result = { ...oldState }; | ||
// Note: Iterate using OLD STYLE and avoid Symbols for old browsers | ||
for (const key in newState) { | ||
if (!newState.hasOwnProperty(key)) { | ||
continue; | ||
} | ||
const value = newState[key]; | ||
// Assign if we don't need to merge at all | ||
if (!result.hasOwnProperty(key)) { | ||
result[key] = isObject(value) && !isArray(value) | ||
? merge({}, value) | ||
: value; | ||
continue; | ||
} | ||
const oldValue = result[key]; | ||
if (!!oldValue && isFunction(oldValue.mergeDeep)) { | ||
result[key] = oldValue.mergeDeep(value); | ||
} else if (!!value && isFunction(value.mergeDeep)) { | ||
result[key] = fromJS(oldValue).mergeDeep(value); | ||
} else if (isObject(value) && !isArray(value)) { | ||
result[key] = merge({}, oldValue, value); | ||
} else { | ||
result[key] = value; | ||
} | ||
} | ||
return result; | ||
} | ||
export default (reducer) => { | ||
export default (reducer, merger = simpleMerger) => { | ||
return (state, action) => reducer( | ||
action.type === LOAD | ||
? myMerge(state, action.payload) | ||
? merger(state, action.payload) | ||
: state, | ||
@@ -66,0 +10,0 @@ action |
6
9
198
34489
290
6
+ Addedredux-storage-merger-simple@1.0.5(transitive)
- Removedlodash.isarray@^4.0.0
- Removedlodash.merge@^4.0.2
- Removedlodash.isarray@4.0.0(transitive)