timers: setImmediate v8 optimization fix
[platform/upstream/nodejs.git] / deps / npm / lib / docs.js
1 module.exports = docs
2
3 docs.usage  = "npm docs <pkgname>"
4 docs.usage += "\n"
5 docs.usage += "npm docs ."
6
7 docs.completion = function (opts, cb) {
8   if (opts.conf.argv.remain.length > 2) return cb()
9   registry.get("/-/short", 60000, function (er, list) {
10     return cb(null, list || [])
11   })
12 }
13
14 var npm = require("./npm.js")
15   , registry = npm.registry
16   , opener = require("opener")
17   , path = require('path')
18   , log = require('npmlog')
19
20 function url (json) {
21   return json.homepage ? json.homepage : "https://npmjs.org/package/" + json.name
22 }
23
24 function docs (args, cb) {
25   var project = args[0] || '.'
26     , package = path.resolve(process.cwd(), "package.json")
27
28   if (project === '.') {
29     try {
30       var json = require(package)
31       if (!json.name) throw new Error('package.json does not have a valid "name" property')
32       project = json.name
33     } catch (e) {
34       log.error(e.message)
35       return cb(docs.usage)
36     }
37
38     return opener(url(json), { command: npm.config.get("browser") }, cb)
39   }
40
41   registry.get(project + "/latest", 3600, function (er, json) {
42     var github = "https://github.com/" + project + "#readme"
43
44     if (er) {
45       if (project.split("/").length !== 2) return cb(er)
46       return opener(github, { command: npm.config.get("browser") }, cb)
47     }
48
49     return opener(url(json), { command: npm.config.get("browser") }, cb)
50   })
51 }