17bcf56d883816183f0e6d1cdd1bcfe075381319
[platform/upstream/nodejs.git] / deps / npm / node_modules / npmconf / config-defs.js
1 // defaults, types, and shorthands.
2
3
4 var path = require("path")
5   , url = require("url")
6   , Stream = require("stream").Stream
7   , semver = require("semver")
8   , stableFamily = semver.parse(process.version)
9   , nopt = require("nopt")
10   , os = require('os')
11   , osenv = require("osenv")
12
13 try {
14   var log = require("npmlog")
15 } catch (er) {
16   var util = require('util')
17   var log = { warn: function (m) {
18     console.warn(m + util.format.apply(util, [].slice.call(arguments, 1)))
19   } }
20 }
21
22 exports.Octal = Octal
23 function Octal () {}
24 function validateOctal (data, k, val) {
25   // must be either an integer or an octal string.
26   if (typeof val === "number") {
27     data[k] = val
28     return true
29   }
30
31   if (typeof val === "string") {
32     if (val.charAt(0) !== "0" || isNaN(val)) return false
33     data[k] = parseInt(val, 8).toString(8)
34   }
35 }
36
37 function validateSemver (data, k, val) {
38   if (!semver.valid(val)) return false
39   data[k] = semver.valid(val)
40 }
41
42 function validateStream (data, k, val) {
43   if (!(val instanceof Stream)) return false
44   data[k] = val
45 }
46
47 nopt.typeDefs.semver = { type: semver, validate: validateSemver }
48 nopt.typeDefs.Octal = { type: Octal, validate: validateOctal }
49 nopt.typeDefs.Stream = { type: Stream, validate: validateStream }
50
51 nopt.invalidHandler = function (k, val, type, data) {
52   log.warn("invalid config", k + "=" + JSON.stringify(val))
53
54   if (Array.isArray(type)) {
55     if (type.indexOf(url) !== -1) type = url
56     else if (type.indexOf(path) !== -1) type = path
57   }
58
59   switch (type) {
60     case Octal:
61       log.warn("invalid config", "Must be octal number, starting with 0")
62       break
63     case url:
64       log.warn("invalid config", "Must be a full url with 'http://'")
65       break
66     case path:
67       log.warn("invalid config", "Must be a valid filesystem path")
68       break
69     case Number:
70       log.warn("invalid config", "Must be a numeric value")
71       break
72     case Stream:
73       log.warn("invalid config", "Must be an instance of the Stream class")
74       break
75   }
76 }
77
78 if (!stableFamily || (+stableFamily.minor % 2)) stableFamily = null
79 else stableFamily = stableFamily.major + "." + stableFamily.minor
80
81 var defaults
82
83 var temp = osenv.tmpdir()
84 var home = osenv.home()
85
86 var uidOrPid = process.getuid ? process.getuid() : process.pid
87
88 if (home) process.env.HOME = home
89 else home = path.resolve(temp, "npm-" + uidOrPid)
90
91 var cacheExtra = process.platform === "win32" ? "npm-cache" : ".npm"
92 var cacheRoot = process.platform === "win32" && process.env.APPDATA || home
93 var cache = path.resolve(cacheRoot, cacheExtra)
94
95
96 var globalPrefix
97 Object.defineProperty(exports, "defaults", {get: function () {
98   if (defaults) return defaults
99
100   if (process.env.PREFIX) {
101     globalPrefix = process.env.PREFIX
102   } else if (process.platform === "win32") {
103     // c:\node\node.exe --> prefix=c:\node\
104     globalPrefix = path.dirname(process.execPath)
105   } else {
106     // /usr/local/bin/node --> prefix=/usr/local
107     globalPrefix = path.dirname(path.dirname(process.execPath))
108
109     // destdir only is respected on Unix
110     if (process.env.DESTDIR) {
111       globalPrefix = path.join(process.env.DESTDIR, globalPrefix)
112     }
113   }
114
115   return defaults =
116     { "always-auth" : false
117     , "bin-links" : true
118     , browser : null
119
120     , ca: // the npm CA certificate.
121       [ "-----BEGIN CERTIFICATE-----\n"+
122         "MIIChzCCAfACCQDauvz/KHp8ejANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC\n"+
123         "VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMQwwCgYDVQQKEwNucG0x\n"+
124         "IjAgBgNVBAsTGW5wbSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxDjAMBgNVBAMTBW5w\n"+
125         "bUNBMRcwFQYJKoZIhvcNAQkBFghpQGl6cy5tZTAeFw0xMTA5MDUwMTQ3MTdaFw0y\n"+
126         "MTA5MDIwMTQ3MTdaMIGHMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNV\n"+
127         "BAcTB09ha2xhbmQxDDAKBgNVBAoTA25wbTEiMCAGA1UECxMZbnBtIENlcnRpZmlj\n"+
128         "YXRlIEF1dGhvcml0eTEOMAwGA1UEAxMFbnBtQ0ExFzAVBgkqhkiG9w0BCQEWCGlA\n"+
129         "aXpzLm1lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI4tIqPpRW+ACw9GE\n"+
130         "OgBlJZwK5f8nnKCLK629Pv5yJpQKs3DENExAyOgDcyaF0HD0zk8zTp+ZsLaNdKOz\n"+
131         "Gn2U181KGprGKAXP6DU6ByOJDWmTlY6+Ad1laYT0m64fERSpHw/hjD3D+iX4aMOl\n"+
132         "y0HdbT5m1ZGh6SJz3ZqxavhHLQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAC4ySDbC\n"+
133         "l7W1WpLmtLGEQ/yuMLUf6Jy/vr+CRp4h+UzL+IQpCv8FfxsYE7dhf/bmWTEupBkv\n"+
134         "yNL18lipt2jSvR3v6oAHAReotvdjqhxddpe5Holns6EQd1/xEZ7sB1YhQKJtvUrl\n"+
135         "ZNufy1Jf1r0ldEGeA+0ISck7s+xSh9rQD2Op\n"+
136         "-----END CERTIFICATE-----\n",
137
138         // "GlobalSign Root CA"
139         "-----BEGIN CERTIFICATE-----\n"+
140         "MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx\n"+
141         "GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds\n"+
142         "b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV\n"+
143         "BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD\n"+
144         "VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa\n"+
145         "DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc\n"+
146         "THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb\n"+
147         "Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP\n"+
148         "c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX\n"+
149         "gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\n"+
150         "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF\n"+
151         "AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj\n"+
152         "Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG\n"+
153         "j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH\n"+
154         "hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC\n"+
155         "X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\n"+
156         "-----END CERTIFICATE-----\n",
157
158         // "GlobalSign Root CA - R2"
159         "-----BEGIN CERTIFICATE-----\n"+
160         "MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv\n"+
161         "YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh\n"+
162         "bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT\n"+
163         "aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln\n"+
164         "bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6\n"+
165         "ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp\n"+
166         "s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN\n"+
167         "S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL\n"+
168         "TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C\n"+
169         "ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E\n"+
170         "FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i\n"+
171         "YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN\n"+
172         "BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp\n"+
173         "9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu\n"+
174         "01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7\n"+
175         "9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\n"+
176         "TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n"+
177         "-----END CERTIFICATE-----\n",
178
179         // GlobalSign Organization Validation CA - G2
180         "-----BEGIN CERTIFICATE-----\n"+
181         "MIIEYDCCA0igAwIBAgILBAAAAAABL07hRQwwDQYJKoZIhvcNAQEFBQAwVzELMAkG\n"+
182         "A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\n"+
183         "b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xMTA0MTMxMDAw\n"+
184         "MDBaFw0yMjA0MTMxMDAwMDBaMF0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\n"+
185         "YWxTaWduIG52LXNhMTMwMQYDVQQDEypHbG9iYWxTaWduIE9yZ2FuaXphdGlvbiBW\n"+
186         "YWxpZGF0aW9uIENBIC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\n"+
187         "AQDdNR3yIFQmGtDvpW+Bdllw3Of01AMkHyQOnSKf1Ccyeit87ovjYWI4F6+0S3qf\n"+
188         "ZyEcLZVUunm6tsTyDSF0F2d04rFkCJlgePtnwkv3J41vNnbPMYzl8QbX3FcOW6zu\n"+
189         "zi2rqqlwLwKGyLHQCAeV6irs0Z7kNlw7pja1Q4ur944+ABv/hVlrYgGNguhKujiz\n"+
190         "4MP0bRmn6gXdhGfCZsckAnNate6kGdn8AM62pI3ffr1fsjqdhDFPyGMM5NgNUqN+\n"+
191         "ARvUZ6UYKOsBp4I82Y4d5UcNuotZFKMfH0vq4idGhs6dOcRmQafiFSNrVkfB7cVT\n"+
192         "5NSAH2v6gEaYsgmmD5W+ZoiTAgMBAAGjggElMIIBITAOBgNVHQ8BAf8EBAMCAQYw\n"+
193         "EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUXUayjcRLdBy77fVztjq3OI91\n"+
194         "nn4wRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3\n"+
195         "Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCowKKAmoCSGImh0\n"+
196         "dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYBBQUHAQEEMTAv\n"+
197         "MC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290cjEw\n"+
198         "HwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZIhvcNAQEFBQAD\n"+
199         "ggEBABvgiADHBREc/6stSEJSzSBo53xBjcEnxSxZZ6CaNduzUKcbYumlO/q2IQen\n"+
200         "fPMOK25+Lk2TnLryhj5jiBDYW2FQEtuHrhm70t8ylgCoXtwtI7yw07VKoI5lkS/Z\n"+
201         "9oL2dLLffCbvGSuXL+Ch7rkXIkg/pfcNYNUNUUflWP63n41edTzGQfDPgVRJEcYX\n"+
202         "pOBWYdw9P91nbHZF2krqrhqkYE/Ho9aqp9nNgSvBZnWygI/1h01fwlr1kMbawb30\n"+
203         "hag8IyrhFHvBN91i0ZJsumB9iOQct+R2UTjEqUdOqCsukNK1OFHrwZyKarXMsh3o\n"+
204         "wFZUTKiL8IkyhtyTMr5NGvo1dbU=\n"+
205         "-----END CERTIFICATE-----\n"
206       ]
207
208
209     , cache : cache
210
211     , "cache-lock-stale": 60000
212     , "cache-lock-retries": 10
213     , "cache-lock-wait": 10000
214
215     , "cache-max": Infinity
216     , "cache-min": 10
217
218     , color : true
219     , coverage: false
220     , depth: Infinity
221     , description : true
222     , dev : false
223     , editor : osenv.editor()
224     , "engine-strict": false
225     , force : false
226
227     , "fetch-retries": 2
228     , "fetch-retry-factor": 10
229     , "fetch-retry-mintimeout": 10000
230     , "fetch-retry-maxtimeout": 60000
231
232     , git: "git"
233
234     , global : false
235     , globalconfig : path.resolve(globalPrefix, "etc", "npmrc")
236     , globalignorefile : path.resolve( globalPrefix, "etc", "npmignore")
237     , group : process.platform === "win32" ? 0
238             : process.env.SUDO_GID || (process.getgid && process.getgid())
239     , heading: "npm"
240     , ignore: ""
241     , "init-module": path.resolve(home, '.npm-init.js')
242     , "init.version" : "0.0.0"
243     , "init.author.name" : ""
244     , "init.author.email" : ""
245     , "init.author.url" : ""
246     , json: false
247     , link: false
248     , "local-address" : undefined
249     , loglevel : "http"
250     , logstream : process.stderr
251     , long : false
252     , message : "%s"
253     , "node-version" : process.version
254     , npaturl : "http://npat.npmjs.org/"
255     , npat : false
256     , "onload-script" : false
257     , optional: true
258     , parseable : false
259     , pre: false
260     , prefix : globalPrefix
261     , production: process.env.NODE_ENV === "production"
262     , "proprietary-attribs": true
263     , proxy : process.env.HTTP_PROXY || process.env.http_proxy || null
264     , "https-proxy" : process.env.HTTPS_PROXY || process.env.https_proxy ||
265                       process.env.HTTP_PROXY || process.env.http_proxy || null
266     , "user-agent" : "node/" + process.version
267                      + ' ' + process.platform
268                      + ' ' + process.arch
269     , "rebuild-bundle" : true
270     , registry : "https://registry.npmjs.org/"
271     , rollback : true
272     , save : false
273     , "save-bundle": false
274     , "save-dev" : false
275     , "save-optional" : false
276     , searchopts: ""
277     , searchexclude: null
278     , searchsort: "name"
279     , shell : osenv.shell()
280     , shrinkwrap: true
281     , "sign-git-tag": false
282     , "strict-ssl": true
283     , tag : "latest"
284     , tmp : temp
285     , unicode : true
286     , "unsafe-perm" : process.platform === "win32"
287                     || process.platform === "cygwin"
288                     || !( process.getuid && process.setuid
289                        && process.getgid && process.setgid )
290                     || process.getuid() !== 0
291     , usage : false
292     , user : process.platform === "win32" ? 0 : "nobody"
293     , username : ""
294     , userconfig : path.resolve(home, ".npmrc")
295     , userignorefile : path.resolve(home, ".npmignore")
296     , umask: 022
297     , version : false
298     , versions : false
299     , viewer: process.platform === "win32" ? "browser" : "man"
300     , yes: null
301
302     , _exit : true
303     }
304 }})
305
306 exports.types =
307   { "always-auth" : Boolean
308   , "bin-links": Boolean
309   , browser : [null, String]
310   , ca: [null, String, Array]
311   , cache : path
312   , "cache-lock-stale": Number
313   , "cache-lock-retries": Number
314   , "cache-lock-wait": Number
315   , "cache-max": Number
316   , "cache-min": Number
317   , color : ["always", Boolean]
318   , coverage: Boolean
319   , depth : Number
320   , description : Boolean
321   , dev : Boolean
322   , editor : String
323   , "engine-strict": Boolean
324   , force : Boolean
325   , "fetch-retries": Number
326   , "fetch-retry-factor": Number
327   , "fetch-retry-mintimeout": Number
328   , "fetch-retry-maxtimeout": Number
329   , git: String
330   , global : Boolean
331   , globalconfig : path
332   , globalignorefile: path
333   , group : [Number, String]
334   , "https-proxy" : [null, url]
335   , "user-agent" : String
336   , "heading": String
337   , ignore : String
338   , "init-module": path
339   , "init.version" : [null, semver]
340   , "init.author.name" : String
341   , "init.author.email" : String
342   , "init.author.url" : ["", url]
343   , json: Boolean
344   , link: Boolean
345   // local-address must be listed as an IP for a local network interface
346   // must be IPv4 due to node bug
347   , "local-address" : Object.keys(os.networkInterfaces()).map(function (nic) {
348                    return os.networkInterfaces()[nic].filter(function (addr) {
349                     return addr.family === "IPv4"
350                    })
351                    .map(function (addr) {
352                      return addr.address
353                    })
354                  }).reduce(function (curr, next) {
355                   return curr.concat(next)
356                  }, [])
357   , loglevel : ["silent","win","error","warn","http","info","verbose","silly"]
358   , logstream : Stream
359   , long : Boolean
360   , message: String
361   , "node-version" : [null, semver]
362   , npaturl : url
363   , npat : Boolean
364   , "onload-script" : [null, String]
365   , optional: Boolean
366   , parseable : Boolean
367   , pre: Boolean
368   , prefix: path
369   , production: Boolean
370   , "proprietary-attribs": Boolean
371   , proxy : [null, url]
372   , "rebuild-bundle" : Boolean
373   , registry : [null, url]
374   , rollback : Boolean
375   , save : Boolean
376   , "save-bundle": Boolean
377   , "save-dev" : Boolean
378   , "save-optional" : Boolean
379   , searchopts : String
380   , searchexclude: [null, String]
381   , searchsort: [ "name", "-name"
382                 , "description", "-description"
383                 , "author", "-author"
384                 , "date", "-date"
385                 , "keywords", "-keywords" ]
386   , shell : String
387   , shrinkwrap: Boolean
388   , "sign-git-tag": Boolean
389   , "strict-ssl": Boolean
390   , tag : String
391   , tmp : path
392   , unicode : Boolean
393   , "unsafe-perm" : Boolean
394   , usage : Boolean
395   , user : [Number, String]
396   , username : String
397   , userconfig : path
398   , userignorefile : path
399   , umask: Octal
400   , version : Boolean
401   , versions : Boolean
402   , viewer: String
403   , yes: [false, null, Boolean]
404   , _exit : Boolean
405   , _password: String
406   }
407
408 exports.shorthands =
409   { s : ["--loglevel", "silent"]
410   , d : ["--loglevel", "info"]
411   , dd : ["--loglevel", "verbose"]
412   , ddd : ["--loglevel", "silly"]
413   , noreg : ["--no-registry"]
414   , N : ["--no-registry"]
415   , reg : ["--registry"]
416   , "no-reg" : ["--no-registry"]
417   , silent : ["--loglevel", "silent"]
418   , verbose : ["--loglevel", "verbose"]
419   , quiet: ["--loglevel", "warn"]
420   , q: ["--loglevel", "warn"]
421   , h : ["--usage"]
422   , H : ["--usage"]
423   , "?" : ["--usage"]
424   , help : ["--usage"]
425   , v : ["--version"]
426   , f : ["--force"]
427   , gangster : ["--force"]
428   , gangsta : ["--force"]
429   , desc : ["--description"]
430   , "no-desc" : ["--no-description"]
431   , "local" : ["--no-global"]
432   , l : ["--long"]
433   , m : ["--message"]
434   , p : ["--parseable"]
435   , porcelain : ["--parseable"]
436   , g : ["--global"]
437   , S : ["--save"]
438   , D : ["--save-dev"]
439   , O : ["--save-optional"]
440   , y : ["--yes"]
441   , n : ["--no-yes"]
442   , B : ["--save-bundle"]
443   }