Browse Source

deps: upgrade npm to 4.1.1

PR-URL: https://github.com/nodejs/node/pull/10781
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
v7.x
Rebecca Turner 8 years ago
committed by Italo A. Casas
parent
commit
1fae98b833
No known key found for this signature in database GPG Key ID: 23EFEFE93C4CFFFE
  1. 1
      deps/npm/AUTHORS
  2. 220
      deps/npm/CHANGELOG.md
  3. 5
      deps/npm/doc/cli/npm-cache.md
  4. 102
      deps/npm/doc/cli/npm-doctor.md
  5. 17
      deps/npm/doc/misc/npm-config.md
  6. 4
      deps/npm/doc/misc/npm-index.md
  7. 2
      deps/npm/html/doc/README.html
  8. 2
      deps/npm/html/doc/cli/npm-access.html
  9. 2
      deps/npm/html/doc/cli/npm-adduser.html
  10. 2
      deps/npm/html/doc/cli/npm-bin.html
  11. 2
      deps/npm/html/doc/cli/npm-bugs.html
  12. 2
      deps/npm/html/doc/cli/npm-build.html
  13. 2
      deps/npm/html/doc/cli/npm-bundle.html
  14. 7
      deps/npm/html/doc/cli/npm-cache.html
  15. 2
      deps/npm/html/doc/cli/npm-completion.html
  16. 2
      deps/npm/html/doc/cli/npm-config.html
  17. 2
      deps/npm/html/doc/cli/npm-dedupe.html
  18. 2
      deps/npm/html/doc/cli/npm-deprecate.html
  19. 2
      deps/npm/html/doc/cli/npm-dist-tag.html
  20. 2
      deps/npm/html/doc/cli/npm-docs.html
  21. 106
      deps/npm/html/doc/cli/npm-doctor.html
  22. 2
      deps/npm/html/doc/cli/npm-edit.html
  23. 2
      deps/npm/html/doc/cli/npm-explore.html
  24. 2
      deps/npm/html/doc/cli/npm-help-search.html
  25. 2
      deps/npm/html/doc/cli/npm-help.html
  26. 2
      deps/npm/html/doc/cli/npm-init.html
  27. 2
      deps/npm/html/doc/cli/npm-install-test.html
  28. 2
      deps/npm/html/doc/cli/npm-install.html
  29. 2
      deps/npm/html/doc/cli/npm-link.html
  30. 2
      deps/npm/html/doc/cli/npm-logout.html
  31. 4
      deps/npm/html/doc/cli/npm-ls.html
  32. 2
      deps/npm/html/doc/cli/npm-outdated.html
  33. 2
      deps/npm/html/doc/cli/npm-owner.html
  34. 2
      deps/npm/html/doc/cli/npm-pack.html
  35. 2
      deps/npm/html/doc/cli/npm-ping.html
  36. 2
      deps/npm/html/doc/cli/npm-prefix.html
  37. 2
      deps/npm/html/doc/cli/npm-prune.html
  38. 2
      deps/npm/html/doc/cli/npm-publish.html
  39. 2
      deps/npm/html/doc/cli/npm-rebuild.html
  40. 2
      deps/npm/html/doc/cli/npm-repo.html
  41. 2
      deps/npm/html/doc/cli/npm-restart.html
  42. 2
      deps/npm/html/doc/cli/npm-root.html
  43. 2
      deps/npm/html/doc/cli/npm-run-script.html
  44. 2
      deps/npm/html/doc/cli/npm-search.html
  45. 2
      deps/npm/html/doc/cli/npm-shrinkwrap.html
  46. 2
      deps/npm/html/doc/cli/npm-star.html
  47. 2
      deps/npm/html/doc/cli/npm-stars.html
  48. 2
      deps/npm/html/doc/cli/npm-start.html
  49. 2
      deps/npm/html/doc/cli/npm-stop.html
  50. 2
      deps/npm/html/doc/cli/npm-team.html
  51. 2
      deps/npm/html/doc/cli/npm-test.html
  52. 2
      deps/npm/html/doc/cli/npm-uninstall.html
  53. 2
      deps/npm/html/doc/cli/npm-unpublish.html
  54. 2
      deps/npm/html/doc/cli/npm-update.html
  55. 2
      deps/npm/html/doc/cli/npm-version.html
  56. 2
      deps/npm/html/doc/cli/npm-view.html
  57. 2
      deps/npm/html/doc/cli/npm-whoami.html
  58. 6
      deps/npm/html/doc/cli/npm.html
  59. 2
      deps/npm/html/doc/files/npm-folders.html
  60. 2
      deps/npm/html/doc/files/npm-global.html
  61. 2
      deps/npm/html/doc/files/npm-json.html
  62. 2
      deps/npm/html/doc/files/npmrc.html
  63. 2
      deps/npm/html/doc/files/package.json.html
  64. 4
      deps/npm/html/doc/index.html
  65. 2
      deps/npm/html/doc/misc/npm-coding-style.html
  66. 17
      deps/npm/html/doc/misc/npm-config.html
  67. 2
      deps/npm/html/doc/misc/npm-developers.html
  68. 12
      deps/npm/html/doc/misc/npm-disputes.html
  69. 4
      deps/npm/html/doc/misc/npm-index.html
  70. 2
      deps/npm/html/doc/misc/npm-orgs.html
  71. 2
      deps/npm/html/doc/misc/npm-registry.html
  72. 2
      deps/npm/html/doc/misc/npm-scope.html
  73. 2
      deps/npm/html/doc/misc/npm-scripts.html
  74. 2
      deps/npm/html/doc/misc/removing-npm.html
  75. 2
      deps/npm/html/doc/misc/semver.html
  76. 27
      deps/npm/lib/cache/add-named.js
  77. 3
      deps/npm/lib/config/cmd-list.js
  78. 4
      deps/npm/lib/config/defaults.js
  79. 109
      deps/npm/lib/doctor.js
  80. 55
      deps/npm/lib/doctor/check-files-permission.js
  81. 13
      deps/npm/lib/doctor/check-ping.js
  82. 62
      deps/npm/lib/doctor/checksum-cached-files.js
  83. 13
      deps/npm/lib/doctor/get-git-path.js
  84. 26
      deps/npm/lib/doctor/get-latest-nodejs-version.js
  85. 13
      deps/npm/lib/doctor/get-latest-npm-version.js
  86. 32
      deps/npm/lib/fetch-package-metadata.js
  87. 8
      deps/npm/lib/install.js
  88. 8
      deps/npm/lib/install/deps.js
  89. 30
      deps/npm/lib/install/diff-trees.js
  90. 6
      deps/npm/lib/install/save.js
  91. 3
      deps/npm/lib/npm.js
  92. 7
      deps/npm/lib/outdated.js
  93. 86
      deps/npm/lib/prune.js
  94. 3
      deps/npm/lib/uninstall.js
  95. 7
      deps/npm/lib/utils/ansi-trim.js
  96. 5
      deps/npm/lib/utils/error-handler.js
  97. 39
      deps/npm/lib/utils/metrics-launch.js
  98. 73
      deps/npm/lib/utils/metrics.js
  99. 26
      deps/npm/lib/utils/pick-manifest-from-registry-metadata.js
  100. 2
      deps/npm/man/man1/npm-README.1

1
deps/npm/AUTHORS

@ -445,3 +445,4 @@ Alex Jordan <alex@strugee.net>
Ville Lahdenvuo <tuhoojabotti@gmail.com>
Natalie Wolfe <nwolfe@newrelic.com>
Andrew Schmadel <aschmadel@learningobjects.com>
Jonah Moses <jonahkmoses@gmail.com>

220
deps/npm/CHANGELOG.md

@ -1,3 +1,216 @@
### v4.1.1 (2016-12-16)
This fixes a bug in the metrics reporting where, if you had enabled it then
installs would create a metrics reporting process, that would create a
metrics reporting process, that would… well, you get the idea. The only
way to actually kill these processes is to turn off your networking, then
on MacOS/Linux kill them with `kill -9`. Alternatively you can just reboot.
Anyway, this is a quick release to fix that bug:
* [`51c393f`](https://github.com/npm/npm/commit/51c393feff5f4908c8a9fb02baef505b1f2259be)
[#15237](https://github.com/npm/npm/pull/15237)
Don't launch a metrics sender process if we're runnning from a metrics
sender process.
([@iarna](https://github.com/iarna))
### v4.1.0 (2016-12-15)
I'm really excited about `npm@4.1.0`. I know, I know, I'm kinda overexcited
in my changelogs, but this one is GREAT. We've got a WHOLE NEW subcommand, I
mean, when was the last time you saw that? YEARS! And we have the beginnings
of usage metrics reporting. Then there's a fix for a really subtle bug that
resulted in `shasum` errors. And then we also have a few more bug fixes and
other improvements.
#### ANONYMOUS METRIC REPORTING
We're adding the ability for you all to help us track the quality of your
experiences using `npm`. Metrics will be sent if you run:
```
npm config set send-metrics true
```
Then `npm` will report to `registry.npmjs.org` the number of successful and
failed installations you've had. The data contains no identifying
information and npm will not attempt to correlate things like IP address
with the metrics being submitted.
Currently we only track number of successful and failed installations. In
the future we would like to find additional metrics to help us better
quantify the quality of the `npm` experience.
* [`190a658`](https://github.com/npm/npm/commit/190a658c4222f6aa904cbc640fc394a5c875e4db)
[#15084](https://github.com/npm/npm/pull/15084)
Add facility for recording and reporting success metrics.
([@iarna](https://github.com/iarna))
* [`87afc8b`](https://github.com/npm/npm/commit/87afc8b466f553fb49746c932c259173de48d0a4)
[npm/npm-registry-client#147](https://github.com/npm/npm-registry-client/pull/148)
`npm-registry-client@7.4.5`:
Add support for sending anonymous CLI metrics.
([@iarna](https://github.com/iarna),
[@sisidovski](https://github.com/sisidovski))
### NPM DOCTOR
<pre>
<u>Check</u> <u>Value</u> <u>Recommendation</u>
npm ping ok
npm -v v4.0.5
node -v v4.6.1 Use node v6.9.2
npm config get registry https://registry.npmjs.org/
which git /Users/rebecca/bin/git
Perms check on cached files ok
Perms check on global node_modules ok
Perms check on local node_modules ok
Checksum cached files ok
</pre>
It's a rare day that we add a new command to `npm`, so I'm excited to
present to you `npm doctor`. It checks for a number of common problems and
provides some recommended solutions. It was put together through the hard
work of [@watilde](https://github.com/watilde).
* [`2359505`](https://github.com/npm/npm/commit/23595055669f76c9fe8f5f1cf4a705c2e794f0dc)
[`0209ee5`](https://github.com/npm/npm/commit/0209ee50448441695fbf9699019d34178b69ba73)
[#14582](https://github.com/npm/npm/pull/14582)
Add new `npm doctor` to give your project environment a health check.
([@watilde](https://github.com/watilde))
#### FIX MAJOR SOURCE OF SHASUM ERRORS
If you've been getting intermittent shasum errors then you'll be pleased to
know that we've tracked down at least one source of them, if not THE source
of them.
* [`87afc8b`](https://github.com/npm/npm/commit/87afc8b466f553fb49746c932c259173de48d0a4)
[#14626](https://github.com/npm/npm/issues/14626)
[npm/npm-registry-client#148](https://github.com/npm/npm-registry-client/pull/148)
`npm-registry-client@7.4.5`:
Fix a bug where an `ECONNRESET` while fetching a package file would result
in a partial download that would be reported as a "shasum mismatch". It
now throws away the partial download and retries it.
([@iarna](https://github.com/iarna))
#### FILE URLS AND NODE.JS 7
When `npm` was formatting `file` URLs we took advantage of `url.format` to
construct them. Node.js 7 changed the behavior in such a way that our use of
`url.format` stopped producing URLs that we could make use of.
The reasons for this have to do with the `file` URL specification and how
invalid (according to the specification) URLs are handled. How this changed
is most easily explained with a table:
<table>
<tr><th></th><th>URL</th><th>Node.js &lt;= 6</th><th><tt>npm</tt>'s understanding</th><th>Node.js 7</th><th><tt>npm</tt>'s understanding</th></tr>
<tr><td>VALID</td><td><tt>file:///abc/def</tt></td><td><tt>file:///abc/def</tt></td><td><tt>/abc/def</tt></td><td><tt>file:///abc/def</tt></td><td><tt>/abc/def</tt></td></tr>
<tr><td>invalid</td><td><tt>file:/abc/def</tt></td><td><tt>file:/abc/def</tt></td><td><tt>/abc/def</tt></td><td><tt>file:///abc/def</tt></td><td><tt>/abc/def</tt></td></tr>
<tr><td>invalid</td><td><tt>file:abc/def</tt></td><td><tt>file:abc/def</tt></td><td><tt>$CWD/abc/def</tt></td><td><tt>file://abc/def</tt></td><td><tt>/def</tt> on the <tt>abc</tt> host</td></tr>
<tr><td>invalid</td><td><tt>file:../abc/def</tt></td><td><tt>file:../abc/def</tt></td><td><tt>$CWD/../abc/def</tt></td><td><tt>file://../abc/def</tt></td><td><tt>/abc/def</tt> on the <tt>..</tt> host</td></tr>
</table>
So the result was that passing a `file` URL that npm had received that used
through Node.js 7's `url.format` changed its meaning as far as `npm` was
concerned. As those kinds of URLs are, per the specification, invalid, how
they should be handled is undefined and so the change in Node.js wasn't a
bug per se.
Our solution is to stop using `url.format` when constructing this kind of
URL.
* [`173935b`](https://github.com/npm/npm/commit/173935b4298e09c4fdcb8f3a44b06134d5aff181)
[#15114](https://github.com/npm/npm/issues/15114)
Stop using `url.format` for relative local dep paths.
([@zkat](https://github.com/zkat))
#### EXTRANEOUS LIFECYCLE SCRIPT EXECUTION WHEN REMOVING
* [`afb1dfd`](https://github.com/npm/npm/commit/afb1dfd944e57add25a05770c0d52d983dc4e96c)
[#15090](https://github.com/npm/npm/pull/15090)
Skip top level lifecycles when uninstalling.
([@iarna](https://github.com/iarna))
#### REFACTORING AND INTERNALS
* [`c9b279a`](https://github.com/npm/npm/commit/c9b279aca0fcb8d0e483e534c7f9a7250e2a9392)
[#15205](https://github.com/npm/npm/pull/15205)
[#15196](https://github.com/npm/npm/pull/15196)
Only have one function that determines which version of a package to use
given a specifier and a list of versions.
([@iarna](https://github.com/iarna),
[@zkat](https://github.com/zkat))
* [`981ce63`](https://github.com/npm/npm/commit/981ce6395e7892dde2591b44e484e191f8625431)
[#15090](https://github.com/npm/npm/pull/15090)
Rewrite prune to use modern npm plumbing.
([@iarna](https://github.com/iarna))
* [`bc4b739`](https://github.com/npm/npm/commit/bc4b73911f58a11b4a2d28b49e24b4dd7365f95b)
[#15089](https://github.com/npm/npm/pull/15089)
Rename functions and variables in the module that computes what changes to
make to your installation.
([@iarna](https://github.com/iarna))
* [`2449f74`](https://github.com/npm/npm/commit/2449f74a202b3efdb1b2f5a83356a78ea9ecbe35)
[#15089](https://github.com/npm/npm/pull/15089)
When computing changes to make to your installation, use a function to add
new actions to take instead of just pushing on a list.
([@iarna](https://github.com/iarna))
#### IMPROVED LOGGING
* [`335933a`](https://github.com/npm/npm/commit/335933a05396258eead139d27eea3f7668ccdfab)
[#15089](https://github.com/npm/npm/pull/15089)
Log when we remove obsolete dependencies in the tree.
([@iarna](https://github.com/iarna))
#### DOCUMENTATION
* [`33ca4e6`](https://github.com/npm/npm/commit/33ca4e6db3c1878cbc40d5e862ab49bb0e82cfb2)
[#15157](https://github.com/npm/npm/pull/15157)
Update `npm cache` docs to use more consistent language
([@JonahMoses](https://github.com/JonahMoses))
#### DEPENDENCY UPDATES
* [`c2d22fa`](https://github.com/npm/npm/commit/c2d22faf916e8260136a1cc95913ca474421c0d3)
[#15215](https://github.com/npm/npm/pull/15215)
`nopt@4.0.1`:
The breaking change is a small tweak to how empty string values are
handled. See the brand-new
[CHANGELOG.md for nopt](https://github.com/npm/nopt/blob/v4.0.1/CHANGELOG.md) for further
details about what's changed in this release!
([@adius](https://github.com/adius),
[@samjonester](https://github.com/samjonester),
[@elidoran](https://github.com/elidoran),
[@helio](https://github.com/helio),
[@silkentrance](https://github.com/silkentrance),
[@othiym23](https://github.com/othiym23))
* [`54d949b`](https://github.com/npm/npm/commit/54d949b05adefffeb7b5b10229c5fe0ccb929ac3)
[npm/lockfile#24](https://github.com/npm/lockfile/pull/24)
`lockfile@1.0.3`:
Handled case where callback was not passed in by the user.
([@ORESoftware](https://github.com/ORESoftware))
* [`54acc03`](https://github.com/npm/npm/commit/54acc0389b39850c0725d0868cb5e61317b57503)
`npmlog@4.0.2`:
Documentation update.
([@helio-frota](https://github.com/helio-frota))
* [`57f4bc1`](https://github.com/npm/npm/commit/57f4bc1150322294c1ea0a287ad0a8e457c151e6)
`osenv@0.1.4`:
Test changes.
([@isaacs](https://github.com/isaacs))
* [`bea1a2d`](https://github.com/npm/npm/commit/bea1a2d0db566560e13ecc1d5f42e55811269c88)
`retry@0.10.1`:
No changes.
([@tim-kos](https://github.com/tim-kos))
* [`6749e39`](https://github.com/npm/npm/commit/6749e395f868109afd97f79d36507e6567dd48fb)
[kapouer/marked-man#9](https://github.com/kapouer/marked-man/pull/9)
`marked-man@0.2.0`:
Add table support.
([@gholk](https://github.com/gholk))
### v4.0.5 (2016-12-01)
It's that time of year! December is upon us, which means y'all are just going to
@ -49,13 +262,13 @@ On to the actual changes!
`EPERM` errors are Windows are now handled more gracefully. Windows users that
tended to see these errors due to, say, an antivirus-induced race condition,
should see them much more rarely, if at all.
([@Kat Marchán](https://github.com/Kat Marchán))
([@zkatr](https://github.com/zkat))
* [`85b0174`](https://github.com/npm/npm/commit/85b0174ba9842e8e89f3c33d009e4b4a9e877c7d)
`request@2.79.0`
([@Kat Marchán](https://github.com/Kat Marchán))
([@zkat](https://github.com/zkat))
* [`9664d36`](https://github.com/npm/npm/commit/9664d36653503247737630440bc2ff657de965c3)
`tap@8.0.1`
([@Kat Marchán](https://github.com/Kat Marchán))
([@zkat](https://github.com/zkat))
#### MISCELLANEOUS
@ -596,6 +809,7 @@ sending `Npm-Scope` and `Npm-In-CI` headers in outgoing requests.
* [`846f61c`](https://github.com/npm/npm/commit/846f61c1dd4a033f77aa736ab01c27ae6724fe1c)
[npm/npm-registry-client#145](https://github.com/npm/npm-registry-client/pull/145)
[npm/npm-registry-client#147](https://github.com/npm/npm-registry-client/pull/147)
`npm-registry-client@7.3.0`:
* Allow npm to add headers to outgoing requests.
* Add `Npm-In-CI` header that reports whether we're running in CI.

5
deps/npm/doc/cli/npm-cache.md

@ -11,10 +11,11 @@ npm-cache(1) -- Manipulates packages cache
npm cache ls [<path>]
npm cache clean [<path>]
aliases: npm cache clear, npm cache rm
## DESCRIPTION
Used to add, list, or clear the npm cache folder.
Used to add, list, or clean the npm cache folder.
* add:
Add the specified package to the local cache. This command is primarily
@ -29,7 +30,7 @@ Used to add, list, or clear the npm cache folder.
* clean:
Delete data out of the cache folder. If an argument is provided, then
it specifies a subpath to delete. If no argument is provided, then
the entire cache is cleared.
the entire cache is deleted.
## DETAILS

102
deps/npm/doc/cli/npm-doctor.md

@ -0,0 +1,102 @@
npm-doctor(1) -- Check your environments
========================================================
## SYNOPSIS
npm doctor
## DESCRIPTION
`npm doctor` runs a set of checks to ensure that your npm installation has
what it needs to manage your JavaScript packages. npm is mostly a standalone tool, but it does
have some basic requirements that must be met:
+ Node.js and git must be executable by npm.
+ The primary npm registry, `registry.npmjs.com`, or another service that uses
the registry API, is available.
+ The directories that npm uses, `node_modules` (both locally and globally),
exist and can be written by the current user.
+ The npm cache exists, and the package tarballs within it aren't corrupt.
Without all of these working properly, npm may not work properly. Many issues
are often attributable to things that are outside npm's code base, so `npm
doctor` confirms that the npm installation is in a good state.
Also, in addition to this, there are also very many issue reports due to using
old versions of npm. Since npm is constantly improving, running `npm@latest` is
better than an old version.
`npm doctor` verifies the following items in your environment, and if there are
any recommended changes, it will display them.
### `npm ping`
By default, npm installs from the primary npm registry, `registry.npmjs.org`.
`npm doctor` hits a special ping endpoint within the registry. This can also be
checked with `npm ping`. If this check fails, you may be using a proxy that
needs to be configured, or may need to talk to your IT staff to get access over
HTTPS to `registry.npmjs.org`.
This check is done against whichever registry you've configured (you can see
what that is by running `npm config get registry`), and if you're using a
private registry that doesn't support the `/whoami` endpoint supported by the
primary registry, this check may fail.
### `npm -v`
While Node.js may come bundled with a particular version of npm, it's the
policy of the CLI team that we recommend all users run `npm@latest` if they
can. As the CLI is maintained by a small team of contributors, there are only
resources for a single line of development, so npm's own long-term support
releases typically only receive critical security and regression fixes. The
team believes that the latest tested version of npm is almost always likely to
be the most functional and defect-free version of npm.
### `node -v`
For most users, in most circumstances, the best version of Node will be the
latest long-term support (LTS) release. Those of you who want access to new
ECMAscript features or bleeding-edge changes to Node's standard library may be
running a newer version, and some of you may be required to run an older
version of Node because of enterprise change control policies. That's OK! But
in general, the npm team recommends that most users run Node.js LTS.
### `npm config get registry`
Some of you may be installing from private package registries for your project
or company. That's great! Others of you may be following tutorials or
StackOverflow questions in an effort to troubleshoot problems you may be
having. Sometimes, this may entail changing the registry you're pointing at.
This part of `npm doctor` just lets you, and maybe whoever's helping you with
support, know that you're not using the default registry.
### `which git`
While it's documented in the README, it may not be obvious that npm needs Git
installed to do many of the things that it does. Also, in some cases
– especially on Windows – you may have Git set up in such a way that it's not
accessible via your `PATH` so that npm can find it. This check ensures that Git
is available.
### Permissions checks
* Your cache must be readable and writable by the user running npm.
* Global package binaries must be writable by the user running npm.
* Your local `node_modules` path, if you're running `npm doctor` with a project
directory, must be readable and writable by the user running npm.
### Validate the checksums of cached packages
When an npm package is published, the publishing process generates a checksum
that npm uses at install time to verify that the package didn't get corrupted
in transit. `npm doctor` uses these checksums to validate the package tarballs
in your local cache (you can see where that cache is located with `npm config
get cache`, and see what's in that cache with `npm cache ls` – probably more
than you were expecting!). In the event that there are corrupt packages in your
cache, you should probably run `npm cache clean` and reset the cache.
## SEE ALSO
* npm-bugs(1)
* npm-help(1)
* npm-ping(1)

17
deps/npm/doc/misc/npm-config.md

@ -600,6 +600,13 @@ Commit message which is used by `npm version` when creating version commit.
Any "%s" in the message will be replaced with the version number.
### metrics-registry
* Default: "https://registry.npmjs.org/"
* Type: String
The registry you want to send cli metrics to if `send-metrics` is true.
### node-version
* Default: process.version
@ -844,6 +851,16 @@ Space-separated options that are always passed to search.
The age of the cache, in seconds, before another registry request is made.
### send-metrics
* Default: false
* Type: Boolean
If true, success/failure metrics will be reported to the registry stored in
`metrics-registry`. These requests contain the number of successful and
failing runs of the npm CLI and the time period overwhich those counts were
gathered. No identifying information is included in these requests.
### shell
* Default: SHELL environment variable, or "bash" on Posix, or "cmd" on

4
deps/npm/doc/misc/npm-index.md

@ -65,6 +65,10 @@ Modify package distribution tags
Docs for a package in a web browser maybe
### npm-doctor(1)
Check your environments
### npm-edit(1)
Edit an installed package

2
deps/npm/html/doc/README.html

@ -126,5 +126,5 @@ will no doubt tell you to put the output in a gist or email.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@4.0.5</p>
<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-access.html

@ -84,5 +84,5 @@ with an HTTP 402 status code (logically enough), unless you use
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-access &mdash; npm@4.0.5</p>
<p id="footer">npm-access &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-adduser.html

@ -73,5 +73,5 @@ over any global configuration.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-adduser &mdash; npm@4.0.5</p>
<p id="footer">npm-adduser &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-bin.html

@ -35,5 +35,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-bin &mdash; npm@4.0.5</p>
<p id="footer">npm-bin &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-bugs.html

@ -55,5 +55,5 @@ a <code>package.json</code> in the current folder and use the <code>name</code>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-bugs &mdash; npm@4.0.5</p>
<p id="footer">npm-bugs &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-build.html

@ -40,5 +40,5 @@ directly, run:</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-build &mdash; npm@4.0.5</p>
<p id="footer">npm-build &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-bundle.html

@ -31,5 +31,5 @@ install packages into the local space.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-bundle &mdash; npm@4.0.5</p>
<p id="footer">npm-bundle &mdash; npm@4.1.1</p>

7
deps/npm/html/doc/cli/npm-cache.html

@ -19,8 +19,9 @@ npm cache add &lt;name&gt;@&lt;version&gt;
npm cache ls [&lt;path&gt;]
npm cache clean [&lt;path&gt;]
aliases: npm cache clear, npm cache rm
</code></pre><h2 id="description">DESCRIPTION</h2>
<p>Used to add, list, or clear the npm cache folder.</p>
<p>Used to add, list, or clean the npm cache folder.</p>
<ul>
<li><p>add:
Add the specified package to the local cache. This command is primarily
@ -35,7 +36,7 @@ folder. Works a bit like the <code>find</code> program, but limited by the
<li><p>clean:
Delete data out of the cache folder. If an argument is provided, then
it specifies a subpath to delete. If no argument is provided, then
the entire cache is cleared.</p>
the entire cache is deleted.</p>
</li>
</ul>
<h2 id="details">DETAILS</h2>
@ -81,5 +82,5 @@ they do not make an HTTP request to the registry.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-cache &mdash; npm@4.0.5</p>
<p id="footer">npm-cache &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-completion.html

@ -43,5 +43,5 @@ completions based on the arguments.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-completion &mdash; npm@4.0.5</p>
<p id="footer">npm-completion &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-config.html

@ -67,5 +67,5 @@ global config.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-config &mdash; npm@4.0.5</p>
<p id="footer">npm-config &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-dedupe.html

@ -61,5 +61,5 @@ result in new modules being installed.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-dedupe &mdash; npm@4.0.5</p>
<p id="footer">npm-dedupe &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-deprecate.html

@ -38,5 +38,5 @@ something like this:</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-deprecate &mdash; npm@4.0.5</p>
<p id="footer">npm-deprecate &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-dist-tag.html

@ -86,5 +86,5 @@ begin with a number or the letter <code>v</code>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-dist-tag &mdash; npm@4.0.5</p>
<p id="footer">npm-dist-tag &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-docs.html

@ -56,5 +56,5 @@ the current folder and use the <code>name</code> property.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-docs &mdash; npm@4.0.5</p>
<p id="footer">npm-docs &mdash; npm@4.1.1</p>

106
deps/npm/html/doc/cli/npm-doctor.html

@ -0,0 +1,106 @@
<!doctype html>
<html>
<title>npm-doctor</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="../../static/style.css">
<link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-doctor.html">
<script async=true src="../../static/toc.js"></script>
<body>
<div id="wrapper">
<h1><a href="../cli/npm-doctor.html">npm-doctor</a></h1> <p>Check your environments</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm doctor
</code></pre><h2 id="description">DESCRIPTION</h2>
<p><code>npm doctor</code> runs a set of checks to ensure that your npm installation has
what it needs to manage your JavaScript packages. npm is mostly a standalone tool, but it does
have some basic requirements that must be met:</p>
<ul>
<li>Node.js and git must be executable by npm.</li>
<li>The primary npm registry, <code>registry.npmjs.com</code>, or another service that uses
the registry API, is available.</li>
<li>The directories that npm uses, <code>node_modules</code> (both locally and globally),
exist and can be written by the current user.</li>
<li>The npm cache exists, and the package tarballs within it aren&#39;t corrupt.</li>
</ul>
<p>Without all of these working properly, npm may not work properly. Many issues
are often attributable to things that are outside npm&#39;s code base, so <code>npm
doctor</code> confirms that the npm installation is in a good state.</p>
<p>Also, in addition to this, there are also very many issue reports due to using
old versions of npm. Since npm is constantly improving, running <code>npm@latest</code> is
better than an old version.</p>
<p><code>npm doctor</code> verifies the following items in your environment, and if there are
any recommended changes, it will display them.</p>
<h3 id="-npm-ping-"><code>npm ping</code></h3>
<p>By default, npm installs from the primary npm registry, <code>registry.npmjs.org</code>.
<code>npm doctor</code> hits a special ping endpoint within the registry. This can also be
checked with <code>npm ping</code>. If this check fails, you may be using a proxy that
needs to be configured, or may need to talk to your IT staff to get access over
HTTPS to <code>registry.npmjs.org</code>.</p>
<p>This check is done against whichever registry you&#39;ve configured (you can see
what that is by running <code>npm config get registry</code>), and if you&#39;re using a
private registry that doesn&#39;t support the <code>/whoami</code> endpoint supported by the
primary registry, this check may fail.</p>
<h3 id="-npm-v-"><code>npm -v</code></h3>
<p>While Node.js may come bundled with a particular version of npm, it&#39;s the
policy of the CLI team that we recommend all users run <code>npm@latest</code> if they
can. As the CLI is maintained by a small team of contributors, there are only
resources for a single line of development, so npm&#39;s own long-term support
releases typically only receive critical security and regression fixes. The
team believes that the latest tested version of npm is almost always likely to
be the most functional and defect-free version of npm.</p>
<h3 id="-node-v-"><code>node -v</code></h3>
<p>For most users, in most circumstances, the best version of Node will be the
latest long-term support (LTS) release. Those of you who want access to new
ECMAscript features or bleeding-edge changes to Node&#39;s standard library may be
running a newer version, and some of you may be required to run an older
version of Node because of enterprise change control policies. That&#39;s OK! But
in general, the npm team recommends that most users run Node.js LTS.</p>
<h3 id="-npm-config-get-registry-"><code>npm config get registry</code></h3>
<p>Some of you may be installing from private package registries for your project
or company. That&#39;s great! Others of you may be following tutorials or
StackOverflow questions in an effort to troubleshoot problems you may be
having. Sometimes, this may entail changing the registry you&#39;re pointing at.
This part of <code>npm doctor</code> just lets you, and maybe whoever&#39;s helping you with
support, know that you&#39;re not using the default registry.</p>
<h3 id="-which-git-"><code>which git</code></h3>
<p>While it&#39;s documented in the <a href="../../doc/README.html">README</a>, it may not be obvious that npm needs Git
installed to do many of the things that it does. Also, in some cases
– especially on Windows – you may have Git set up in such a way that it&#39;s not
accessible via your <code>PATH</code> so that npm can find it. This check ensures that Git
is available.</p>
<h3 id="permissions-checks">Permissions checks</h3>
<ul>
<li>Your cache must be readable and writable by the user running npm.</li>
<li>Global package binaries must be writable by the user running npm.</li>
<li>Your local <code>node_modules</code> path, if you&#39;re running <code>npm doctor</code> with a project
directory, must be readable and writable by the user running npm.</li>
</ul>
<h3 id="validate-the-checksums-of-cached-packages">Validate the checksums of cached packages</h3>
<p>When an npm package is published, the publishing process generates a checksum
that npm uses at install time to verify that the package didn&#39;t get corrupted
in transit. <code>npm doctor</code> uses these checksums to validate the package tarballs
in your local cache (you can see where that cache is located with <code>npm config
get cache</code>, and see what&#39;s in that cache with <code>npm cache ls</code> – probably more
than you were expecting!). In the event that there are corrupt packages in your
cache, you should probably run <code>npm cache clean</code> and reset the cache.</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-bugs.html">npm-bugs(1)</a></li>
<li><a href="../cli/npm-help.html">npm-help(1)</a></li>
<li><a href="../cli/npm-ping.html">npm-ping(1)</a></li>
</ul>
</div>
<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-doctor &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-edit.html

@ -49,5 +49,5 @@ or <code>&quot;notepad&quot;</code> on Windows.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-edit &mdash; npm@4.0.5</p>
<p id="footer">npm-edit &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-explore.html

@ -49,5 +49,5 @@ Windows</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-explore &mdash; npm@4.0.5</p>
<p id="footer">npm-explore &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-help-search.html

@ -45,5 +45,5 @@ where the terms were found in the documentation.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-help-search &mdash; npm@4.0.5</p>
<p id="footer">npm-help-search &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-help.html

@ -50,5 +50,5 @@ matches are equivalent to specifying a topic name.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-help &mdash; npm@4.0.5</p>
<p id="footer">npm-help &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-init.html

@ -48,5 +48,5 @@ defaults and not prompt you for any options.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-init &mdash; npm@4.0.5</p>
<p id="footer">npm-init &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-install-test.html

@ -42,5 +42,5 @@ takes exactly the same arguments as <code>npm install</code>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-install-test &mdash; npm@4.0.5</p>
<p id="footer">npm-install-test &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-install.html

@ -316,5 +316,5 @@ affects a real use-case, it will be investigated.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-install &mdash; npm@4.0.5</p>
<p id="footer">npm-install &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-link.html

@ -74,5 +74,5 @@ include that scope, e.g.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-link &mdash; npm@4.0.5</p>
<p id="footer">npm-link &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-logout.html

@ -51,5 +51,5 @@ it takes precedence.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-logout &mdash; npm@4.0.5</p>
<p id="footer">npm-logout &mdash; npm@4.1.1</p>

4
deps/npm/html/doc/cli/npm-ls.html

@ -21,7 +21,7 @@ installed, as well as their dependencies, in a tree-structure.</p>
limit the results to only the paths to the packages named. Note that
nested packages will <em>also</em> show the paths to the specified packages.
For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
<pre><code>npm@4.0.5 /path/to/npm
<pre><code>npm@4.1.1 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
</code></pre><p>It will print out extraneous, missing, and invalid packages.</p>
@ -104,5 +104,5 @@ project.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-ls &mdash; npm@4.0.5</p>
<p id="footer">npm-ls &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-outdated.html

@ -116,5 +116,5 @@ project.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-outdated &mdash; npm@4.0.5</p>
<p id="footer">npm-outdated &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-owner.html

@ -51,5 +51,5 @@ that is not implemented at this time.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-owner &mdash; npm@4.0.5</p>
<p id="footer">npm-owner &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-pack.html

@ -41,5 +41,5 @@ overwritten the second time.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-pack &mdash; npm@4.0.5</p>
<p id="footer">npm-pack &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-ping.html

@ -32,5 +32,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-ping &mdash; npm@4.0.5</p>
<p id="footer">npm-ping &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-prefix.html

@ -38,5 +38,5 @@ to contain a package.json file unless <code>-g</code> is also specified.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-prefix &mdash; npm@4.0.5</p>
<p id="footer">npm-prefix &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-prune.html

@ -40,5 +40,5 @@ negate <code>NODE_ENV</code> being set to <code>production</code>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-prune &mdash; npm@4.0.5</p>
<p id="footer">npm-prune &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-publish.html

@ -76,5 +76,5 @@ packs them into a tarball to be uploaded to the registry.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-publish &mdash; npm@4.0.5</p>
<p id="footer">npm-publish &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-rebuild.html

@ -35,5 +35,5 @@ the new binary.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-rebuild &mdash; npm@4.0.5</p>
<p id="footer">npm-rebuild &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-repo.html

@ -41,5 +41,5 @@ a <code>package.json</code> in the current folder and use the <code>name</code>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-repo &mdash; npm@4.0.5</p>
<p id="footer">npm-repo &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-restart.html

@ -53,5 +53,5 @@ behavior will be accompanied by an increase in major version number</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-restart &mdash; npm@4.0.5</p>
<p id="footer">npm-restart &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-root.html

@ -35,5 +35,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-root &mdash; npm@4.0.5</p>
<p id="footer">npm-root &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-run-script.html

@ -66,5 +66,5 @@ you will be given a warning to run <code>npm install</code>, just in case you&#3
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-run-script &mdash; npm@4.0.5</p>
<p id="footer">npm-run-script &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-search.html

@ -109,5 +109,5 @@ setting.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-search &mdash; npm@4.0.5</p>
<p id="footer">npm-search &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-shrinkwrap.html

@ -180,5 +180,5 @@ contents rather than versions.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-shrinkwrap &mdash; npm@4.0.5</p>
<p id="footer">npm-shrinkwrap &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-star.html

@ -36,5 +36,5 @@ a vaguely positive way to show that you care.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-star &mdash; npm@4.0.5</p>
<p id="footer">npm-star &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-stars.html

@ -36,5 +36,5 @@ you will most certainly enjoy this command.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-stars &mdash; npm@4.0.5</p>
<p id="footer">npm-stars &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-start.html

@ -39,5 +39,5 @@ more details.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-start &mdash; npm@4.0.5</p>
<p id="footer">npm-start &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-stop.html

@ -34,5 +34,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-stop &mdash; npm@4.0.5</p>
<p id="footer">npm-stop &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-team.html

@ -67,5 +67,5 @@ use the <code>npm access</code> command to grant or revoke the appropriate permi
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-team &mdash; npm@4.0.5</p>
<p id="footer">npm-team &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-test.html

@ -36,5 +36,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-test &mdash; npm@4.0.5</p>
<p id="footer">npm-test &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-uninstall.html

@ -60,5 +60,5 @@ npm uninstall dtrace-provider --save-optional
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-uninstall &mdash; npm@4.0.5</p>
<p id="footer">npm-uninstall &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-unpublish.html

@ -47,5 +47,5 @@ package again, a new version number must be used.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-unpublish &mdash; npm@4.0.5</p>
<p id="footer">npm-unpublish &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-update.html

@ -118,5 +118,5 @@ be <em>downgraded</em>.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-update &mdash; npm@4.0.5</p>
<p id="footer">npm-update &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-version.html

@ -107,5 +107,5 @@ and tag up to the server, and deletes the <code>build/temp</code> directory.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-version &mdash; npm@4.0.5</p>
<p id="footer">npm-version &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-view.html

@ -86,5 +86,5 @@ the field name.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-view &mdash; npm@4.0.5</p>
<p id="footer">npm-view &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/cli/npm-whoami.html

@ -33,5 +33,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-whoami &mdash; npm@4.0.5</p>
<p id="footer">npm-whoami &mdash; npm@4.1.1</p>

6
deps/npm/html/doc/cli/npm.html

@ -13,7 +13,7 @@
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm &lt;command&gt; [args]
</code></pre><h2 id="version">VERSION</h2>
<p>4.0.5</p>
<p>4.1.1</p>
<h2 id="description">DESCRIPTION</h2>
<p>npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
@ -126,7 +126,7 @@ will no doubt tell you to put the output in a gist or email.</p>
<p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
<a href="https://github.com/isaacs/">isaacs</a> ::
<a href="http://twitter.com/izs">@izs</a> ::
<a href="&#109;&#x61;&#x69;&#108;&#x74;&#x6f;&#58;&#x69;&#x40;&#x69;&#x7a;&#x73;&#x2e;&#x6d;&#x65;">&#x69;&#x40;&#x69;&#x7a;&#x73;&#x2e;&#x6d;&#x65;</a></p>
<a href="&#x6d;&#97;&#105;&#x6c;&#x74;&#x6f;&#x3a;&#x69;&#x40;&#x69;&#122;&#115;&#x2e;&#x6d;&#101;">&#x69;&#x40;&#x69;&#122;&#115;&#x2e;&#x6d;&#101;</a></p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-help.html">npm-help(1)</a></li>
@ -150,5 +150,5 @@ will no doubt tell you to put the output in a gist or email.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm &mdash; npm@4.0.5</p>
<p id="footer">npm &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/files/npm-folders.html

@ -182,5 +182,5 @@ cannot be found elsewhere. See <code><a href="../files/package.json.html">packa
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-folders &mdash; npm@4.0.5</p>
<p id="footer">npm-folders &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/files/npm-global.html

@ -182,5 +182,5 @@ cannot be found elsewhere. See <code><a href="../files/package.json.html">packa
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-folders &mdash; npm@4.0.5</p>
<p id="footer">npm-folders &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/files/npm-json.html

@ -586,5 +586,5 @@ ignored.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">package.json &mdash; npm@4.0.5</p>
<p id="footer">package.json &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/files/npmrc.html

@ -85,5 +85,5 @@ manner.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npmrc &mdash; npm@4.0.5</p>
<p id="footer">npmrc &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/files/package.json.html

@ -586,5 +586,5 @@ ignored.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">package.json &mdash; npm@4.0.5</p>
<p id="footer">package.json &mdash; npm@4.1.1</p>

4
deps/npm/html/doc/index.html

@ -42,6 +42,8 @@
<p>Modify package distribution tags</p>
<h3 id="npm-docs-1-"><a href="cli/npm-docs.html">npm-docs(1)</a></h3>
<p>Docs for a package in a web browser maybe</p>
<h3 id="npm-doctor-1-"><a href="cli/npm-doctor.html">npm-doctor(1)</a></h3>
<p>Check your environments</p>
<h3 id="npm-edit-1-"><a href="cli/npm-edit.html">npm-edit(1)</a></h3>
<p>Edit an installed package</p>
<h3 id="npm-explore-1-"><a href="cli/npm-explore.html">npm-explore(1)</a></h3>
@ -160,5 +162,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-index &mdash; npm@4.0.5</p>
<p id="footer">npm-index &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/misc/npm-coding-style.html

@ -153,5 +153,5 @@ set to anything.&quot;</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-coding-style &mdash; npm@4.0.5</p>
<p id="footer">npm-coding-style &mdash; npm@4.1.1</p>

17
deps/npm/html/doc/misc/npm-config.html

@ -517,6 +517,12 @@ combination). Passed to the <code>http</code> <code>Agent</code> used to make th
</ul>
<p>Commit message which is used by <code>npm version</code> when creating version commit.</p>
<p>Any &quot;%s&quot; in the message will be replaced with the version number.</p>
<h3 id="metrics-registry">metrics-registry</h3>
<ul>
<li>Default: &quot;<a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a>&quot;</li>
<li>Type: String</li>
</ul>
<p>The registry you want to send cli metrics to if <code>send-metrics</code> is true.</p>
<h3 id="node-version">node-version</h3>
<ul>
<li>Default: process.version</li>
@ -722,6 +728,15 @@ first on the <code>PATH</code> are different.</p>
<li>Type: Number</li>
</ul>
<p>The age of the cache, in seconds, before another registry request is made.</p>
<h3 id="send-metrics">send-metrics</h3>
<ul>
<li>Default: false</li>
<li>Type: Boolean</li>
</ul>
<p>If true, success/failure metrics will be reported to the registry stored in
<code>metrics-registry</code>. These requests contain the number of successful and
failing runs of the npm CLI and the time period overwhich those counts were
gathered. No identifying information is included in these requests.</p>
<h3 id="shell">shell</h3>
<ul>
<li>Default: SHELL environment variable, or &quot;bash&quot; on Posix, or &quot;cmd&quot; on
@ -872,5 +887,5 @@ exit successfully.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-config &mdash; npm@4.0.5</p>
<p id="footer">npm-config &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/misc/npm-developers.html

@ -194,5 +194,5 @@ from a fresh checkout.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-developers &mdash; npm@4.0.5</p>
<p id="footer">npm-developers &mdash; npm@4.1.1</p>

12
deps/npm/html/doc/misc/npm-disputes.html

@ -20,7 +20,7 @@ Conduct.</p>
<h2 id="tl-dr">TL;DR</h2>
<ol>
<li>Get the author email with <code>npm owner ls &lt;pkgname&gt;</code></li>
<li>Email the author, CC <a href="&#x6d;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#x73;&#117;&#112;&#x70;&#111;&#114;&#116;&#x40;&#110;&#x70;&#x6d;&#x6a;&#x73;&#46;&#x63;&#111;&#109;">&#x73;&#117;&#112;&#x70;&#111;&#114;&#116;&#x40;&#110;&#x70;&#x6d;&#x6a;&#x73;&#46;&#x63;&#111;&#109;</a></li>
<li>Email the author, CC <a href="&#109;&#97;&#x69;&#108;&#116;&#x6f;&#x3a;&#115;&#x75;&#x70;&#112;&#111;&#x72;&#116;&#64;&#x6e;&#x70;&#109;&#106;&#115;&#x2e;&#99;&#x6f;&#109;">&#115;&#x75;&#x70;&#112;&#111;&#x72;&#116;&#64;&#x6e;&#x70;&#109;&#106;&#115;&#x2e;&#99;&#x6f;&#109;</a></li>
<li>After a few weeks, if there&#39;s no resolution, we&#39;ll sort it out.</li>
</ol>
<p>Don&#39;t squat on package names. Publish code or move out of the way.</p>
@ -55,12 +55,12 @@ because Yusuf&#39;s <code>foo</code> is in the way.</p>
</li>
<li>Alice emails Yusuf, explaining the situation <strong>as respectfully as possible</strong>,
and what she would like to do with the module name. She adds the npm support
staff <a href="&#x6d;&#x61;&#x69;&#108;&#116;&#111;&#58;&#115;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#x40;&#110;&#x70;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;">&#115;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#x40;&#110;&#x70;&#x6d;&#x6a;&#x73;&#x2e;&#x63;&#111;&#x6d;</a> to the CC list of the email. Mention in the email
staff <a href="&#x6d;&#x61;&#105;&#108;&#116;&#x6f;&#x3a;&#115;&#117;&#x70;&#x70;&#x6f;&#114;&#116;&#x40;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#111;&#109;">&#115;&#117;&#x70;&#x70;&#x6f;&#114;&#116;&#x40;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#111;&#109;</a> to the CC list of the email. Mention in the email
that Yusuf can run npm owner <code>add alice foo</code> to add Alice as an owner of the
foo package.</li>
<li>After a reasonable amount of time, if Yusuf has not responded, or if Yusuf
and Alice can&#39;t come to any sort of resolution, email support
<a href="&#109;&#97;&#x69;&#108;&#116;&#x6f;&#58;&#115;&#x75;&#112;&#112;&#x6f;&#x72;&#x74;&#64;&#x6e;&#x70;&#109;&#106;&#x73;&#46;&#x63;&#x6f;&#109;">&#115;&#x75;&#112;&#112;&#x6f;&#x72;&#x74;&#64;&#x6e;&#x70;&#109;&#106;&#x73;&#46;&#x63;&#x6f;&#109;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is usually at least
<a href="&#x6d;&#97;&#105;&#108;&#x74;&#x6f;&#x3a;&#x73;&#117;&#x70;&#112;&#x6f;&#114;&#116;&#x40;&#x6e;&#x70;&#109;&#x6a;&#115;&#x2e;&#x63;&#111;&#x6d;">&#x73;&#117;&#x70;&#112;&#x6f;&#114;&#116;&#x40;&#x6e;&#x70;&#109;&#x6a;&#115;&#x2e;&#x63;&#111;&#x6d;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is usually at least
4 weeks.)</li>
</ol>
<h2 id="reasoning">REASONING</h2>
@ -96,12 +96,12 @@ application database or otherwise putting non-packagey things into it.</li>
<a href="https://www.npmjs.com/policies/conduct">Code of Conduct</a> such as hateful
language, pornographic content, or harassment.</li>
</ol>
<p>If you see bad behavior like this, please report it to <a href="&#x6d;&#x61;&#105;&#x6c;&#x74;&#x6f;&#58;&#97;&#98;&#117;&#115;&#x65;&#x40;&#110;&#112;&#109;&#106;&#x73;&#x2e;&#99;&#111;&#x6d;">&#97;&#98;&#117;&#115;&#x65;&#x40;&#110;&#112;&#109;&#106;&#x73;&#x2e;&#99;&#111;&#x6d;</a> right
<p>If you see bad behavior like this, please report it to <a href="&#x6d;&#97;&#x69;&#108;&#116;&#111;&#58;&#97;&#98;&#x75;&#x73;&#x65;&#x40;&#x6e;&#x70;&#109;&#106;&#115;&#x2e;&#99;&#x6f;&#109;">&#97;&#98;&#x75;&#x73;&#x65;&#x40;&#x6e;&#x70;&#109;&#106;&#115;&#x2e;&#99;&#x6f;&#109;</a> right
away. <strong>You are never expected to resolve abusive behavior on your own. We are
here to help.</strong></p>
<h2 id="trademarks">TRADEMARKS</h2>
<p>If you think another npm publisher is infringing your trademark, such as by
using a confusingly similar package name, email <a href="&#109;&#x61;&#105;&#108;&#116;&#x6f;&#x3a;&#97;&#98;&#x75;&#x73;&#x65;&#x40;&#110;&#x70;&#x6d;&#106;&#x73;&#46;&#99;&#111;&#109;">&#97;&#98;&#x75;&#x73;&#x65;&#x40;&#110;&#x70;&#x6d;&#106;&#x73;&#46;&#99;&#111;&#109;</a> with a link to
using a confusingly similar package name, email <a href="&#109;&#97;&#105;&#x6c;&#116;&#x6f;&#x3a;&#x61;&#x62;&#117;&#x73;&#101;&#64;&#110;&#112;&#109;&#106;&#115;&#x2e;&#x63;&#x6f;&#x6d;">&#x61;&#x62;&#117;&#x73;&#101;&#64;&#110;&#112;&#109;&#106;&#115;&#x2e;&#x63;&#x6f;&#x6d;</a> with a link to
the package or user account on <a href="https://npmjs.com">https://npmjs.com</a>. Attach a
copy of your trademark registration certificate.</p>
<p>If we see that the package&#39;s publisher is intentionally misleading others by
@ -134,5 +134,5 @@ License.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-disputes &mdash; npm@4.0.5</p>
<p id="footer">npm-disputes &mdash; npm@4.1.1</p>

4
deps/npm/html/doc/misc/npm-index.html

@ -42,6 +42,8 @@
<p>Modify package distribution tags</p>
<h3 id="npm-docs-1-"><a href="../cli/npm-docs.html">npm-docs(1)</a></h3>
<p>Docs for a package in a web browser maybe</p>
<h3 id="npm-doctor-1-"><a href="../cli/npm-doctor.html">npm-doctor(1)</a></h3>
<p>Check your environments</p>
<h3 id="npm-edit-1-"><a href="../cli/npm-edit.html">npm-edit(1)</a></h3>
<p>Edit an installed package</p>
<h3 id="npm-explore-1-"><a href="../cli/npm-explore.html">npm-explore(1)</a></h3>
@ -160,5 +162,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-index &mdash; npm@4.0.5</p>
<p id="footer">npm-index &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/misc/npm-orgs.html

@ -86,5 +86,5 @@
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-orgs &mdash; npm@4.0.5</p>
<p id="footer">npm-orgs &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/misc/npm-registry.html

@ -90,5 +90,5 @@ effectively implement the entire CouchDB API anyway.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-registry &mdash; npm@4.0.5</p>
<p id="footer">npm-registry &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/misc/npm-scope.html

@ -94,5 +94,5 @@ that registry instead.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-scope &mdash; npm@4.0.5</p>
<p id="footer">npm-scope &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/misc/npm-scripts.html

@ -237,5 +237,5 @@ scripts is for compilation which must be done on the target architecture.</li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">npm-scripts &mdash; npm@4.0.5</p>
<p id="footer">npm-scripts &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/misc/removing-npm.html

@ -57,5 +57,5 @@ modules. To track those down, you can do the following:</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">removing-npm &mdash; npm@4.0.5</p>
<p id="footer">removing-npm &mdash; npm@4.1.1</p>

2
deps/npm/html/doc/misc/semver.html

@ -325,5 +325,5 @@ range, use the <code>satisfies(version, range)</code> function.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
</table>
<p id="footer">semver &mdash; npm@4.0.5</p>
<p id="footer">semver &mdash; npm@4.1.1</p>

27
deps/npm/lib/cache/add-named.js

@ -14,6 +14,7 @@ var cachedPackageRoot = require('./cached-package-root.js')
var mapToRegistry = require('../utils/map-to-registry.js')
var pulseTillDone = require('../utils/pulse-till-done.js')
var packageId = require('../utils/package-id.js')
var pickManifestFromRegistryMetadata = require('../utils/pick-manifest-from-registry-metadata.js')
module.exports = addNamed
@ -252,28 +253,10 @@ function addNameRange (name, range, data, cb) {
log.silly('addNameRange', 'versions'
, [data.name, Object.keys(data.versions || {})])
// if the tagged version satisfies, then use that.
var tagged = data['dist-tags'][npm.config.get('tag')]
if (tagged &&
data.versions[tagged] &&
semver.satisfies(tagged, range, true)) {
return addNamed(name, tagged, data.versions[tagged], cb)
}
// find the max satisfying version.
var versions = Object.keys(data.versions || {})
var ms = semver.maxSatisfying(versions, range, true)
if (!ms) {
if (range === '*' && versions.length) {
return addNameTag(name, 'latest', data, cb)
} else {
return cb(installTargetsError(range, data))
}
}
// if we don't have a registry connection, try to see if
// there's a cached copy that will be ok.
addNamed(name, ms, data.versions[ms], cb)
var versions = Object.keys(data.versions).filter(function (v) { return semver.valid(v) })
var picked = pickManifestFromRegistryMetadata(range, npm.config.get('tag'), versions, data)
if (picked) return addNamed(name, picked.resolvedTo, picked.manifest, cb)
return cb(installTargetsError(range, data))
}
}

3
deps/npm/lib/config/cmd-list.js

@ -98,7 +98,8 @@ var cmdList = [
'start',
'restart',
'run-script',
'completion'
'completion',
'doctor'
]
var plumbing = [

4
deps/npm/lib/config/defaults.js

@ -167,6 +167,7 @@ Object.defineProperty(exports, 'defaults', {get: function () {
long: false,
maxsockets: 50,
message: '%s',
'metrics-registry': 'https://registry.npmjs.org/',
'node-version': process.version,
'onload-script': false,
only: null,
@ -196,6 +197,7 @@ Object.defineProperty(exports, 'defaults', {get: function () {
searchopts: '',
searchexclude: null,
searchstaleness: 15 * 60,
'send-metrics': false,
shell: osenv.shell(),
shrinkwrap: true,
'sign-git-tag': false,
@ -279,6 +281,7 @@ exports.types = {
long: Boolean,
maxsockets: Number,
message: String,
'metrics-registry': String,
'node-version': [null, semver],
'onload-script': [null, String],
only: [null, 'dev', 'development', 'prod', 'production'],
@ -303,6 +306,7 @@ exports.types = {
searchopts: String,
searchexclude: [null, String],
searchstaleness: Number,
'send-metrics': Boolean,
shell: String,
shrinkwrap: Boolean,
'sign-git-tag': Boolean,

109
deps/npm/lib/doctor.js

@ -0,0 +1,109 @@
var path = require('path')
var chain = require('slide').chain
var table = require('text-table')
var color = require('ansicolors')
var styles = require('ansistyles')
var semver = require('semver')
var npm = require('./npm.js')
var log = require('npmlog')
var ansiTrim = require('./utils/ansi-trim.js')
var output = require('./utils/output.js')
var defaultRegistry = require('./config/defaults.js').defaults.registry
var checkPing = require('./doctor/check-ping.js')
var getGitPath = require('./doctor/get-git-path.js')
var checksumCachedFiles = require('./doctor/checksum-cached-files.js')
var checkFilesPermission = require('./doctor/check-files-permission.js')
var getLatestNodejsVersion = require('./doctor/get-latest-nodejs-version.js')
var getLatestNpmVersion = require('./doctor/get-latest-npm-version')
var globalNodeModules = path.join(npm.config.globalPrefix, 'lib', 'node_modules')
var localNodeModules = path.join(npm.config.localPrefix, 'node_modules')
module.exports = doctor
doctor.usage = 'npm doctor'
function doctor (args, silent, cb) {
args = args || {}
if (typeof cb !== 'function') {
cb = silent
silent = false
}
var actionsToRun = [
[checkPing],
[getLatestNpmVersion],
[getLatestNodejsVersion, args['node-url']],
[getGitPath],
[checkFilesPermission, npm.cache, 6],
[checkFilesPermission, globalNodeModules, 4],
[checkFilesPermission, localNodeModules, 6],
[checksumCachedFiles]
]
log.info('doctor', 'Running checkup')
chain(actionsToRun, function (stderr, stdout) {
if (stderr && stderr.message !== 'not found: git') return cb(stderr)
var outHead = ['Check', 'Value', 'Recommendation']
var list = makePretty(stdout)
var outBody = list
if (npm.color) {
outHead = outHead.map(function (item) {
return styles.underline(item)
})
outBody = outBody.map(function (item) {
if (item[2]) {
item[0] = color.red(item[0])
item[2] = color.magenta(item[2])
}
return item
})
}
var outTable = [outHead].concat(outBody)
var tableOpts = {
stringLength: function (s) { return ansiTrim(s).length }
}
if (!silent) output(table(outTable, tableOpts))
cb(null, list)
})
}
function makePretty (p) {
var ping = p[0] ? 'ok' : 'notOk'
var npmLTS = p[1]
var nodeLTS = p[2].replace('v', '')
var whichGit = p[3] || 'not installed'
var readbleCaches = p[4] ? 'ok' : 'notOk'
var executableGlobalModules = p[5] ? 'ok' : 'notOk'
var executableLocalModules = p[6] ? 'ok' : 'notOk'
var checksumCachedFiles = p[7] ? 'ok' : 'notOk'
var npmV = npm.version
var nodeV = process.version.replace('v', '')
var registry = npm.config.get('registry')
var list = [
['npm ping', ping],
['npm -v', 'v' + npmV],
['node -v', 'v' + nodeV],
['npm config get registry', registry],
['which git', whichGit],
['Perms check on cached files', readbleCaches],
['Perms check on global node_modules', executableGlobalModules],
['Perms check on local node_modules', executableLocalModules],
['Checksum cached files', checksumCachedFiles]
]
if (ping !== 'ok') list[0][2] = 'Check your internet connection'
if (!semver.satisfies(npmV, '>=' + npmLTS)) list[1][2] = 'Use npm v' + npmLTS
if (!semver.satisfies(nodeV, '>=' + nodeLTS)) list[2][2] = 'Use node v' + nodeLTS
if (registry !== defaultRegistry) list[3][2] = 'Try `npm config set registry ' + defaultRegistry
if (whichGit === 'not installed') list[4][2] = 'Install git and ensure it\'s in your PATH.'
if (readbleCaches !== 'ok') list[5][2] = 'Check the permissions of your files in ' + npm.config.get('cache')
if (executableGlobalModules !== 'ok') list[6][2] = globalNodeModules + ' must be readable and writable by the current user.'
if (executableLocalModules !== 'ok') list[7][2] = localNodeModules + ' must be readable and writable by the current user.'
if (checksumCachedFiles !== 'ok') list[8][2] = 'You have some broken packages in your cache.'
return list
}

55
deps/npm/lib/doctor/check-files-permission.js

@ -0,0 +1,55 @@
var fs = require('fs')
var path = require('path')
var getUid = require('uid-number')
var chain = require('slide').chain
var log = require('npmlog')
var npm = require('../npm.js')
var fileCompletion = require('../utils/completion/file-completion.js')
function checkFilesPermission (root, mask, cb) {
if (process.platform === 'win32') return cb(null, true)
getUid(npm.config.get('user'), npm.config.get('group'), function (e, uid, gid) {
if (e) {
tracker.finish()
tracker.warn('checkFilePermissions', 'Error looking up user and group:', e)
return cb(e)
}
var tracker = log.newItem('checkFilePermissions', 1)
tracker.info('checkFilePermissions', 'Building file list of ' + root)
fileCompletion(root, '.', Infinity, function (e, files) {
if (e) {
tracker.warn('checkFilePermissions', 'Error building file list:', e)
tracker.finish()
return cb(e)
}
tracker.addWork(files.length)
tracker.completeWork(1)
chain(files.map(andCheckFile), function (er) {
tracker.finish()
cb(null, !er)
})
function andCheckFile (f) {
return [checkFile, f]
}
function checkFile (f, next) {
var file = path.join(root, f)
tracker.silly('checkFilePermissions', f)
fs.stat(file, function (e, stat) {
tracker.completeWork(1)
if (e) return next(e)
if (!stat.isFile()) return next()
var mode = stat.mode
var isGroup = stat.gid ? stat.gid === gid : true
var isUser = stat.uid ? stat.uid === uid : true
if ((mode & parseInt('000' + mask, 8))) return next()
if ((isGroup && mode & parseInt('00' + mask + '0', 8))) return next()
if ((isUser && mode & parseInt('0' + mask + '00', 8))) return next()
tracker.error('checkFilePermissions', 'Missing permissions on (' + isGroup + ', ' + isUser + ', ' + mode + ')', file)
return next(new Error('Missing permissions for ' + file))
})
}
})
})
}
module.exports = checkFilesPermission

13
deps/npm/lib/doctor/check-ping.js

@ -0,0 +1,13 @@
var log = require('npmlog')
var ping = require('../ping.js')
function checkPing (cb) {
var tracker = log.newItem('checkPing', 1)
tracker.info('checkPing', 'Pinging registry')
ping({}, true, function (err, pong) {
tracker.finish()
cb(err, pong)
})
}
module.exports = checkPing

62
deps/npm/lib/doctor/checksum-cached-files.js

@ -0,0 +1,62 @@
var crypto = require('crypto')
var fs = require('fs')
var path = require('path')
var chain = require('slide').chain
var log = require('npmlog')
var npm = require('../npm')
var fileCompletion = require('../utils/completion/file-completion.js')
function checksum (str) {
return crypto
.createHash('sha1')
.update(str, 'utf8')
.digest('hex')
}
function checksumCachedFiles (cb) {
var tracker = log.newItem('checksumCachedFiles', 1)
tracker.info('checksumCachedFiles', 'Building file list of ' + npm.cache)
fileCompletion(npm.cache, '.', Infinity, function (e, files) {
if (e) {
tracker.finish()
return cb(e)
}
tracker.addWork(files.length)
tracker.completeWork(1)
chain(files.map(andChecksumFile), function (er) {
tracker.finish()
cb(null, !er)
})
function andChecksumFile (f) {
return [function (next) { process.nextTick(function () { checksumFile(f, next) }) }]
}
function checksumFile (f, next) {
var file = path.join(npm.cache, f)
tracker.silly('checksumFile', f)
if (!/.tgz$/.test(file)) {
tracker.completeWork(1)
return next()
}
fs.readFile(file, function (err, tgz) {
tracker.completeWork(1)
if (err) return next(err)
try {
var pkgJSON = fs.readFileSync(path.join(path.dirname(file), 'package/package.json'))
} catch (e) {
return next() // no package.json in cche is ok
}
try {
var pkg = JSON.parse(pkgJSON)
var shasum = (pkg.dist && pkg.dist.shasum) || pkg._shasum
var actual = checksum(tgz)
if (actual !== shasum) return next(new Error('Checksum mismatch on ' + file + ', expected: ' + shasum + ', got: ' + shasum))
return next()
} catch (e) {
return next(new Error('Error parsing JSON in ' + file + ': ' + e))
}
})
}
})
}
module.exports = checksumCachedFiles

13
deps/npm/lib/doctor/get-git-path.js

@ -0,0 +1,13 @@
var log = require('npmlog')
var which = require('which')
function getGitPath (cb) {
var tracker = log.newItem('getGitPath', 1)
tracker.info('getGitPath', 'Finding git in your PATH')
which('git', function (err, path) {
tracker.finish()
cb(err, path)
})
}
module.exports = getGitPath

26
deps/npm/lib/doctor/get-latest-nodejs-version.js

@ -0,0 +1,26 @@
var log = require('npmlog')
var request = require('request')
function getLatestNodejsVersion (url, cb) {
var tracker = log.newItem('getLatestNodejsVersion', 1)
tracker.info('getLatestNodejsVersion', 'Getting Node.js release information')
var version = ''
url = url || 'https://nodejs.org/dist/index.json'
request(url, function (e, res, index) {
tracker.finish()
if (e) return cb(e)
if (res.statusCode !== 200) {
return cb(new Error('Status not 200, ' + res.statusCode))
}
try {
JSON.parse(index).forEach(function (item) {
if (item.lts && item.version > version) version = item.version
})
cb(null, version)
} catch (e) {
cb(e)
}
})
}
module.exports = getLatestNodejsVersion

13
deps/npm/lib/doctor/get-latest-npm-version.js

@ -0,0 +1,13 @@
var log = require('npmlog')
var fetchPackageMetadata = require('../fetch-package-metadata')
function getLatestNpmVersion (cb) {
var tracker = log.newItem('getLatestNpmVersion', 1)
tracker.info('getLatestNpmVersion', 'Getting npm package information')
fetchPackageMetadata('npm@latest', '.', function (e, d) {
tracker.finish()
cb(e, d.version)
})
}
module.exports = getLatestNpmVersion

32
deps/npm/lib/fetch-package-metadata.js

@ -26,6 +26,7 @@ var getCacheStat = require('./cache/get-stat.js')
var unpack = require('./utils/tar.js').unpack
var pulseTillDone = require('./utils/pulse-till-done.js')
var parseJSON = require('./utils/parse-json.js')
var pickManifestFromRegistryMetadata = require('./utils/pick-manifest-from-registry-metadata.js')
function andLogAndFinish (spec, tracker, done) {
validate('SF', [spec, done])
@ -113,7 +114,7 @@ function fetchNamedPackageData (dep, next) {
} else {
npm.registry.get(url, {auth: auth}, pulseTillDone('fetchMetadata', iferr(next, pickVersionFromRegistryDocument)))
}
function returnAndAddMetadata (pkg) {
function thenAddMetadata (pkg) {
pkg._from = dep.raw
pkg._resolved = pkg.dist.tarball
pkg._shasum = pkg.dist.shasum
@ -130,35 +131,14 @@ function fetchNamedPackageData (dep, next) {
'You should delete or re-publish the invalid versions.', pkg.name, invalidVersions.join(', '))
}
versions = versions.filter(function (v) { return semver.valid(v) }).sort(semver.rcompare)
versions = versions.filter(function (v) { return semver.valid(v) })
if (dep.type === 'tag') {
var tagVersion = pkg['dist-tags'][dep.spec]
if (pkg.versions[tagVersion]) return returnAndAddMetadata(pkg.versions[tagVersion])
if (pkg.versions[tagVersion]) return thenAddMetadata(pkg.versions[tagVersion])
} else {
var latestVersion = pkg['dist-tags'][npm.config.get('tag')] || versions[0]
// Find the the most recent version less than or equal
// to latestVersion that satisfies our spec
for (var ii = 0; ii < versions.length; ++ii) {
if (semver.gt(versions[ii], latestVersion)) continue
if (semver.satisfies(versions[ii], dep.spec)) {
return returnAndAddMetadata(pkg.versions[versions[ii]])
}
}
// Failing that, try finding the most recent version that matches
// our spec
for (var jj = 0; jj < versions.length; ++jj) {
if (semver.satisfies(versions[jj], dep.spec)) {
return returnAndAddMetadata(pkg.versions[versions[jj]])
}
}
// Failing THAT, if the range was '*' uses latestVersion
if (dep.spec === '*') {
return returnAndAddMetadata(pkg.versions[latestVersion])
}
var picked = pickManifestFromRegistryMetadata(dep.spec, npm.config.get('tag'), versions, pkg)
if (picked) return thenAddMetadata(picked.manifest)
}
// We didn't manage to find a compatible version

8
deps/npm/lib/install.js

@ -114,6 +114,7 @@ var unlock = locker.unlock
var ls = require('./ls.js')
var parseJSON = require('./utils/parse-json.js')
var output = require('./utils/output.js')
var saveMetrics = require('./utils/metrics.js').save
// install specific libraries
var copyTree = require('./install/copy-tree.js')
@ -216,9 +217,14 @@ function Installer (where, dryrun, args) {
}
Installer.prototype = {}
Installer.prototype.run = function (cb) {
Installer.prototype.run = function (_cb) {
validate('F', arguments)
var cb = function (err) {
saveMetrics(!err)
return _cb.apply(this, arguments)
}
// FIXME: This is bad and I should feel bad.
// lib/install needs to have some way of sharing _limited_
// state with the things it calls. Passing the object is too

8
deps/npm/lib/install/deps.js

@ -188,9 +188,13 @@ function addRequiredDep (tree, child, cb) {
}
exports.removeObsoleteDep = removeObsoleteDep
function removeObsoleteDep (child) {
function removeObsoleteDep (child, log) {
if (child.removed) return
child.removed = true
if (log) {
log.silly('removeObsoleteDep', 'removing ' + packageId(child) +
' from the tree as its been replaced by a newer version or is no longer required')
}
// remove from physical tree
if (child.parent) {
child.parent.children = child.parent.children.filter(function (pchild) { return pchild !== child })
@ -199,7 +203,7 @@ function removeObsoleteDep (child) {
var requires = child.requires || []
requires.forEach(function (requirement) {
requirement.requiredBy = requirement.requiredBy.filter(function (reqBy) { return reqBy !== child })
if (requirement.requiredBy.length === 0) removeObsoleteDep(requirement)
if (requirement.requiredBy.length === 0) removeObsoleteDep(requirement, log)
})
}

30
deps/npm/lib/install/diff-trees.js

@ -23,7 +23,7 @@ function pkgAreEquiv (aa, bb) {
return false
}
function getNameAndVersion (pkg) {
function getUniqueId (pkg) {
var versionspec = pkg._shasum
if (!versionspec && nonRegistrySource(pkg)) {
@ -113,21 +113,25 @@ var sortActions = module.exports.sortActions = function (differences) {
return sorted
}
function setAction (differences, action, pkg) {
differences.push([action, pkg])
}
var diffTrees = module.exports._diffTrees = function (oldTree, newTree) {
validate('OO', arguments)
var differences = []
var flatOldTree = flattenTree(oldTree)
var flatNewTree = flattenTree(newTree)
var toRemove = {}
var toRemoveByNameAndVer = {}
var toRemoveByUniqueId = {}
// find differences
Object.keys(flatOldTree).forEach(function (flatname) {
if (flatNewTree[flatname]) return
var pkg = flatOldTree[flatname]
toRemove[flatname] = pkg
var namever = getNameAndVersion(pkg.package)
if (!toRemoveByNameAndVer[namever]) toRemoveByNameAndVer[namever] = []
toRemoveByNameAndVer[namever].push(flatname)
var pkgunique = getUniqueId(pkg.package)
if (!toRemoveByUniqueId[pkgunique]) toRemoveByUniqueId[pkgunique] = []
toRemoveByUniqueId[pkgunique].push(flatname)
})
Object.keys(flatNewTree).forEach(function (path) {
var pkg = flatNewTree[path]
@ -138,21 +142,21 @@ var diffTrees = module.exports._diffTrees = function (oldTree, newTree) {
if (pkg.oldPkg) {
if (!pkg.userRequired && pkgAreEquiv(pkg.oldPkg.package, pkg.package)) return
if (!pkg.isInLink && (isLink(pkg.oldPkg) || isLink(pkg))) {
differences.push(['update-linked', pkg])
setAction(differences, 'update-linked', pkg)
} else {
differences.push(['update', pkg])
setAction(differences, 'update', pkg)
}
} else {
var vername = getNameAndVersion(pkg.package)
var removing = toRemoveByNameAndVer[vername] && toRemoveByNameAndVer[vername].length
var vername = getUniqueId(pkg.package)
var removing = toRemoveByUniqueId[vername] && toRemoveByUniqueId[vername].length
var bundlesOrFromBundle = pkg.fromBundle || pkg.package.bundleDependencies
if (removing && !bundlesOrFromBundle) {
var flatname = toRemoveByNameAndVer[vername].shift()
var flatname = toRemoveByUniqueId[vername].shift()
pkg.fromPath = toRemove[flatname].path
differences.push(['move', pkg])
setAction(differences, 'move', pkg)
delete toRemove[flatname]
} else {
differences.push(['add', pkg])
setAction(differences, 'add', pkg)
}
}
})
@ -160,7 +164,7 @@ var diffTrees = module.exports._diffTrees = function (oldTree, newTree) {
.keys(toRemove)
.map(function (path) { return toRemove[path] })
.forEach(function (pkg) {
differences.push(['remove', pkg])
setAction(differences, 'remove', pkg)
})
return differences
}

6
deps/npm/lib/install/save.js

@ -167,11 +167,7 @@ function computeVersionSpec (child) {
pathname: requested.spec
})
} else {
return url.format({
protocol: 'file',
slashes: false,
pathname: relativePath
})
return 'file:' + relativePath
}
} else if (requested.type === 'hosted') {
return requested.spec

3
deps/npm/lib/npm.js

@ -35,6 +35,7 @@
var cmdList = require('./config/cmd-list').cmdList
var plumbing = require('./config/cmd-list').plumbing
var output = require('./utils/output.js')
var startMetrics = require('./utils/metrics.js').start
npm.config = {
loaded: false,
@ -308,6 +309,8 @@
// go ahead and spin up the registry client.
npm.registry = new CachingRegClient(npm.config)
startMetrics()
return cb(null, npm)
})
})

7
deps/npm/lib/outdated.js

@ -41,6 +41,7 @@ var isExtraneous = require('./install/is-extraneous.js')
var recalculateMetadata = require('./install/deps.js').recalculateMetadata
var moduleName = require('./utils/module-name.js')
var output = require('./utils/output.js')
var ansiTrim = require('./utils/ansi-trim')
function uniqName (item) {
return item[0].path + '|' + item[1] + '|' + item[7]
@ -149,12 +150,6 @@ function makePretty (p) {
return columns
}
function ansiTrim (str) {
var r = new RegExp('\x1b(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|' +
'\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)', 'g')
return str.replace(r, '')
}
function makeParseable (list) {
return list.map(function (p) {
var dep = p[0]

86
deps/npm/lib/prune.js

@ -1,54 +1,66 @@
// prune extraneous packages.
module.exports = prune
module.exports.Pruner = Pruner
prune.usage = 'npm prune [[<@scope>/]<pkg>...] [--production]'
var readInstalled = require('read-installed')
var npm = require('./npm.js')
var path = require('path')
var readJson = require('read-package-json')
var log = require('npmlog')
var util = require('util')
var moduleName = require('./utils/module-name.js')
var Installer = require('./install.js').Installer
var isExtraneous = require('./install/is-extraneous.js')
var isDev = require('./install/is-dev-dep.js')
var removeDeps = require('./install/deps.js').removeDeps
var loadExtraneous = require('./install/deps.js').loadExtraneous
var chain = require('slide').chain
prune.completion = require('./utils/completion/installed-deep.js')
function prune (args, cb) {
// check if is a valid package.json file
var jsonFile = path.resolve(npm.dir, '..', 'package.json')
readJson(jsonFile, log.warn, function (er) {
if (er) return cb(er)
next()
})
function next () {
var opt = {
depth: npm.config.get('depth'),
dev: !npm.config.get('production') || npm.config.get('dev')
}
readInstalled(npm.prefix, opt, function (er, data) {
if (er) return cb(er)
prune_(args, data, cb)
})
}
var dryrun = !!npm.config.get('dry-run')
new Pruner('.', dryrun, args).run(cb)
}
function prune_ (args, data, cb) {
npm.commands.unbuild(prunables(args, data, []), cb)
function Pruner (where, dryrun, args) {
Installer.call(this, where, dryrun, args)
}
util.inherits(Pruner, Installer)
Pruner.prototype.loadAllDepsIntoIdealTree = function (cb) {
log.silly('uninstall', 'loadAllDepsIntoIdealtree')
var cg = this.progress.loadAllDepsIntoIdealTree
var steps = []
function prunables (args, data, seen) {
var deps = data.dependencies || {}
return Object.keys(deps).map(function (d) {
if (typeof deps[d] !== 'object' || seen.indexOf(deps[d]) !== -1) return null
seen.push(deps[d])
if (deps[d].extraneous && (args.length === 0 || args.indexOf(d) !== -1)) {
var extra = deps[d]
delete deps[d]
return extra.path
}
return prunables(args, deps[d], seen)
}).filter(function (d) { return d !== null })
.reduce(function FLAT (l, r) {
return l.concat(Array.isArray(r) ? r.reduce(FLAT, []) : r)
}, [])
var self = this
var excludeDev = npm.config.get('production') || /^prod(uction)?$/.test(npm.config.get('only'))
function shouldPrune (child) {
if (isExtraneous(child)) return true
if (!excludeDev) return false
var childName = moduleName(child)
var isChildDev = function (parent) { return isDev(parent, childName) }
if (child.requiredBy.every(isChildDev)) return true
}
function getModuleName (child) {
// wrapping because moduleName doesn't like extra args and we're called
// from map.
return moduleName(child)
}
function matchesArg (name) {
return self.args.length === 0 || self.args.indexOf(name) !== -1
}
function nameObj (name) {
return {name: name}
}
var toPrune = this.currentTree.children.filter(shouldPrune).map(getModuleName).filter(matchesArg).map(nameObj)
steps.push(
[removeDeps, toPrune, this.idealTree, null, cg.newGroup('removeDeps')],
[loadExtraneous, this.idealTree, cg.newGroup('loadExtraneous')])
chain(steps, cb)
}
Pruner.prototype.runPreinstallTopLevelLifecycles = function (cb) { cb() }
Pruner.prototype.runPostinstallTopLevelLifecycles = function (cb) { cb() }

3
deps/npm/lib/uninstall.js

@ -74,3 +74,6 @@ Uninstaller.prototype.loadAllDepsIntoIdealTree = function (cb) {
[loadExtraneous, this.idealTree, cg.newGroup('loadExtraneous')])
chain(steps, cb)
}
Uninstaller.prototype.runPreinstallTopLevelLifecycles = function (cb) { cb() }
Uninstaller.prototype.runPostinstallTopLevelLifecycles = function (cb) { cb() }

7
deps/npm/lib/utils/ansi-trim.js

@ -0,0 +1,7 @@
function ansiTrim (str) {
var r = new RegExp('\x1b(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|' +
'\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)', 'g')
return str.replace(r, '')
}
module.exports = ansiTrim

5
deps/npm/lib/utils/error-handler.js

@ -13,10 +13,15 @@ var rollbacks = npm.rollbacks
var chain = require('slide').chain
var writeStreamAtomic = require('fs-write-stream-atomic')
var errorMessage = require('./error-message.js')
var stopMetrics = require('./metrics.js').stop
process.on('exit', function (code) {
log.disableProgress()
if (!npm.config || !npm.config.loaded) return
// kill any outstanding stats reporter if it hasn't finished yet
stopMetrics()
if (code) itWorked = false
if (itWorked) log.info('ok')
else {

39
deps/npm/lib/utils/metrics-launch.js

@ -0,0 +1,39 @@
'use strict'
module.exports = launchSendMetrics
var fs = require('graceful-fs')
var child_process = require('child_process')
if (require.main === module) main()
function launchSendMetrics () {
var path = require('path')
var npm = require('../npm.js')
try {
if (!npm.config.get('send-metrics')) return
var cliMetrics = path.join(npm.config.get('cache'), 'anonymous-cli-metrics.json')
var targetRegistry = npm.config.get('metrics-registry')
fs.statSync(cliMetrics)
return runInBackground(__filename, [cliMetrics, targetRegistry])
} catch (ex) {
// if the metrics file doesn't exist, don't run
}
}
function runInBackground (js, args, opts) {
if (!args) args = []
args.unshift(js)
if (!opts) opts = {}
opts.stdio = 'ignore'
opts.detached = true
var child = child_process.spawn(process.execPath, args, opts)
child.unref()
return child
}
function main () {
var sendMetrics = require('./metrics.js').send
var metricsFile = process.argv[2]
var metricsRegistry = process.argv[3]
sendMetrics(metricsFile, metricsRegistry)
}

73
deps/npm/lib/utils/metrics.js

@ -0,0 +1,73 @@
'use strict'
exports.start = startMetrics
exports.stop = stopMetrics
exports.save = saveMetrics
exports.send = sendMetrics
var fs = require('fs')
var path = require('path')
var npm = require('../npm.js')
var uuid = require('uuid')
var inMetrics = false
function startMetrics () {
if (inMetrics) return
// loaded on demand to avoid any recursive deps when `./metrics-launch` requires us.
var metricsLaunch = require('./metrics-launch.js')
npm.metricsProcess = metricsLaunch()
}
function stopMetrics () {
if (inMetrics) return
if (npm.metricsProcess) npm.metricsProcess.kill('SIGKILL')
}
function saveMetrics (itWorked) {
if (inMetrics) return
// If the metrics reporter hasn't managed to PUT yet then kill it so that it doesn't
// step on our updating the anonymous-cli-metrics json
stopMetrics()
var metricsFile = path.join(npm.config.get('cache'), 'anonymous-cli-metrics.json')
var metrics
try {
metrics = JSON.parse(fs.readFileSync(metricsFile))
metrics.metrics.to = new Date().toISOString()
if (itWorked) {
++metrics.metrics.successfulInstalls
} else {
++metrics.metrics.failedInstalls
}
} catch (ex) {
metrics = {
metricId: uuid.v4(),
metrics: {
from: new Date().toISOString(),
to: new Date().toISOString(),
successfulInstalls: itWorked ? 1 : 0,
failedInstalls: itWorked ? 0 : 1
}
}
}
try {
fs.writeFileSync(metricsFile, JSON.stringify(metrics))
} catch (ex) {
// we couldn't write the error metrics file, um, well, oh well.
}
}
function sendMetrics (metricsFile, metricsRegistry) {
inMetrics = true
var cliMetrics = JSON.parse(fs.readFileSync(metricsFile))
npm.load({}, function (err) {
if (err) return
npm.registry.config.retry.retries = 0
npm.registry.sendAnonymousCLIMetrics(metricsRegistry, cliMetrics, function (err) {
if (err) {
fs.writeFileSync(path.join(path.dirname(metricsFile), 'last-send-metrics-error.txt'), err.stack)
} else {
fs.unlinkSync(metricsFile)
}
})
})
}

26
deps/npm/lib/utils/pick-manifest-from-registry-metadata.js

@ -0,0 +1,26 @@
'use strict'
module.exports = pickManifestFromRegistryMetadata
var log = require('npmlog')
var semver = require('semver')
function pickManifestFromRegistryMetadata (spec, tag, versions, metadata) {
log.silly('pickManifestFromRegistryMetadata', 'spec', spec, 'tag', tag, 'versions', versions)
// if the tagged version satisfies, then use that.
var tagged = metadata['dist-tags'][tag]
if (tagged &&
metadata.versions[tagged] &&
semver.satisfies(tagged, spec, true)) {
return {resolvedTo: tag, manifest: metadata.versions[tagged]}
}
// find the max satisfying version.
var ms = semver.maxSatisfying(versions, spec, true)
if (ms) {
return {resolvedTo: ms, manifest: metadata.versions[ms]}
} else if (spec === '*' && versions.length && tagged && metadata.versions[tagged]) {
return {resolvedTo: tag, manifest: metadata.versions[tagged]}
} else {
return
}
}

2
deps/npm/man/man1/npm-README.1

@ -1,4 +1,4 @@
.TH "NPM" "1" "December 2016" "" ""
.TH "NPM" "1" "January 2017" "" ""
.SH "NAME"
\fBnpm\fR \- a JavaScript package manager
.P

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save