var fs = require('fs') var core if (process.platform === 'win32' || global.TESTING_WINDOWS) {

core = require('./windows.js')

} else {

core = require('./mode.js')

}

module.exports = isexe isexe.sync = sync

function isexe (path, options, cb) {

if (typeof options === 'function') {
  cb = options
  options = {}
}

if (!cb) {
  if (typeof Promise !== 'function') {
    throw new TypeError('callback not provided')
  }

  return new Promise(function (resolve, reject) {
    isexe(path, options || {}, function (er, is) {
      if (er) {
        reject(er)
      } else {
        resolve(is)
      }
    })
  })
}

core(path, options || {}, function (er, is) {
  // ignore EACCES because that just means we aren't allowed to run it
  if (er) {
    if (er.code === 'EACCES' || options && options.ignoreErrors) {
      er = null
      is = false
    }
  }
  cb(er, is)
})

}

function sync (path, options) {

// my kingdom for a filtered catch
try {
  return core.sync(path, options || {})
} catch (er) {
  if (options && options.ignoreErrors || er.code === 'EACCES') {
    return false
  } else {
    throw er
  }
}

}