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.
		
		
		
		
		
			
		
			
				
					
					
						
							72 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							72 lines
						
					
					
						
							1.8 KiB
						
					
					
				var isWindows = process.platform === 'win32' | 
						|
var path = require('path') | 
						|
var exec = require('child_process').exec | 
						|
var osTmpdir = require('os-tmpdir') | 
						|
var osHomedir = require('os-homedir') | 
						|
 | 
						|
// looking up envs is a bit costly. | 
						|
// Also, sometimes we want to have a fallback | 
						|
// Pass in a callback to wait for the fallback on failures | 
						|
// After the first lookup, always returns the same thing. | 
						|
function memo (key, lookup, fallback) { | 
						|
  var fell = false | 
						|
  var falling = false | 
						|
  exports[key] = function (cb) { | 
						|
    var val = lookup() | 
						|
    if (!val && !fell && !falling && fallback) { | 
						|
      fell = true | 
						|
      falling = true | 
						|
      exec(fallback, function (er, output, stderr) { | 
						|
        falling = false | 
						|
        if (er) return // oh well, we tried | 
						|
        val = output.trim() | 
						|
      }) | 
						|
    } | 
						|
    exports[key] = function (cb) { | 
						|
      if (cb) process.nextTick(cb.bind(null, null, val)) | 
						|
      return val | 
						|
    } | 
						|
    if (cb && !falling) process.nextTick(cb.bind(null, null, val)) | 
						|
    return val | 
						|
  } | 
						|
} | 
						|
 | 
						|
memo('user', function () { | 
						|
  return ( isWindows | 
						|
         ? process.env.USERDOMAIN + '\\' + process.env.USERNAME | 
						|
         : process.env.USER | 
						|
         ) | 
						|
}, 'whoami') | 
						|
 | 
						|
memo('prompt', function () { | 
						|
  return isWindows ? process.env.PROMPT : process.env.PS1 | 
						|
}) | 
						|
 | 
						|
memo('hostname', function () { | 
						|
  return isWindows ? process.env.COMPUTERNAME : process.env.HOSTNAME | 
						|
}, 'hostname') | 
						|
 | 
						|
memo('tmpdir', function () { | 
						|
  return osTmpdir() | 
						|
}) | 
						|
 | 
						|
memo('home', function () { | 
						|
  return osHomedir() | 
						|
}) | 
						|
 | 
						|
memo('path', function () { | 
						|
  return (process.env.PATH || | 
						|
          process.env.Path || | 
						|
          process.env.path).split(isWindows ? ';' : ':') | 
						|
}) | 
						|
 | 
						|
memo('editor', function () { | 
						|
  return process.env.EDITOR || | 
						|
         process.env.VISUAL || | 
						|
         (isWindows ? 'notepad.exe' : 'vi') | 
						|
}) | 
						|
 | 
						|
memo('shell', function () { | 
						|
  return isWindows ? process.env.ComSpec || 'cmd' | 
						|
         : process.env.SHELL || 'bash' | 
						|
})
 | 
						|
 |