1 | module.exports = docs
|
2 |
|
3 | docs.usage = "npm docs <pkgname>"
|
4 | docs.usage += "\n"
|
5 | docs.usage += "npm docs ."
|
6 |
|
7 | var 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 |
|
13 | docs.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 |
|
23 | function url (json) {
|
24 | return json.homepage ? json.homepage : "https://npmjs.org/package/" + json.name
|
25 | }
|
26 |
|
27 | function 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 |
|
41 | function 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 | }
|