All files / src/parser cast.js

0% Statements 0/36
0% Branches 0/20
0% Functions 0/1
0% Lines 0/31

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                                                                                                   
const {argumentIsNotABool, argumentIsNotANumber} = require('../errors')
 
module.exports = ({errs = [], argv = []} = {}) => {
  const errs2 = []
  const argv2 = []
 
  for (let i = 0; i < argv.length; i++) {
    const option = argv[i]
    const {values, types} = option
 
    let values2 = []
 
    if (typeof types === 'undefined' || types === null) {
      values2 = values
    } else {
      if (types.length === 0) {
        values2.push(true)
      } else {
        for (let j = 0; j < types.length; j++) {
          const type = types[j]
          const arg  = values[j]
          switch (type) {
            case 'count':
              values2.push(1)
              break
            case 'string':
              values2.push(arg)
              break
            case 'number':
              const float = parseFloat(arg)
              if (!Number.isNaN(float)) values2.push(float)
              else errs2.push(argumentIsNotANumber({arg, option}))
              break
            case 'bool':
              if (arg === 'true')       values2.push(true)
              else if (arg === 'false') values2.push(false)
              else errs2.push(argumentIsNotABool({arg, option}))
              break
            default:
              break
          }
        }
      }
    }
 
    argv2.push({...option, values: values2, types})
  }
 
  return {errs: errs.concat(errs2), argv: argv2}
}