UNPKG

yf-fpm-server

Version:

yf fast-platform api server

71 lines (60 loc) 1.96 kB
'use strict'; 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); } } };