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