mirror of https://github.com/lukechilds/node.git
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.
80 lines
2.1 KiB
80 lines
2.1 KiB
var isWindows = process.platform === 'win32'
|
|
var windir = isWindows ? process.env.windir || 'C:\\Windows' : null
|
|
var path = require('path')
|
|
var exec = require('child_process').exec
|
|
|
|
// 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 () {
|
|
var t = isWindows ? 'temp' : 'tmp'
|
|
return process.env.TMPDIR ||
|
|
process.env.TMP ||
|
|
process.env.TEMP ||
|
|
( exports.home() ? path.resolve(exports.home(), t)
|
|
: isWindows ? path.resolve(windir, t)
|
|
: '/tmp'
|
|
)
|
|
})
|
|
|
|
memo('home', function () {
|
|
return ( isWindows ? process.env.USERPROFILE
|
|
: process.env.HOME
|
|
)
|
|
})
|
|
|
|
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'
|
|
})
|
|
|