Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 6x 6x 6x 6x 6x 4x 6x 6x 4x 2x 6x 6x 6x 6x 6x 6x 6x 6x 5x 1x | import Future from 'fibers/future' import executeHooksWithArgs from './executeHooksWithArgs' import { sanitizeErrorMessage } from './utils' /** * wraps a function into a Fiber ready context to enable sync execution and hooks * @param {Function} fn function to be executed * @param {String} commandName name of that function * @param {Function[]} beforeCommand method to be executed before calling the actual function * @param {Function[]} afterCommand method to be executed after calling the actual function * @return {Function} actual wrapped function */ export default function wrapCommand (commandName, fn) { /** * helper method that runs the command with before/afterCommand hook */ const runCommand = async function (...args) { // save error for getting full stack in case of failure // should be before any async calls const stackError = new Error() await executeHooksWithArgs( this.options.beforeCommand, [commandName, args] ) let commandResult let commandError try { commandResult = await fn.apply(this, args) } catch (err) { commandError = sanitizeErrorMessage(err, stackError) } await executeHooksWithArgs( this.options.afterCommand, [commandName, args, commandResult, commandError] ) if (commandError) { throw commandError } return commandResult } return function (...args) { const future = new Future() const result = runCommand.apply(this, args) result.then(::future.return, ::future.throw) try { return future.wait() } catch (e) { /** * in case some 3rd party lib rejects without bundling into an error */ Iif (typeof e === 'string') { throw new Error(e) } /** * in case we run commands where no fiber function was used * e.g. when we call deleteSession */ if (e.message.includes('Can\'t wait without a fiber')) { return result } throw e } } } |