dsl-toolkit/dsl-toolkit

View on GitHub
packages/dsl-framework/src/core/command-parser/extractCallbackData.js

Summary

Maintainability
B
5 hrs
Test Coverage
A
100%
/* eslint-disable block-spacing */
/* eslint-disable brace-style */
/* eslint-disable indent */

function extractCallbackData () {
  let baseKindArguments = Array.from(arguments)
  const argumentsLastIndex = baseKindArguments.length >= 2 ? baseKindArguments.length - 1 : false
  const argumentsOneBeforeLastIndex = baseKindArguments.length >= 3 ? argumentsLastIndex - 1 : false
  let trueCaseFunction = false
  let falseCaseFunction = false

  if (argumentsLastIndex) {
    if (argumentsOneBeforeLastIndex) {
      falseCaseFunction = argumentsLastIndex
        ? typeof arguments[argumentsLastIndex] === 'function'
            ? arguments[argumentsLastIndex]
            : false
        : false
      trueCaseFunction = argumentsOneBeforeLastIndex
        ? typeof arguments[argumentsOneBeforeLastIndex] === 'function'
            ? arguments[argumentsOneBeforeLastIndex]
            : false
        : false
    } else {
      trueCaseFunction = argumentsLastIndex
        ? typeof arguments[argumentsLastIndex] === 'function'
            ? arguments[argumentsLastIndex]
            : false
        : false
      falseCaseFunction = false
    }
  }
  trueCaseFunction &&
    (() => (baseKindArguments = baseKindArguments.slice(0, -1)))()
  falseCaseFunction &&
    (() => (baseKindArguments = baseKindArguments.slice(0, -1)))()

  const havingCaseFunction = !!trueCaseFunction || !!falseCaseFunction
  return {
    baseKindArguments,
    havingCaseFunction,
    trueCaseFunction,
    falseCaseFunction
  }
}
exports.extractCallbackData = extractCallbackData