All files / src/repl Sync.js

0% Statements 0/32
0% Branches 0/20
0% Functions 0/7
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80                                                                                                                                                               
const Sync = {
  resolve,
  reject,
  all,
  then,
  catch: _catch
}
 
module.exports = {
  Sync
}
 
function resolve (value) {
  if (typeof value === 'object' && typeof value.err === 'object' && typeof value.val !== 'undefined') {
    return value
  } else {
    return {err: null, val: value}
  }
}
 
function reject (reason) {
  if (typeof reason === 'object' && typeof reason.err === 'object' && typeof reason.val !== 'undefined') {
    return {...reason, err: reason}
  } else {
    return {err: reason, val: null}
  }
}
 
function all (array) {
  try {
    let err = null
    const val = []
 
    for (let i = 0; i < array.length; i++) {
      const elem = array[i]
  
      if (typeof elem === 'object') {
        if (elem.err === null) {
          if (typeof elem.val === 'undefined') {
            val.push(elem)
          } else {
            val.push(elem.val)
          }
        } else {
          err = elem.err
          val.push(null)
        }
      } else {
        val.push(elem)
      }
    }
  
    return {err, val}
  } catch (err) {
    return {err, val: null}
  }
}
 
function then (onFulfilled, onRejected) {
  return ({err, val}) => {
    try {
      return {
        err: typeof onRejected  === 'function' ? onRejected(err)  : err,
        val: typeof onFulfilled === 'function' ? onFulfilled(val) : val
      }
    } catch (err) {
      return {err, val: null}
    }
  }
}
 
function _catch (onRejected) {
  return ({err, val}) => {
    try {
      return {err: onRejected(err), val}
    } catch (err) {
      return {err, val: null}
    }
  }
}