s2s
Version:
Source To Source
67 lines (52 loc) • 1.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = handlePlugins;
var _keyLocker = _interopRequireDefault(require("key-locker"));
var _utils = require("../utils");
var _some = _interopRequireDefault(require("../utils/some"));
var _handlePlugin = require("./handle-plugin");
var _selectHandler = require("./select-handler");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function validate(plugin, eventPath, eventType) {
if (typeof plugin.test === 'string' || Array.isArray(plugin.test)) {
return (0, _some.default)(eventPath, plugin.test);
} else if (!plugin.test.test(eventPath)) {
return false;
}
if (plugin.only && !plugin.only.includes(eventType)) {
return false;
}
return true;
}
const lock = new _keyLocker.default();
function handlePlugins(eventPath, eventType, config = {}) {
if (lock.has(eventPath)) {
return;
}
const {
plugins = [],
afterHooks: hooks = [],
handlerMapper = {}
} = config;
for (const plugin of plugins) {
if (validate(plugin, eventPath, eventType)) {
lock.add(eventPath);
try {
const handler = (0, _selectHandler.selectHandler)(handlerMapper, plugin.handler, eventPath);
(0, _handlePlugin.handlePlugin)(handler, {
eventPath,
plugin,
hooks
});
} catch (error) {
if (error.code === 'ENOENT') {
console.error(error.message);
} else {
console.error((0, _utils.toErrorStack)(error));
}
}
}
}
}