58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 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 | ||
|  |     } | ||
|  |   } | ||
|  | } |