UNPKG

1.91 kBJavaScriptView Raw
1module.exports = docs
2
3docs.usage = "npm docs <pkgname>"
4docs.usage += "\n"
5docs.usage += "npm docs ."
6
7var npm = require("./npm.js")
8 , opener = require("opener")
9 , path = require("path")
10 , log = require("npmlog")
11 , mapToRegistry = require("./utils/map-to-registry.js")
12
13docs.completion = function (opts, cb) {
14 mapToRegistry("/-/short", npm.config, function (er, uri, auth) {
15 if (er) return cb(er)
16
17 npm.registry.get(uri, { timeout : 60000, auth : auth }, function (er, list) {
18 return cb(null, list || [])
19 })
20 })
21}
22
23function url (json) {
24 return json.homepage ? json.homepage : "https://npmjs.org/package/" + json.name
25}
26
27function docs (args, cb) {
28 args = args || []
29 var pending = args.length
30 if (!pending) return getDoc(".", cb)
31 args.forEach(function(proj) {
32 getDoc(proj, function(err) {
33 if (err) {
34 return cb(err)
35 }
36 --pending || cb()
37 })
38 })
39}
40
41function getDoc (project, cb) {
42 project = project || "."
43 var package = path.resolve(npm.localPrefix, "package.json")
44
45 if (project === "." || project === "./") {
46 var json
47 try {
48 json = require(package)
49 if (!json.name) throw new Error('package.json does not have a valid "name" property')
50 project = json.name
51 } catch (e) {
52 log.error(e.message)
53 return cb(docs.usage)
54 }
55
56 return opener(url(json), { command: npm.config.get("browser") }, cb)
57 }
58
59 mapToRegistry(project, npm.config, function (er, uri, auth) {
60 if (er) return cb(er)
61
62 npm.registry.get(uri + "/latest", { timeout : 3600, auth : auth }, next)
63 })
64
65 function next (er, json) {
66 var github = "https://github.com/" + project + "#readme"
67
68 if (er) {
69 if (project.split("/").length !== 2) return cb(er)
70 return opener(github, { command: npm.config.get("browser") }, cb)
71 }
72
73 return opener(url(json), { command: npm.config.get("browser") }, cb)
74 }
75}