@turbox3d/reactivity
Version:
Large-scale reactive state management library
59 lines (58 loc) • 2.88 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.applyMiddleware = applyMiddleware;
exports.middlewares = void 0;
exports.use = use;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _shared = require("@turbox3d/shared");
var _action = require("./action");
var _store = require("./store");
var _collector = require("./collector");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var middlewares = exports.middlewares = [];
/**
* Add middleware.
*/
function use(middleware) {
var inner = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var arr = Array.isArray(middleware) ? middleware : [middleware];
if (inner) {
middlewares.unshift.apply(middlewares, (0, _toConsumableArray2["default"])(arr));
} else {
middlewares.push.apply(middlewares, (0, _toConsumableArray2["default"])(arr));
}
}
function applyMiddleware() {
return function (createStore) {
var store = createStore();
var _dispatch = function dispatch() {
(0, _shared.fail)('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');
};
var exposedMethod = {
getActionChain: function getActionChain() {
if (_action.Action.context) {
return _action.Action.context.historyNode.actionChain.slice();
}
return _store.actionTypeChain.slice();
},
getDependencyGraph: function getDependencyGraph() {
return new Map(_collector.depCollector.dependencyGraph);
},
dispatch: function dispatch() {
return _dispatch.apply(void 0, arguments);
}
};
var runnerChain = middlewares.map(function (middleware) {
return middleware(exposedMethod);
});
_dispatch = _shared.compose.apply(void 0, (0, _toConsumableArray2["default"])(runnerChain))(store.dispatch);
return _objectSpread(_objectSpread({}, store), {}, {
dispatch: _dispatch
});
};
}