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.
		
		
		
		
			
				
					73 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					73 lines
				
				1.8 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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'
							 | 
						||
| 
								 | 
							
								})
							 |