decision
Version:
Decision System Based on Event System and Alleyway Grammer
130 lines (103 loc) • 3.91 kB
JavaScript
/********************************************************************
*
* Decision System Based on Event System and Alleyway Grammer
*
********************************************************************/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _this = this;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _decisionChain = require("./decisionChain");
var _decisionChain2 = _interopRequireDefault(_decisionChain);
var _alleyway = require("alleyway");
var _alleyway2 = _interopRequireDefault(_alleyway);
var _makeDecisions = require("./makeDecisions");
var _makeDecisions2 = _interopRequireDefault(_makeDecisions);
var _marmoset = require("marmoset");
var _marmoset2 = _interopRequireDefault(_marmoset);
var makeAction = function makeAction(name, action, marmoset) {
return function callee$1$0() {
for (var _len = arguments.length, y = Array(_len), _key = 0; _key < _len; _key++) {
y[_key] = arguments[_key];
}
var res;
return regeneratorRuntime.async(function callee$1$0$(context$2$0) {
while (1) switch (context$2$0.prev = context$2$0.next) {
case 0:
context$2$0.next = 2;
return regeneratorRuntime.awrap(action.apply(undefined, y));
case 2:
res = context$2$0.sent;
// action done
marmoset.trigger("system", "actionDone", {
name: name,
res: res
});
return context$2$0.abrupt("return", res);
case 5:
case "end":
return context$2$0.stop();
}
}, null, _this);
};
};
var getPrintEventData = function getPrintEventData(data) {
if (!data || typeof data !== "object") return data;
var res = "";
for (var _name in data) {
res += _name + ":" + data[_name] + " ; ";
}
return res;
};
exports["default"] = function (opts) {
var actionMap = {};
var alleyway = (0, _alleyway2["default"])(actionMap);
var marmoset = (0, _marmoset2["default"])({
logEvent: opts && opts.logEvent
});
var loadActions = function loadActions(config) {
var _loop = function (_name2) {
var action = config[_name2];
// wrap action
actionMap[_name2] = makeAction(_name2, action, marmoset);
// specify actionDone
// actionDone>${ name }
marmoset.createEventByRoute(function (m) {
m().happen("system", "actionDone").inCase(function (e) {
return e.data.name === _name2;
}).trigger("system", _name2).data(function (e) {
return e.data.res;
});
});
};
for (var _name2 in config) {
_loop(_name2);
}
// after loading actions
alleyway = (0, _alleyway2["default"])(actionMap);
};
var loadDecisions = function loadDecisions(decision) {
var chain = (0, _decisionChain2["default"])(marmoset, alleyway);
var factory = chain.createFactory();
decision(factory);
(0, _makeDecisions2["default"])(chain.getDecisions(), marmoset, alleyway);
};
var loadEvents = function loadEvents(config) {
for (var channel in config) {
var paths = config[channel];
for (var i = 0; i < paths.length; i++) {
var watch = paths[i];
watch(marmoset, channel);
}
}
};
return {
loadEvents: loadEvents,
loadActions: loadActions,
loadDecisions: loadDecisions,
marmoset: marmoset // export event system
};
};
module.exports = exports["default"];