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