| | |
| | | import { argsert } from './argsert.js'; |
| | | import { isPromise } from './utils/is-promise.js'; |
| | | export function globalMiddlewareFactory(globalMiddleware, context) { |
| | | "use strict"; |
| | | Object.defineProperty(exports, "__esModule", { value: true }); |
| | | exports.applyMiddleware = exports.commandMiddlewareFactory = exports.globalMiddlewareFactory = void 0; |
| | | const argsert_1 = require("./argsert"); |
| | | const is_promise_1 = require("./is-promise"); |
| | | function globalMiddlewareFactory(globalMiddleware, context) { |
| | | return function (callback, applyBeforeValidation = false) { |
| | | argsert('<array|function> [boolean]', [callback, applyBeforeValidation], arguments.length); |
| | | argsert_1.argsert('<array|function> [boolean]', [callback, applyBeforeValidation], arguments.length); |
| | | if (Array.isArray(callback)) { |
| | | for (let i = 0; i < callback.length; i++) { |
| | | if (typeof callback[i] !== 'function') { |
| | |
| | | return context; |
| | | }; |
| | | } |
| | | export function commandMiddlewareFactory(commandMiddleware) { |
| | | exports.globalMiddlewareFactory = globalMiddlewareFactory; |
| | | function commandMiddlewareFactory(commandMiddleware) { |
| | | if (!commandMiddleware) |
| | | return []; |
| | | return commandMiddleware.map(middleware => { |
| | |
| | | return middleware; |
| | | }); |
| | | } |
| | | export function applyMiddleware(argv, yargs, middlewares, beforeValidation) { |
| | | exports.commandMiddlewareFactory = commandMiddlewareFactory; |
| | | function applyMiddleware(argv, yargs, middlewares, beforeValidation) { |
| | | const beforeValidationError = new Error('middleware cannot return a promise when applyBeforeValidation is true'); |
| | | return middlewares.reduce((acc, middleware) => { |
| | | return middlewares |
| | | .reduce((acc, middleware) => { |
| | | if (middleware.applyBeforeValidation !== beforeValidation) { |
| | | return acc; |
| | | } |
| | | if (isPromise(acc)) { |
| | | if (is_promise_1.isPromise(acc)) { |
| | | return acc |
| | | .then(initialObj => Promise.all([ |
| | | initialObj, |
| | | middleware(initialObj, yargs), |
| | | ])) |
| | | .then(initialObj => Promise.all([initialObj, middleware(initialObj, yargs)])) |
| | | .then(([initialObj, middlewareObj]) => Object.assign(initialObj, middlewareObj)); |
| | | } |
| | | else { |
| | | const result = middleware(acc, yargs); |
| | | if (beforeValidation && isPromise(result)) |
| | | if (beforeValidation && is_promise_1.isPromise(result)) |
| | | throw beforeValidationError; |
| | | return isPromise(result) |
| | | return is_promise_1.isPromise(result) |
| | | ? result.then(middlewareObj => Object.assign(acc, middlewareObj)) |
| | | : Object.assign(acc, result); |
| | | } |
| | | }, argv); |
| | | } |
| | | exports.applyMiddleware = applyMiddleware; |