UNPKG

@sap/cli-core

Version:

Command-Line Interface (CLI) Core Module

40 lines (39 loc) 1.42 kB
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 */