UNPKG

@sap/cli-core

Version:

Command-Line Interface (CLI) Core Module

28 lines (27 loc) 1.71 kB
/* eslint-disable no-await-in-loop */ import { checkOptions } from "./utils.js"; import { create as createOrHandler } from "../or.js"; import { create as createNextHandler } from "../next.js"; import { create as createCheckOptionsExistenceHandler } from "../checkOptionsExistence.js"; import { create as createFileHandler } from "./file.js"; import { create as createOptionHandler } from "./option.js"; import { create as createDummyHandler } from "../succeed.js"; import { create as createFailAlwaysHandler } from "../fail.js"; import { create as createEnvHandler } from "./env.js"; const createHandler = (use, option, handler) => createNextHandler("commands.handler.options", createCheckOptionsExistenceHandler(option), use ? handler : createDummyHandler()); export const create = (options, { readEnv, readFile, readOptions } = { readEnv: true, readFile: true, readOptions: true, }, promptAlways = false, throwIfHandlersFailed = false) => async (command) => { const intOptions = Array.isArray(options) ? options : [options]; await checkOptions(intOptions, command); return async () => { for (const option of intOptions) { const handler = createOrHandler("commands.handler.options$outer", createCheckOptionsExistenceHandler(option, false), createOrHandler("commands.handler.options$inner", createHandler(readEnv, option, createEnvHandler(option)), createHandler(readFile, option, createFileHandler(option)), createHandler(readOptions, option, createOptionHandler(option, promptAlways))), throwIfHandlersFailed ? createFailAlwaysHandler() : createDummyHandler()); await (await handler(command))(); } }; };