UNPKG

action-store

Version:

Action store a la redux

98 lines (71 loc) 2.61 kB
'use strict'; /** * Module dependencies. */ Object.defineProperty(exports, "__esModule", { value: true }); 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 _constants = require('./constants'); var _context = require('./context'); var _context2 = _interopRequireDefault(_context); var _lodash = require('lodash'); var _freeze = require('./freeze'); var _freeze2 = _interopRequireDefault(_freeze); var _vo = require('vo'); var _vo2 = _interopRequireDefault(_vo); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Module constants. */ var isArray = Array.isArray; /** * Resolve promises, arrays, objects, etc. */ exports.default = function (options) { return function (store) { var getContext = (0, _context2.default)(_extends({}, options, { store: store })); var getState = function getState() { return store.getState(); }; return function (next) { return function (args) { args = isArray(args) ? args : [args]; function apply(action, fn) { var version = action.version; var payload = action.payload; var id = action.id = action.id || payload.id; var context = getContext(id); var save = function save() { return context.save(action).then(function (action) { var oldState = context.state; next(action); fn(null, context.state); var newState = context.state; return (0, _lodash.isEqual)(oldState, newState) ? action : context.publish(action); }); }; if (_constants.EMPTY === context.status) { return context.load(save); } if (_constants.LOADING === context.status) { return context.enqueue(save); } if ('undefined' !== typeof version) { next(action); return fn(null, context.state); } return save(); } var actions = args.map(function (action) { return isArray(action) ? action.map(function (a) { return (0, _vo2.default)(a, apply); }) : (0, _vo2.default)(action, apply); }); return _vo2.default.stack.apply(actions)((0, _freeze2.default)(getState())).then(function () { return getState(); }); }; }; }; };