@sap/cli-core
Version:
Command-Line Interface (CLI) Core Module
44 lines (43 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.create = void 0;
const logger_1 = require("../../logger");
function getLogger(origin) {
return (0, logger_1.get)(`commands.handler.or:${origin}`);
}
const create = (origin, ...handlers) => {
const { stack } = new Error();
return async (command) => {
const { trace } = getLogger(origin);
trace(`or:${origin}: preparing handlers`);
const commandHandlers = [];
for (const handler of handlers) {
// eslint-disable-next-line no-await-in-loop
commandHandlers.push(await handler(command));
}
return async (...args) => {
const { debug } = getLogger(origin);
trace(`or:${origin}: processing handlers`);
let handlerFailed = false;
for (const handler of commandHandlers) {
handlerFailed = false;
try {
// eslint-disable-next-line no-await-in-loop
await handler(...args);
trace(`handler succeeded, exiting loop`);
break;
}
catch (err) {
debug(`handler failed`, err.stack || err);
handlerFailed = true;
}
}
if (handlerFailed) {
trace("handler was created from:", stack);
throw new Error("all handlers failed");
}
};
};
};
exports.create = create;
/* jscpd:ignore-end */