All files / src/repl replEval.js

0% Statements 0/25
0% Branches 0/12
0% Functions 0/9
0% Lines 0/22

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                                                                                     
const {UnknownCommand} = require('./errors')
const {pipe}           = require('./pipe')
 
const replEvalF = mode => (parser, commands, defaultAction) => {
  const parse = parser(commands)
 
  return (cmd, context, filename, callback) => {
    const {errs, args} = parse(cmd)
 
    if (args._.length > 0) {
      args._.map(cmd =>
        errs.push(UnknownCommand({cmd}))
      )
    }
 
    const entries = Object.entries(args).filter(([key]) => key !== '_')
 
    if (entries.length === 0) {
      defaultAction({cmd}, errs)
    }
 
    const results = entries.map(([key, value]) => {
      const cmd = commands.opts.find(_ => _.args.includes(key)) || { action: defaultAction }
      const action = cmd.action || defaultAction
 
      if (typeof action === 'undefined') {
        return mode.resolve()
      } else {
        return mode.resolve(action(value, errs))
      }
    })
 
    return pipe(
      mode.all,
      mode.then(() => callback(null, undefined)),
      mode.catch(err => callback(null, err === null ? undefined : err))
    )(results)
  }
}
 
module.exports = {
  replEvalF
}