@sap/cli-core
Version:
Command-Line Interface (CLI) Core Module
40 lines (39 loc) • 1.42 kB
JavaScript
import { get } from "../../logger/index.js";
function getLogger(origin) {
return get(`commands.handler.or:${origin}`);
}
export 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");
}
};
};
};
/* jscpd:ignore-end */