You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							77 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							77 lines
						
					
					
						
							1.9 KiB
						
					
					
				"use strict" | 
						|
 | 
						|
var which = require('which') | 
						|
var npmPath = require('npm-path') | 
						|
 | 
						|
module.exports = function(cwd) { | 
						|
  function npmWhich(cmd, options, fn) { | 
						|
    // options is optional | 
						|
    if (options instanceof Function) fn = options, options = null | 
						|
    options = options || {} | 
						|
    options.cwd = options.cwd || cwd | 
						|
    options.env = options.env || process.env | 
						|
 | 
						|
    function curryWhich(opts, fn) { | 
						|
      if (opts instanceof Function) fn = opts, opts = null | 
						|
      opts = opts || {} | 
						|
      return npmWhich(cmd, mixin(opts, options), fn) | 
						|
    } | 
						|
 | 
						|
    curryWhich.sync = function(opts) { | 
						|
      opts = opts || {} | 
						|
      return npmWhich.sync(cmd, mixin(opts, options)) | 
						|
    } | 
						|
 | 
						|
    if (!(typeof fn === 'function')) return curryWhich | 
						|
 | 
						|
    if (!options.cwd) return fn(new Error('You must specify a cwd.')) | 
						|
 | 
						|
    npmPath.get(options, function(err, newPath) { | 
						|
      if (err) return fn(err) | 
						|
      var oldPath = process.env[npmPath.PATH] | 
						|
      process.env[npmPath.PATH] = newPath | 
						|
      which(cmd, function(err, result) { | 
						|
        process.env[npmPath.PATH] = oldPath | 
						|
        fn(err, result) | 
						|
      }) | 
						|
    }) | 
						|
  } | 
						|
 | 
						|
  npmWhich.sync = function(cmd, options) { | 
						|
 | 
						|
    options = options || {} | 
						|
    options.cwd = options.cwd || cwd | 
						|
    options.env = options.env || process.env | 
						|
 | 
						|
    if (!options.cwd) throw new Error('You must specify a cwd.') | 
						|
    var err = null | 
						|
    try { | 
						|
      var oldPath = process.env[npmPath.PATH] | 
						|
      var newPath = npmPath.getSync(options) | 
						|
      process.env[npmPath.PATH] = newPath | 
						|
      var result = which.sync(cmd) | 
						|
      return result | 
						|
    } catch(e) { | 
						|
      err = e | 
						|
    } finally { | 
						|
      process.env[npmPath.PATH] = oldPath | 
						|
      if (err) throw err | 
						|
    } | 
						|
    return result | 
						|
  } | 
						|
 | 
						|
  if (arguments.length <= 1) return npmWhich | 
						|
  return module.exports().apply(this, arguments) | 
						|
} | 
						|
 | 
						|
module.exports.sync = function(cmd, options) { | 
						|
  options = options || {} | 
						|
  return module.exports(options.cwd).sync(cmd, options) | 
						|
} | 
						|
 | 
						|
function mixin(a, b) { | 
						|
  for (var key in b) { | 
						|
    a[key] = b[key] | 
						|
  } | 
						|
  return a | 
						|
}
 | 
						|
 |