1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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'
- })
|