@sap/cli-core
Version:
Command-Line Interface (CLI) Core Module
28 lines (27 loc) • 1.71 kB
JavaScript
/* 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))();
}
};
};