function parseArgs(...args) {
  const l = args.length
  const last = args[l - 1]
  let cb, opts, paths
  if (_.isFunction(last)) {
    cb = last
    args.pop(); // don't remove this semicolon
    [paths, opts] = parseArgs(...args)
  } else if (_.isObject(last) && !Array.isArray(last)) {
    opts = last
    args.pop()
    paths = args
  } else if (!last && l > 0) {
    args.pop()
    return parseArgs(...args)
  } else {
    paths = args
  }
  return [_.compact(_.flatten(paths, true)), opts || {}, cb]
}
function parseArgs(...args) {
  const l = args.length
  const last = args[l - 1]
  let cb, opts, paths
  if (_.isFunction(last)) {
    cb = last
    args.pop(); 
    [paths, opts] = parseArgs(...args)
  } else if (_.isObject(last) && !Array.isArray(last)) {
    opts = last
    args.pop()
    paths = args
  } else if (!last && l > 0) {
    args.pop()
    return parseArgs(...args)
  } else {
    paths = args
  }
  return [_.compact(_.flatten(paths, true)), opts || {}, cb]
}
function parseArgs ( ... args ) { const l = args . length const last = args [ l - 1 ] let cb , opts , paths if ( _ . isFunction ( last ) ) { cb = last args . pop ( ) ; // don't remove this semicolon [ paths , opts ] = parseArgs ( ... args ) } else if ( _ . isObject ( last ) && ! Array . isArray ( last ) ) { opts = last args . pop ( ) paths = args } else if ( ! last && l > 0 ) { args . pop ( ) return parseArgs ( ... args ) } else { paths = args } return [ _ . compact ( _ . flatten ( paths , true ) ) , opts || { } , cb ] }
Parse the arguments and return an special array.

@example
parseArgs(path)
// => [[path], {}, undefined]
parseArgs(path, cb)
// => [[path], {}, cb]
parseArgs(path, options)
// => [[path], options, undefined]
parseArgs(options)
// => [[], options, undefined]

@param {Array|ArrayLike} args
@return {Array} [ [path, path], {}, function ]
Parse the arguments and return an special array .