koa-quick-service
Version:
start koa service quickly
334 lines (260 loc) • 12 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _mid = require('./mid.wares');
var _asyncEventsListener = require('async-events-listener');
var _asyncEventsListener2 = _interopRequireDefault(_asyncEventsListener);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Created by evio on 2017/1/26.
*/
var EngineProcess = function (_EventEmitter) {
(0, _inherits3.default)(EngineProcess, _EventEmitter);
function EngineProcess() {
(0, _classCallCheck3.default)(this, EngineProcess);
var _this = (0, _possibleConstructorReturn3.default)(this, (EngineProcess.__proto__ || (0, _getPrototypeOf2.default)(EngineProcess)).call(this));
_this.stacks = {};
_this.children = [];
for (var _len = arguments.length, options = Array(_len), _key = 0; _key < _len; _key++) {
options[_key] = arguments[_key];
}
for (var i = 0; i < options.length; i++) {
if (!options[i].process) {
throw new Error('EngineProcess子组件缺少process方法');
}
_this.children.push(options[i].process(_this));
}
return _this;
}
(0, _createClass3.default)(EngineProcess, [{
key: 'init',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(key) {
var keys, type, name, engine, options;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
keys = key.split(':'), type = keys[0], name = keys[1];
engine = _mid.Engines[type];
_context.prev = 2;
if (!engine) {
_context.next = 9;
break;
}
options = engine.get(name);
if (!(options && engine.value)) {
_context.next = 9;
break;
}
_context.next = 8;
return engine.value.create(options);
case 8:
return _context.abrupt('return', _context.sent);
case 9:
_context.next = 18;
break;
case 11:
_context.prev = 11;
_context.t0 = _context['catch'](2);
_context.next = 15;
return this.emit('error', _context.t0);
case 15:
_context.next = 17;
return this.destroy();
case 17:
throw _context.t0;
case 18:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[2, 11]]);
}));
function init(_x) {
return _ref.apply(this, arguments);
}
return init;
}()
}, {
key: 'create',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
for (var _len2 = arguments.length, keys = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
keys[_key2] = arguments[_key2];
}
var stacks, i, name;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
stacks = [];
i = 0;
case 2:
if (!(i < keys.length)) {
_context2.next = 12;
break;
}
name = keys[i];
if (this.stacks[name]) {
_context2.next = 8;
break;
}
_context2.next = 7;
return this.init(name);
case 7:
this.stacks[name] = _context2.sent;
case 8:
stacks.push(this.stacks[name]);
case 9:
i++;
_context2.next = 2;
break;
case 12:
return _context2.abrupt('return', stacks);
case 13:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
function create() {
return _ref2.apply(this, arguments);
}
return create;
}()
}, {
key: 'tryCatch',
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(callback) {
var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var res;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
if (!(typeof callback === 'function')) {
_context3.next = 18;
break;
}
_context3.prev = 1;
args = this.children.concat(args);
_context3.next = 5;
return callback.apply(this, args);
case 5:
res = _context3.sent;
_context3.next = 8;
return this.destroy();
case 8:
return _context3.abrupt('return', res);
case 11:
_context3.prev = 11;
_context3.t0 = _context3['catch'](1);
_context3.next = 15;
return this.emit('error', _context3.t0);
case 15:
_context3.next = 17;
return this.destroy();
case 17:
throw _context3.t0;
case 18:
case 'end':
return _context3.stop();
}
}
}, _callee3, this, [[1, 11]]);
}));
function tryCatch(_x2) {
return _ref3.apply(this, arguments);
}
return tryCatch;
}()
}, {
key: 'destroy',
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() {
var i;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.t0 = _regenerator2.default.keys(this.stacks);
case 1:
if ((_context4.t1 = _context4.t0()).done) {
_context4.next = 7;
break;
}
i = _context4.t1.value;
_context4.next = 5;
return this.stacks[i].end();
case 5:
_context4.next = 1;
break;
case 7:
this.stacks = {};
case 8:
case 'end':
return _context4.stop();
}
}
}, _callee4, this);
}));
function destroy() {
return _ref4.apply(this, arguments);
}
return destroy;
}()
}], [{
key: 'create',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(keys, callback) {
var Processor, args;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
if (typeof keys === 'string') {
keys = [keys];
}
Processor = new EngineProcess();
_context5.next = 4;
return Processor.create(keys);
case 4:
args = _context5.sent;
_context5.next = 7;
return Processor.tryCatch(callback, args);
case 7:
return _context5.abrupt('return', _context5.sent);
case 8:
case 'end':
return _context5.stop();
}
}
}, _callee5, this);
}));
function create(_x4, _x5) {
return _ref5.apply(this, arguments);
}
return create;
}()
}]);
return EngineProcess;
}(_asyncEventsListener2.default);
exports.default = EngineProcess;
module.exports = exports['default'];