All files / pxi-args/src/parser mergeArgs.js

0% Statements 0/27
0% Branches 0/21
0% Functions 0/2
0% Lines 0/23

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                                                                   
const combine = require('../dsl/fp/combine')
const option  = require('../dsl/fp/option')
 
module.exports = parser => ({errs = [], argv = []} = {}) => {
  let errs2   = []
  const argv2 = {_: []}
 
  for (let i = 0; i < argv.length; i++) {
    const [arg, params, types, opts] = argv[i]
 
    if (typeof types === 'undefined') {
      if (arg !== '--') argv2['_'].push(arg)
    } else if (types === null) {
      const options = []
      for (let j = 0; j < (opts || []).length; j++) {
        const opt   = opts[j]
        options.push(option(opt))
      }
 
      const combined = combine(...options)
      const parse    = parser(combined || {})
      const {errs: errs3, argv} = parse({errs: [], argv: params})
 
      errs2      = errs3
      argv2[arg] = Object.assign({}, argv2[arg], argv)
    } else if (types.length === 0) {
      argv2[arg] = typeof argv2[arg] === 'undefined' ? true : argv2[arg] < 2 ? 2 : argv2[arg] + 1
    } else {
      argv2[arg] = types.length === 1 ? params[0] : params
    }
  }
 
  return {errs: errs.concat(errs2), argv: argv2}
}