Rebecca Turner 9 years ago
committed by Jeremiah Senkpiel
parent
commit
581e6deeda
  1. 11
      deps/npm/.travis.yml
  2. 4
      deps/npm/AUTHORS
  3. 435
      deps/npm/CHANGELOG.md
  4. 12
      deps/npm/appveyor.yml
  5. 10
      deps/npm/doc/cli/npm-shrinkwrap.md
  6. 1
      deps/npm/doc/files/package.json.md
  7. 2
      deps/npm/doc/misc/npm-config.md
  8. 5
      deps/npm/doc/misc/npm-scripts.md
  9. 2
      deps/npm/html/doc/README.html
  10. 2
      deps/npm/html/doc/cli/npm-access.html
  11. 2
      deps/npm/html/doc/cli/npm-adduser.html
  12. 2
      deps/npm/html/doc/cli/npm-bin.html
  13. 2
      deps/npm/html/doc/cli/npm-bugs.html
  14. 2
      deps/npm/html/doc/cli/npm-build.html
  15. 2
      deps/npm/html/doc/cli/npm-bundle.html
  16. 2
      deps/npm/html/doc/cli/npm-cache.html
  17. 2
      deps/npm/html/doc/cli/npm-completion.html
  18. 2
      deps/npm/html/doc/cli/npm-config.html
  19. 2
      deps/npm/html/doc/cli/npm-dedupe.html
  20. 2
      deps/npm/html/doc/cli/npm-deprecate.html
  21. 2
      deps/npm/html/doc/cli/npm-dist-tag.html
  22. 2
      deps/npm/html/doc/cli/npm-docs.html
  23. 2
      deps/npm/html/doc/cli/npm-edit.html
  24. 2
      deps/npm/html/doc/cli/npm-explore.html
  25. 2
      deps/npm/html/doc/cli/npm-help-search.html
  26. 2
      deps/npm/html/doc/cli/npm-help.html
  27. 2
      deps/npm/html/doc/cli/npm-init.html
  28. 2
      deps/npm/html/doc/cli/npm-install-test.html
  29. 2
      deps/npm/html/doc/cli/npm-install.html
  30. 2
      deps/npm/html/doc/cli/npm-link.html
  31. 2
      deps/npm/html/doc/cli/npm-logout.html
  32. 4
      deps/npm/html/doc/cli/npm-ls.html
  33. 2
      deps/npm/html/doc/cli/npm-outdated.html
  34. 2
      deps/npm/html/doc/cli/npm-owner.html
  35. 2
      deps/npm/html/doc/cli/npm-pack.html
  36. 2
      deps/npm/html/doc/cli/npm-ping.html
  37. 2
      deps/npm/html/doc/cli/npm-prefix.html
  38. 2
      deps/npm/html/doc/cli/npm-prune.html
  39. 2
      deps/npm/html/doc/cli/npm-publish.html
  40. 2
      deps/npm/html/doc/cli/npm-rebuild.html
  41. 2
      deps/npm/html/doc/cli/npm-repo.html
  42. 2
      deps/npm/html/doc/cli/npm-restart.html
  43. 2
      deps/npm/html/doc/cli/npm-root.html
  44. 2
      deps/npm/html/doc/cli/npm-run-script.html
  45. 2
      deps/npm/html/doc/cli/npm-search.html
  46. 11
      deps/npm/html/doc/cli/npm-shrinkwrap.html
  47. 2
      deps/npm/html/doc/cli/npm-star.html
  48. 2
      deps/npm/html/doc/cli/npm-stars.html
  49. 2
      deps/npm/html/doc/cli/npm-start.html
  50. 2
      deps/npm/html/doc/cli/npm-stop.html
  51. 2
      deps/npm/html/doc/cli/npm-tag.html
  52. 2
      deps/npm/html/doc/cli/npm-team.html
  53. 2
      deps/npm/html/doc/cli/npm-test.html
  54. 2
      deps/npm/html/doc/cli/npm-uninstall.html
  55. 2
      deps/npm/html/doc/cli/npm-unpublish.html
  56. 2
      deps/npm/html/doc/cli/npm-update.html
  57. 2
      deps/npm/html/doc/cli/npm-version.html
  58. 2
      deps/npm/html/doc/cli/npm-view.html
  59. 2
      deps/npm/html/doc/cli/npm-whoami.html
  60. 6
      deps/npm/html/doc/cli/npm.html
  61. 2
      deps/npm/html/doc/files/npm-folders.html
  62. 2
      deps/npm/html/doc/files/npm-global.html
  63. 3
      deps/npm/html/doc/files/npm-json.html
  64. 2
      deps/npm/html/doc/files/npmrc.html
  65. 3
      deps/npm/html/doc/files/package.json.html
  66. 2
      deps/npm/html/doc/index.html
  67. 2
      deps/npm/html/doc/misc/npm-coding-style.html
  68. 4
      deps/npm/html/doc/misc/npm-config.html
  69. 2
      deps/npm/html/doc/misc/npm-developers.html
  70. 8
      deps/npm/html/doc/misc/npm-disputes.html
  71. 2
      deps/npm/html/doc/misc/npm-index.html
  72. 2
      deps/npm/html/doc/misc/npm-orgs.html
  73. 2
      deps/npm/html/doc/misc/npm-registry.html
  74. 2
      deps/npm/html/doc/misc/npm-scope.html
  75. 7
      deps/npm/html/doc/misc/npm-scripts.html
  76. 2
      deps/npm/html/doc/misc/removing-npm.html
  77. 2
      deps/npm/html/doc/misc/semver.html
  78. 5
      deps/npm/lib/access.js
  79. 19
      deps/npm/lib/adduser.js
  80. 3
      deps/npm/lib/bin.js
  81. 5
      deps/npm/lib/build.js
  82. 3
      deps/npm/lib/cache.js
  83. 3
      deps/npm/lib/completion.js
  84. 7
      deps/npm/lib/config.js
  85. 7
      deps/npm/lib/dist-tag.js
  86. 3
      deps/npm/lib/explore.js
  87. 5
      deps/npm/lib/help-search.js
  88. 5
      deps/npm/lib/help.js
  89. 4
      deps/npm/lib/init.js
  90. 37
      deps/npm/lib/install.js
  91. 2
      deps/npm/lib/install/actions.js
  92. 134
      deps/npm/lib/install/deps.js
  93. 36
      deps/npm/lib/install/diff-trees.js
  94. 1
      deps/npm/lib/install/inflate-shrinkwrap.js
  95. 25
      deps/npm/lib/install/is-dev.js
  96. 47
      deps/npm/lib/install/is-extraneous.js
  97. 71
      deps/npm/lib/install/mutate-into-logical-tree.js
  98. 27
      deps/npm/lib/install/node.js
  99. 36
      deps/npm/lib/install/prune-tree.js
  100. 4
      deps/npm/lib/install/save.js

11
deps/npm/.travis.yml

@ -1,11 +1,16 @@
language: node_js
node_js:
- "6"
# LTS is our most important target
- "4"
# next LTS and master is next most important
- "6"
# still in LTS maintenance until fall 2016
# (also still in wide use)
- "0.10"
# will be unsupported as soon as 6 becomes LTS and 7 released
- "5"
# technically in LTS / distros, unbeloved
- "0.12"
- "0.10"
- "0.8"
env:
- DEPLOY_VERSION=testing
before_install:

4
deps/npm/AUTHORS

@ -402,3 +402,7 @@ Gianluca Casati <fibo@users.noreply.github.com>
André Herculano <andresilveirah@gmail.com>
Wyatt Preul <wpreul@gmail.com>
Myles Borins <mborins@us.ibm.com>
Elliot Lee <github.public@intelliot.com>
Dmitry Kirilyuk <gk.joker@gmail.com>
Aaron Tribou <aaron.tribou@gmail.com>
Tapani Moilanen <moilanen.tapani@gmail.com>

435
deps/npm/CHANGELOG.md

@ -1,3 +1,438 @@
### v3.10.2 (2016-06-17):
This is a quick hotfix release with two small bug fixes. First, there was
an issue where the new progress bar would overwrite interactive prompts,
that is, those found in `npm login` and `npm init`. Second, if the
directory you were running `npm outdated` on was a bad link or otherwise had
unrecoverable errors then npm would crash instead of printing the error.
* [`fbefb86`](https://github.com/npm/npm/commit/fbefb8675b26320b295f481b4872ce99f0180807)
[`7779e9f`](https://github.com/npm/npm/commit/7779e9fb9430f6547532c67f2471864d62bbd5bc)
[#13105](https://github.com/npm/npm/issues/13105)
Disable progress bar in `adduser` and `init`.
* [`6a33b2c`](https://github.com/npm/npm/commit/6a33b2c13f637a41e25cd0339925bc430b50358a)
[#13115](https://github.com/npm/npm/issues/13115)
Ensure that errors reading the package tree for `outdated` does not result
in crashs.
([@iarna](https://github.com/iarna))
### v3.10.1 (2016-06-17):
There are two very important bug fixes and one long-awaited (and signifcant!)
deprecation in this hotfix release. [Hold on.](http://butt.holdings/)
#### *WHOA*
When Node.js 6.0.0 was released, the CLI team noticed an alarming upsurge in
bugs related to important files (like `README.md`) not being included in
published packages. The new bugs looked much like
[#5082](https://github.com/npm/npm/issues/5082), which had been around in one
form or another since April, 2014. #5082 used to be a very rare (and obnoxious)
bug that the CLI team hadn't had much luck reproducing, and we'd basically
marked it down as a race condition that arose on machines using slow and / or
rotating-media-based hard drives.
Under 6.0.0, the behavior was reliable enough to be nearly deterministic, and
made it very difficult for publishers using `.npmignore` files in combination
with `"files"` stanzas in `package.json` to get their packages onto the
registry without one or more files missing from the packed tarball. The entire
saga is contained within [the issue](https://github.com/npm/npm/issues/5082),
but the summary is that an improvement to the performance of
[`fs.realpath()`](https://nodejs.org/api/fs.html#fs_fs_realpath_path_options_callback)
made it much more likely that the packing code would lose the race.
Fixing this has proven to be very difficult, in part because the code used by
npm to produce package tarballs is more complicated than, strictly speaking, it
needs to be. [**@evanlucas**](https://github.com/evanlucas) contributed [a
patch](https://github.com/npm/fstream/pull/50) that passed the tests in a
[special test suite](https://github.com/othiym23/eliminate-5082) that I
([**@othiym23**](https://github.com/othiym23)) created (with help from
[**@addaleax**](https://github.com/addaleax)), but only _after_ we'd released
the fixed version of that package did we learn that it actually made the
problem _worse_ in other situations in npm proper. Eventually,
[**@rvagg**](https://github.com/rvagg) put together a more durable fix that
appears to completely address the errant behavior under Node.js 6.0.0. That's
the patch included in this release. Everybody should chip in for redback
insurance for Rod and his family; he's done the community a huge favor.
Does this mean the long (2+ year) saga of #5082 is now over? At this point, I'm
going to quote from my latest summary on the issue:
> The CLI team (mostly me, with input from the rest of the team) has decided that
> the overall complexity of the interaction between `fstream`, `fstream-ignore`,
> `fstream-npm`, and `node-tar` has grown more convoluted than the team is
> comfortable (maybe even capable of) supporting.
>
> - While I believe that @rvagg's (very targeted) fix addresses _this_ issue, I
> would be shocked if there aren't other race conditions in npm's packing
> logic. I've already identified a couple other places in the code that are
> most likely race conditions, even if they're harder to trigger than the
> current one.
> - The way that dependency bundling is integrated leads to a situation in
> which a bunch of logic is duplicated between `fstream-npm` and
> `lib/utils/tar.js` in npm itself, and the way `fstream`'s extension
> mechanism works makes this difficult to clean up. This caused a nasty
> regression ([#13088](https://github.com/npm/fstream/pull/50), see below) as
> of ~`npm@3.8.7` where the dependencies of `bundledDependencies` were no
> longer being included in the built package tarballs.
> - The interaction between `.npmignore`, `.gitignore`, and `files` is hopelessly
> complicated, scattered in many places throughout the code. We've been
> discussing [making the ignores and includes logic clearer and more
> predictable](https://github.com/npm/npm/wiki/Files-and-Ignores), and the
> current code fights our efforts to clean that up.
>
> So, our intention is still to replace `fstream`, `fstream-ignore`, and
> `fstream-npm` with something much simpler and purpose-built. There's no real
> reason to have a stream abstraction here when a simple recursive-descent
> filesystem visitor and a synchronous function that can answer whether a given
> path should be included in the packed tarball would do the job adequately.
>
> What's not yet clear is whether we'll need to replace `node-tar` in the
> process. `node-tar` is a very robust implementation of tar (it handles, like,
> everything), and it also includes some very important tweaks to prevent several
> classes of security exploits involving maliciously crafted packages. However,
> its packing API involves passing in an `fstream` instance, so we'd either need
> to produce something that follows enough of `fstream`'s contract for `node-tar`
> to keep working, or swap `node-tar` out for something like `tar-stream` (and
> then ensuring that our use of `tar-stream` is secure, which could involve
> security patches for either npm or `tar-stream`).
The testing and review of `fstream@1.0.10` that the team has done leads us to
believe that this bug is fixed, but I'm feeling more than a little paranoid
about fstream now, so it's important that people keep a close eye on their
publishes for a while and let us know immediately if they notice any
irregularities.
* [`8802f6c`](https://github.com/npm/npm/commit/8802f6c152ea35cb9e5269c077c3a2f9df411afc)
[#5082](https://github.com/npm/npm/issues/5082) `fstream@1.0.10`: Ensure that
entries are collected after a paused stream resumes.
([@rvagg](https://github.com/rvagg))
* [`c189723`](https://github.com/npm/npm/commit/c189723110497a17dac3b0596f2916deeed93ee7)
[#5082](https://github.com/npm/npm/issues/5082) Remove the warning introduced
in `npm@3.10.0`, because it should no longer be necessary.
([@othiym23](https://github.com/othiym23))
#### *ERK*
Because the interaction between `fstream`, `fstream-ignore`, `fsream-npm`, and
`node-tar` is so complex, it's proven difficult to add support for npm features
like `bundledDependencies` without duplicating some logic within npm's code
base. While [fixing a completely unrelated
bug](https://github.com/npm/npm/issues/9642), we "cleaned up" some of this
seemingly duplicated code, and in the process removed the code that ensured
that the dependencies of `bundledDependencies` are themselves bundled. We've
brought that code back into the code base (without reopening #9642), and added
a test to ensure that this regression can't recur.
* [`1b6ceca`](https://github.com/npm/npm/commit/1b6ceca32fc81ca7cc7ac2eb7d11f687e6f87f26)
[#13088](https://github.com/npm/npm/issues/13088) Partially restore npm's own
version of the `fstream-npm` function `applyIgnores` to ensure that the
dependencies of `bundledDependencies` are included in published packages.
([@iarna](https://github.com/iarna))
#### GOODBYE, FAITHFUL FRIEND
At NodeConf Adventure 2016 (RIP in peace, Mikeal Rogers's NodeConf!), the CLI
team had an opportunity to talk to representatives from some of the larger
companies that we knew were still using Node.js 0.8 in production. After asking
them whether they were still using 0.8, we got back blank stares and questions
like, "0.8? You mean, from four years ago?" After establishing that being able
to run npm in their legacy environments was no longer necessary, the CLI team
made the decision to drop support for 0.8. (Faithful observers of our [team
meetings](https://github.com/npm/npm/issues?utf8=%E2%9C%93&q=is%3Aissue+npm+cli+team+meeting+)
will have known this was the plan for NodeConf since the beginning of 2016.)
In practice, this means only what's in the commit below: we've removed 0.8 from
our continuous integration test matrix below, and will no longer be habitually
testing changes under Node 0.8. We may also give ourselves permission to use
`setImmediate()` in test code. However, since the project still supports
Node.js 0.10 and 0.12, it's unlikely that patches that rely on ES 2015
functionality will land anytime soon.
Looking forward, the team's current plan is to drop support for Node.js 0.10
when its LTS maintenace window expires in October, 2016, and 0.12 when its
maintenance / LTS window ends at the end of 2016. We will also drop support for
Node.js 5.x when Node.js 6 becomes LTS and Node.js 7 is released, also in the
October-December 2016 timeframe.
(Confused about Node.js's LTS policy? [Don't
be!](https://github.com/nodejs/LTS) If you look at [this
diagram](https://github.com/nodejs/LTS/blob/ce364a94b0e0619eba570cd57be396573e1ef889/schedule.png),
it should make all of the preceding clear.)
If, in practice, this doesn't work with distribution packagers or other
community stakeholders responsible for packaging and distributing Node.js and
npm, please reach out to us. Aligning the npm CLI's LTS policy with Node's
helps everybody minimize the amount of work they need to do, and since all of
our teams are small and very busy, this is somewhere between a necessity and
non-negotiable.
* [`d6afd5f`](https://github.com/npm/npm/commit/d6afd5ffb1b19e5d94aeee666afcb8adaced58db)
Remove 0.8 from the Node.js testing matrix, and reorder to match real-world
priority, with comments. ([@othiym23](https://github.com/othiym23))
### v3.10.0 (2016-06-16):
Do we have a release for you! We have our first new lifecycle since
`version`, a new progress bar and a bunch of bug fixes.
[I'm](https://github.com/iarna) really excited about this release, let me
tell you!!
#### DANGER: PUBLISHING ON NODE 6.0.0
Publishing and packing are buggy under Node versions greater than 6.0.0.
Please use Node.js LTS (4.4.x) to publish packages. See
[#5082](https://github.com/npm/npm/issues/5082) for details and current
status.
* [`4e52cef`](https://github.com/npm/npm/commit/4e52cef3d4170c8abab98149666ec599f8363233)
[#13077](https://github.com/npm/npm/pull/13077)
Warn when using Node 6+.
([@othiym23](https://github.com/othiym23))
#### NEW LIFECYCLE SCRIPT: `shrinkwrap`
* [`e8c80f2`](https://github.com/npm/npm/commit/e8c80f20bfd5d1618e85dbab41660d6f3e5ce405)
[#10744](https://github.com/npm/npm/issues/10744)
You can now add `preshrinkwrap`, `shrinkwrap` and `postshrinkwrap` to your `package.json`
scripts section. They are run when you run `npm shrinkwrap` or `npm install --save` with
an `npm-shrinkwrap.json` present in your module directory.
`preshrinkwrap` is run prior to generating the new `npm-shrinkwrap.json` and the other two
are run after.
([@SimenB](https://github.com/SimenB))
#### NEW PROGRESS BAR
![Install with new progress bar](http://shared.by.re-becca.org/misc-images/new-gauge-color.gif)
We have a new progress bar and a bunch of related improvements!
##### BLOCKING BLOCKING
**!!WARNING!!** As a part of this change we now explicitly set
`process.stdout` and `process.stderr` to be _blocking_ if they are ttys,
using [set-blocking](https://www.npmjs.com/package/set-blocking). This is
necessary to ensure that we can fully erase the progress bar before we start
writing other things out to the console.
Prior to Node.js 6.0.0, they were already blocking on Windows, and MacOS.
Meanwhile, on Linux they were always non-blocking but had large (64kb)
buffers, which largely made this a non-issue there. Starting with Node.js
6.0.0 they became non-blocking on MacOS and that caused some unexpected
issues (see [nodejs/node#6456](https://github.com/nodejs/node/issues/6456)).
If you are a Linux user, it's plausible that this might have a performance
impact if your terminal can't keep up with output rate. If you experience
this, we want to know! Please [file an
issue](https://github.com/npm/npm/issues/new) at our issue tracker.
##### BETTER LAYOUT
Let's start by talking about what goes into the new progress bar:
```
⸨░░░░░░░░░░⠂⠂⠂⠂⠂⠂⠂⠂⸩ ⠹ loadExtraneous: verb afterAdd /Users/rebecca/.npm/null/0.0.0/package/package.json written
↑‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ ↑ ‾‾‾‾‾‾‾‾‾↑‾‾‾‾ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾↑‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
percent complete spinner current thing we're doing most recent log line
```
The _spinner_ is intended as an activity indicator–it moves whenever
npm sends something to its logs. It also spins at a constant speed while
waiting on the network.
The _current thing we're doing_ relates to how we track how much work has
been done. It's the name of the unit of work we most recently started or
completed some of. Sometimes these names are more obvious than others and
that's something we'll look at improving over time.
And finally, the _most recent log line_ is exactly that, it's the most
recent line that you would have seen if you were running with
`--loglevel=silly` or were watching the `npm-debug.log`. These are written
to be useful to the npm developers above all else, so they may sometimes be
a little cryptic.
* [`6789978`](https://github.com/npm/npm/commit/6789978ab0713f67928177a9109fed43953ccbda)
[#13075](https://github.com/npm/npm/pull/13075)
`npmlog@3.1.2`: Update to the latest npmlog, which includes the new and
improved progress bar layout.
([@iarna](https://github.com/iarna))
##### MORE PERFORMANT
The underlying code for the progress bar was rewritten, in part with
performance in mind. Previously whenever you updated the progress bar it
would check an internal variable for how long it had been since the last
update and if it had been long enough, it would print out what you gave it.
With the new progress bar we do updates at a fixed interval (with
`setInterval`) and "updating" the progress bar just updates some variables
that will be used when the next tick of the progress bar happens. Currently
progress bar updates happen every 50ms, although that's open to tuning.
##### WIDE(R) COMPATIBILITY
I spent a lot of time working our Unicode support. There were a few issues
that plagued us:
Previously one of the characters we used was _ambiguous width_ which means
that it was possible to configure your terminal to display it as _full
width_. If you did this, the output would be broken because we assumed it
was a _half width_ character. We no longer use any of these characters.
Previously, we defaulted to using Unicode on Windows. This isn't a safe
assumption, however, as folks in non-US locales often use other code pages
for their terminals. Windows doesn't provide* any facility available to
Node.js for determining the current code page, so we no longer try to use
Unicode on Windows.
_\* The facilities it does provide are a command line tool and a windows
system call. The former isn't satisfactory for speed reasons and the latter
can't be accessed from a JS-only Node.js program._
##### FOR THE FUTURE: THEMES
The new version of the progress bar library supports plugable themes. Adding
support to npm shouldn't be too difficult. The built in themes are:
* `ASCII` – The fallback theme which is always available.
* `colorASCII` – Inverts the color of the completed portion of the progress
bar. The default on Windows and usually on Linux. (Color support is
determined by looking at the `TERM` environment variable.)
* `brailleSpinner` – A braille based spinner and other unicode enhancements. MacOS only.
* `colorBrailleSpinner` – The default on MacOS, a combination of the above two.
##### LESS GARBLED OUTPUT
As a part of landing this I've also taken the opportunity to more
systematically disable the progress bar prior to printing to `stdout` or
running external commands (in particular: git). This should ensure that the
progress bar doesn't get left on screen after something else prints
something. We also are now much more zealous about erasing the progress bar
on exit, so if you `Ctrl-C` out of an install we'll still cleanup the
progress bar.
* [`63f153c`](https://github.com/npm/npm/commit/63f153c743f9354376bfb9dad42bd028a320fd1f)
[#13075](https://github.com/npm/npm/pull/13075)
Consistently make sure that the progress bar is hidden before we try to
write to stdout.
([@iarna](https://github.com/iarna))
* [`8da79fa`](https://github.com/npm/npm/commit/8da79fa60de4972dca406887623d4e430d1609a1)
[#13075](https://github.com/npm/npm/pull/13075)
Be more methodical about disabling progress bars before running external
commands.
([@iarna](https://github.com/iarna))
#### REPLACE `process.nextTick` WITH `asap` ASAP
* [`5873b56`](https://github.com/npm/npm/commit/5873b56cb315437dfe97e747811c0b9c297bfd38)
[`254ad7e`](https://github.com/npm/npm/commit/254ad7e38f978b81046d242297fe8b122bfb5852)
[#12754](https://github.com/npm/npm/issues/12754)
Use `asap` in preference over `process.nextTick` to avoid recursion warnings.
Under the hood `asap` uses `setImmediate` when available and falls back to
`process.nextTick` when it's not. Versions of node that don't support
`setImmediate` have a version of `process.nextTick` that actually behaves
like the current `setImmediate`.
([@lxe](https://github.com/lxe))
#### FIXES AND REFACTORING
Sometimes the installer would get it into its head that it could move or
remove things that it really shouldn't have. While the reproducers for this were
often a bit complicated (the core reproducer involved five symlinks(!)), it turns
out this is an easy scenario to end up in if your project has a bunch of small
modules and you're linking them while developing them.
Fixing this ended up involving doing an important and overdue rewrite of how
the installer keeps track of (and interrogates) the relationships between
modules. This likely fixes other related bugs, and in the coming weeks
we'll verify and close them as we find them. There are a whole slew of
commits related to this rewrite, and if you'd like to learn more check
out the PR where I describe what I did in detail: [#12775](https://github.com/npm/npm/pull/12775)
* [`8f3e111`](https://github.com/npm/npm/commit/8f3e111fdd2ce7824864f77b04e5206bdaf961a1)
[`c0b0ed1`](https://github.com/npm/npm/commit/c0b0ed1e9945c01b2e68bf22af3fe4005aa4bcd4)
[#10800](https://github.com/npm/npm/issues/10800)
Remove install pruning stage–this was obsoleted by making the installer keep
itself up to date as it goes along. This is NOT related to `npm prune`.
([@iarna](https://github.com/iarna))
#### MAKE OUTDATED MORE WIDELY LEGIBLE
* [`21c60e9`](https://github.com/npm/npm/commit/21c60e9bb56d47da17b79681f2142b3dcf4c804b)
[#12843](https://github.com/npm/npm/pull/12843)
In `npm outdated, stop coloring the _Location_ and _Package Type_ columns.
Previously they were colored dark gray, which was hard to read for some
users.
([@tribou](https://github.com/tribou))
#### DOCUMENTATION UPDATE
* [`eb0a72e`](https://github.com/npm/npm/commit/eb0a72eb95862c1d0d41a259d138ab601d538793)
[#12983](https://github.com/npm/npm/pull/12983)
Describe how to run the lifecycle scripts of dependencies. How you do
this changed with `npm` v2.
([@Tapppi](https://github.com/Tapppi))
### DEPENDENCY UPDATES
* [`da743dc`](https://github.com/npm/npm/commit/da743dc2153fed8baca3dada611b188f53ab5931)
`which@1.2.10`:
Fix bug where unnecessary special case path handling for Windows could
produce unexpected results on Unix systems.
([@isaacs](https://github.com/isaacs))
* [`4533bd5`](https://github.com/npm/npm/commit/4533bd501d54aeedfec3884f4fd54e8c2edd6020)
`npm-user-validate@0.1.4`:
Validate the length of usernames.
([@aredridel](https://github.com/aredridel))
* [`4a18922`](https://github.com/npm/npm/commit/4a18922e56f9dc902fbb4daa8f5fafa4a1b89376)
`glob@7.0.4`:
Fixes issues with Node 6 and "long or excessively symlink-looping paths".
([@isaacs](https://github.com/isaacs))
* [`257fe11`](https://github.com/npm/npm/commit/257fe11052987e5cfec2abdf52392dd95a6c6ef3)
`npm-package-arg@4.2.0`:
Add `escapedName` to the result. It is suitable for passing through to a
registry without further processing.
([@nexdrew](https://github.com/nexdrew))
* [`dda3ca7`](https://github.com/npm/npm/commit/dda3ca70f74879106589ef29e167c8b91ef5aa4c)
`wrappy@1.0.2`
([@zkat](https://github.com/zkat))
* [`25f1db5`](https://github.com/npm/npm/commit/25f1db504d0fd8c97211835f0027027fe95e0ef3)
`readable-stream@2.1.4`
([@calvinmetcalf](https://github.com/calvinmetcalf))
* [`9d64fe6`](https://github.com/npm/npm/commit/9d64fe676ebc6949c687ffb85bd93eca3137fc0d)
`abbrev@1.0.9`
([@isaacs](https://github.com/isaacs))
### v3.9.6 (2016-06-02):
#### SMALL OUTPUT TWEAK
* [`0bdc9d1`](https://github.com/npm/npm/commit/0bdc9d13b73df07e63a58470ea001fda490e5869)
[#12879](https://github.com/npm/npm/pull/12879)
The usage output for npm commands was somehow under the impression that
the singular form of `aliases` is `aliase`. This has been corrected to show
`alias` instead.
([@intelliot](https://github.com/intelliot))
#### DOC UPDATES
* [`f771b49`](https://github.com/npm/npm/commit/f771b49f5d65bbef540c231fbfcca71cacdce4db)
[#12933](https://github.com/npm/npm/pull/12933)
Add `config.gypi` to list of files that are always ignored in the
`package.json` manpage.
([@Jokero](https://github.com/Jokero))
#### DEPENDENCY UPDATES
* [`61c1d9c`](https://github.com/npm/npm/commit/61c1d9cd4b2296bd41d55a5c58e35ca5f028b9bc)
[#12926](https://github.com/npm/npm/pull/12926)
Removed unused dependency `lodash.isarray`.
([@mmalecki](https://github.com/mmalecki))
* [`168ed28`](https://github.com/npm/npm/commit/168ed2834b2c6db8bb39f81baadc0bf275807328)
[#12926](https://github.com/npm/npm/pull/12926)
Removed unused dependency `lodash.keys`.
([@mmalecki](https://github.com/mmalecki))
### v3.9.5 (2016-05-27):
Just a quick point release. We had an issue where I (Kat) included the

12
deps/npm/appveyor.yml

@ -2,13 +2,15 @@ environment:
matrix:
# LTS is our most important target
- nodejs_version: "4"
# latest
- nodejs_version: "5"
# I like 0.10 better than 0.12
# next LTS and master is next most important
- nodejs_version: "6"
# still in LTS maintenance until fall 2016
# (also still in wide use)
- nodejs_version: "0.10"
# will be unsupported as soon as 6 becomes LTS and 7 released
- nodejs_version: "5"
# technically in LTS / distros, unbeloved
- nodejs_version: "0.12"
# EOL summer 2016, most likely
- nodejs_version: "0.8"
COVERALLS_REPO_TOKEN:
secure: XdC0aySefK0HLh1GNk6aKrzZPbCfPQLyA4mYtFGEp4DrTuZA/iuCUS0LDqFYO8JQ
platform:

10
deps/npm/doc/cli/npm-shrinkwrap.md

@ -109,6 +109,14 @@ resolution using "version" if one isn't.
2. The tree is walked and any missing dependencies are installed in the usual fashion.
If `preshrinkwrap`, `shrinkwrap` or `postshrinkwrap` are in the `scripts` property of the
`package.json`, they will be executed by running `npm shrinkwrap`.
`preshrinkwrap` and `shrinkwrap` are executed before the shrinkwrap, `postshrinkwrap` is
executed afterwards. For example to run some postprocessing on the generated file:
"scripts": { "postshrinkwrap": "node fix-shrinkwrap.js" }
### Using shrinkwrapped packages
Using a shrinkwrapped package is no different than using any other
@ -174,5 +182,7 @@ contents rather than versions.
## SEE ALSO
* npm-install(1)
* npm-run-script(1)
* npm-scripts(7)
* package.json(5)
* npm-ls(1)

1
deps/npm/doc/files/package.json.md

@ -202,6 +202,7 @@ Conversely, some files are always ignored:
* `npm-debug.log`
* `.npmrc`
* `node_modules`
* `config.gypi`
## main

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

@ -676,7 +676,7 @@ Set to true to run in "production" mode.
### progress
* Default: true
* Default: true, unless TRAVIS or CI env vars set.
* Type: Boolean
When set to `true`, npm will display a progress bar during time intensive

5
deps/npm/doc/misc/npm-scripts.md

@ -32,11 +32,14 @@ following scripts:
* prerestart, restart, postrestart:
Run by the `npm restart` command. Note: `npm restart` will run the
stop and start scripts if no `restart` script is provided.
* preshrinkwrap, shrinkwrap, postshrinkwrap:
Run by the `npm shrinkwrap` command.
Additionally, arbitrary scripts can be executed by running `npm
run-script <stage>`. *Pre* and *post* commands with matching
names will be run for those as well (e.g. `premyscript`, `myscript`,
`postmyscript`).
`postmyscript`). Scripts from dependencies can be run with `npm explore
<pkg> -- npm run <stage>`.
## COMMON USES

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@3.9.5</p>
<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-access &mdash; npm@3.10.2</p>

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

@ -72,5 +72,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@3.9.5</p>
<p id="footer">npm-adduser &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-bin &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-bugs &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-build &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-bundle &mdash; npm@3.10.2</p>

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

@ -81,5 +81,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@3.9.5</p>
<p id="footer">npm-cache &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-completion &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-config &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-dedupe &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-deprecate &mdash; npm@3.10.2</p>

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

@ -87,5 +87,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@3.9.5</p>
<p id="footer">npm-dist-tag &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-docs &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-edit &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-explore &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-help-search &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-help &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-init &mdash; npm@3.10.2</p>

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

@ -42,4 +42,4 @@ 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@3.9.5</p>
<p id="footer">npm-install-test &mdash; npm@3.10.2</p>

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

@ -312,5 +312,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@3.9.5</p>
<p id="footer">npm-install &mdash; npm@3.10.2</p>

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

@ -73,5 +73,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@3.9.5</p>
<p id="footer">npm-link &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-logout &mdash; npm@3.10.2</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@3.9.5 /path/to/npm
<pre><code>npm@3.10.2 /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@3.9.5</p>
<p id="footer">npm-ls &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-outdated &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-owner &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-pack &mdash; npm@3.10.2</p>

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

@ -32,4 +32,4 @@
<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@3.9.5</p>
<p id="footer">npm-ping &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-prefix &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-prune &mdash; npm@3.10.2</p>

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

@ -72,5 +72,5 @@ it is removed with <a href="../cli/npm-unpublish.html">npm-unpublish(1)</a>.</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@3.9.5</p>
<p id="footer">npm-publish &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-rebuild &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-repo &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-restart &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-root &mdash; npm@3.10.2</p>

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

@ -63,5 +63,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@3.9.5</p>
<p id="footer">npm-run-script &mdash; npm@3.10.2</p>

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

@ -57,5 +57,5 @@ Pass a different registry url such as the default above in order to override thi
<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@3.9.5</p>
<p id="footer">npm-search &mdash; npm@3.10.2</p>

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

@ -99,7 +99,12 @@ resolution using &quot;version&quot; if one isn&#39;t.</p>
<li><p>The tree is walked and any missing dependencies are installed in the usual fashion.</p>
</li>
</ol>
<h3 id="using-shrinkwrapped-packages">Using shrinkwrapped packages</h3>
<p>If <code>preshrinkwrap</code>, <code>shrinkwrap</code> or <code>postshrinkwrap</code> are in the <code>scripts</code> property of the
<code>package.json</code>, they will be executed by running <code>npm shrinkwrap</code>.
<code>preshrinkwrap</code> and <code>shrinkwrap</code> are executed before the shrinkwrap, <code>postshrinkwrap</code> is
executed afterwards. For example to run some postprocessing on the generated file:</p>
<pre><code>&quot;scripts&quot;: { &quot;postshrinkwrap&quot;: &quot;node fix-shrinkwrap.js&quot; }
</code></pre><h3 id="using-shrinkwrapped-packages">Using shrinkwrapped packages</h3>
<p>Using a shrinkwrapped package is no different than using any other
package: you can <code>npm install</code> it by hand, or add a dependency to your
<code>package.json</code> file and <code>npm install</code> it.</p>
@ -154,6 +159,8 @@ contents rather than versions.</p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
<li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li>
<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
<li><a href="../files/package.json.html">package.json(5)</a></li>
<li><a href="../cli/npm-ls.html">npm-ls(1)</a></li>
</ul>
@ -169,5 +176,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@3.9.5</p>
<p id="footer">npm-shrinkwrap &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-star &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-stars &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-start &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-stop &mdash; npm@3.10.2</p>

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

@ -63,5 +63,5 @@ that do not 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-tag &mdash; npm@3.9.5</p>
<p id="footer">npm-tag &mdash; npm@3.10.2</p>

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

@ -67,4 +67,4 @@ 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@3.9.5</p>
<p id="footer">npm-team &mdash; npm@3.10.2</p>

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

@ -38,5 +38,5 @@ true.</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-test &mdash; npm@3.9.5</p>
<p id="footer">npm-test &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-uninstall &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-unpublish &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-update &mdash; npm@3.10.2</p>

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

@ -100,5 +100,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@3.9.5</p>
<p id="footer">npm-version &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-view &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-whoami &mdash; npm@3.10.2</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>3.9.5</p>
<p>3.10.2</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;&#97;&#x69;&#108;&#x74;&#x6f;&#58;&#x69;&#x40;&#x69;&#x7a;&#115;&#46;&#x6d;&#101;">&#x69;&#x40;&#x69;&#x7a;&#115;&#46;&#x6d;&#101;</a></p>
<a href="&#109;&#x61;&#x69;&#108;&#x74;&#x6f;&#x3a;&#x69;&#64;&#105;&#x7a;&#115;&#x2e;&#x6d;&#101;">&#x69;&#64;&#105;&#x7a;&#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@3.9.5</p>
<p id="footer">npm &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-folders &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-folders &mdash; npm@3.10.2</p>

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

@ -160,6 +160,7 @@ works just like a <code>.gitignore</code>.</p>
<li><code>npm-debug.log</code></li>
<li><code>.npmrc</code></li>
<li><code>node_modules</code></li>
<li><code>config.gypi</code></li>
</ul>
<h2 id="main">main</h2>
<p>The main field is a module ID that is the primary entry point to your program.
@ -580,5 +581,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@3.9.5</p>
<p id="footer">package.json &mdash; npm@3.10.2</p>

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

@ -83,5 +83,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@3.9.5</p>
<p id="footer">npmrc &mdash; npm@3.10.2</p>

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

@ -160,6 +160,7 @@ works just like a <code>.gitignore</code>.</p>
<li><code>npm-debug.log</code></li>
<li><code>.npmrc</code></li>
<li><code>node_modules</code></li>
<li><code>config.gypi</code></li>
</ul>
<h2 id="main">main</h2>
<p>The main field is a module ID that is the primary entry point to your program.
@ -580,5 +581,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@3.9.5</p>
<p id="footer">package.json &mdash; npm@3.10.2</p>

2
deps/npm/html/doc/index.html

@ -162,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@3.9.5</p>
<p id="footer">npm-index &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-coding-style &mdash; npm@3.10.2</p>

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

@ -582,7 +582,7 @@ local <code>npm install</code> without any arguments.</li>
</ol>
<h3 id="progress">progress</h3>
<ul>
<li>Default: true</li>
<li>Default: true, unless TRAVIS or CI env vars set.</li>
<li>Type: Boolean</li>
</ul>
<p>When set to <code>true</code>, npm will display a progress bar during time intensive
@ -862,5 +862,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@3.9.5</p>
<p id="footer">npm-config &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">npm-developers &mdash; npm@3.10.2</p>

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

@ -13,7 +13,7 @@
<h2 id="synopsis">SYNOPSIS</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;&#x69;&#108;&#116;&#111;&#58;&#115;&#x75;&#x70;&#112;&#x6f;&#x72;&#x74;&#64;&#110;&#112;&#109;&#106;&#115;&#x2e;&#x63;&#111;&#109;">&#115;&#x75;&#x70;&#112;&#x6f;&#x72;&#x74;&#64;&#110;&#112;&#109;&#106;&#115;&#x2e;&#x63;&#111;&#109;</a></li>
<li>Email the author, CC <a href="&#109;&#x61;&#105;&#x6c;&#116;&#111;&#58;&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#109;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;">&#115;&#x75;&#112;&#x70;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#109;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;</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>
@ -51,12 +51,12 @@ Joe&#39;s appropriate course of action in each case is the same.</p>
owner (Bob).</li>
<li>Joe emails Bob, explaining the situation <strong>as respectfully as
possible</strong>, and what he would like to do with the module name. He
adds the npm support staff <a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#x3a;&#x73;&#x75;&#x70;&#112;&#x6f;&#x72;&#116;&#64;&#x6e;&#112;&#109;&#x6a;&#x73;&#x2e;&#99;&#111;&#109;">&#x73;&#x75;&#x70;&#112;&#x6f;&#x72;&#116;&#64;&#x6e;&#112;&#109;&#x6a;&#x73;&#x2e;&#99;&#111;&#109;</a> to the CC list of
adds the npm support staff <a href="&#109;&#97;&#105;&#x6c;&#x74;&#x6f;&#58;&#115;&#x75;&#112;&#x70;&#111;&#x72;&#116;&#x40;&#110;&#x70;&#109;&#x6a;&#115;&#46;&#99;&#111;&#109;">&#115;&#x75;&#112;&#x70;&#111;&#x72;&#116;&#x40;&#110;&#x70;&#109;&#x6a;&#115;&#46;&#99;&#111;&#109;</a> to the CC list of
the email. Mention in the email that Bob can run <code>npm owner add
joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
<li>After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can&#39;t come to any sort of resolution, email support
<a href="&#x6d;&#97;&#x69;&#x6c;&#x74;&#x6f;&#58;&#x73;&#117;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#x6d;&#x6a;&#115;&#46;&#x63;&#x6f;&#x6d;">&#x73;&#117;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#x6e;&#112;&#x6d;&#x6a;&#115;&#46;&#x63;&#x6f;&#x6d;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
<a href="&#x6d;&#97;&#x69;&#x6c;&#116;&#111;&#58;&#115;&#x75;&#x70;&#112;&#111;&#x72;&#116;&#x40;&#x6e;&#x70;&#109;&#106;&#115;&#x2e;&#x63;&#111;&#109;">&#115;&#x75;&#x70;&#112;&#111;&#x72;&#116;&#x40;&#x6e;&#x70;&#109;&#106;&#115;&#x2e;&#x63;&#111;&#109;</a> and we&#39;ll sort it out. (&quot;Reasonable&quot; is
usually at least 4 weeks, but extra time is allowed around common
holidays.)</li>
</ol>
@ -112,5 +112,5 @@ things into it.</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-disputes &mdash; npm@3.9.5</p>
<p id="footer">npm-disputes &mdash; npm@3.10.2</p>

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

@ -162,4 +162,4 @@
<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@3.9.5</p>
<p id="footer">npm-index &mdash; npm@3.10.2</p>

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

@ -86,4 +86,4 @@
<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@3.9.5</p>
<p id="footer">npm-orgs &mdash; npm@3.10.2</p>

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

@ -70,5 +70,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@3.9.5</p>
<p id="footer">npm-registry &mdash; npm@3.10.2</p>

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

@ -91,5 +91,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@3.9.5</p>
<p id="footer">npm-scope &mdash; npm@3.10.2</p>

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

@ -40,11 +40,14 @@ Run by the <code>npm start</code> command.</li>
<li>prerestart, restart, postrestart:
Run by the <code>npm restart</code> command. Note: <code>npm restart</code> will run the
stop and start scripts if no <code>restart</code> script is provided.</li>
<li>preshrinkwrap, shrinkwrap, postshrinkwrap:
Run by the <code>npm shrinkwrap</code> command.</li>
</ul>
<p>Additionally, arbitrary scripts can be executed by running <code>npm
run-script &lt;stage&gt;</code>. <em>Pre</em> and <em>post</em> commands with matching
names will be run for those as well (e.g. <code>premyscript</code>, <code>myscript</code>,
<code>postmyscript</code>).</p>
<code>postmyscript</code>). Scripts from dependencies can be run with `npm explore</p>
<p><pkg> -- npm run <stage>`.</p>
<h2 id="common-uses">COMMON USES</h2>
<p>If you need to perform operations on your package before it is used, in a way
that is not dependent on the operating system or architecture of the
@ -208,5 +211,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@3.9.5</p>
<p id="footer">npm-scripts &mdash; npm@3.10.2</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@3.9.5</p>
<p id="footer">removing-npm &mdash; npm@3.10.2</p>

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

@ -302,5 +302,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@3.9.5</p>
<p id="footer">semver &mdash; npm@3.10.2</p>

5
deps/npm/lib/access.js

@ -5,6 +5,7 @@ var resolve = require('path').resolve
var readPackageJson = require('read-package-json')
var mapToRegistry = require('./utils/map-to-registry.js')
var npm = require('./npm.js')
var output = require('./utils/output.js')
var whoami = require('./whoami')
@ -62,7 +63,9 @@ function access (args, cb) {
params.auth = auth
try {
return npm.registry.access(cmd, uri, params, function (err, data) {
!err && data && console.log(JSON.stringify(data, undefined, 2))
if (!err && data) {
output(JSON.stringify(data, undefined, 2))
}
cb(err, data)
})
} catch (e) {

19
deps/npm/lib/adduser.js

@ -4,7 +4,9 @@ var log = require('npmlog')
var npm = require('./npm.js')
var read = require('read')
var userValidate = require('npm-user-validate')
var output = require('./utils/output')
var usage = require('./utils/usage')
var chain = require('slide').chain
var crypto
try {
@ -30,15 +32,14 @@ function adduser (args, cb) {
e: creds.email || ''
}
var u = {}
var fns = [readUsername, readPassword, readEmail, save]
loop()
function loop (er) {
if (er) return cb(er)
var fn = fns.shift()
if (fn) return fn(c, u, loop)
cb()
}
log.disableProgress()
chain([
[readUsername, c, u],
[readPassword, c, u],
[readEmail, c, u],
[save, c, u]
], cb)
}
function readUsername (c, u, cb) {
@ -173,7 +174,7 @@ function save (c, u, cb) {
log.info('adduser', 'Authorized user %s', u.u)
var scopeMessage = scope ? ' to scope ' + scope : ''
console.log('Logged in as %s%s on %s.', u.u, scopeMessage, uri)
output('Logged in as %s%s on %s.', u.u, scopeMessage, uri)
npm.config.save('user', cb)
})
}

3
deps/npm/lib/bin.js

@ -2,6 +2,7 @@ module.exports = bin
var npm = require('./npm.js')
var osenv = require('osenv')
var output = require('./utils/output.js')
bin.usage = 'npm bin [--global]'
@ -13,7 +14,7 @@ function bin (args, silent, cb) {
var b = npm.bin
var PATH = osenv.path()
if (!silent) console.log(b)
if (!silent) output(b)
process.nextTick(cb.bind(this, null, b))
if (npm.config.get('global') && PATH.indexOf(b) === -1) {

5
deps/npm/lib/build.js

@ -22,6 +22,7 @@ var asyncMap = require('slide').asyncMap
var ini = require('ini')
var writeFile = require('write-file-atomic')
var packageId = require('./utils/package-id.js')
var output = require('./utils/output.js')
module.exports = build
build.usage = 'npm build [<folder>]'
@ -211,9 +212,7 @@ function linkBins (pkg, folder, parent, gtop, cb) {
var out = npm.config.get('parseable')
? dest + '::' + src + ':BINFILE'
: dest + ' -> ' + src
log.clearProgress()
console.log(out)
log.showProgress()
output(out)
cb()
})
}

3
deps/npm/lib/cache.js

@ -82,6 +82,7 @@ var npa = require('npm-package-arg')
var getStat = require('./cache/get-stat.js')
var cachedPackageRoot = require('./cache/cached-package-root.js')
var mapToRegistry = require('./utils/map-to-registry.js')
var output = require('./utils/output.js')
cache.usage = 'npm cache add <tarball file>' +
'\nnpm cache add <folder>' +
@ -182,7 +183,7 @@ function ls (args, cb) {
prefix = '~' + prefix.substr(process.env.HOME.length)
}
ls_(normalize(args), npm.config.get('depth'), function (er, files) {
console.log(files.map(function (f) {
output(files.map(function (f) {
return path.join(prefix, f)
}).join('\n').trim())
cb(er, files)

3
deps/npm/lib/completion.js

@ -14,6 +14,7 @@ var shorthandNames = Object.keys(shorthands)
var allConfs = configNames.concat(shorthandNames)
var once = require('once')
var isWindowsShell = require('./utils/is-windows-shell.js')
var output = require('./utils/output.js')
completion.completion = function (opts, cb) {
if (opts.w > 3) return cb()
@ -203,7 +204,7 @@ function wrapCb (cb, opts) {
console.error([er && er.stack, compls, opts.partialWord])
if (er || compls.length === 0) return cb(er)
console.log(compls.join('\n'))
output(compls.join('\n'))
cb()
}
}

7
deps/npm/lib/config.js

@ -11,6 +11,7 @@ var editor = require('editor')
var os = require('os')
var umask = require('./utils/umask')
var usage = require('./utils/usage')
var output = require('./utils/output')
config.usage = usage(
'config',
@ -148,7 +149,7 @@ function get (key, cb) {
}
var val = npm.config.get(key)
if (key.match(/umask/)) val = umask.toString(val)
console.log(val)
output(val)
cb()
}
@ -278,7 +279,7 @@ function list (cb) {
'; HOME = ' + process.env.HOME + '\n' +
'; "npm config ls -l" to show all defaults.\n'
console.log(msg)
output(msg)
return cb()
}
@ -294,7 +295,7 @@ function list (cb) {
})
msg += '\n'
console.log(msg)
output(msg)
return cb()
}

7
deps/npm/lib/dist-tag.js

@ -8,6 +8,7 @@ var npm = require('./npm.js')
var mapToRegistry = require('./utils/map-to-registry.js')
var readLocalPkg = require('./utils/read-local-package.js')
var usage = require('./utils/usage')
var output = require('./utils/output.js')
distTag.usage = usage(
'dist-tag',
@ -77,7 +78,7 @@ function add (spec, tag, cb) {
npm.registry.distTags.add(base, params, function (er) {
if (er) return cb(er)
console.log('+' + t + ': ' + pkg + '@' + version)
output('+' + t + ': ' + pkg + '@' + version)
cb()
})
})
@ -108,7 +109,7 @@ function remove (tag, pkg, cb) {
npm.registry.distTags.rm(base, params, function (er) {
if (er) return cb(er)
console.log('-' + tag + ': ' + pkg + '@' + version)
output('-' + tag + ': ' + pkg + '@' + version)
cb()
})
})
@ -132,7 +133,7 @@ function list (pkg, cb) {
var msg = Object.keys(tags).map(function (k) {
return k + ': ' + tags[k]
}).sort().join('\n')
console.log(msg)
output(msg)
cb(er, tags)
})
}

3
deps/npm/lib/explore.js

@ -12,6 +12,7 @@ var fs = require('graceful-fs')
var isWindowsShell = require('./utils/is-windows-shell.js')
var escapeExecPath = require('./utils/escape-exec-path.js')
var escapeArg = require('./utils/escape-arg.js')
var output = require('./utils/output.js')
function explore (args, cb) {
if (args.length < 1 || !args[0]) return cb(explore.usage)
@ -42,7 +43,7 @@ function explore (args, cb) {
}
if (!shellArgs.length) {
console.log(
output(
'\nExploring ' + cwd + '\n' +
"Type 'exit' or ^D when finished\n"
)

5
deps/npm/lib/help-search.js

@ -7,6 +7,7 @@ var asyncMap = require('slide').asyncMap
var npm = require('./npm.js')
var glob = require('glob')
var color = require('ansicolors')
var output = require('./utils/output.js')
helpSearch.usage = 'npm help-search <text>'
@ -135,7 +136,7 @@ function searchFiles (args, files, cb) {
}
if (results.length === 0) {
console.log('No results for ' + args.map(JSON.stringify).join(' '))
output('No results for ' + args.map(JSON.stringify).join(' '))
return cb()
}
@ -206,6 +207,6 @@ function formatResults (args, results, cb) {
'(run with -l or --long to see more context)'
}
console.log(out.trim())
output(out.trim())
cb(null, results)
}

5
deps/npm/lib/help.js

@ -15,6 +15,7 @@ var glob = require('glob')
var cmdList = require('./config/cmd-list').cmdList
var shorthands = require('./config/cmd-list').shorthands
var commands = cmdList.concat(Object.keys(shorthands))
var output = require('./utils/output.js')
function help (args, cb) {
var argv = npm.config.get('argv').cooked
@ -43,7 +44,7 @@ function help (args, cb) {
npm.commands[section].usage) {
npm.config.set('loglevel', 'silent')
log.level = 'silent'
console.log(npm.commands[section].usage)
output(npm.commands[section].usage)
return cb()
}
@ -161,7 +162,7 @@ function htmlMan (man) {
function npmUsage (valid, cb) {
npm.config.set('loglevel', 'silent')
log.level = 'silent'
console.log([
output([
'\nUsage: npm <command>',
'',
'where <command> is one of:',

4
deps/npm/lib/init.js

@ -5,15 +5,17 @@ module.exports = init
var log = require('npmlog')
var npm = require('./npm.js')
var initJson = require('init-package-json')
var output = require('./utils/output.js')
init.usage = 'npm init [--force|-f|--yes|-y]'
function init (args, cb) {
var dir = process.cwd()
log.pause()
log.disableProgress()
var initFile = npm.config.get('init-module')
if (!initJson.yes(npm.config)) {
console.log([
output([
'This utility will walk you through creating a package.json file.',
'It only covers the most common items, and tries to guess sensible defaults.',
'',

37
deps/npm/lib/install.js

@ -113,6 +113,7 @@ var lock = locker.lock
var unlock = locker.unlock
var ls = require('./ls.js')
var parseJSON = require('./utils/parse-json.js')
var output = require('./utils/output.js')
// install specific libraries
var copyTree = require('./install/copy-tree.js')
@ -123,7 +124,6 @@ var loadDevDeps = require('./install/deps.js').loadDevDeps
var getAllMetadata = require('./install/deps.js').getAllMetadata
var loadRequestedDeps = require('./install/deps.js').loadRequestedDeps
var loadExtraneous = require('./install/deps.js').loadExtraneous
var pruneTree = require('./install/prune-tree.js')
var diffTrees = require('./install/diff-trees.js')
var checkPermissions = require('./install/check-permissions.js')
var decomposeActions = require('./install/decompose-actions.js')
@ -136,9 +136,11 @@ var doSerialActions = require('./install/actions.js').doSerial
var doReverseSerialActions = require('./install/actions.js').doReverseSerial
var doParallelActions = require('./install/actions.js').doParallel
var doOneAction = require('./install/actions.js').doOne
var removeObsoleteDep = require('./install/deps.js').removeObsoleteDep
var packageId = require('./utils/package-id.js')
var moduleName = require('./utils/module-name.js')
var errorMessage = require('./utils/error-message.js')
var andIgnoreErrors = require('./install/and-ignore-errors.js')
function unlockCB (lockPath, name, cb) {
validate('SSF', arguments)
@ -363,9 +365,8 @@ Installer.prototype.loadIdealTree = function (cb) {
[this, this.loadAllDepsIntoIdealTree],
[this, this.finishTracker, 'loadAllDepsIntoIdealTree'],
[this, function (next) { recalculateMetadata(this.idealTree, log, next) }],
[this, this.debugTree, 'idealTree:prePrune', 'idealTree'],
[this, function (next) { next(pruneTree(this.idealTree)) }]
// TODO: Remove this (should no longer be necessary, instead counter productive)
[this, function (next) { recalculateMetadata(this.idealTree, log, next) }]
], cb)
}
@ -419,21 +420,18 @@ Installer.prototype.computeLinked = function (cb) {
var cmd = action[0]
var pkg = action[1]
if (cmd !== 'add' && cmd !== 'update') return next()
var isReqByTop = pkg.package._requiredBy.filter(function (name) { return name === '/' }).length
var isReqByUser = pkg.package._requiredBy.filter(function (name) { return name === '#USER' }).length
var isExtraneous = pkg.package._requiredBy.length === 0
var isReqByTop = pkg.requiredBy.filter(function (mod) { return mod.isTop }).length
var isReqByUser = pkg.userRequired
var isExtraneous = pkg.requiredBy.length === 0
if (!isReqByTop && !isReqByUser && !isExtraneous) return next()
isLinkable(pkg, function (install, link) {
if (install) linkTodoList.push(['global-install', pkg])
if (link) linkTodoList.push(['global-link', pkg])
if (install || link) {
pkg.parent.children = pkg.parent.children.filter(function (child) { return child !== pkg })
}
if (install || link) removeObsoleteDep(pkg)
next()
})
}, function () {
if (linkTodoList.length === 0) return cb()
pruneTree(self.idealTree)
self.differences.length = 0
Array.prototype.push.apply(self.differences, linkTodoList)
diffTrees(self.currentTree, self.idealTree, self.differences, log.newGroup('d2'), cb)
@ -633,8 +631,8 @@ Installer.prototype.normalizeTree = function (log, cb) {
log.silly('install', 'normalizeTree')
recalculateMetadata(this.currentTree, log, iferr(cb, function (tree) {
tree.children.forEach(function (child) {
if (child.package._requiredBy.length === 0) {
child.package._requiredBy.push('#EXISTING')
if (child.requiredBy.length === 0) {
child.existing = true
}
})
cb(null, tree)
@ -655,17 +653,16 @@ Installer.prototype.printInstalled = function (cb) {
validate('F', arguments)
log.silly('install', 'printInstalled')
var self = this
log.clearProgress()
this.differences.forEach(function (action) {
var mutation = action[0]
var child = action[1]
var name = packageId(child)
var where = path.relative(self.where, child.path)
if (mutation === 'remove') {
console.log('- ' + name + ' ' + where)
output('- ' + name + ' ' + where)
} else if (mutation === 'move') {
var oldWhere = path.relative(self.where, child.fromPath)
console.log(name + ' ' + oldWhere + ' -> ' + where)
output(name + ' ' + oldWhere + ' -> ' + where)
}
})
var addedOrMoved = this.differences.filter(function (action) {
@ -676,10 +673,9 @@ Installer.prototype.printInstalled = function (cb) {
var child = action[1]
return child.path
})
log.showProgress()
if (!addedOrMoved.length) return cb()
// TODO: remove the recalculateMetadata, should not be needed
recalculateMetadata(this.idealTree, log, iferr(cb, function (tree) {
log.clearProgress()
// These options control both how installs happen AND how `ls` shows output.
// Something like `npm install --production` only installs production deps.
// By contrast `npm install --production foo` installs `foo` and the
@ -691,10 +687,7 @@ Installer.prototype.printInstalled = function (cb) {
npm.config.set('dev', false)
npm.config.set('only', '')
npm.config.set('also', '')
ls.fromTree(self.where, tree, addedOrMoved, false, function () {
log.showProgress()
cb()
})
ls.fromTree(self.where, tree, addedOrMoved, false, andIgnoreErrors(cb))
}))
}

2
deps/npm/lib/install/actions.js

@ -63,7 +63,7 @@ function andHandleOptionalDepErrors (pkg, next) {
return function (er) {
if (!er) return next.apply(null, arguments)
markAsFailed(pkg)
var anyFatal = pkg.userRequired || !pkg.parent
var anyFatal = pkg.userRequired || pkg.isTop
for (var ii = 0; ii < pkg.requiredBy.length; ++ii) {
var parent = pkg.requiredBy[ii]
var isFatal = failedDependency(parent, pkg)

134
deps/npm/lib/install/deps.js

@ -10,6 +10,7 @@ var iferr = require('iferr')
var npa = require('npm-package-arg')
var validate = require('aproba')
var realizePackageSpecifier = require('realize-package-specifier')
var asap = require('asap')
var dezalgo = require('dezalgo')
var fetchPackageMetadata = require('../fetch-package-metadata.js')
var andAddParentToErrors = require('./and-add-parent-to-errors.js')
@ -78,15 +79,17 @@ function doesChildVersionMatch (child, requested, requestor) {
return semver.satisfies(child.package.version, requested.spec)
}
// TODO: Rename to maybe computeMetadata or computeRelationships
exports.recalculateMetadata = function (tree, log, next) {
recalculateMetadata(tree, log, {}, next)
}
exports._childDependencySpecifier = childDependencySpecifier
function childDependencySpecifier (tree, name, spec, cb) {
if (!tree.resolved) tree.resolved = {}
if (!tree.resolved[name]) tree.resolved[name] = {}
if (tree.resolved[name][spec]) {
return process.nextTick(function () {
return asap(function () {
cb(null, tree.resolved[name][spec])
})
}
@ -101,19 +104,24 @@ function recalculateMetadata (tree, log, seen, next) {
validate('OOOF', arguments)
if (seen[tree.path]) return next()
seen[tree.path] = true
if (tree.parent == null) resetMetadata(tree)
function markDeps (spec, done) {
validate('SF', arguments)
var matched = spec.match(/^(@?[^@]+)@(.*)$/)
childDependencySpecifier(tree, matched[1], matched[2], function (er, req) {
if (tree.parent == null) {
resetMetadata(tree)
tree.isTop = true
}
function markDeps (toMark, done) {
var name = toMark.name
var spec = toMark.spec
var kind = toMark.kind
childDependencySpecifier(tree, name, spec, function (er, req) {
if (er || !req.name) return done()
var child = findRequirement(tree, req.name, req)
if (child) {
resolveWithExistingModule(child, tree, log, andIgnoreErrors(done))
} else if (tree.package.dependencies[req.name] != null) {
} else if (kind === 'dep') {
tree.missingDeps[req.name] = req.rawSpec
done()
} else if (tree.package.devDependencies[req.name] != null) {
} else if (kind === 'dev') {
tree.missingDevDeps[req.name] = req.rawSpec
done()
} else {
@ -121,15 +129,16 @@ function recalculateMetadata (tree, log, seen, next) {
}
})
}
function specs (deps) {
return Object.keys(deps).map(function (depname) { return depname + '@' + deps[depname] })
function makeMarkable (deps, kind) {
if (!deps) return []
return Object.keys(deps).map(function (depname) { return { name: depname, spec: deps[depname], kind: kind } })
}
// Ensure dependencies and dev dependencies are marked as required
var tomark = specs(tree.package.dependencies)
if (!tree.parent && (npm.config.get('dev') || !npm.config.get('production'))) {
tomark = union(tomark, specs(tree.package.devDependencies))
}
var tomark = makeMarkable(tree.package.dependencies, 'dep')
if (tree.isTop) tomark = union(tomark, makeMarkable(tree.package.devDependencies, 'dev'))
// Ensure any children ONLY from a shrinkwrap are also included
var childrenOnlyInShrinkwrap = tree.children.filter(function (child) {
return child.fromShrinkwrap &&
@ -137,7 +146,13 @@ function recalculateMetadata (tree, log, seen, next) {
!tree.package.devDependencies[child.package.name]
})
var tomarkOnlyInShrinkwrap = childrenOnlyInShrinkwrap.map(function (child) {
return child.package._spec
var name = child.package.name
var matched = child.package._spec.match(/^@?[^@]+@(.*)$/)
var spec = matched ? matched[1] : child.package._spec
var kind = tree.package.dependencies[name] ? 'dep'
: tree.package.devDependencies[name] ? 'dev'
: 'dep'
return { name: name, spec: spec, kind: kind }
})
tomark = union(tomark, tomarkOnlyInShrinkwrap)
@ -148,9 +163,7 @@ function recalculateMetadata (tree, log, seen, next) {
[asyncMap, tomark, markDeps],
[asyncMap, tree.children, function (child, done) { recalculateMetadata(child, log, seen, done) }]
], function () {
tree.userRequired = tree.package._requiredBy.some(function (req) { return req === '#USER' })
tree.existing = tree.package._requiredBy.some(function (req) { return req === '#EXISTING' })
tree.package._location = flatNameFromTree(tree)
tree.location = flatNameFromTree(tree)
next(null, tree)
})
}
@ -158,18 +171,23 @@ function recalculateMetadata (tree, log, seen, next) {
function addRequiredDep (tree, child, cb) {
isDep(tree, child, function (childIsDep, childIsProdDep, childIsDevDep) {
if (!childIsDep) return cb(false)
var name = childIsProdDep ? flatNameFromTree(tree) : '#DEV:' + flatNameFromTree(tree)
replaceModuleName(child.package, '_requiredBy', name)
replaceModule(child, 'requiredBy', tree)
replaceModule(tree, 'requires', child)
replaceModuleByPath(child, 'requiredBy', tree)
replaceModuleByName(tree, 'requires', child)
if (childIsProdDep && tree.missingDeps) delete tree.missingDeps[moduleName(child)]
if (childIsDevDep && tree.missingDevDeps) delete tree.missingDevDeps[moduleName(child)]
cb(true)
})
}
exports._removeObsoleteDep = removeObsoleteDep
exports.removeObsoleteDep = removeObsoleteDep
function removeObsoleteDep (child) {
if (child.removed) return
child.removed = true
// remove from physical tree
if (child.parent) {
child.parent.children = child.parent.children.filter(function (pchild) { return pchild !== child })
}
// remove from logical tree
var requires = child.requires || []
requires.forEach(function (requirement) {
requirement.requiredBy = requirement.requiredBy.filter(function (reqBy) { return reqBy !== child })
@ -243,9 +261,7 @@ exports.loadRequestedDeps = function (args, tree, saveToDependencies, log, next)
// won't be when we're done), flag it as "depending" on the user
// themselves, so we don't remove it as a dep that no longer exists
addRequiredDep(tree, child, function (childIsDep) {
if (!childIsDep) {
replaceModuleName(child.package, '_requiredBy', '#USER')
}
if (!childIsDep) child.userRequired = true
depLoaded(null, child, tracker)
})
}))
@ -266,13 +282,13 @@ exports.removeDeps = function (args, tree, saveToDependencies, log, next) {
validate('AOOF', [args, tree, log, next])
args.forEach(function (pkg) {
var pkgName = moduleName(pkg)
var toRemove = tree.children.filter(moduleNameMatches(pkgName))
var pkgToRemove = toRemove[0] || createChild({package: {name: pkgName}})
if (saveToDependencies) {
var toRemove = tree.children.filter(moduleNameMatches(pkgName))
var pkgToRemove = toRemove[0] || createChild({package: {name: pkgName}})
replaceModule(tree, 'removed', pkgToRemove)
replaceModuleByPath(tree, 'removed', pkgToRemove)
pkgToRemove.save = saveToDependencies
}
tree.children = tree.children.filter(noModuleNameMatches(pkgName))
removeObsoleteDep(pkgToRemove)
})
log.finish()
next()
@ -313,7 +329,6 @@ var failedDependency = exports.failedDependency = function (tree, name_pkg) {
pkg = name_pkg
name = moduleName(pkg)
}
tree.children = tree.children.filter(noModuleNameMatches(name))
if (isDepOptional(tree, name)) {
@ -322,10 +337,14 @@ var failedDependency = exports.failedDependency = function (tree, name_pkg) {
tree.failed = true
if (!tree.parent) return true
if (tree.isTop) return true
if (tree.userRequired) return true
removeObsoleteDep(tree)
if (!tree.requiredBy) return false
for (var ii = 0; ii < tree.requiredBy.length; ++ii) {
var requireParent = tree.requiredBy[ii]
if (failedDependency(requireParent, tree.package)) {
@ -367,7 +386,7 @@ function andHandleOptionalErrors (log, tree, name, done) {
exports.loadDeps = loadDeps
function loadDeps (tree, log, next) {
validate('OOF', arguments)
if (tree.loaded || (tree.parent && tree.parent.failed)) return andFinishTracker.now(log, next)
if (tree.loaded || (tree.parent && tree.parent.failed) || tree.removed) return andFinishTracker.now(log, next)
if (tree.parent) tree.loaded = true
if (!tree.package.dependencies) tree.package.dependencies = {}
asyncMap(Object.keys(tree.package.dependencies), function (dep, done) {
@ -446,38 +465,44 @@ function resolveWithExistingModule (child, tree, log, next) {
var updatePhantomChildren = exports.updatePhantomChildren = function (current, child) {
validate('OO', arguments)
while (current && current !== child.parent) {
// FIXME: phantomChildren doesn't actually belong in the package.json
if (!current.package._phantomChildren) current.package._phantomChildren = {}
current.package._phantomChildren[moduleName(child)] = child.package.version
if (!current.phantomChildren) current.phantomChildren = {}
current.phantomChildren[moduleName(child)] = child
current = current.parent
}
}
function flatNameFromTree (tree) {
validate('O', arguments)
if (!tree.parent) return '/'
if (tree.isTop) return '/'
var path = flatNameFromTree(tree.parent)
if (path !== '/') path += '/'
return flatName(path, tree)
}
exports._replaceModuleName = replaceModuleName
function replaceModuleName (obj, key, name) {
validate('OSS', arguments)
obj[key] = union(obj[key] || [], [name])
exports._replaceModuleByPath = replaceModuleByPath
function replaceModuleByPath (obj, key, child) {
return replaceModule(obj, key, child, function (replacing, child) {
return replacing.path === child.path
})
}
exports._replaceModuleByName = replaceModuleByName
function replaceModuleByName (obj, key, child) {
var childName = moduleName(child)
return replaceModule(obj, key, child, function (replacing, child) {
return moduleName(replacing) === childName
})
}
exports._replaceModule = replaceModule
function replaceModule (obj, key, child) {
validate('OSO', arguments)
function replaceModule (obj, key, child, matchBy) {
validate('OSOF', arguments)
if (!obj[key]) obj[key] = []
// we replace children with a new array object instead of mutating it
// because mutating it results in weird failure states.
// I would very much like to know _why_ this is. =/
var children = [].concat(obj[key])
var childName = moduleName(child)
for (var replaceAt = 0; replaceAt < children.length; ++replaceAt) {
if (moduleName(children[replaceAt]) === childName) break
if (matchBy(children[replaceAt], child)) break
}
var replacing = children.splice(replaceAt, 1, child)
obj[key] = children
@ -514,15 +539,17 @@ function resolveWithNewModule (pkg, tree, log, next) {
children: pkg._bundled || [],
isLink: tree.isLink
})
delete pkg._bundled
var hasBundled = child.children.length
var replaced = replaceModule(parent, 'children', child)
var replaced = replaceModuleByName(parent, 'children', child)
if (replaced) removeObsoleteDep(replaced)
addRequiredDep(tree, child, function () {
pkg._location = flatNameFromTree(child)
child.location = flatNameFromTree(child)
if (tree.parent && parent !== tree) updatePhantomChildren(tree.parent, child)
if (pkg._bundled) {
if (hasBundled) {
inflateBundled(child, child.children)
}
@ -584,7 +611,7 @@ var findRequirement = exports.findRequirement = function (tree, name, requested,
if (matches.length) return matches[0]
return null
}
if (!tree.parent) return null
if (tree.isTop) return null
return findRequirement(tree.parent, name, requested, requestor)
}
@ -618,13 +645,12 @@ var earliestInstallable = exports.earliestInstallable = function (requiredBy, tr
return null
}
// FIXME: phantomChildren doesn't actually belong in the package.json
if (tree.package._phantomChildren && tree.package._phantomChildren[pkg.name]) return null
if (tree.phantomChildren && tree.phantomChildren[pkg.name]) return null
if (!tree.parent) return tree
if (tree.isTop) return tree
if (tree.isGlobal) return tree
if (npm.config.get('global-style') && !tree.parent.parent) return tree
if (npm.config.get('global-style') && tree.parent.isTop) return tree
if (npm.config.get('legacy-bundling')) return tree
return (earliestInstallable(requiredBy, tree.parent, pkg) || tree)

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

@ -59,17 +59,15 @@ function requiredByAllLinked (node) {
return node.requiredBy.filter(isLink).length === node.requiredBy.length
}
function isNotReqByTop (req) {
return req !== '/' && // '/' is the top level itself
req !== '#USER' && // #USER
req !== '#EXTRANEOUS'
function isNotTopOrExtraneous (node) {
return !node.isTop && !node.userRequired && !node.existing
}
var sortActions = module.exports.sortActions = function (differences) {
var actions = {}
differences.forEach(function (action) {
var child = action[1]
actions[child.package._location] = action
actions[child.location] = action
})
var sorted = []
@ -77,14 +75,18 @@ var sortActions = module.exports.sortActions = function (differences) {
var sortedlocs = Object.keys(actions).sort(sortByLocation)
// Do top level deps first, this stops the sorting by required order from
// unsorting these deps.
// We're going to sort the actions taken on top level dependencies first, before
// considering the order of transitive deps. Because we're building our list
// from the bottom up, this means we will return a list with top level deps LAST.
// This is important in terms of keeping installations as consistent as possible
// as folks add new dependencies.
var toplocs = sortedlocs.filter(function (location) {
var mod = actions[location][1]
if (!mod.package._requiredBy) return true
// If the module is required by ANY non-top level package
// then we don't want to include this.
return !mod.package._requiredBy.some(isNotReqByTop)
if (!mod.requiredBy) return true
// If this module is required by any non-top level module
// or by any extraneous module, eg user requested or existing
// then we don't want to give this priority sorting.
return !mod.requiredBy.some(isNotTopOrExtraneous)
})
toplocs.concat(sortedlocs).forEach(function (location) {
@ -94,12 +96,16 @@ var sortActions = module.exports.sortActions = function (differences) {
function sortByLocation (aa, bb) {
return bb.localeCompare(aa)
}
function sortModuleByLocation (aa, bb) {
return sortByLocation(aa && aa.location, bb && bb.location)
}
function sortByDeps (action) {
var mod = action[1]
if (added[mod.package._location]) return
added[mod.package._location] = action
mod.package._requiredBy.sort().forEach(function (location) {
if (actions[location]) sortByDeps(actions[location])
if (added[mod.location]) return
added[mod.location] = action
if (!mod.requiredBy) mod.requiredBy = []
mod.requiredBy.sort(sortModuleByLocation).forEach(function (mod) {
if (actions[mod.location]) sortByDeps(actions[mod.location])
})
sorted.unshift(action)
}

1
deps/npm/lib/install/inflate-shrinkwrap.js

@ -55,6 +55,7 @@ var inflateShrinkwrap = module.exports = function (tree, swdeps, finishInflating
})
tree.children.push(child)
if (pkg._bundled) {
delete pkg._bundled
inflateBundled(child, child.children)
}
inflateShrinkwrap(child, sw.dependencies || {}, next)

25
deps/npm/lib/install/is-dev.js

@ -1,7 +1,26 @@
'use strict'
var isDev = exports.isDev = function (node) {
return node.package._requiredBy.some(function (req) { return req === '#DEV:/' })
var moduleName = require('../utils/module-name.js')
function andIsDev (name) {
return function (req) {
return req.package &&
req.package.devDependencies &&
req.package.devDependencies[name]
}
}
exports.isDev = function (node) {
return node.requiredBy.some(andIsDev(moduleName(node)))
}
function andIsOnlyDev (name) {
var isThisDev = andIsDev(name)
return function (req) {
return isThisDev(req) &&
(!req.package.dependencies || !req.package.dependencies[name])
}
}
exports.isOnlyDev = function (node) {
return node.package._requiredBy.length === 1 && isDev(node)
return node.requiredBy.every(andIsOnlyDev(moduleName(node)))
}

47
deps/npm/lib/install/is-extraneous.js

@ -1,14 +1,37 @@
'use strict'
var path = require('path')
var isDev = require('./is-dev.js').isDev
var npm = require('../npm.js')
module.exports = function (tree) {
var pkg = tree.package
var requiredBy = pkg._requiredBy.filter(function (req) { return req[0] !== '#' })
var isTopLevel = tree.parent == null
var isChildOfTop = !isTopLevel && tree.parent.parent == null
var isTopGlobal = isChildOfTop && tree.parent.path === path.resolve(npm.globalDir, '..')
var topHasNoPackageJson = isChildOfTop && tree.parent.error
return !isTopLevel && (!isChildOfTop || !topHasNoPackageJson) && !isTopGlobal && requiredBy.length === 0 && !isDev(tree)
module.exports = isExtraneous
function isExtraneous (tree) {
var result = !isNotExtraneous(tree)
return result
}
function isNotRequired (tree) {
return tree.requiredBy && tree.requiredBy.length === 0
}
function parentHasNoPjson (tree) {
return tree.parent && tree.parent.isTop && tree.parent.error
}
function topHasNoPjson (tree) {
var top = tree
while (!top.isTop) top = top.parent
return top.error
}
function isNotExtraneous (tree, isCycle) {
if (!isCycle) isCycle = {}
if (tree.isTop || tree.userRequired) {
return true
} else if (isNotRequired(tree) && parentHasNoPjson(tree)) {
return true
} else if (isCycle[tree.path]) {
return topHasNoPjson(tree)
} else {
isCycle[tree.path] = true
return tree.requiredBy && tree.requiredBy.some(function (node) {
return isNotExtraneous(node, Object.create(isCycle))
})
}
}

71
deps/npm/lib/install/mutate-into-logical-tree.js

@ -8,6 +8,24 @@ var validateAllPeerDeps = require('./deps.js').validateAllPeerDeps
var packageId = require('../utils/package-id.js')
var moduleName = require('../utils/module-name.js')
// Return true if tree is a part of a cycle that:
// A) Never connects to the top of the tree
// B) Has not not had a point in the cycle arbitraryly declared its top
// yet.
function isDisconnectedCycle (tree, seen) {
if (!seen) seen = {}
if (tree.isTop || tree.cycleTop || tree.requiredBy.length === 0) {
return false
} else if (seen[tree.path]) {
return true
} else {
seen[tree.path] = true
return tree.requiredBy.every(function (node) {
return isDisconnectedCycle(node, Object.create(seen))
})
}
}
var mutateIntoLogicalTree = module.exports = function (tree) {
validate('O', arguments)
@ -18,35 +36,29 @@ var mutateIntoLogicalTree = module.exports = function (tree) {
var flat = flattenTree(tree)
function getNode (flatname) {
return flatname.substr(0, 5) === '#DEV:'
? flat[flatname.substr(5)]
: flat[flatname]
}
Object.keys(flat).sort().forEach(function (flatname) {
var node = flat[flatname]
var requiredBy = node.package._requiredBy || []
var requiredByNames = requiredBy.filter(function (parentFlatname) {
var parentNode = getNode(parentFlatname)
if (!parentNode) return false
return parentNode.package.dependencies[moduleName(node)] ||
(parentNode.package.devDependencies && parentNode.package.devDependencies[moduleName(node)])
})
requiredBy = requiredByNames.map(getNode)
node.requiredBy = requiredBy
if (!requiredBy.length) return
if (!node.requiredBy.length) return
if (node.parent) node.parent.children = without(node.parent.children, node)
if (node.parent) {
// If a node is a cycle that never reaches the root of the logical
// tree then we'll leave it attached to the root, or else it
// would go missing. Further we'll note that this is the node in the
// cycle that we picked arbitrarily to be the one attached to the root.
// others will fall
if (isDisconnectedCycle(node)) {
node.cycleTop = true
// Nor do we want to disconnect non-cyclical extraneous modules from the tree.
} else if (node.requiredBy.length) {
// regular deps though, we do, as we're moving them into the capable
// hands of the modules that require them.
node.parent.children = without(node.parent.children, node)
}
}
requiredBy.forEach(function (parentNode) {
node.requiredBy.forEach(function (parentNode) {
parentNode.children = union(parentNode.children, [node])
})
if (node.package._requiredBy.some(function (nodename) { return nodename[0] === '#' })) {
tree.children = union(tree.children, [node])
}
})
return tree
}
@ -70,18 +82,27 @@ function translateTree_ (tree, seen) {
tree.children.forEach(function (child) {
pkg.dependencies[moduleName(child)] = translateTree_(child, seen)
})
Object.keys(tree.missingDeps).forEach(function (name) {
function markMissing (name, requiredBy) {
if (pkg.dependencies[name]) {
if (pkg.dependencies[name].missing) return
pkg.dependencies[name].invalid = true
pkg.dependencies[name].realName = name
pkg.dependencies[name].extraneous = false
} else {
pkg.dependencies[name] = {
requiredBy: tree.missingDeps[name],
requiredBy: requiredBy,
missing: true,
optional: !!pkg.optionalDependencies[name]
}
}
}
Object.keys(tree.missingDeps).forEach(function (name) {
markMissing(name, tree.missingDeps[name])
})
Object.keys(tree.missingDevDeps).forEach(function (name) {
markMissing(name, tree.missingDevDeps[name])
})
var checkForMissingPeers = (tree.parent ? [] : [tree]).concat(tree.children)
checkForMissingPeers.filter(function (child) {

27
deps/npm/lib/install/node.js

@ -2,11 +2,10 @@
var defaultTemplate = {
package: {
version: '',
dependencies: {},
devDependencies: {},
optionalDependencies: {},
_requiredBy: [],
_phantomChildren: {}
optionalDependencies: {}
},
loaded: false,
children: [],
@ -14,10 +13,13 @@ var defaultTemplate = {
requires: [],
missingDeps: {},
missingDevDeps: {},
phantomChildren: {},
path: null,
realpath: null,
location: null,
userRequired: false,
existing: false
existing: false,
isTop: false
}
function isLink (node) {
@ -34,7 +36,7 @@ var create = exports.create = function (node, template) {
if (node[key] != null) return
node[key] = template[key]
})
if (isLink(node) || isLink(node.parent)) {
if (isLink(node.parent)) {
node.isLink = true
}
return node
@ -48,14 +50,17 @@ function reset (node, seen) {
if (seen[node.path]) return
seen[node.path] = true
var child = create(node)
child.package._requiredBy = child.package._requiredBy.filter(function (req) {
return req[0] === '#'
})
child.requiredBy = []
child.package._phantomChildren = {}
// FIXME: cleaning up after read-package-json's mess =(
if (child.package._id === '@') delete child.package._id
child.isTop = false
child.requiredBy = []
child.requires = []
child.missingDeps = {}
child.missingDevDeps = {}
child.phantomChildren = {}
child.location = null
child.children.forEach(function (child) { reset(child, seen) })
if (!child.package.version) child.package.version = ''
}

36
deps/npm/lib/install/prune-tree.js

@ -1,36 +0,0 @@
'use strict'
var validate = require('aproba')
var flattenTree = require('./flatten-tree.js')
function isNotPackage (mod) {
return function (parentMod) { return mod !== parentMod }
}
module.exports = function pruneTree (tree) {
validate('O', arguments)
var flat = flattenTree(tree)
// we just do this repeatedly until there are no more orphaned packages
// which isn't as effecient as it could be on a REALLY big tree
// but we'll face that if it proves to be an issue
var removedPackage
do {
removedPackage = false
Object.keys(flat).forEach(function (flatname) {
var child = flat[flatname]
if (!child.parent) return
child.package._requiredBy = (child.package._requiredBy || []).filter(function (req) {
var isDev = req.substr(0, 4) === '#DEV'
if (req[0] === '#' && !isDev) return true
if (flat[req]) return true
if (!isDev) return false
var reqChildAsDevDep = flat[req.substr(5)]
return reqChildAsDevDep && !reqChildAsDevDep.parent
})
if (!child.package._requiredBy.length) {
removedPackage = true
delete flat[flatname]
child.parent.children = child.parent.children.filter(isNotPackage(child))
}
})
} while (removedPackage)
}

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

@ -12,6 +12,7 @@ var npm = require('../npm.js')
var deepSortObject = require('../utils/deep-sort-object.js')
var parseJSON = require('../utils/parse-json.js')
var moduleName = require('../utils/module-name.js')
var isOnlyDev = require('./is-dev.js').isOnlyDev
// if the -S|--save option is specified, then write installed packages
// as dependencies to a package.json file.
@ -49,8 +50,7 @@ function saveShrinkwrap (tree, next) {
var shrinkwrap = tree.package._shrinkwrap || {dependencies: {}}
var hasDevOnlyDeps = tree.requires.filter(function (dep) {
var devReqs = dep.package._requiredBy.filter(function (name) { return name.substr(0, 4) === '#DEV' })
return devReqs.length === dep.package._requiredBy.length
return isOnlyDev(dep)
}).some(function (dep) {
return shrinkwrap.dependencies[dep.package.name] != null
})

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

Loading…
Cancel
Save