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

0% Statements 0/31
0% Branches 0/18
0% Functions 0/2
0% Lines 0/26

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