1 | var isWindows = process.platform === 'win32'
|
2 | var path = require('path')
|
3 | var exec = require('child_process').exec
|
4 | var os = require('os')
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | function memo (key, lookup, fallback) {
|
11 | var fell = false
|
12 | var falling = false
|
13 | exports[key] = function (cb) {
|
14 | var val = lookup()
|
15 | if (!val && !fell && !falling && fallback) {
|
16 | fell = true
|
17 | falling = true
|
18 | exec(fallback, function (er, output, stderr) {
|
19 | falling = false
|
20 | if (er) return
|
21 | val = output.trim()
|
22 | })
|
23 | }
|
24 | exports[key] = function (cb) {
|
25 | if (cb) process.nextTick(cb.bind(null, null, val))
|
26 | return val
|
27 | }
|
28 | if (cb && !falling) process.nextTick(cb.bind(null, null, val))
|
29 | return val
|
30 | }
|
31 | }
|
32 |
|
33 | memo('user', function () {
|
34 | return ( isWindows
|
35 | ? process.env.USERDOMAIN + '\\' + process.env.USERNAME
|
36 | : process.env.USER
|
37 | )
|
38 | }, 'whoami')
|
39 |
|
40 | memo('prompt', function () {
|
41 | return isWindows ? process.env.PROMPT : process.env.PS1
|
42 | })
|
43 |
|
44 | memo('hostname', function () {
|
45 | return isWindows ? process.env.COMPUTERNAME : process.env.HOSTNAME
|
46 | }, 'hostname')
|
47 |
|
48 | memo('tmpdir', function () {
|
49 | return os.tmpDir()
|
50 | })
|
51 |
|
52 | memo('home', function () {
|
53 | return ( isWindows ? process.env.USERPROFILE
|
54 | : process.env.HOME
|
55 | )
|
56 | })
|
57 |
|
58 | memo('path', function () {
|
59 | return (process.env.PATH ||
|
60 | process.env.Path ||
|
61 | process.env.path).split(isWindows ? ';' : ':')
|
62 | })
|
63 |
|
64 | memo('editor', function () {
|
65 | return process.env.EDITOR ||
|
66 | process.env.VISUAL ||
|
67 | (isWindows ? 'notepad.exe' : 'vi')
|
68 | })
|
69 |
|
70 | memo('shell', function () {
|
71 | return isWindows ? process.env.ComSpec || 'cmd'
|
72 | : process.env.SHELL || 'bash'
|
73 | })
|