yf-fpm-server
Version:
yf fast-platform api server
71 lines (60 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _exception = require('./exception.js');
var _exception2 = _interopRequireDefault(_exception);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = class {
constructor() {
this._hooks = {};
}
addHook(hookName, hookHandler, v, priority) {
priority = priority || 100;
if (!v) {
throw new _exception2.default(_exception.E.System.HOOK_VERSION_REQUIRED);
}
if (!_lodash2.default.isFunction(hookHandler)) {
throw new _exception2.default(_exception.E.System.HOOK_HANDLER_REQUIRED);
}
let versionArray = [];
if (_lodash2.default.isArray(v)) {
versionArray = v;
} else if (_lodash2.default.isString(v)) {
versionArray.push(v);
}
_lodash2.default.map(versionArray, v => {
let _list = this._hooks[hookName + '@' + v] || [];
_list.push({ priority: priority, handler: hookHandler });
_list = _lodash2.default.sortBy(_list, 'priority');
this._hooks[hookName + '@' + v] = _list;
});
return true;
}
addAfterHook(hookName, hookHandler, v, priority) {
return this.addHook('after_' + hookName, hookHandler, v, priority);
}
addBeforeHook(hookName, hookHandler, v, priority) {
return this.addHook('before_' + hookName, hookHandler, v, priority);
}
async runHook(hookName, input, v, ctx) {
const _list = this._hooks[hookName + '@' + v] || [];
if (_lodash2.default.isEmpty(_list)) {
return [];
}
const len = _list.length;
const results = [];
try {
for (let i = 0; i < len; i++) {
let h = _list[i];
let result = await h.handler(input, ctx);
results[i] = result;
}
return results;
} catch (err) {
return Promise.reject(err);
}
}
};