Upgrade npm to 1.1.17
authorisaacs <i@izs.me>
Wed, 18 Apr 2012 00:14:25 +0000 (17:14 -0700)
committerisaacs <i@izs.me>
Wed, 18 Apr 2012 16:36:40 +0000 (09:36 -0700)
225 files changed:
deps/npm/AUTHORS
deps/npm/doc/cli/config.md
deps/npm/doc/cli/install.md
deps/npm/doc/cli/json.md
deps/npm/html/api/bin.html
deps/npm/html/api/bugs.html
deps/npm/html/api/commands.html
deps/npm/html/api/config.html
deps/npm/html/api/deprecate.html
deps/npm/html/api/docs.html
deps/npm/html/api/edit.html
deps/npm/html/api/explore.html
deps/npm/html/api/help-search.html
deps/npm/html/api/init.html
deps/npm/html/api/install.html
deps/npm/html/api/link.html
deps/npm/html/api/load.html
deps/npm/html/api/ls.html
deps/npm/html/api/npm.html
deps/npm/html/api/outdated.html
deps/npm/html/api/owner.html
deps/npm/html/api/pack.html
deps/npm/html/api/prefix.html
deps/npm/html/api/prune.html
deps/npm/html/api/publish.html
deps/npm/html/api/rebuild.html
deps/npm/html/api/restart.html
deps/npm/html/api/root.html
deps/npm/html/api/run-script.html
deps/npm/html/api/search.html
deps/npm/html/api/shrinkwrap.html
deps/npm/html/api/start.html
deps/npm/html/api/stop.html
deps/npm/html/api/submodule.html
deps/npm/html/api/tag.html
deps/npm/html/api/test.html
deps/npm/html/api/uninstall.html
deps/npm/html/api/unpublish.html
deps/npm/html/api/update.html
deps/npm/html/api/version.html
deps/npm/html/api/view.html
deps/npm/html/api/whoami.html
deps/npm/html/doc/README.html
deps/npm/html/doc/adduser.html
deps/npm/html/doc/bin.html
deps/npm/html/doc/bugs.html
deps/npm/html/doc/build.html
deps/npm/html/doc/bundle.html
deps/npm/html/doc/cache.html
deps/npm/html/doc/changelog.html
deps/npm/html/doc/coding-style.html
deps/npm/html/doc/completion.html
deps/npm/html/doc/config.html
deps/npm/html/doc/deprecate.html
deps/npm/html/doc/developers.html
deps/npm/html/doc/disputes.html
deps/npm/html/doc/docs.html
deps/npm/html/doc/edit.html
deps/npm/html/doc/explore.html
deps/npm/html/doc/faq.html
deps/npm/html/doc/folders.html
deps/npm/html/doc/help-search.html
deps/npm/html/doc/help.html
deps/npm/html/doc/index.html
deps/npm/html/doc/init.html
deps/npm/html/doc/install.html
deps/npm/html/doc/json.html
deps/npm/html/doc/link.html
deps/npm/html/doc/list.html
deps/npm/html/doc/npm.html
deps/npm/html/doc/outdated.html
deps/npm/html/doc/owner.html
deps/npm/html/doc/pack.html
deps/npm/html/doc/prefix.html
deps/npm/html/doc/prune.html
deps/npm/html/doc/publish.html
deps/npm/html/doc/rebuild.html
deps/npm/html/doc/registry.html
deps/npm/html/doc/removing-npm.html
deps/npm/html/doc/restart.html
deps/npm/html/doc/root.html
deps/npm/html/doc/run-script.html
deps/npm/html/doc/scripts.html
deps/npm/html/doc/search.html
deps/npm/html/doc/semver.html
deps/npm/html/doc/shrinkwrap.html
deps/npm/html/doc/star.html
deps/npm/html/doc/start.html
deps/npm/html/doc/stop.html
deps/npm/html/doc/submodule.html
deps/npm/html/doc/tag.html
deps/npm/html/doc/test.html
deps/npm/html/doc/uninstall.html
deps/npm/html/doc/unpublish.html
deps/npm/html/doc/update.html
deps/npm/html/doc/version.html
deps/npm/html/doc/view.html
deps/npm/html/doc/whoami.html
deps/npm/html/index.html
deps/npm/lib/bugs.js
deps/npm/lib/docs.js
deps/npm/lib/init.js
deps/npm/lib/install.js
deps/npm/lib/npm.js
deps/npm/lib/utils/config-defs.js
deps/npm/lib/utils/fetch.js
deps/npm/lib/utils/npm-registry-client/request.js
deps/npm/lib/utils/read-installed.js
deps/npm/man/man1/README.1
deps/npm/man/man1/adduser.1
deps/npm/man/man1/bin.1
deps/npm/man/man1/bugs.1
deps/npm/man/man1/build.1
deps/npm/man/man1/bundle.1
deps/npm/man/man1/cache.1
deps/npm/man/man1/changelog.1
deps/npm/man/man1/coding-style.1
deps/npm/man/man1/completion.1
deps/npm/man/man1/config.1
deps/npm/man/man1/deprecate.1
deps/npm/man/man1/developers.1
deps/npm/man/man1/disputes.1
deps/npm/man/man1/docs.1
deps/npm/man/man1/edit.1
deps/npm/man/man1/explore.1
deps/npm/man/man1/faq.1
deps/npm/man/man1/folders.1
deps/npm/man/man1/help-search.1
deps/npm/man/man1/help.1
deps/npm/man/man1/index.1
deps/npm/man/man1/init.1
deps/npm/man/man1/install.1
deps/npm/man/man1/json.1
deps/npm/man/man1/link.1
deps/npm/man/man1/list.1
deps/npm/man/man1/npm.1
deps/npm/man/man1/outdated.1
deps/npm/man/man1/owner.1
deps/npm/man/man1/pack.1
deps/npm/man/man1/prefix.1
deps/npm/man/man1/prune.1
deps/npm/man/man1/publish.1
deps/npm/man/man1/rebuild.1
deps/npm/man/man1/registry.1
deps/npm/man/man1/removing-npm.1
deps/npm/man/man1/restart.1
deps/npm/man/man1/root.1
deps/npm/man/man1/run-script.1
deps/npm/man/man1/scripts.1
deps/npm/man/man1/search.1
deps/npm/man/man1/semver.1
deps/npm/man/man1/shrinkwrap.1
deps/npm/man/man1/star.1
deps/npm/man/man1/start.1
deps/npm/man/man1/stop.1
deps/npm/man/man1/submodule.1
deps/npm/man/man1/tag.1
deps/npm/man/man1/test.1
deps/npm/man/man1/uninstall.1
deps/npm/man/man1/unpublish.1
deps/npm/man/man1/update.1
deps/npm/man/man1/version.1
deps/npm/man/man1/view.1
deps/npm/man/man1/whoami.1
deps/npm/man/man3/bin.3
deps/npm/man/man3/bugs.3
deps/npm/man/man3/commands.3
deps/npm/man/man3/config.3
deps/npm/man/man3/deprecate.3
deps/npm/man/man3/docs.3
deps/npm/man/man3/edit.3
deps/npm/man/man3/explore.3
deps/npm/man/man3/help-search.3
deps/npm/man/man3/init.3
deps/npm/man/man3/install.3
deps/npm/man/man3/link.3
deps/npm/man/man3/load.3
deps/npm/man/man3/ls.3
deps/npm/man/man3/npm.3
deps/npm/man/man3/outdated.3
deps/npm/man/man3/owner.3
deps/npm/man/man3/pack.3
deps/npm/man/man3/prefix.3
deps/npm/man/man3/prune.3
deps/npm/man/man3/publish.3
deps/npm/man/man3/rebuild.3
deps/npm/man/man3/restart.3
deps/npm/man/man3/root.3
deps/npm/man/man3/run-script.3
deps/npm/man/man3/search.3
deps/npm/man/man3/shrinkwrap.3
deps/npm/man/man3/start.3
deps/npm/man/man3/stop.3
deps/npm/man/man3/submodule.3
deps/npm/man/man3/tag.3
deps/npm/man/man3/test.3
deps/npm/man/man3/uninstall.3
deps/npm/man/man3/unpublish.3
deps/npm/man/man3/update.3
deps/npm/man/man3/version.3
deps/npm/man/man3/view.3
deps/npm/man/man3/whoami.3
deps/npm/node_modules/fstream-npm/fstream-npm.js
deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json
deps/npm/node_modules/fstream-npm/package.json
deps/npm/node_modules/node-gyp/LICENSE [new file with mode: 0644]
deps/npm/node_modules/node-gyp/bin/node-gyp.js
deps/npm/node_modules/node-gyp/legacy/common.gypi
deps/npm/node_modules/node-gyp/lib/build.js
deps/npm/node_modules/node-gyp/lib/clean.js
deps/npm/node_modules/node-gyp/lib/configure.js
deps/npm/node_modules/node-gyp/lib/install.js
deps/npm/node_modules/node-gyp/lib/list.js
deps/npm/node_modules/node-gyp/lib/node-gyp.js
deps/npm/node_modules/node-gyp/lib/remove.js
deps/npm/node_modules/node-gyp/lib/util/asyncEmit.js [deleted file]
deps/npm/node_modules/node-gyp/lib/util/hook.js [deleted file]
deps/npm/node_modules/node-gyp/node_modules/ansi/package.json
deps/npm/node_modules/node-gyp/node_modules/glob/package.json
deps/npm/node_modules/node-gyp/package.json
deps/npm/node_modules/read/LICENCE [new file with mode: 0644]
deps/npm/node_modules/read/lib/read.js
deps/npm/node_modules/read/package.json
deps/npm/package.json
deps/npm/scripts/index-build.js

index 8f78dca..8bd425c 100644 (file)
@@ -61,3 +61,6 @@ Andrew Lunny <alunny@gmail.com>
 Henrik Hodne <dvyjones@binaryhex.com>
 Adam Blackburn <regality@gmail.com>
 Kris Windham <kriswindham@gmail.com>
+Jens Grunert <jens.grunert@gmail.com>
+Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>
+Dalmais Maxence <github@maxired.fr>
index 049a51e..3fd9cb8 100644 (file)
@@ -115,6 +115,8 @@ The following shorthands are parsed on the command-line:
 * `-l`: `--long`
 * `-desc`: `--description`
 * `-S`: `--save`
+* `-D`: `--save-dev`
+* `-O`: `--save-optional`
 * `-y`: `--yes`
 * `-n`: `--yes false`
 * `ll` and `la` commands: `ls --long`
@@ -358,6 +360,13 @@ user.
 
 A proxy to use for outgoing https requests.
 
+### user-agent
+
+* Default: npm/{npm.version} node/{process.version}
+* Type: String
+
+Sets a User-Agent to the request header
+
 ### ignore
 
 * Default: ""
@@ -577,6 +586,24 @@ Save installed packages to a package.json file as dependencies.
 
 Only works if there is already a package.json file present.
 
+### save-dev
+
+* Default: false
+* Type: Boolean
+
+Save installed packages to a package.json file as devDependencies.
+
+Only works if there is already a package.json file present.
+
+### save-optional
+
+* Default: false
+* Type: Boolean
+
+Save installed packages to a package.json file as optionalDependencies.
+
+Only works if there is already a package.json file present.
+
 ### searchopts
 
 * Default: ""
index 903844a..cfa95e7 100644 (file)
@@ -7,10 +7,11 @@ npm-install(1) -- Install a package
     npm install <tarball file>
     npm install <tarball url>
     npm install <folder>
-    npm install <name>
+    npm install <name> [--save|--save-dev|--save-optional]
     npm install <name>@<tag>
     npm install <name>@<version>
     npm install <name>@<version range>
+    npm install <name>@<version range>
 
 ## DESCRIPTION
 
@@ -35,88 +36,116 @@ after packing it up into a tarball (b).
 
 
 * `npm install` (in package directory, no arguments):
-  Install the dependencies in the local node_modules folder.
 
-  In global mode (ie, with `-g` or `--global` appended to the command),
-  it installs the current package context (ie, the current working
-  directory) as a global package.
+    Install the dependencies in the local node_modules folder.
+
+    In global mode (ie, with `-g` or `--global` appended to the command),
+    it installs the current package context (ie, the current working
+    directory) as a global package.
+
 
 * `npm install <folder>`:
-  Install a package that is sitting in a folder on the filesystem.
+
+    Install a package that is sitting in a folder on the filesystem.
 
 * `npm install <tarball file>`:
-  Install a package that is sitting on the filesystem.  Note: if you just want
-  to link a dev directory into your npm root, you can do this more easily by
-  using `npm link`.
 
-  Example:
+    Install a package that is sitting on the filesystem.  Note: if you just want
+    to link a dev directory into your npm root, you can do this more easily by
+    using `npm link`.
+
+    Example:
 
-        npm install ./package.tgz
+          npm install ./package.tgz
 
 * `npm install <tarball url>`:
-  Fetch the tarball url, and then install it.  In order to distinguish between
-  this and other options, the argument must start with "http://" or "https://"
 
-  Example:
+    Fetch the tarball url, and then install it.  In order to distinguish between
+    this and other options, the argument must start with "http://" or "https://"
+
+    Example:
+
+          npm install https://github.com/indexzero/forever/tarball/v0.5.6
+
+* `npm install <name> [--save|--save-dev|--save-optional]`:
+
+    Do a `<name>@<tag>` install, where `<tag>` is the "tag" config. (See
+    `npm-config(1)`.)
 
-        npm install https://github.com/indexzero/forever/tarball/v0.5.6
+    In most cases, this will install the latest version
+    of the module published on npm.
 
-* `npm install <name>`:
-  Do a `<name>@<tag>` install, where `<tag>` is the "tag" config. (See
-  `npm-config(1)`)
+    Example:
 
-  Example:
+          npm install sax
 
-        npm install sax
+    `npm install` takes 3 exclusive, optional flags which save or update
+    the package version in your main package.json:
 
-  **Note**: If there is a file or folder named `<name>` in the current
-  working directory, then it will try to install that, and only try to
-  fetch the package by name if it is not valid.
+    * `--save`: Package will appear in your `dependencies`.
+
+    * `--save-dev`: Package will appear in your `devDependencies`.
+
+    * `--save-optional`: Package will appear in your `optionalDependencies`.
+
+    Examples:
+
+          npm install sax --save
+          npm install node-tap --save-dev
+          npm install dtrace-provider --save-optional
+
+
+    **Note**: If there is a file or folder named `<name>` in the current
+    working directory, then it will try to install that, and only try to
+    fetch the package by name if it is not valid.
 
 * `npm install <name>@<tag>`:
-  Install the version of the package that is referenced by the specified tag.
-  If the tag does not exist in the registry data for that package, then this
-  will fail.
 
-  Example:
+    Install the version of the package that is referenced by the specified tag.
+    If the tag does not exist in the registry data for that package, then this
+    will fail.
+
+    Example:
 
-        npm install sax@latest
+          npm install sax@latest
 
 * `npm install <name>@<version>`:
-  Install the specified version of the package.  This will fail if the version
-  has not been published to the registry.
 
-  Example:
+    Install the specified version of the package.  This will fail if the version
+    has not been published to the registry.
 
-        npm install sax@0.1.1
+    Example:
+
+          npm install sax@0.1.1
 
 * `npm install <name>@<version range>`:
-  Install a version of the package matching the specified version range.  This
-  will follow the same rules for resolving dependencies described in `npm-json(1)`.
 
-  Note that most version ranges must be put in quotes so that your shell will
-  treat it as a single argument.
+    Install a version of the package matching the specified version range.  This
+    will follow the same rules for resolving dependencies described in `npm-json(1)`.
+
+    Note that most version ranges must be put in quotes so that your shell will
+    treat it as a single argument.
 
-  Example:
+    Example:
 
-        npm install sax@">=0.1.0 <0.2.0"
+          npm install sax@">=0.1.0 <0.2.0"
 
 * `npm install <git remote url>`:
 
-  Install a package by cloning a git remote url.  The format of the git
-  url is:
+    Install a package by cloning a git remote url.  The format of the git
+    url is:
 
-        <protocol>://[<user>@]<hostname><separator><path>[#<commit-ish>]
+          <protocol>://[<user>@]<hostname><separator><path>[#<commit-ish>]
 
-  `<protocol>` is one of `git`, `git+ssh`, `git+http`, or
-  `git+https`.  If no `<commit-ish>` is specified, then `master` is
-  used.
+    `<protocol>` is one of `git`, `git+ssh`, `git+http`, or
+    `git+https`.  If no `<commit-ish>` is specified, then `master` is
+    used.
 
-  Examples:
+    Examples:
 
-        git+ssh://git@github.com:isaacs/npm.git#v1.0.27
-        git+https://isaacs@github.com/isaacs/npm.git
-        git://github.com/isaacs/npm.git#v1.0.27
+          git+ssh://git@github.com:isaacs/npm.git#v1.0.27
+          git+https://isaacs@github.com/isaacs/npm.git
+          git://github.com/isaacs/npm.git#v1.0.27
 
 You may combine multiple arguments, and even multiple types of arguments.
 For example:
index 16b2ad9..ddd500e 100644 (file)
@@ -485,7 +485,7 @@ to publish it.
 
 This is a way to prevent accidental publication of private repositories.
 If you would like to ensure that a given package is only ever published
-to a speciic registry (for example, an internal registry),
+to a specific registry (for example, an internal registry),
 then use the `publishConfig` hash described below
 to override the `registry` config param at publish-time.
 
index 7a5ad81..bec86d5 100644 (file)
@@ -19,7 +19,7 @@
 <p>This function should not be used programmatically.  Instead, just refer
 to the <code>npm.bin</code> member.</p>
 </div>
-<p id="footer">bin &mdash; npm@1.1.15</p>
+<p id="footer">bin &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 51a115c..3dfdec7 100644 (file)
@@ -25,7 +25,7 @@ optional version number.</p>
 <p>This command will launch a browser, so this command may not be the most
 friendly for programmatic use.</p>
 </div>
-<p id="footer">bugs &mdash; npm@1.1.15</p>
+<p id="footer">bugs &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 64c597f..6f051c6 100644 (file)
@@ -28,7 +28,7 @@ usage, or <code>man 3 npm-&lt;command&gt;</code> for programmatic usage.</p>
 
 <ul><li><a href="../doc/index.html">index(1)</a></li></ul>
 </div>
-<p id="footer">commands &mdash; npm@1.1.15</p>
+<p id="footer">commands &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5910453..024e1a2 100644 (file)
@@ -33,7 +33,7 @@ functions instead.</p>
 
 <ul><li><a href="../api/npm.html">npm(3)</a></li></ul>
 </div>
-<p id="footer">config &mdash; npm@1.1.15</p>
+<p id="footer">config &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e415dea..7af3243 100644 (file)
@@ -30,7 +30,7 @@ install the package.</p></li></ul>
 
 <ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../api/unpublish.html">unpublish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
 </div>
-<p id="footer">deprecate &mdash; npm@1.1.15</p>
+<p id="footer">deprecate &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index dbed88e..7961070 100644 (file)
@@ -25,7 +25,7 @@ optional version number.</p>
 <p>This command will launch a browser, so this command may not be the most
 friendly for programmatic use.</p>
 </div>
-<p id="footer">docs &mdash; npm@1.1.15</p>
+<p id="footer">docs &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 262cf4b..e013b14 100644 (file)
@@ -30,7 +30,7 @@ to open. The package can optionally have a version number attached.</p>
 <p>Since this command opens an editor in a new process, be careful about where
 and how this is used.</p>
 </div>
-<p id="footer">edit &mdash; npm@1.1.15</p>
+<p id="footer">edit &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 75d1b2b..f241b0e 100644 (file)
@@ -24,7 +24,7 @@ sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
 
 <p>The first element in the 'args' parameter must be a package name.  After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p>
 </div>
-<p id="footer">explore &mdash; npm@1.1.15</p>
+<p id="footer">explore &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f4573f2..7c58bd3 100644 (file)
@@ -32,7 +32,7 @@ Name of the file that matched</li></ul>
 
 <p>The silent parameter is not neccessary not used, but it may in the future.</p>
 </div>
-<p id="footer">help-search &mdash; npm@1.1.15</p>
+<p id="footer">help-search &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e69be41..4e039b6 100644 (file)
@@ -35,7 +35,7 @@ then go ahead and use this programmatically.</p>
 
 <p><a href="../doc/json.html">json(1)</a></p>
 </div>
-<p id="footer">init &mdash; npm@1.1.15</p>
+<p id="footer">init &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 6743103..6bcc25a 100644 (file)
@@ -25,7 +25,7 @@ the name of a package to be installed.</p>
 <p>Finally, 'callback' is a function that will be called when all packages have been
 installed or when an error has been encountered.</p>
 </div>
-<p id="footer">install &mdash; npm@1.1.15</p>
+<p id="footer">install &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 254f70e..4c57a87 100644 (file)
@@ -39,7 +39,7 @@ npm.commands.link('redis', cb)  # link-install the package</code></pre>
 <p>Now, any changes to the redis package will be reflected in
 the package in the current working directory</p>
 </div>
-<p id="footer">link &mdash; npm@1.1.15</p>
+<p id="footer">link &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8d434b6..efa09a8 100644 (file)
@@ -32,7 +32,7 @@ config object.</p>
 
 <p>For a list of all the available command-line configs, see <code>npm help config</code></p>
 </div>
-<p id="footer">load &mdash; npm@1.1.15</p>
+<p id="footer">load &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2875f67..53b72ea 100644 (file)
@@ -59,7 +59,7 @@ project.</p>
 This means that if a submodule a same dependency as a parent module, then the
 dependency will only be output once.</p>
 </div>
-<p id="footer">ls &mdash; npm@1.1.15</p>
+<p id="footer">ls &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 11ce0eb..9c9e4e5 100644 (file)
@@ -24,7 +24,7 @@ npm.load(configObject, function (er, npm) {
 
 <h2 id="VERSION">VERSION</h2>
 
-<p>1.1.15</p>
+<p>1.1.18</p>
 
 <h2 id="DESCRIPTION">DESCRIPTION</h2>
 
@@ -91,7 +91,7 @@ method names.  Use the <code>npm.deref</code> method to find the real name.</p>
 
 <pre><code>var cmd = npm.deref("unp") // cmd === "unpublish"</code></pre>
 </div>
-<p id="footer">npm &mdash; npm@1.1.15</p>
+<p id="footer">npm &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0f68091..906641f 100644 (file)
@@ -19,7 +19,7 @@ currently outdated.</p>
 
 <p>If the 'packages' parameter is left out, npm will check all packages.</p>
 </div>
-<p id="footer">outdated &mdash; npm@1.1.15</p>
+<p id="footer">outdated &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index fb89223..25646e9 100644 (file)
@@ -34,7 +34,7 @@ that is not implemented at this time.</p>
 
 <ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
 </div>
-<p id="footer">owner &mdash; npm@1.1.15</p>
+<p id="footer">owner &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f21730a..a8519f8 100644 (file)
@@ -25,7 +25,7 @@ overwritten the second time.</p>
 
 <p>If no arguments are supplied, then npm packs the current package folder.</p>
 </div>
-<p id="footer">pack &mdash; npm@1.1.15</p>
+<p id="footer">pack &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 3e538e9..e62fad4 100644 (file)
@@ -21,7 +21,7 @@
 
 <p>This function is not useful programmatically</p>
 </div>
-<p id="footer">prefix &mdash; npm@1.1.15</p>
+<p id="footer">prefix &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 1b7b3a8..e2f4cd9 100644 (file)
@@ -23,7 +23,7 @@
 <p>Extraneous packages are packages that are not listed on the parent
 package's dependencies list.</p>
 </div>
-<p id="footer">prune &mdash; npm@1.1.15</p>
+<p id="footer">prune &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9404e2c..4fd1e0b 100644 (file)
@@ -32,7 +32,7 @@ the registry.  Overwrites when the "force" environment variable is set.</p>
 
 <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../api/owner.html">owner(3)</a></li></ul>
 </div>
-<p id="footer">publish &mdash; npm@1.1.15</p>
+<p id="footer">publish &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 110c63a..2c91060 100644 (file)
@@ -22,7 +22,7 @@ the new binary. If no 'packages' parameter is specify, every package will be reb
 
 <p>See <code>npm help build</code></p>
 </div>
-<p id="footer">rebuild &mdash; npm@1.1.15</p>
+<p id="footer">rebuild &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index cbb805e..e75d6e8 100644 (file)
@@ -27,7 +27,7 @@ in the <code>packages</code> parameter.</p>
 
 <ul><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
 </div>
-<p id="footer">restart &mdash; npm@1.1.15</p>
+<p id="footer">restart &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5244113..f9068f3 100644 (file)
@@ -21,7 +21,7 @@
 
 <p>This function is not useful programmatically.</p>
 </div>
-<p id="footer">root &mdash; npm@1.1.15</p>
+<p id="footer">root &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2a6589c..5828e2c 100644 (file)
@@ -29,7 +29,7 @@ assumed to be the command to run. All other elements are ignored.</p>
 
 <ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../api/test.html">test(3)</a></li><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/restart.html">restart(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
 </div>
-<p id="footer">run-script &mdash; npm@1.1.15</p>
+<p id="footer">run-script &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a7af8f4..dc429dd 100644 (file)
@@ -32,7 +32,7 @@ excluded term (the "searchexclude" config). The search is case insensitive
 and doesn't try to read your mind (it doesn't do any verb tense matching or the
 like).</p>
 </div>
-<p id="footer">search &mdash; npm@1.1.15</p>
+<p id="footer">search &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index aabd117..8022f04 100644 (file)
@@ -26,7 +26,7 @@ but the shrinkwrap file will still be written.</p>
 <p>Finally, 'callback' is a function that will be called when the shrinkwrap has
 been saved.</p>
 </div>
-<p id="footer">shrinkwrap &mdash; npm@1.1.15</p>
+<p id="footer">shrinkwrap &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index d6d81c5..8d126d2 100644 (file)
@@ -19,7 +19,7 @@
 <p>npm can run tests on multiple packages. Just specify multiple packages
 in the <code>packages</code> parameter.</p>
 </div>
-<p id="footer">start &mdash; npm@1.1.15</p>
+<p id="footer">start &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a7d9f71..0f5ae3f 100644 (file)
@@ -19,7 +19,7 @@
 <p>npm can run stop on multiple packages. Just specify multiple packages
 in the <code>packages</code> parameter.</p>
 </div>
-<p id="footer">stop &mdash; npm@1.1.15</p>
+<p id="footer">stop &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7f14555..eb314cb 100644 (file)
@@ -33,7 +33,7 @@ dependencies into the submodule folder.</p>
 
 <ul><li>npm help json</li><li>git help submodule</li></ul>
 </div>
-<p id="footer">submodule &mdash; npm@1.1.15</p>
+<p id="footer">submodule &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 6f07aac..b095e83 100644 (file)
@@ -29,7 +29,7 @@ parameter is missing or falsey (empty), the default froom the config will be
 used. For more information about how to set this config, check
 <code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p>
 </div>
-<p id="footer">tag &mdash; npm@1.1.15</p>
+<p id="footer">tag &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5f7c403..8ecf651 100644 (file)
@@ -22,7 +22,7 @@ true.</p>
 <p>npm can run tests on multiple packages. Just specify multiple packages
 in the <code>packages</code> parameter.</p>
 </div>
-<p id="footer">test &mdash; npm@1.1.15</p>
+<p id="footer">test &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 26c1526..ff023b6 100644 (file)
@@ -22,7 +22,7 @@ the name of a package to be uninstalled.</p>
 <p>Finally, 'callback' is a function that will be called when all packages have been
 uninstalled or when an error has been encountered.</p>
 </div>
-<p id="footer">uninstall &mdash; npm@1.1.15</p>
+<p id="footer">uninstall &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7339c47..1aef1c3 100644 (file)
@@ -26,7 +26,7 @@ is what is meant.</p>
 <p>If no version is specified, or if all versions are removed then
 the root package entry is removed from the registry entirely.</p>
 </div>
-<p id="footer">unpublish &mdash; npm@1.1.15</p>
+<p id="footer">unpublish &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b060822..0f44905 100644 (file)
@@ -18,7 +18,7 @@
 
 <p>The 'packages' argument is an array of packages to update. The 'callback' parameter will be called when done or when an error occurs.</p>
 </div>
-<p id="footer">update &mdash; npm@1.1.15</p>
+<p id="footer">update &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0fc66ee..84e5618 100644 (file)
@@ -24,7 +24,7 @@ fail if the repo is not clean.</p>
 parameter. The difference, however, is this function will fail if it does
 not have exactly one element. The only element should be a version number.</p>
 </div>
-<p id="footer">version &mdash; npm@1.1.15</p>
+<p id="footer">version &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 21154b9..78350de 100644 (file)
@@ -99,7 +99,7 @@ the field name.</p>
 
 <p>corresponding to the list of fields selected.</p>
 </div>
-<p id="footer">view &mdash; npm@1.1.15</p>
+<p id="footer">view &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8664dc2..de061a7 100644 (file)
@@ -21,7 +21,7 @@
 
 <p>This function is not useful programmatically</p>
 </div>
-<p id="footer">whoami &mdash; npm@1.1.15</p>
+<p id="footer">whoami &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index cdf2b8d..610356a 100644 (file)
@@ -267,7 +267,7 @@ will no doubt tell you to put the output in a gist or email.</p>
 
 <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul>
 </div>
-<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.1.15</p>
+<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0334967..d39098d 100644 (file)
@@ -39,7 +39,7 @@ authorize on a new machine.</p>
 
 <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li></ul>
 </div>
-<p id="footer">adduser &mdash; npm@1.1.15</p>
+<p id="footer">adduser &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9ff69a1..a3f6d9e 100644 (file)
@@ -20,7 +20,7 @@
 
 <ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
 </div>
-<p id="footer">bin &mdash; npm@1.1.15</p>
+<p id="footer">bin &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 165ed06..0802ecf 100644 (file)
@@ -36,7 +36,7 @@ config param.</p>
 
 <ul><li><a href="../doc/docs.html">docs(1)</a></li><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
 </div>
-<p id="footer">bugs &mdash; npm@1.1.15</p>
+<p id="footer">bugs &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2c411e1..7b06b5c 100644 (file)
@@ -25,7 +25,7 @@ A folder containing a <code>package.json</code> file in its root.</li></ul>
 
 <ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
 </div>
-<p id="footer">build &mdash; npm@1.1.15</p>
+<p id="footer">build &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 960460f..8103455 100644 (file)
@@ -20,7 +20,7 @@ install packages into the local space.</p>
 
 <ul><li><a href="../doc/install.html">install(1)</a></li></ul>
 </div>
-<p id="footer">bundle &mdash; npm@1.1.15</p>
+<p id="footer">bundle &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 67eea99..fee53f1 100644 (file)
@@ -66,7 +66,7 @@ they do not make an HTTP request to the registry.</p>
 
 <ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li></ul>
 </div>
-<p id="footer">cache &mdash; npm@1.1.15</p>
+<p id="footer">cache &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 165f32e..8d8df24 100644 (file)
@@ -65,7 +65,7 @@
 
 <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li></ul>
 </div>
-<p id="footer">changelog &mdash; npm@1.1.15</p>
+<p id="footer">changelog &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 63307b1..ec6c9f1 100644 (file)
@@ -191,7 +191,7 @@ set to anything."</p>
 
 <ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
 </div>
-<p id="footer">coding-style &mdash; npm@1.1.15</p>
+<p id="footer">coding-style &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2e4af15..5964d57 100644 (file)
@@ -33,7 +33,7 @@ completions based on the arguments.</p>
 
 <ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
 </div>
-<p id="footer">completion &mdash; npm@1.1.15</p>
+<p id="footer">completion &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9ddcf29..ae2b8ad 100644 (file)
@@ -105,7 +105,7 @@ global config.</p>
 
 <p>The following shorthands are parsed on the command-line:</p>
 
-<ul><li><code>-v</code>: <code>--version</code></li><li><code>-h</code>, <code>-?</code>, <code>--help</code>, <code>-H</code>: <code>--usage</code></li><li><code>-s</code>, <code>--silent</code>: <code>--loglevel silent</code></li><li><code>-q</code>, <code>--quiet</code>: <code>--loglevel warn</code></li><li><code>-d</code>: <code>--loglevel info</code></li><li><code>-dd</code>, <code>--verbose</code>: <code>--loglevel verbose</code></li><li><code>-ddd</code>: <code>--loglevel silly</code></li><li><code>-g</code>: <code>--global</code></li><li><code>-l</code>: <code>--long</code></li><li><code>-m</code>: <code>--message</code></li><li><code>-p</code>, <code>--porcelain</code>: <code>--parseable</code></li><li><code>-reg</code>: <code>--registry</code></li><li><code>-v</code>: <code>--version</code></li><li><code>-f</code>: <code>--force</code></li><li><code>-l</code>: <code>--long</code></li><li><code>-desc</code>: <code>--description</code></li><li><code>-S</code>: <code>--save</code></li><li><code>-y</code>: <code>--yes</code></li><li><code>-n</code>: <code>--yes false</code></li><li><code>ll</code> and <code>la</code> commands: <code>ls --long</code></li></ul>
+<ul><li><code>-v</code>: <code>--version</code></li><li><code>-h</code>, <code>-?</code>, <code>--help</code>, <code>-H</code>: <code>--usage</code></li><li><code>-s</code>, <code>--silent</code>: <code>--loglevel silent</code></li><li><code>-q</code>, <code>--quiet</code>: <code>--loglevel warn</code></li><li><code>-d</code>: <code>--loglevel info</code></li><li><code>-dd</code>, <code>--verbose</code>: <code>--loglevel verbose</code></li><li><code>-ddd</code>: <code>--loglevel silly</code></li><li><code>-g</code>: <code>--global</code></li><li><code>-l</code>: <code>--long</code></li><li><code>-m</code>: <code>--message</code></li><li><code>-p</code>, <code>--porcelain</code>: <code>--parseable</code></li><li><code>-reg</code>: <code>--registry</code></li><li><code>-v</code>: <code>--version</code></li><li><code>-f</code>: <code>--force</code></li><li><code>-l</code>: <code>--long</code></li><li><code>-desc</code>: <code>--description</code></li><li><code>-S</code>: <code>--save</code></li><li><code>-D</code>: <code>--save-dev</code></li><li><code>-O</code>: <code>--save-optional</code></li><li><code>-y</code>: <code>--yes</code></li><li><code>-n</code>: <code>--yes false</code></li><li><code>ll</code> and <code>la</code> commands: <code>ls --long</code></li></ul>
 
 <p>If the specified configuration param resolves unambiguously to a known
 configuration parameter, then it is expanded to that configuration
@@ -320,6 +320,12 @@ user.</p>
 
 <p>A proxy to use for outgoing https requests.</p>
 
+<h3 id="user-agent">user-agent</h3>
+
+<ul><li>Default: npm/{npm.version} node/{process.version}</li><li>Type: String</li></ul>
+
+<p>Sets a User-Agent to the request header</p>
+
 <h3 id="ignore">ignore</h3>
 
 <ul><li>Default: ""</li><li>Type: string</li></ul>
@@ -510,6 +516,22 @@ this as true.</p>
 
 <p>Only works if there is already a package.json file present.</p>
 
+<h3 id="save-dev">save-dev</h3>
+
+<ul><li>Default: false</li><li>Type: Boolean</li></ul>
+
+<p>Save installed packages to a package.json file as devDependencies.</p>
+
+<p>Only works if there is already a package.json file present.</p>
+
+<h3 id="save-optional">save-optional</h3>
+
+<ul><li>Default: false</li><li>Type: Boolean</li></ul>
+
+<p>Save installed packages to a package.json file as optionalDependencies.</p>
+
+<p>Only works if there is already a package.json file present.</p>
+
 <h3 id="searchopts">searchopts</h3>
 
 <ul><li>Default: ""</li><li>Type: String</li></ul>
@@ -662,7 +684,7 @@ then answer "no" to any prompt.</p>
 
 <ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
 </div>
-<p id="footer">config &mdash; npm@1.1.15</p>
+<p id="footer">config &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 19f132e..74b053c 100644 (file)
@@ -29,7 +29,7 @@ something like this:</p>
 
 <ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
 </div>
-<p id="footer">deprecate &mdash; npm@1.1.15</p>
+<p id="footer">deprecate &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 33c1c1f..c4765ff 100644 (file)
@@ -160,7 +160,7 @@ from a fresh checkout.</p>
 
 <ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
 </div>
-<p id="footer">developers &mdash; npm@1.1.15</p>
+<p id="footer">developers &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5954f06..68a626b 100644 (file)
@@ -80,7 +80,7 @@ license statement)</li><li>Illegal content.</li></ol>
 
 <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li></ul>
 </div>
-<p id="footer">disputes &mdash; npm@1.1.15</p>
+<p id="footer">disputes &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f321bc9..6ebcb41 100644 (file)
@@ -37,7 +37,7 @@ config param.</p>
 
 <ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
 </div>
-<p id="footer">docs &mdash; npm@1.1.15</p>
+<p id="footer">docs &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0a6f98f..8c9cc75 100644 (file)
@@ -37,7 +37,7 @@ or <code>"notepad"</code> on Windows.</li><li>Type: path</li></ul>
 
 <ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/explore.html">explore(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
 </div>
-<p id="footer">edit &mdash; npm@1.1.15</p>
+<p id="footer">edit &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b5959ed..a44d335 100644 (file)
@@ -40,7 +40,7 @@ Windows</li><li>Type: path</li></ul>
 
 <ul><li><a href="../doc/submodule.html">submodule(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/edit.html">edit(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
 </div>
-<p id="footer">explore &mdash; npm@1.1.15</p>
+<p id="footer">explore &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 77d9268..aa8fa17 100644 (file)
@@ -241,7 +241,7 @@ We'll have someone kick it or something.</p>
 
 <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul>
 </div>
-<p id="footer">faq &mdash; npm@1.1.15</p>
+<p id="footer">faq &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 180851a..b670abf 100644 (file)
@@ -205,7 +205,7 @@ cannot be found elsewhere.  See <code><a href="../doc/json.html">json(1)</a></co
 
 <ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li></ul>
 </div>
-<p id="footer">folders &mdash; npm@1.1.15</p>
+<p id="footer">folders &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 3821434..2dfa340 100644 (file)
@@ -38,7 +38,7 @@ where the terms were found in the documentation.</p>
 
 <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li></ul>
 </div>
-<p id="footer">help-search &mdash; npm@1.1.15</p>
+<p id="footer">help-search &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 6414a2e..e01dd04 100644 (file)
@@ -36,7 +36,7 @@ matches are equivalent to specifying a topic name.</p>
 
 <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/help-search.html">help-search(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul>
 </div>
-<p id="footer">help &mdash; npm@1.1.15</p>
+<p id="footer">help &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 1ec1953..5109af4 100644 (file)
 
 <p> Display npm username</p>
 </div>
-<p id="footer">index &mdash; npm@1.1.15</p>
+<p id="footer">index &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7a245b1..afa20aa 100644 (file)
@@ -29,7 +29,7 @@ without a really good reason to do so.</p>
 
 <ul><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/version.html">version(1)</a></li></ul>
 </div>
-<p id="footer">init &mdash; npm@1.1.15</p>
+<p id="footer">init &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5bf7d23..e9ac77d 100644 (file)
 npm install &lt;tarball file&gt;
 npm install &lt;tarball url&gt;
 npm install &lt;folder&gt;
-npm install &lt;name&gt;
+npm install &lt;name&gt; [--save|--save-dev|--save-optional]
 npm install &lt;name&gt;@&lt;tag&gt;
 npm install &lt;name&gt;@&lt;version&gt;
+npm install &lt;name&gt;@&lt;version range&gt;
 npm install &lt;name&gt;@&lt;version range&gt;</code></pre>
 
 <h2 id="DESCRIPTION">DESCRIPTION</h2>
@@ -34,33 +35,29 @@ benefits of using npm if you just want to write a node program (a), and
 perhaps if you also want to be able to easily install it elsewhere
 after packing it up into a tarball (b).</p>
 
-<ul><li><p><code>npm install</code> (in package directory, no arguments):
-Install the dependencies in the local node_modules folder.</p><p>In global mode (ie, with <code>-g</code> or <code>--global</code> appended to the command),
+<ul><li><p><code>npm install</code> (in package directory, no arguments):</p><p>Install the dependencies in the local node_modules folder.</p><p>In global mode (ie, with <code>-g</code> or <code>--global</code> appended to the command),
 it installs the current package context (ie, the current working
-directory) as a global package.</p></li><li><p><code>npm install &lt;folder&gt;</code>:
-Install a package that is sitting in a folder on the filesystem.</p></li><li><p><code>npm install &lt;tarball file&gt;</code>:
-Install a package that is sitting on the filesystem.  Note: if you just want
+directory) as a global package.</p></li><li><p><code>npm install &lt;folder&gt;</code>:</p><p>Install a package that is sitting in a folder on the filesystem.</p></li><li><p><code>npm install &lt;tarball file&gt;</code>:</p><p>Install a package that is sitting on the filesystem.  Note: if you just want
 to link a dev directory into your npm root, you can do this more easily by
-using <code>npm link</code>.</p><p>Example:</p><pre><code>npm install ./package.tgz</code></pre></li><li><p><code>npm install &lt;tarball url&gt;</code>:
-Fetch the tarball url, and then install it.  In order to distinguish between
-this and other options, the argument must start with "http://" or "https://"</p><p>Example:</p><pre><code>npm install https://github.com/indexzero/forever/tarball/v0.5.6</code></pre></li><li><p><code>npm install &lt;name&gt;</code>:
-Do a <code>&lt;name&gt;@&lt;tag&gt;</code> install, where <code>&lt;tag&gt;</code> is the "tag" config. (See
-<code><a href="../doc/config.html">config(1)</a></code>)</p><p>Example:</p><pre><code>npm install sax</code></pre><p><strong>Note</strong>: If there is a file or folder named <code>&lt;name&gt;</code> in the current
+using <code>npm link</code>.</p><p>Example:</p><pre><code>  npm install ./package.tgz</code></pre></li><li><p><code>npm install &lt;tarball url&gt;</code>:</p><p>Fetch the tarball url, and then install it.  In order to distinguish between
+this and other options, the argument must start with "http://" or "https://"</p><p>Example:</p><pre><code>  npm install https://github.com/indexzero/forever/tarball/v0.5.6</code></pre></li><li><p><code>npm install &lt;name&gt; [--save|--save-dev|--save-optional]</code>:</p><p>Do a <code>&lt;name&gt;@&lt;tag&gt;</code> install, where <code>&lt;tag&gt;</code> is the "tag" config. (See
+<code><a href="../doc/config.html">config(1)</a></code>.)</p><p>In most cases, this will install the latest version
+of the module published on npm.</p><p>Example:</p><p>      npm install sax</p><p><code>npm install</code> takes 3 exclusive, optional flags which save or update
+the package version in your main package.json:</p><ul><li><p><code>--save</code>: Package will appear in your <code>dependencies</code>.</p></li><li><p><code>--save-dev</code>: Package will appear in your <code>devDependencies</code>.</p></li><li><p><code>--save-optional</code>: Package will appear in your <code>optionalDependencies</code>.</p><p>Examples:</p><p>  npm install sax --save
+  npm install node-tap --save-dev
+  npm install dtrace-provider --save-optional</p><p><strong>Note</strong>: If there is a file or folder named <code>&lt;name&gt;</code> in the current
 working directory, then it will try to install that, and only try to
-fetch the package by name if it is not valid.</p></li><li><p><code>npm install &lt;name&gt;@&lt;tag&gt;</code>:
-Install the version of the package that is referenced by the specified tag.
+fetch the package by name if it is not valid.</p></li></ul></li><li><p><code>npm install &lt;name&gt;@&lt;tag&gt;</code>:</p><p>Install the version of the package that is referenced by the specified tag.
 If the tag does not exist in the registry data for that package, then this
-will fail.</p><p>Example:</p><pre><code>npm install sax@latest</code></pre></li><li><p><code>npm install &lt;name&gt;@&lt;version&gt;</code>:
-Install the specified version of the package.  This will fail if the version
-has not been published to the registry.</p><p>Example:</p><pre><code>npm install sax@0.1.1</code></pre></li><li><p><code>npm install &lt;name&gt;@&lt;version range&gt;</code>:
-Install a version of the package matching the specified version range.  This
+will fail.</p><p>Example:</p><pre><code>  npm install sax@latest</code></pre></li><li><p><code>npm install &lt;name&gt;@&lt;version&gt;</code>:</p><p>Install the specified version of the package.  This will fail if the version
+has not been published to the registry.</p><p>Example:</p><pre><code>  npm install sax@0.1.1</code></pre></li><li><p><code>npm install &lt;name&gt;@&lt;version range&gt;</code>:</p><p>Install a version of the package matching the specified version range.  This
 will follow the same rules for resolving dependencies described in <code><a href="../doc/json.html">json(1)</a></code>.</p><p>Note that most version ranges must be put in quotes so that your shell will
-treat it as a single argument.</p><p>Example:</p><pre><code>npm install sax@"&gt;=0.1.0 &lt;0.2.0"</code></pre></li><li><p><code>npm install &lt;git remote url&gt;</code>:</p><p>Install a package by cloning a git remote url.  The format of the git
-url is:</p><pre><code>&lt;protocol&gt;://[&lt;user&gt;@]&lt;hostname&gt;&lt;separator&gt;&lt;path&gt;[#&lt;commit-ish&gt;]</code></pre><p><code>&lt;protocol&gt;</code> is one of <code>git</code>, <code>git+ssh</code>, <code>git+http</code>, or
+treat it as a single argument.</p><p>Example:</p><p>      npm install sax@"&gt;=0.1.0 &lt;0.2.0"</p></li><li><p><code>npm install &lt;git remote url&gt;</code>:</p><p>Install a package by cloning a git remote url.  The format of the git
+url is:</p><p>      &lt;protocol&gt;://[&lt;user&gt;@]&lt;hostname&gt;&lt;separator&gt;&lt;path&gt;[#&lt;commit-ish&gt;]</p><p><code>&lt;protocol&gt;</code> is one of <code>git</code>, <code>git+ssh</code>, <code>git+http</code>, or
 <code>git+https</code>.  If no <code>&lt;commit-ish&gt;</code> is specified, then <code>master</code> is
-used.</p><p>Examples:</p><pre><code>git+ssh://git@github.com:isaacs/npm.git#v1.0.27
-git+https://isaacs@github.com/isaacs/npm.git
-git://github.com/isaacs/npm.git#v1.0.27</code></pre></li></ul>
+used.</p><p>Examples:</p><pre><code>  git+ssh://git@github.com:isaacs/npm.git#v1.0.27
+  git+https://isaacs@github.com/isaacs/npm.git
+  git://github.com/isaacs/npm.git#v1.0.27</code></pre></li></ul>
 
 <p>You may combine multiple arguments, and even multiple types of arguments.
 For example:</p>
@@ -136,7 +133,7 @@ affects a real use-case, it will be investigated.</p>
 
 <ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/shrinkwrap.html">shrinkwrap(1)</a></li></ul>
 </div>
-<p id="footer">install &mdash; npm@1.1.15</p>
+<p id="footer">install &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 6d5a866..686992b 100644 (file)
@@ -457,7 +457,7 @@ to publish it.</p>
 
 <p>This is a way to prevent accidental publication of private repositories.
 If you would like to ensure that a given package is only ever published
-to a speciic registry (for example, an internal registry),
+to a specific registry (for example, an internal registry),
 then use the <code>publishConfig</code> hash described below
 to override the <code>registry</code> config param at publish-time.</p>
 
@@ -478,7 +478,7 @@ overridden.</p>
 
 <ul><li><a href="../doc/semver.html">semver(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/version.html">version(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li></ul>
 </div>
-<p id="footer">json &mdash; npm@1.1.15</p>
+<p id="footer">json &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index d63dbd2..10791fe 100644 (file)
@@ -58,7 +58,7 @@ installation target into your project's <code>node_modules</code> folder.</p>
 
 <ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
 </div>
-<p id="footer">link &mdash; npm@1.1.15</p>
+<p id="footer">link &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index cbbb7d9..74862a6 100644 (file)
@@ -58,7 +58,7 @@ project.</p>
 
 <ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/update.html">update(1)</a></li></ul>
 </div>
-<p id="footer">list &mdash; npm@1.1.15</p>
+<p id="footer">list &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0c60d17..1ec2019 100644 (file)
@@ -14,7 +14,7 @@
 
 <h2 id="VERSION">VERSION</h2>
 
-<p>1.1.15</p>
+<p>1.1.18</p>
 
 <h2 id="DESCRIPTION">DESCRIPTION</h2>
 
@@ -135,7 +135,7 @@ will no doubt tell you to put the output in a gist or email.</p>
 
 <ul><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/index.html">index(1)</a></li><li><a href="../api/npm.html">npm(3)</a></li></ul>
 </div>
-<p id="footer">npm &mdash; npm@1.1.15</p>
+<p id="footer">npm &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 188f16f..e7940fd 100644 (file)
@@ -21,7 +21,7 @@ packages are currently outdated.</p>
 
 <ul><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul>
 </div>
-<p id="footer">outdated &mdash; npm@1.1.15</p>
+<p id="footer">outdated &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 85c45c3..1265d51 100644 (file)
@@ -34,7 +34,7 @@ that is not implemented at this time.</p>
 
 <ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/disputes.html">disputes(1)</a></li></ul>
 </div>
-<p id="footer">owner &mdash; npm@1.1.15</p>
+<p id="footer">owner &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 742903f..d49f2b4 100644 (file)
@@ -29,7 +29,7 @@ overwritten the second time.</p>
 
 <ul><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
 </div>
-<p id="footer">pack &mdash; npm@1.1.15</p>
+<p id="footer">pack &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0aeb015..91df87a 100644 (file)
@@ -20,7 +20,7 @@
 
 <ul><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
 </div>
-<p id="footer">prefix &mdash; npm@1.1.15</p>
+<p id="footer">prefix &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 49bb103..c8ae0c6 100644 (file)
@@ -25,7 +25,7 @@ package's dependencies list.</p>
 
 <ul><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
 </div>
-<p id="footer">prune &mdash; npm@1.1.15</p>
+<p id="footer">prune &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 54af740..523d195 100644 (file)
@@ -29,7 +29,7 @@ the registry.  Overwrites when the "--force" flag is set.</p>
 
 <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li></ul>
 </div>
-<p id="footer">publish &mdash; npm@1.1.15</p>
+<p id="footer">publish &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 15b66bd..206ac82 100644 (file)
@@ -25,7 +25,7 @@ the new binary.</p>
 
 <ul><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
 </div>
-<p id="footer">rebuild &mdash; npm@1.1.15</p>
+<p id="footer">rebuild &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c594273..9748847 100644 (file)
@@ -97,7 +97,7 @@ ask for help on the <a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com
 
 <ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/disputes.html">disputes(1)</a></li></ul>
 </div>
-<p id="footer">registry &mdash; npm@1.1.15</p>
+<p id="footer">registry &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 37d614c..0e8bfab 100644 (file)
@@ -58,7 +58,7 @@ modules.  To track those down, you can do the following:</p>
 
 <ul><li><a href="../doc/README.html">README</a></li><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li></ul>
 </div>
-<p id="footer">removing-npm &mdash; npm@1.1.15</p>
+<p id="footer">removing-npm &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 3429918..44f987f 100644 (file)
@@ -24,7 +24,7 @@ the "start" script.</p>
 
 <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
 </div>
-<p id="footer">restart &mdash; npm@1.1.15</p>
+<p id="footer">restart &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b82227d..3cca20a 100644 (file)
@@ -20,7 +20,7 @@
 
 <ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
 </div>
-<p id="footer">root &mdash; npm@1.1.15</p>
+<p id="footer">root &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f7889df..14ce47e 100644 (file)
@@ -23,7 +23,7 @@ called directly, as well.</p>
 
 <ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
 </div>
-<p id="footer">run-script &mdash; npm@1.1.15</p>
+<p id="footer">run-script &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b4d473c..11d75e1 100644 (file)
@@ -177,7 +177,7 @@ will sudo the npm command in question.</li></ul>
 
 <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
 </div>
-<p id="footer">scripts &mdash; npm@1.1.15</p>
+<p id="footer">scripts &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e347f76..67f3b6e 100644 (file)
@@ -24,7 +24,7 @@ expression characters must be escaped or quoted in most shells.)</p>
 
 <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/view.html">view(1)</a></li></ul>
 </div>
-<p id="footer">search &mdash; npm@1.1.15</p>
+<p id="footer">search &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8fbe08a..583f9b1 100644 (file)
@@ -104,7 +104,7 @@ that satisfies the range, or null if none of them do.</li></ul>
 
 <ul><li><a href="../doc/json.html">json(1)</a></li></ul>
 </div>
-<p id="footer">semver &mdash; npm@1.1.15</p>
+<p id="footer">semver &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 78a631b..ba6335d 100644 (file)
@@ -169,7 +169,7 @@ versions.</p>
 
 <ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
 </div>
-<p id="footer">shrinkwrap &mdash; npm@1.1.15</p>
+<p id="footer">shrinkwrap &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b1312e8..a662e11 100644 (file)
@@ -26,7 +26,7 @@ a vaguely positive way to show that you care.</p>
 
 <ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
 </div>
-<p id="footer">star &mdash; npm@1.1.15</p>
+<p id="footer">star &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8c377d6..92613ba 100644 (file)
@@ -20,7 +20,7 @@
 
 <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
 </div>
-<p id="footer">start &mdash; npm@1.1.15</p>
+<p id="footer">start &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5fa00f7..05e6101 100644 (file)
@@ -20,7 +20,7 @@
 
 <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li></ul>
 </div>
-<p id="footer">stop &mdash; npm@1.1.15</p>
+<p id="footer">stop &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f58f168..3207241 100644 (file)
@@ -33,7 +33,7 @@ dependencies into the submodule folder.</p>
 
 <ul><li><a href="../doc/json.html">json(1)</a></li><li>git help submodule</li></ul>
 </div>
-<p id="footer">submodule &mdash; npm@1.1.15</p>
+<p id="footer">submodule &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index fbef8bb..3b299e2 100644 (file)
@@ -21,7 +21,7 @@
 
 <ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
 </div>
-<p id="footer">tag &mdash; npm@1.1.15</p>
+<p id="footer">tag &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 4d8a314..2cc4f3d 100644 (file)
@@ -23,7 +23,7 @@ true.</p>
 
 <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
 </div>
-<p id="footer">test &mdash; npm@1.1.15</p>
+<p id="footer">test &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index b46fac9..2223c0c 100644 (file)
@@ -22,7 +22,7 @@ on its behalf.</p>
 
 <ul><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
 </div>
-<p id="footer">uninstall &mdash; npm@1.1.15</p>
+<p id="footer">uninstall &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 4cfb8d9..bfae9b8 100644 (file)
@@ -34,7 +34,7 @@ the root package entry is removed from the registry entirely.</p>
 
 <ul><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li></ul>
 </div>
-<p id="footer">unpublish &mdash; npm@1.1.15</p>
+<p id="footer">unpublish &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0fef986..98c2e9c 100644 (file)
@@ -23,7 +23,7 @@
 
 <ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
 </div>
-<p id="footer">update &mdash; npm@1.1.15</p>
+<p id="footer">update &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c65c1ca..dbf5b10 100644 (file)
@@ -31,7 +31,7 @@ will use it as a commit message when creating a version commit.</p>
 
 <ul><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/semver.html">semver(1)</a></li></ul>
 </div>
-<p id="footer">version &mdash; npm@1.1.15</p>
+<p id="footer">version &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 444d0a9..0d12ecf 100644 (file)
@@ -88,7 +88,7 @@ the field name.</p>
 
 <ul><li><a href="../doc/search.html">search(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/docs.html">docs(1)</a></li></ul>
 </div>
-<p id="footer">view &mdash; npm@1.1.15</p>
+<p id="footer">view &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index aaa61c8..e835c71 100644 (file)
@@ -20,7 +20,7 @@
 
 <ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
 </div>
-<p id="footer">whoami &mdash; npm@1.1.15</p>
+<p id="footer">whoami &mdash; npm@1.1.18</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9ccf28e..4a97cd3 100644 (file)
@@ -59,11 +59,14 @@ code { background:#fff ; outline: 1px solid #ccc; padding:0 2px; }
 <p>npm is a package manager for <a href="http://nodejs.org/">node</a>.  You can use it to install
   and publish your node programs.  It manages dependencies and does other cool stuff.</p>
 
-<h2>One Line Install</h2>
+<h2>Easy Zero Line Install</h2>
 
-<code>curl http://npmjs.org/install.sh | sh</code>
+<p><a href="http://nodejs.org/#download">Install Node.js</a> <br>
+(npm comes with it.)</p>
 
-<h2>More Than One Line Install</h2>
+<p>Because a one-line install is one too many.</p>
+
+<h2>Fancy Install</h2>
 
 <ol>
   <li><a href="https://github.com/isaacs/npm">Get the code.</a>
@@ -71,6 +74,12 @@ code { background:#fff ; outline: 1px solid #ccc; padding:0 2px; }
       says to do.
 </ol>
 
+<p>There's a pretty thorough install script at
+<a href="http://npmjs.org/install.sh">http://npmjs.org/install.sh</a></p>
+
+<p>For maximum security, make sure to thorougly inspect every
+program that you run on your computer!</p>
+
 <h2>Other Cool Stuff</h2>
 
 <ul>
index a3a017c..7982746 100644 (file)
@@ -28,7 +28,7 @@ function bugs (args, cb) {
     }
     if (repo) {
       if (Array.isArray(repo)) repo = repo.shift()
-      if (repo.url) repo = repo.url
+      if (repo.hasOwnProperty("url")) repo = repo.url
       log.verbose(repo, "repository")
       if (repo && repo.match(/^(https?:\/\/|git(:\/\/|@))github.com/)) {
         return open(repo.replace(/^git(@|:\/\/)/, "http://")
index de9f71c..8af4c1b 100644 (file)
@@ -25,7 +25,7 @@ function docs (args, cb) {
     if (homepage) return open(homepage, cb)
     if (repo) {
       if (Array.isArray(repo)) repo = repo.shift()
-      if (repo.url) repo = repo.url
+      if (repo.hasOwnProperty("url")) repo = repo.url
       log.verbose(repo, "repository")
       if (repo) {
         return open(repo.replace(/^git(@|:\/\/)/, 'http://')
index 1c64d97..7cd7da8 100644 (file)
@@ -99,7 +99,10 @@ function init_ (data, folder, cb) {
           , function (er, r) {
               if (er) return cb(er)
               if (r !== "none") {
-                data.repository = (data.repository || {}).url = r
+                data.repository = (data.repository || {})
+                data.repository.url = r
+              } else {
+                delete data.repository
               }
               cb()
             }
index 4da66d3..5873ca9 100644 (file)
@@ -211,7 +211,7 @@ function readDependencies (context, where, opts, cb) {
         rv[key] = data[key]
       })
       rv.dependencies = {}
-      Object.keys(newwrap.dependencies).forEach(function (key) {
+      Object.keys(newwrap.dependencies || {}).forEach(function (key) {
         var w = newwrap.dependencies[key]
         rv.dependencies[key] = w.from || w.version
       })
@@ -225,7 +225,10 @@ function readDependencies (context, where, opts, cb) {
 // as dependencies to a package.json file.
 // This is experimental.
 function save (where, installed, tree, pretty, cb) {
-  if (!npm.config.get("save") || npm.config.get("global")) {
+  if (!npm.config.get("save") &&
+      !npm.config.get("save-dev") &&
+      !npm.config.get("save-optional") ||
+      npm.config.get("global")) {
     return cb(null, installed, tree, pretty)
   }
 
@@ -257,13 +260,18 @@ function save (where, installed, tree, pretty, cb) {
     } catch (ex) {
       er = ex
     }
-    if (er) return cb(null, installed, tree, pretty)
+    if (er) {
+      return cb(null, installed, tree, pretty)
 
-    var deps = npm.config.get("dev") ? "devDependencies" : "dependencies"
-    deps = data[deps] = data[deps] || {}
+    }
+
+    var deps = npm.config.get("save-optional") ? "optionalDependencies"
+             : npm.config.get("save-dev") ? "devDependencies"
+             : "dependencies"
 
+    data[deps] = data[deps] || {}
     Object.keys(things).forEach(function (t) {
-      deps[t] = things[t]
+      data[deps][t] = things[t]
     })
     data = JSON.stringify(data, null, 2) + "\n"
     fs.writeFile(saveTarget, data, function (er) {
index 456948a..2db21e3 100644 (file)
@@ -26,10 +26,27 @@ var EventEmitter = require("events").EventEmitter
   , semver = require("semver")
   , findPrefix = require("./utils/find-prefix.js")
   , getUid = require("uid-number")
-  , mkdir = require("mkdirp")
+  , mkdirp = require("mkdirp")
   , slide = require("slide")
   , chain = slide.chain
 
+// /usr/local is often a read-only fs, which is not
+// well handled by node or mkdirp.  Just double-check
+// in the case of errors when making the prefix dirs.
+function mkdir (p, cb) {
+  mkdirp(p, function (er, made) {
+    // it could be that we couldn't create it, because it
+    // already exists, and is on a read-only fs.
+    if (er) {
+      return fs.stat(p, function (er2, st) {
+        if (er2 || !st.isDirectory()) return cb(er)
+        return cb(null, made)
+      })
+    }
+    return cb(er, made)
+  })
+}
+
 npm.commands = {}
 npm.ELIFECYCLE = {}
 npm.E404 = {}
index 39df42f..18b47ec 100644 (file)
@@ -9,6 +9,7 @@ var path = require("path")
   , os = require("os")
   , nopt = require("nopt")
   , log = require("./log.js")
+  , npm = require("../npm.js")
 
 function Octal () {}
 function validateOctal (data, k, val) {
@@ -183,10 +184,13 @@ Object.defineProperty(exports, "defaults", {get: function () {
     , proxy : process.env.HTTP_PROXY || process.env.http_proxy || null
     , "https-proxy" : process.env.HTTPS_PROXY || process.env.https_proxy ||
                       process.env.HTTP_PROXY || process.env.http_proxy || null
+    , "user-agent" : "npm/" + npm.version + " node/" + process.version
     , "rebuild-bundle" : true
     , registry : "http" + (httpsOk ? "s" : "") + "://registry.npmjs.org/"
     , rollback : true
     , save : false
+    , "save-dev" : false
+    , "save-optional" : false
     , searchopts: ""
     , searchexclude: null
     , searchsort: "name"
@@ -239,6 +243,7 @@ exports.types =
   , globalignorefile: path
   , group : [Number, String]
   , "https-proxy" : [null, url]
+  , "user-agent" : String
   , ignore : String
   , "init.version" : [null, semver]
   , "init.author.name" : String
@@ -266,6 +271,8 @@ exports.types =
   , registry : [null, url]
   , rollback : Boolean
   , save : Boolean
+  , "save-dev" : Boolean
+  , "save-optional" : Boolean
   , searchopts : String
   , searchexclude: [null, String]
   , searchsort: [ "name", "-name"
@@ -321,6 +328,8 @@ exports.shorthands =
   , porcelain : ["--parseable"]
   , g : ["--global"]
   , S : ["--save"]
+  , D : ["--save-dev"]
+  , O : ["--save-optional"]
   , y : ["--yes"]
   , n : ["--no-yes"]
   }
index 0ece53c..bc1c095 100644 (file)
@@ -59,6 +59,7 @@ function makeRequest (remote, fstr, headers) {
           , proxy: proxy
           , strictSSL: npm.config.get("strict-ssl")
           , ca: remote.host === regHost ? npm.config.get("ca") : undefined
+          , headers: { "user-agent": npm.config.get("user-agent") }
           , onResponse: onResponse }).pipe(fstr)
   function onResponse (er, res) {
     if (er) return fstr.emit("error", er)
index 5213c79..d512262 100644 (file)
@@ -94,6 +94,8 @@ function makeRequest (method, remote, where, what, etag, nofollow, cb) {
 
   headers.accept = "application/json"
 
+  headers["user-agent"] = npm.config.get("user-agent")
+
   opts.proxy = npm.config.get( remote.protocol === "https:"
                              ? "https-proxy" : "proxy" )
 
index 60cbea1..ff22094 100644 (file)
@@ -94,6 +94,7 @@ var npm = require("../npm.js")
   , semver = require("semver")
   , readJson = require("./read-json.js")
   , log = require("./log.js")
+  , url = require("url")
 
 module.exports = readInstalled
 
@@ -254,6 +255,8 @@ function findUnmet (obj) {
           continue
         }
         if ( typeof deps[d] === "string"
+            // url deps presumed innocent.
+            && !url.parse(deps[d]).protocol
             && !semver.satisfies(found.version, deps[d])) {
           // the bad thing will happen
           log.warn(obj.path + " requires "+d+"@'"+deps[d]
index 7815aec..d3c019d 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM" "1" "March 2012" "" ""
+.TH "NPM" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm\fR \-\- node package manager
index 40082f9..082812c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-ADDUSER" "1" "March 2012" "" ""
+.TH "NPM\-ADDUSER" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-adduser\fR \-\- Add a registry user account
index 1f07014..3f62258 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BIN" "1" "March 2012" "" ""
+.TH "NPM\-BIN" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-bin\fR \-\- Display npm bin folder
index 01e01d6..3843845 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BUGS" "1" "March 2012" "" ""
+.TH "NPM\-BUGS" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
index 541dd49..897781a 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BUILD" "1" "March 2012" "" ""
+.TH "NPM\-BUILD" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-build\fR \-\- Build a package
index 6ff0908..3fbe951 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BUNDLE" "1" "March 2012" "" ""
+.TH "NPM\-BUNDLE" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-bundle\fR \-\- REMOVED
index f185ea9..6168b50 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CACHE" "1" "March 2012" "" ""
+.TH "NPM\-CACHE" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-cache\fR \-\- Manipulates packages cache
index 1e5d895..d972a29 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CHANGELOG" "1" "March 2012" "" ""
+.TH "NPM\-CHANGELOG" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-changelog\fR \-\- Changes
index 25d53aa..8d5c60b 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CODING\-STYLE" "1" "March 2012" "" ""
+.TH "NPM\-CODING\-STYLE" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-coding-style\fR \-\- npm\'s "funny" coding style
index 4acded6..3f45893 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-COMPLETION" "1" "March 2012" "" ""
+.TH "NPM\-COMPLETION" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-completion\fR \-\- Tab Completion for npm
index f1ed994..65e09d0 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CONFIG" "1" "March 2012" "" ""
+.TH "NPM\-CONFIG" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-config\fR \-\- Manage the npm configuration file
@@ -171,6 +171,12 @@ The following shorthands are parsed on the command\-line:
 \fB\-S\fR: \fB\-\-save\fR
 .
 .IP "\(bu" 4
+\fB\-D\fR: \fB\-\-save\-dev\fR
+.
+.IP "\(bu" 4
+\fB\-O\fR: \fB\-\-save\-optional\fR
+.
+.IP "\(bu" 4
 \fB\-y\fR: \fB\-\-yes\fR
 .
 .IP "\(bu" 4
@@ -603,6 +609,19 @@ Type: url
 .P
 A proxy to use for outgoing https requests\.
 .
+.SS "user\-agent"
+.
+.IP "\(bu" 4
+Default: npm/{npm\.version} node/{process\.version}
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "" 0
+.
+.P
+Sets a User\-Agent to the request header
+.
 .SS "ignore"
 .
 .IP "\(bu" 4
@@ -994,6 +1013,38 @@ Save installed packages to a package\.json file as dependencies\.
 .P
 Only works if there is already a package\.json file present\.
 .
+.SS "save\-dev"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Save installed packages to a package\.json file as devDependencies\.
+.
+.P
+Only works if there is already a package\.json file present\.
+.
+.SS "save\-optional"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+Save installed packages to a package\.json file as optionalDependencies\.
+.
+.P
+Only works if there is already a package\.json file present\.
+.
 .SS "searchopts"
 .
 .IP "\(bu" 4
index 46670bc..918fd23 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DEPRECATE" "1" "March 2012" "" ""
+.TH "NPM\-DEPRECATE" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-deprecate\fR \-\- Deprecate a version of a package
index 465b038..9d2e759 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DEVELOPERS" "1" "March 2012" "" ""
+.TH "NPM\-DEVELOPERS" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-developers\fR \-\- Developer Guide
index eb14276..b74865f 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DISPUTES" "1" "March 2012" "" ""
+.TH "NPM\-DISPUTES" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-disputes\fR \-\- Handling Module Name Disputes
index 292042d..00fa391 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DOCS" "1" "March 2012" "" ""
+.TH "NPM\-DOCS" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
index b64f80a..742353d 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-EDIT" "1" "March 2012" "" ""
+.TH "NPM\-EDIT" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-edit\fR \-\- Edit an installed package
index 8aa212c..8b24eea 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-EXPLORE" "1" "March 2012" "" ""
+.TH "NPM\-EXPLORE" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-explore\fR \-\- Browse an installed package
index 1443fd7..1d68c04 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-FAQ" "1" "March 2012" "" ""
+.TH "NPM\-FAQ" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-faq\fR \-\- Frequently Asked Questions
index f043ce2..bebd033 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-FOLDERS" "1" "March 2012" "" ""
+.TH "NPM\-FOLDERS" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-folders\fR \-\- Folder Structures Used by npm
index 2dbc634..da5889b 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-HELP\-SEARCH" "1" "March 2012" "" ""
+.TH "NPM\-HELP\-SEARCH" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-help-search\fR \-\- Search npm help documentation
index ce2dd99..2471221 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-HELP" "1" "March 2012" "" ""
+.TH "NPM\-HELP" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-help\fR \-\- Get help on npm
index 5dc7acb..419652c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-INDEX" "1" "March 2012" "" ""
+.TH "NPM\-INDEX" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-index\fR \-\- Index of all npm documentation
index c7c3e21..ff4d537 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-INIT" "1" "March 2012" "" ""
+.TH "NPM\-INIT" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-init\fR \-\- Interactively create a package\.json file
index c0069f2..a9d8431 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-INSTALL" "1" "March 2012" "" ""
+.TH "NPM\-INSTALL" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-install\fR \-\- Install a package
@@ -13,10 +13,11 @@ npm install (with no args in a package dir)
 npm install <tarball file>
 npm install <tarball url>
 npm install <folder>
-npm install <name>
+npm install <name> [\-\-save|\-\-save\-dev|\-\-save\-optional]
 npm install <name>@<tag>
 npm install <name>@<version>
 npm install <name>@<version range>
+npm install <name>@<version range>
 .
 .fi
 .
@@ -59,6 +60,8 @@ after packing it up into a tarball (b)\.
 .
 .IP "\(bu" 4
 \fBnpm install\fR (in package directory, no arguments):
+.
+.IP
 Install the dependencies in the local node_modules folder\.
 .
 .IP
@@ -68,10 +71,14 @@ directory) as a global package\.
 .
 .IP "\(bu" 4
 \fBnpm install <folder>\fR:
+.
+.IP
 Install a package that is sitting in a folder on the filesystem\.
 .
 .IP "\(bu" 4
 \fBnpm install <tarball file>\fR:
+.
+.IP
 Install a package that is sitting on the filesystem\.  Note: if you just want
 to link a dev directory into your npm root, you can do this more easily by
 using \fBnpm link\fR\|\.
@@ -82,7 +89,7 @@ Example:
 .IP "" 4
 .
 .nf
-npm install \./package\.tgz
+  npm install \./package\.tgz
 .
 .fi
 .
@@ -91,6 +98,8 @@ npm install \./package\.tgz
 .
 .IP "\(bu" 4
 \fBnpm install <tarball url>\fR:
+.
+.IP
 Fetch the tarball url, and then install it\.  In order to distinguish between
 this and other options, the argument must start with "http://" or "https://"
 .
@@ -100,7 +109,7 @@ Example:
 .IP "" 4
 .
 .nf
-npm install https://github\.com/indexzero/forever/tarball/v0\.5\.6
+  npm install https://github\.com/indexzero/forever/tarball/v0\.5\.6
 .
 .fi
 .
@@ -108,28 +117,54 @@ npm install https://github\.com/indexzero/forever/tarball/v0\.5\.6
 
 .
 .IP "\(bu" 4
-\fBnpm install <name>\fR:
-Do a \fB<name>@<tag>\fR install, where \fB<tag>\fR is the "tag" config\. (See \fBnpm help config\fR)
+\fBnpm install <name> [\-\-save|\-\-save\-dev|\-\-save\-optional]\fR:
+.
+.IP
+Do a \fB<name>@<tag>\fR install, where \fB<tag>\fR is the "tag" config\. (See \fBnpm help config\fR\|\.)
+.
+.IP
+In most cases, this will install the latest version
+of the module published on npm\.
 .
 .IP
 Example:
 .
-.IP "" 4
+.IP
+      npm install sax
 .
-.nf
-npm install sax
+.IP
+\fBnpm install\fR takes 3 exclusive, optional flags which save or update
+the package version in your main package\.json:
 .
-.fi
+.IP "\(bu" 4
+\fB\-\-save\fR: Package will appear in your \fBdependencies\fR\|\.
 .
-.IP "" 0
+.IP "\(bu" 4
+\fB\-\-save\-dev\fR: Package will appear in your \fBdevDependencies\fR\|\.
+.
+.IP "\(bu" 4
+\fB\-\-save\-optional\fR: Package will appear in your \fBoptionalDependencies\fR\|\.
+.
+.IP
+Examples:
+.
+.IP
+  npm install sax \-\-save
+  npm install node\-tap \-\-save\-dev
+  npm install dtrace\-provider \-\-save\-optional
 .
 .IP
 \fBNote\fR: If there is a file or folder named \fB<name>\fR in the current
 working directory, then it will try to install that, and only try to
 fetch the package by name if it is not valid\.
 .
+.IP "" 0
+
+.
 .IP "\(bu" 4
 \fBnpm install <name>@<tag>\fR:
+.
+.IP
 Install the version of the package that is referenced by the specified tag\.
 If the tag does not exist in the registry data for that package, then this
 will fail\.
@@ -140,7 +175,7 @@ Example:
 .IP "" 4
 .
 .nf
-npm install sax@latest
+  npm install sax@latest
 .
 .fi
 .
@@ -149,6 +184,8 @@ npm install sax@latest
 .
 .IP "\(bu" 4
 \fBnpm install <name>@<version>\fR:
+.
+.IP
 Install the specified version of the package\.  This will fail if the version
 has not been published to the registry\.
 .
@@ -158,7 +195,7 @@ Example:
 .IP "" 4
 .
 .nf
-npm install sax@0\.1\.1
+  npm install sax@0\.1\.1
 .
 .fi
 .
@@ -167,6 +204,8 @@ npm install sax@0\.1\.1
 .
 .IP "\(bu" 4
 \fBnpm install <name>@<version range>\fR:
+.
+.IP
 Install a version of the package matching the specified version range\.  This
 will follow the same rules for resolving dependencies described in \fBnpm help json\fR\|\.
 .
@@ -177,15 +216,8 @@ treat it as a single argument\.
 .IP
 Example:
 .
-.IP "" 4
-.
-.nf
-npm install sax@">=0\.1\.0 <0\.2\.0"
-.
-.fi
-.
-.IP "" 0
-
+.IP
+      npm install sax@">=0\.1\.0 <0\.2\.0"
 .
 .IP "\(bu" 4
 \fBnpm install <git remote url>\fR:
@@ -194,14 +226,8 @@ npm install sax@">=0\.1\.0 <0\.2\.0"
 Install a package by cloning a git remote url\.  The format of the git
 url is:
 .
-.IP "" 4
-.
-.nf
-<protocol>://[<user>@]<hostname><separator><path>[#<commit\-ish>]
-.
-.fi
-.
-.IP "" 0
+.IP
+      <protocol>://[<user>@]<hostname><separator><path>[#<commit\-ish>]
 .
 .IP
 \fB<protocol>\fR is one of \fBgit\fR, \fBgit+ssh\fR, \fBgit+http\fR, or \fBgit+https\fR\|\.  If no \fB<commit\-ish>\fR is specified, then \fBmaster\fR is
@@ -213,9 +239,9 @@ Examples:
 .IP "" 4
 .
 .nf
-git+ssh://git@github\.com:isaacs/npm\.git#v1\.0\.27
-git+https://isaacs@github\.com/isaacs/npm\.git
-git://github\.com/isaacs/npm\.git#v1\.0\.27
+  git+ssh://git@github\.com:isaacs/npm\.git#v1\.0\.27
+  git+https://isaacs@github\.com/isaacs/npm\.git
+  git://github\.com/isaacs/npm\.git#v1\.0\.27
 .
 .fi
 .
index 7d242a4..a2384ac 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-JSON" "1" "March 2012" "" ""
+.TH "NPM\-JSON" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-json\fR \-\- Specifics of npm\'s package\.json handling
@@ -708,7 +708,7 @@ to publish it\.
 .P
 This is a way to prevent accidental publication of private repositories\.
 If you would like to ensure that a given package is only ever published
-to a speciic registry (for example, an internal registry),
+to a specific registry (for example, an internal registry),
 then use the \fBpublishConfig\fR hash described below
 to override the \fBregistry\fR config param at publish\-time\.
 .
index 374d5a8..1e4ac17 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LINK" "1" "March 2012" "" ""
+.TH "NPM\-LINK" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-link\fR \-\- Symlink a package folder
index df6aae0..a629f7e 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LS" "1" "March 2012" "" ""
+.TH "NPM\-LS" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-ls\fR \-\- List installed packages
index a751e94..b85b940 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM" "1" "March 2012" "" ""
+.TH "NPM" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm\fR \-\- node package manager
@@ -14,7 +14,7 @@ npm <command> [args]
 .fi
 .
 .SH "VERSION"
-1.1.15
+1.1.18
 .
 .SH "DESCRIPTION"
 npm is the package manager for the Node JavaScript platform\.  It puts
index b693c7e..a30dce9 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-OUTDATED" "1" "March 2012" "" ""
+.TH "NPM\-OUTDATED" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-outdated\fR \-\- Check for outdated packages
index 017e0b7..b91d382 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-OWNER" "1" "March 2012" "" ""
+.TH "NPM\-OWNER" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-owner\fR \-\- Manage package owners
index 77928f9..56eb667 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PACK" "1" "March 2012" "" ""
+.TH "NPM\-PACK" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-pack\fR \-\- Create a tarball from a package
index c8989a5..6284d68 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PREFIX" "1" "March 2012" "" ""
+.TH "NPM\-PREFIX" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-prefix\fR \-\- Display prefix
index adcc29d..53fa1ae 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PRUNE" "1" "March 2012" "" ""
+.TH "NPM\-PRUNE" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-prune\fR \-\- Remove extraneous packages
index 8b16883..ef16486 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PUBLISH" "1" "March 2012" "" ""
+.TH "NPM\-PUBLISH" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-publish\fR \-\- Publish a package
index fe3fe77..4824951 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-REBUILD" "1" "March 2012" "" ""
+.TH "NPM\-REBUILD" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-rebuild\fR \-\- Rebuild a package
index 9232489..757cd47 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-REGISTRY" "1" "March 2012" "" ""
+.TH "NPM\-REGISTRY" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-registry\fR \-\- The JavaScript Package Registry
index 9d85506..ff8412a 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-REMOVAL" "1" "March 2012" "" ""
+.TH "NPM\-REMOVAL" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-removal\fR \-\- Cleaning the Slate
index cd5d11e..804593c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RESTART" "1" "March 2012" "" ""
+.TH "NPM\-RESTART" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-restart\fR \-\- Start a package
index 28fbc52..25ba27e 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-ROOT" "1" "March 2012" "" ""
+.TH "NPM\-ROOT" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-root\fR \-\- Display npm root
index 7474610..041b701 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RUN\-SCRIPT" "1" "March 2012" "" ""
+.TH "NPM\-RUN\-SCRIPT" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-run-script\fR \-\- Run arbitrary package scripts
index d8c5b66..4f0b385 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SCRIPTS" "1" "March 2012" "" ""
+.TH "NPM\-SCRIPTS" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-scripts\fR \-\- How npm handles the "scripts" field
index 815452c..c2015ed 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SEARCH" "1" "March 2012" "" ""
+.TH "NPM\-SEARCH" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-search\fR \-\- Search for packages
index 3cd98ff..6cb1be0 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SEMVER" "1" "March 2012" "" ""
+.TH "NPM\-SEMVER" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-semver\fR \-\- The semantic versioner for npm
index 37630d9..7dab324 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SHRINKWRAP" "1" "March 2012" "" ""
+.TH "NPM\-SHRINKWRAP" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-shrinkwrap\fR \-\- Lock down dependency versions
index cd9204e..9dd32b7 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-STAR" "1" "March 2012" "" ""
+.TH "NPM\-STAR" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-star\fR \-\- Mark your favorite packages
index 1307707..83b0751 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-START" "1" "March 2012" "" ""
+.TH "NPM\-START" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-start\fR \-\- Start a package
index 188af67..aace69a 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-STOP" "1" "March 2012" "" ""
+.TH "NPM\-STOP" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-stop\fR \-\- Stop a package
index cee5f33..26a1bd3 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SUBMODULE" "1" "March 2012" "" ""
+.TH "NPM\-SUBMODULE" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-submodule\fR \-\- Add a package as a git submodule
index e5ac519..48e23d4 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-TAG" "1" "March 2012" "" ""
+.TH "NPM\-TAG" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-tag\fR \-\- Tag a published version
index a24e2d0..c09f456 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-TEST" "1" "March 2012" "" ""
+.TH "NPM\-TEST" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-test\fR \-\- Test a package
index 7005ba1..d779b0b 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RM" "1" "March 2012" "" ""
+.TH "NPM\-RM" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-rm\fR \-\- Remove a package
index 4b8bc86..4a7b96e 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UNPUBLISH" "1" "March 2012" "" ""
+.TH "NPM\-UNPUBLISH" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-unpublish\fR \-\- Remove a package from the registry
index ba3e8b6..bdb7036 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UPDATE" "1" "March 2012" "" ""
+.TH "NPM\-UPDATE" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-update\fR \-\- Update a package
index 1395591..80acf69 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-VERSION" "1" "March 2012" "" ""
+.TH "NPM\-VERSION" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-version\fR \-\- Bump a package version
index c874ff4..0ecd6da 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-VIEW" "1" "March 2012" "" ""
+.TH "NPM\-VIEW" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-view\fR \-\- View registry info
index 06d221d..f47a0e8 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-WHOAMI" "1" "March 2012" "" ""
+.TH "NPM\-WHOAMI" "1" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-whoami\fR \-\- Display npm username
index 7aaa11b..268f75e 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BIN" "3" "March 2012" "" ""
+.TH "NPM\-BIN" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-bin\fR \-\- Display npm bin folder
index 6d61dcd..38ee6a1 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-BUGS" "3" "March 2012" "" ""
+.TH "NPM\-BUGS" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe
index c23016d..e8b8260 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-COMMANDS" "3" "March 2012" "" ""
+.TH "NPM\-COMMANDS" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-commands\fR \-\- npm commands
index d18739b..6debd41 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-CONFIG" "3" "March 2012" "" ""
+.TH "NPM\-CONFIG" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-config\fR \-\- Manage the npm configuration files
index 2448ab3..b4b9161 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DEPRECATE" "3" "March 2012" "" ""
+.TH "NPM\-DEPRECATE" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-deprecate\fR \-\- Deprecate a version of a package
index 8373f6d..a61b0df 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-DOCS" "3" "March 2012" "" ""
+.TH "NPM\-DOCS" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-docs\fR \-\- Docs for a package in a web browser maybe
index 3f79022..dc4b183 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-EDIT" "3" "March 2012" "" ""
+.TH "NPM\-EDIT" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-edit\fR \-\- Edit an installed package
index 0d4ee62..8817ce0 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-EXPLORE" "3" "March 2012" "" ""
+.TH "NPM\-EXPLORE" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-explore\fR \-\- Browse an installed package
index 291037a..d42d68e 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-HELP\-SEARCH" "3" "March 2012" "" ""
+.TH "NPM\-HELP\-SEARCH" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-help-search\fR \-\- Search the help pages
index 3a4434c..f751030 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "INIT" "3" "March 2012" "" ""
+.TH "INIT" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBinit\fR \-\- Interactively create a package\.json file
index 0c0ee97..6a9cea4 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-INSTALL" "3" "March 2012" "" ""
+.TH "NPM\-INSTALL" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-install\fR \-\- install a package programmatically
index 45c15dc..edc3905 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LINK" "3" "March 2012" "" ""
+.TH "NPM\-LINK" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-link\fR \-\- Symlink a package folder
index 9d9df2c..c44d9f1 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LOAD" "3" "March 2012" "" ""
+.TH "NPM\-LOAD" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-load\fR \-\- Load config settings
index 74736d4..2d45dde 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-LS" "3" "March 2012" "" ""
+.TH "NPM\-LS" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-ls\fR \-\- List installed packages
index 294ac18..ed3851a 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM" "3" "March 2012" "" ""
+.TH "NPM" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm\fR \-\- node package manager
@@ -21,7 +21,7 @@ npm\.load(configObject, function (er, npm) {
 .fi
 .
 .SH "VERSION"
-1.1.15
+1.1.18
 .
 .SH "DESCRIPTION"
 This is the API documentation for npm\.
index 258db10..4c0bd4d 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-OUTDATED" "3" "March 2012" "" ""
+.TH "NPM\-OUTDATED" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-outdated\fR \-\- Check for outdated packages
index edb734e..922769f 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-OWNER" "3" "March 2012" "" ""
+.TH "NPM\-OWNER" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-owner\fR \-\- Manage package owners
index e279d61..5c05479 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PACK" "3" "March 2012" "" ""
+.TH "NPM\-PACK" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-pack\fR \-\- Create a tarball from a package
index 8a01d63..3ba398a 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PREFIX" "3" "March 2012" "" ""
+.TH "NPM\-PREFIX" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-prefix\fR \-\- Display prefix
index 1aec7d7..566f57e 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PRUNE" "3" "March 2012" "" ""
+.TH "NPM\-PRUNE" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-prune\fR \-\- Remove extraneous packages
index 060c31e..edddf21 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-PUBLISH" "3" "March 2012" "" ""
+.TH "NPM\-PUBLISH" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-publish\fR \-\- Publish a package
index 7cacbe9..a20d55c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-REBUILD" "3" "March 2012" "" ""
+.TH "NPM\-REBUILD" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-rebuild\fR \-\- Rebuild a package
index 2032a7c..3530cf9 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RESTART" "3" "March 2012" "" ""
+.TH "NPM\-RESTART" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-restart\fR \-\- Start a package
index a1d6295..8fa00a0 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-ROOT" "3" "March 2012" "" ""
+.TH "NPM\-ROOT" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-root\fR \-\- Display npm root
index 597f7d9..4ace64e 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-RUN\-SCRIPT" "3" "March 2012" "" ""
+.TH "NPM\-RUN\-SCRIPT" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-run-script\fR \-\- Run arbitrary package scripts
index 7626321..9afb739 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SEARCH" "3" "March 2012" "" ""
+.TH "NPM\-SEARCH" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-search\fR \-\- Search for packages
index 10354ed..647e4a4 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SHRINKWRAP" "3" "March 2012" "" ""
+.TH "NPM\-SHRINKWRAP" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-shrinkwrap\fR \-\- programmatically generate package shrinkwrap file
index 531dfa2..1d05cde 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-START" "3" "March 2012" "" ""
+.TH "NPM\-START" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-start\fR \-\- Start a package
index e139ee9..5514b4e 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-STOP" "3" "March 2012" "" ""
+.TH "NPM\-STOP" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-stop\fR \-\- Stop a package
index d691b7c..24f4c14 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-SUBMODULE" "3" "March 2012" "" ""
+.TH "NPM\-SUBMODULE" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-submodule\fR \-\- Add a package as a git submodule
index 855c174..e3f7e49 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-TAG" "3" "March 2012" "" ""
+.TH "NPM\-TAG" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-tag\fR \-\- Tag a published version
index 07be782..9614b92 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-TEST" "3" "March 2012" "" ""
+.TH "NPM\-TEST" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-test\fR \-\- Test a package
index 756ddad..acc26cd 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UNINSTALL" "3" "March 2012" "" ""
+.TH "NPM\-UNINSTALL" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-uninstall\fR \-\- uninstall a package programmatically
index d3e3a75..ac35cb8 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UNPUBLISH" "3" "March 2012" "" ""
+.TH "NPM\-UNPUBLISH" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-unpublish\fR \-\- Remove a package from the registry
index d8a096a..ded33bd 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-UPDATE" "3" "March 2012" "" ""
+.TH "NPM\-UPDATE" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-update\fR \-\- Update a package
index 20ee415..b9015eb 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-VERSION" "3" "March 2012" "" ""
+.TH "NPM\-VERSION" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-version\fR \-\- Bump a package version
index f9c253b..3e8e4a6 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-VIEW" "3" "March 2012" "" ""
+.TH "NPM\-VIEW" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-view\fR \-\- View registry info
index fd2ee1c..d4beb9c 100644 (file)
@@ -1,7 +1,7 @@
 .\" Generated with Ronnjs/v0.1
 .\" http://github.com/kapouer/ronnjs/
 .
-.TH "NPM\-WHOAMI" "3" "March 2012" "" ""
+.TH "NPM\-WHOAMI" "3" "April 2012" "" ""
 .
 .SH "NAME"
 \fBnpm-whoami\fR \-\- Display npm username
index 4ad0012..39429d1 100644 (file)
@@ -171,7 +171,17 @@ Packer.prototype.readRules = function (buf, e) {
     return Ignore.prototype.readRules.call(this, buf, e)
   }
 
-  var p = this.package = JSON.parse(buf.toString())
+  buf = buf.toString().trim()
+
+  if (buf.length === 0) return []
+
+  try {
+    var p = this.package = JSON.parse(buf)
+  } catch (er) {
+    er.file = path.resolve(this.path, e)
+    this.error(er)
+    return
+  }
 
   if (this === this.root) {
     this.bundleLinks = this.bundleLinks || {}
@@ -262,7 +272,9 @@ Packer.prototype.emitEntry = function (entry) {
   }
 
   // all *.gyp files are renamed to binding.gyp for node-gyp
-  if (entry.basename.match(/\.gyp$/)) {
+  // but only when they are in the same folder as a package.json file.
+  if (entry.basename.match(/\.gyp$/) &&
+      this.entries.indexOf("package.json") !== -1) {
     entry.basename = "binding.gyp"
     entry.path = path.resolve(entry.dirname, entry.basename)
   }
index cc8cde0..53f3728 100644 (file)
@@ -35,8 +35,8 @@
     "node": "*"
   },
   "_engineSupported": true,
-  "_npmVersion": "1.1.13",
-  "_nodeVersion": "v0.7.7-pre",
+  "_npmVersion": "1.1.16",
+  "_nodeVersion": "v0.7.8-pre",
   "_defaultsLoaded": true,
   "_from": "fstream-ignore@~0.0.5"
 }
index 66dc932..83acd0d 100644 (file)
@@ -6,7 +6,7 @@
   },
   "name": "fstream-npm",
   "description": "fstream class for creating npm packages",
-  "version": "0.0.4",
+  "version": "0.0.6",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/fstream-npm.git"
     "name": "isaacs",
     "email": "i@izs.me"
   },
-  "_id": "fstream-npm@0.0.4",
+  "_id": "fstream-npm@0.0.6",
   "devDependencies": {},
   "optionalDependencies": {},
   "engines": {
     "node": "*"
   },
   "_engineSupported": true,
-  "_npmVersion": "1.1.13",
-  "_nodeVersion": "v0.7.7-pre",
+  "_npmVersion": "1.1.16",
+  "_nodeVersion": "v0.7.8-pre",
   "_defaultsLoaded": true,
-  "_from": "fstream-npm@0 >=0.0.3"
+  "_from": "fstream-npm@0 >=0.0.5"
 }
diff --git a/deps/npm/node_modules/node-gyp/LICENSE b/deps/npm/node_modules/node-gyp/LICENSE
new file mode 100644 (file)
index 0000000..2ea4dc5
--- /dev/null
@@ -0,0 +1,24 @@
+(The MIT License)
+
+Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
index 328e1a9..a7347cc 100755 (executable)
@@ -16,12 +16,17 @@ var gyp = require('../')
   , cursor = ansi(process.stderr)
 
 /**
- * Process and execute the selected command.
+ * Process and execute the selected commands.
  */
 
 var prog = gyp()
 prog.parseArgv(process.argv)
 
+if (prog.todo.length === 0) {
+  return prog.usageAndExit()
+}
+
+
 /**
  * Set up logging handlers.
  */
@@ -36,6 +41,18 @@ prog.on('info', function () {
   cursor.write('\n')
 })
 
+prog.on('warn', function () {
+  cursor.fg.yellow().bg.red().write('warn')
+        .fg.reset().bg.reset().write(' ')
+        .fg.grey().write(arguments[0])
+        .write(' ')
+        .reset()
+  for (var i=1, l=arguments.length; i<l; i++) {
+    cursor.write(arguments[i] + ' ')
+  }
+  cursor.write('\n')
+})
+
 if (prog.opts.verbose) {
   prog.on('verbose', function () {
     cursor.fg.cyan().write('verb ')
@@ -54,48 +71,63 @@ prog.on('spawn', function (command, args, proc) {
         .reset().write(inspect(args) + '\n')
 })
 
+prog.info('it worked if it ends with', 'ok')
+
 /**
- * Process and execute the selected command.
+ * Change dir if -C/--directory was passed.
  */
 
-if (!prog.command) {
-  return prog.usageAndExit()
-}
-
-prog.info('it worked if it ends with', 'ok')
-
-if (typeof prog.commands[prog.command] != 'function') {
-  cursor.fg.red().write('ERR! ')
-        .fg.reset().write('Unknown command "' + prog.command + '"\n')
-  cursor.fg.red().write('ERR! ')
-        .fg.reset().write('not ok\n')
-  process.exit(1)
+var dir = prog.opts.directory
+if (dir) {
+  var fs = require('fs')
+  try {
+    var stat = fs.statSync(dir)
+    if (stat.isDirectory()) {
+      prog.info('chdir:', dir)
+      process.chdir(dir)
+    } else {
+      prog.warn(dir + ' is not a directory')
+    }
+  } catch (e) {
+    prog.warn('directory:', e.message)
+  }
 }
 
+// start running the given commands!
 var completed = false
-prog.commands[prog.command](prog.argv, function (err) {
-  completed = true
-  if (err) {
-    cursor.fg.red().write('ERR! ')
-          .fg.reset().write(err.stack + '\n')
-    cursor.fg.red().write('ERR! ')
-          .fg.reset().write('not ok\n')
-    return process.exit(1)
+run()
+
+function run () {
+  if (prog.todo.length === 0) {
+    // done!
+    completed = true
+    prog.info('done', 'ok')
+    return
   }
-  if (prog.command == 'list') {
-    var versions = arguments[1]
-    if (versions.length > 0) {
-      versions.forEach(function (version) {
-        console.log(version)
-      })
-    } else {
-      prog.info('No node development files installed. Use `node-gyp install` to install a version.')
+  var command = prog.todo.shift()
+  prog.commands[command](prog.argv.slice(), function (err) {
+    if (err) {
+      cursor.fg.red().write('ERR! ')
+            .fg.reset().write(err.stack + '\n')
+      cursor.fg.red().write('ERR! ')
+            .fg.reset().write('not ok\n')
+      return process.exit(1)
     }
-  } else if (arguments.length >= 2) {
-    console.log.apply(console, [].slice.call(arguments, 1))
-  }
-  prog.info('done', 'ok')
-})
+    if (command == 'list') {
+      var versions = arguments[1]
+      if (versions.length > 0) {
+        versions.forEach(function (version) {
+          console.log(version)
+        })
+      } else {
+        prog.info('No node development files installed. Use `node-gyp install` to install a version.')
+      }
+    } else if (arguments.length >= 2) {
+      console.log.apply(console, [].slice.call(arguments, 1))
+    }
+    process.nextTick(run)
+  })
+}
 
 process.on('exit', function (code) {
   if (!completed && !code) {
index 6e13b60..f67e6da 100644 (file)
           'GCC_VERSION': '4.2',
           'GCC_WARN_ABOUT_MISSING_NEWLINE': 'YES',  # -Wnewline-eof
           'PREBINDING': 'NO',                       # No -Wl,-prebind
+          'MACOSX_DEPLOYMENT_TARGET': '10.5',
           'USE_HEADERMAP': 'NO',
           'OTHER_CFLAGS': [
             '-fno-strict-aliasing',
index 3ffc4c7..92f2133 100644 (file)
@@ -5,12 +5,11 @@ module.exports = exports = build
  * Module dependencies.
  */
 
-var fs = require('fs')
+var fs = require('graceful-fs')
   , path = require('path')
   , glob = require('glob')
   , which = require('which')
-  , asyncEmit = require('./util/asyncEmit')
-  , createHook = require('./util/hook')
+  , mkdirp = require('./util/mkdirp')
   , win = process.platform == 'win32'
 
 exports.usage = 'Invokes `' + (win ? 'msbuild' : 'make') + '` and builds the module'
@@ -21,14 +20,12 @@ function build (gyp, argv, callback) {
   var command = win ? 'msbuild' : 'make'
     , buildDir = path.resolve('build')
     , configPath = path.resolve(buildDir, 'config.gypi')
+    , buildType
     , config
-    , emitter
+    , arch
+    , version
 
-  createHook('gyp-build.js', function (err, _e) {
-    if (err) return callback(err)
-    emitter = _e
-    loadConfigGypi()
-  })
+  loadConfigGypi()
 
   /**
    * Load the "config.gypi" file that was generated during "configure".
@@ -45,6 +42,23 @@ function build (gyp, argv, callback) {
         return
       }
       config = JSON.parse(data.replace(/\#.+\n/, ''))
+
+      // get the 'arch', 'buildType', and 'version' vars from the config
+      buildType = config.target_defaults.default_configuration
+      arch = config.variables.target_arch
+      version = config.variables.target_version
+
+      if ('debug' in gyp.opts) {
+        buildType = gyp.opts.debug ? 'Debug' : 'Release'
+      }
+      if (!buildType) {
+        buildType = 'Release'
+      }
+
+      gyp.verbose('build type:', buildType)
+      gyp.verbose('architecture:', arch)
+      gyp.verbose('node version:', version)
+
       if (win) {
         findSolutionFile()
       } else {
@@ -54,7 +68,7 @@ function build (gyp, argv, callback) {
   }
 
   /**
-   * On Windows, find first build/*.sln file.
+   * On Windows, find the first build/*.sln file.
    */
 
   function findSolutionFile () {
@@ -69,6 +83,10 @@ function build (gyp, argv, callback) {
     })
   }
 
+  /**
+   * Uses node-which to locate the msbuild / make executable.
+   */
+
   function doWhich () {
     // First make sure we have the build command in the PATH
     which(command, function (err, execPath) {
@@ -83,7 +101,7 @@ function build (gyp, argv, callback) {
         return
       }
       gyp.verbose('`which` succeeded for `' + command + '`', execPath)
-      build()
+      copyNodeLib()
     })
   }
 
@@ -109,21 +127,40 @@ function build (gyp, argv, callback) {
         return
       }
       command = msbuild
-      build()
+      copyNodeLib()
     })
   }
 
   /**
-   * Actually spawn the process and compile the module.
+   * Copies the node.lib file for the current target architecture into the
+   * current proper dev dir location.
    */
 
-  function build () {
-    var buildType = config.target_defaults.default_configuration
-      , platform = config.variables.target_arch == 'x64' ? '64' : '32'
+  function copyNodeLib () {
+    if (!win) return doBuild()
 
-    if (gyp.opts.debug) {
-      buildType = 'Debug'
-    }
+    var devDir = path.resolve(gyp.devDir, version)
+      , buildDir = path.resolve(devDir, buildType)
+      , archNodeLibPath = path.resolve(devDir, arch, 'node.lib')
+      , buildNodeLibPath = path.resolve(buildDir, 'node.lib')
+
+    mkdirp(buildDir, function (err, isNew) {
+      if (err) return callback(err)
+      gyp.verbose('"' + buildType + '" dir needed to be created?', isNew)
+      var rs = fs.createReadStream(archNodeLibPath)
+        , ws = fs.createWriteStream(buildNodeLibPath)
+      rs.pipe(ws)
+      rs.on('error', callback)
+      ws.on('error', callback)
+      rs.on('end', doBuild)
+    })
+  }
+
+  /**
+   * Actually spawn the process and compile the module.
+   */
+
+  function doBuild () {
 
     // Enable Verbose build
     if (!win && gyp.opts.verbose) {
@@ -140,7 +177,8 @@ function build (gyp, argv, callback) {
 
     // Specify the build type, Release by default
     if (win) {
-      argv.push('/p:Configuration=' + buildType + ';Platform=Win' + platform)
+      var p = arch === 'x64' ? 'x64' : 'Win32'
+      argv.push('/p:Configuration=' + buildType + ';Platform=' + p)
     } else {
       argv.push('BUILDTYPE=' + buildType)
       // Invoke the Makefile in the 'build' dir.
@@ -158,11 +196,8 @@ function build (gyp, argv, callback) {
       }
     }
 
-    asyncEmit(emitter, 'before', function (err) {
-      if (err) return callback(err)
-      var proc = gyp.spawn(command, argv)
-      proc.on('exit', onExit)
-    })
+    var proc = gyp.spawn(command, argv)
+    proc.on('exit', onExit)
   }
 
   /**
@@ -170,16 +205,13 @@ function build (gyp, argv, callback) {
    */
 
   function onExit (code, signal) {
-    asyncEmit(emitter, 'after', function (err) {
-      if (err) return callback(err)
-      if (code !== 0) {
-        return callback(new Error('`' + command + '` failed with exit code: ' + code))
-      }
-      if (signal) {
-        return callback(new Error('`' + command + '` got signal: ' + signal))
-      }
-      callback()
-    })
+    if (code !== 0) {
+      return callback(new Error('`' + command + '` failed with exit code: ' + code))
+    }
+    if (signal) {
+      return callback(new Error('`' + command + '` got signal: ' + signal))
+    }
+    callback()
   }
 
 }
index a8efc1b..1e56114 100644 (file)
@@ -8,35 +8,14 @@ exports.usage = 'Removes any generated build files and the "out" dir'
  */
 
 var rm = require('rimraf')
-  , asyncEmit = require('./util/asyncEmit')
-  , createHook = require('./util/hook')
 
 
 function clean (gyp, argv, callback) {
 
   // Remove the 'build' dir
   var buildDir = 'build'
-    , emitter
-
-  createHook('gyp-clean.js', function (err, _e) {
-    if (err) return callback(err)
-    emitter = _e
-    asyncEmit(emitter, 'before', function (err) {
-      if (err) return callback(err)
-      doClean()
-    })
-  })
-
-  function doClean () {
-    gyp.verbose('removing "build" directory')
-    rm(buildDir, after)
-  }
-
-  function after () {
-    asyncEmit(emitter, 'after', function (err) {
-      if (err) return callback(err)
-      callback()
-    })
-  }
+
+  gyp.verbose('removing "build" directory')
+  rm(buildDir, callback)
 
 }
index c1c99e7..c25ad8f 100644 (file)
@@ -5,34 +5,25 @@ module.exports = exports = configure
  * Module dependencies.
  */
 
-var fs = require('fs')
+var fs = require('graceful-fs')
   , path = require('path')
   , glob = require('glob')
   , which = require('which')
   , semver = require('semver')
   , mkdirp = require('./util/mkdirp')
-  , createHook = require('./util/hook')
-  , asyncEmit = require('./util/asyncEmit')
   , win = process.platform == 'win32'
 
 exports.usage = 'Generates ' + (win ? 'MSVC project files' : 'a Makefile') + ' for the current module'
 
 function configure (gyp, argv, callback) {
 
-  var python = gyp.opts.python || 'python'
+  var python = process.env.PYTHON || gyp.opts.python || 'python'
     , buildDir = path.resolve('build')
     , configPath
-    , emitter
     , versionStr
     , version
 
-  // Very first step is to load up the user-defined 'gyp-configure.js' file if it
-  // exists. We relay filecycle events using the eventemitter returned from this
-  createHook('gyp-configure.js', function (err, _e) {
-    if (err) return callback(err)
-    emitter = _e
-    checkPython()
-  })
+  checkPython()
 
   // Make sure that Python is in the $PATH
   function checkPython () {
@@ -46,7 +37,7 @@ function configure (gyp, argv, callback) {
         return
       }
       gyp.verbose('`which` succeeded for `' + python + '`', execPath)
-      getVersion()
+      getTargetVersion()
     })
   }
 
@@ -54,7 +45,7 @@ function configure (gyp, argv, callback) {
   // We're gonna glob C:\python2*
   function guessPython () {
     gyp.verbose('could not find "' + python + '". guessing location')
-    var rootDir = process.env.HOMEDIR || process.env.SystemDrive || 'C:\\'
+    var rootDir = process.env.HOMEDRIVE || process.env.SystemDrive || 'C:\\'
     if (rootDir[rootDir.length - 1] !== '\\') {
       rootDir += '\\'
     }
@@ -70,15 +61,19 @@ function configure (gyp, argv, callback) {
         return
       }
       python = pythonPath
-      getVersion()
+      getTargetVersion()
     })
   }
 
   function failNoPython () {
-    callback(new Error('Python does not seem to be installed'))
+    callback(new Error('Can\'t find Python, you can set the PYTHON env variable.'))
   }
 
-  function getVersion () {
+  function getTargetVersion () {
+
+    // 'python' should be set by now
+    process.env.PYTHON = python
+
     if (gyp.opts.target) {
       // if --target was given, then ensure that version is installed
       versionStr = gyp.opts.target
@@ -114,23 +109,65 @@ function configure (gyp, argv, callback) {
     if (err) return callback(err)
     gyp.verbose('creating build/config.gypi file')
 
-    var config = {}
     configPath = path.resolve(buildDir, 'config.gypi')
 
-    config.target_defaults = {
-        cflags: []
-      , default_configuration: gyp.opts.debug ? 'Debug' : 'Release'
-      , defines: []
-      , include_dirs: []
-      , libraries: []
+    var config = process.config || {}
+      , defaults = config.target_defaults
+      , variables = config.variables
+
+    if (!defaults) {
+      defaults = config.target_defaults = {}
+    }
+    if (!variables) {
+      variables = config.variables = {}
+    }
+    if (!defaults.cflags) {
+      defaults.cflags = []
+    }
+    if (!defaults.defines) {
+      defaults.defines = []
+    }
+    if (!defaults.include_dirs) {
+      defaults.include_dirs = []
+    }
+    if (!defaults.libraries) {
+      defaults.libraries = []
     }
 
-    config.variables = {
-        target_arch: gyp.opts.arch || process.arch || 'ia32'
+    // set the default_configuration prop
+    if ('debug' in gyp.opts) {
+      defaults.default_configuration = gyp.opts.debug ? 'Debug' : 'Release'
+    }
+    if (!defaults.default_configuration) {
+      defaults.default_configuration = 'Release'
     }
 
+    // set the target_arch variable
+    variables.target_arch = gyp.opts.arch || process.arch || 'ia32'
+
+    // also set the target_version variable
+    variables.target_version = version
+
+    // loop through the rest of the opts and add the unknown ones as variables.
+    // this allows for module-specific configure flags like:
+    //
+    //   $ node-gyp configure --shared-libxml2
+    Object.keys(gyp.opts).forEach(function (opt) {
+      if (opt === 'argv') return
+      if (opt in gyp.configDefs) return
+      variables[opt.replace(/-/g, '_')] = gyp.opts[opt]
+    })
+
+    // ensures that any boolean values from `process.config` get stringified
+    function boolsToString (k, v) {
+      if (typeof v === 'boolean')
+        return String(v)
+      return v
+    }
+
+    // now write out the config.gypi file to the build/ dir
     var prefix = '# Do not edit. File was generated by node-gyp\'s "configure" step'
-      , json = JSON.stringify(config, null, 2)
+      , json = JSON.stringify(config, boolsToString, 2)
     gyp.verbose('writing out config file', configPath)
     fs.writeFile(configPath, [prefix, json, ''].join('\n'), runGypAddon)
   }
@@ -138,8 +175,8 @@ function configure (gyp, argv, callback) {
   function runGypAddon (err) {
     if (err) return callback(err)
 
-    var devDir = path.resolve(process.env.HOME, '.node-gyp', version)
-      , gyp_addon = path.resolve(devDir, 'tools', 'gyp_addon')
+    // location of the `gyp_addon` python script for the target node version
+    var gyp_addon = path.resolve(gyp.devDir, version, 'tools', 'gyp_addon')
 
     if (!~argv.indexOf('-f') && !~argv.indexOf('--format')) {
       if (win) {
@@ -176,12 +213,8 @@ function configure (gyp, argv, callback) {
     // execute `gyp_addon` from the current target node version
     argv.unshift(gyp_addon)
 
-    asyncEmit(emitter, 'before', function (err) {
-      if (err) return callback(err)
-
-      var cp = gyp.spawn(python, argv)
-      cp.on('exit', onCpExit)
-    })
+    var cp = gyp.spawn(python, argv)
+    cp.on('exit', onCpExit)
   }
 
   /**
@@ -189,16 +222,12 @@ function configure (gyp, argv, callback) {
    */
 
   function onCpExit (code, signal) {
-    asyncEmit(emitter, 'after', function (err) {
-      if (err) {
-        callback(err)
-      } else if (code !== 0) {
-        callback(new Error('`gyp_addon` failed with exit code: ' + code))
-      } else {
-        // we're done
-        callback()
-      }
-    })
+    if (code !== 0) {
+      callback(new Error('`gyp_addon` failed with exit code: ' + code))
+    } else {
+      // we're done
+      callback()
+    }
   }
 
 }
index 8ad484d..2cf3993 100644 (file)
@@ -7,16 +7,16 @@ exports.usage = 'Install node development files for the specified node version.'
  * Module dependencies.
  */
 
-var fs = require('fs')
+var fs = require('graceful-fs')
   , tar = require('tar')
   , rm = require('rimraf')
   , path = require('path')
   , zlib = require('zlib')
-  , mkdir = require('mkdirp')
   , semver = require('semver')
   , fstream = require('fstream')
   , request = require('request')
   , minimatch = require('minimatch')
+  , mkdir = require('./util/mkdirp')
   , distUrl = 'http://nodejs.org/dist'
   , win = process.platform == 'win32'
 
@@ -53,7 +53,7 @@ function install (gyp, argv, callback) {
   gyp.verbose('installing legacy version?', isLegacy)
 
   if (semver.lt(versionStr, '0.6.0')) {
-    return callback(new Error('Minimum target version is `0.6` or greater. Got: ' + versionStr))
+    return callback(new Error('Minimum target version is `0.6.0` or greater. Got: ' + versionStr))
   }
 
   // 0.x.y-pre versions are not published yet. Use previous release.
@@ -67,11 +67,10 @@ function install (gyp, argv, callback) {
   version = version.slice(1, 4).join('.')
   gyp.verbose('installing version', version)
 
+  // the directory where the dev files will be installed
+  var devDir = path.resolve(gyp.devDir, version)
 
-  // TODO: Make ~/.node-gyp configurable
-  var devDir = path.resolve(process.env.HOME, '.node-gyp', version)
-
-  // If '--ensure' was passed, then don't *always* install the version,
+  // If '--ensure' was passed, then don't *always* install the version;
   // check if it is already installed, and only install when needed
   if (gyp.opts.ensure) {
     gyp.verbose('--ensure was passed, so won\'t reinstall if already installed')
@@ -107,7 +106,7 @@ function install (gyp, argv, callback) {
     go()
   }
 
-  function download(url,onError) {
+  function download (url, onError) {
     gyp.info('downloading:', url)
     var requestOpts = {
         uri: url
@@ -129,11 +128,14 @@ function install (gyp, argv, callback) {
   function go () {
 
   // first create the dir for the node dev files
-  mkdir(devDir, function (err) {
+  mkdir(devDir, function (err, created) {
     if (err) return cb(err)
 
-    // TODO: Detect if it was actually created or if it already existed
-    gyp.verbose('created:', devDir)
+    if (created) {
+      gyp.verbose('created:', devDir)
+    } else {
+      gyp.verbose('directory already existed:', devDir)
+    }
 
     // now download the node tarball
     var tarballUrl = distUrl + '/v' + version + '/node-v' + version + '.tar.gz'
@@ -242,40 +244,56 @@ function install (gyp, argv, callback) {
 
     function downloadNodeLib (done) {
       gyp.verbose('on Windows; need to download `node.lib`...')
-      // TODO: windows 64-bit support
-      var releaseDir = path.resolve(devDir, 'Release')
-        , debugDir = path.resolve(devDir, 'Debug')
-        , nodeLibUrl = distUrl + '/v' + version + '/node.lib'
-
-      gyp.verbose('Release dir', releaseDir)
-      gyp.verbose('Debug dir', debugDir)
-      gyp.verbose('`node.lib` url', nodeLibUrl)
-      // TODO: parallelize mkdirs
-      mkdir(releaseDir, function (err) {
+      var dir32 = path.resolve(devDir, 'ia32')
+        , dir64 = path.resolve(devDir, 'x64')
+        , nodeLibPath32 = path.resolve(dir32, 'node.lib')
+        , nodeLibPath64 = path.resolve(dir64, 'node.lib')
+        , nodeLibUrl32 = distUrl + '/v' + version + '/node.lib'
+        , nodeLibUrl64 = distUrl + '/v' + version + '/x64/node.lib'
+
+      gyp.verbose('32-bit node.lib dir', dir32)
+      gyp.verbose('64-bit node.lib dir', dir64)
+      gyp.verbose('`node.lib` 32-bit url', nodeLibUrl32)
+      gyp.verbose('`node.lib` 64-bit url', nodeLibUrl64)
+
+      var async = 2
+      mkdir(dir32, function (err) {
+        if (err) return done(err)
+        gyp.verbose('streaming 32-bit node.lib to:', nodeLibPath32)
+
+        var req = download(nodeLibUrl32)
+        req.on('error', done)
+        req.on('response', function (res) {
+          if (res.statusCode !== 200) {
+            done(new Error(res.statusCode + ' status code downloading 32-bit node.lib'))
+          }
+        })
+        req.on('end', function () {
+          --async || done()
+        })
+
+        var ws = fs.createWriteStream(nodeLibPath32)
+        ws.on('error', cb)
+        req.pipe(ws)
+      })
+      mkdir(dir64, function (err) {
         if (err) return done(err)
-        mkdir(debugDir, function (err) {
-          if (err) return done(err)
-          // TODO: clean this mess up, written in a hastemode-9000
-          var badDownload = false
-          var res = download(nodeLibUrl, function (err, res) {
-            if (err || res.statusCode != 200) {
-              badDownload = true
-              done(err || new Error(res.statusCode + ' status code downloading node.lib'))
-            }
-          })
-          var releaseDirNodeLib = path.resolve(releaseDir, 'node.lib')
-            , debugDirNodeLib = path.resolve(debugDir, 'node.lib')
-            , rws = fs.createWriteStream(releaseDirNodeLib)
-            , dws = fs.createWriteStream(debugDirNodeLib)
-          gyp.verbose('streaming to', releaseDirNodeLib)
-          gyp.verbose('streaming to', debugDirNodeLib)
-          res.pipe(rws)
-          res.pipe(dws)
-          res.on('end', function () {
-            if (badDownload) return
-            done()
-          })
+        gyp.verbose('streaming 64-bit node.lib to:', nodeLibPath64)
+
+        var req = download(nodeLibUrl64)
+        req.on('error', done)
+        req.on('response', function (res) {
+          if (res.statusCode !== 200) {
+            done(new Error(res.statusCode + ' status code downloading 64-bit node.lib'))
+          }
         })
+        req.on('end', function () {
+          --async || done()
+        })
+
+        var ws = fs.createWriteStream(nodeLibPath64)
+        ws.on('error', cb)
+        req.pipe(ws)
       })
     }
 
index 6ecf1ba..64c4ef7 100644 (file)
@@ -7,18 +7,15 @@ exports.usage = 'Prints a listing of the currently installed node development fi
  * Module dependencies.
  */
 
-var fs = require('fs')
+var fs = require('graceful-fs')
   , path = require('path')
 
 function list (gyp, args, callback) {
 
-  // TODO: Make ~/.node-gyp configurable
-  var nodeGypDir = path.resolve(process.env.HOME, '.node-gyp')
-
-  gyp.verbose('using node-gyp dir', nodeGypDir)
+  gyp.verbose('using node-gyp dir', gyp.devDir)
 
   // readdir the node-gyp dir
-  fs.readdir(nodeGypDir, onreaddir)
+  fs.readdir(gyp.devDir, onreaddir)
 
   function onreaddir (err, versions) {
     if (err && err.code != 'ENOENT') {
index efa5343..1b014e6 100644 (file)
@@ -5,7 +5,7 @@ module.exports = exports = gyp
  * Module dependencies.
  */
 
-var fs = require('fs')
+var fs = require('graceful-fs')
   , path = require('path')
   , nopt = require('nopt')
   , child_process = require('child_process')
@@ -38,13 +38,24 @@ function gyp () {
 function Gyp () {
   var me = this
 
+  // set the dir where node-gyp dev files get installed
+  // TODO: make this configurable?
+  //       see: https://github.com/TooTallNate/node-gyp/issues/21
+  var homeDir = process.env.HOME || process.env.USERPROFILE
+  this.devDir = path.resolve(homeDir, '.node-gyp')
+
   this.commands = {}
+
   commands.forEach(function (command) {
     me.commands[command] = function (argv, callback) {
       me.verbose('command', command, argv)
       return require('./' + command)(me, argv, callback)
     }
   })
+
+  Object.keys(aliases).forEach(function (alias) {
+    me.commands[alias] = me.commands[aliases[alias]]
+  })
 }
 inherits(Gyp, EE)
 exports.Gyp = Gyp
@@ -56,9 +67,14 @@ var proto = Gyp.prototype
 
 proto.package = require('../package')
 
+/**
+ * nopt configuration definitions
+ */
+
 proto.configDefs = {
     help: Boolean    // everywhere
   , arch: String     // 'configure'
+  , directory: String // bin
   , msvs_version: String // 'configure'
   , debug: Boolean   // 'build'
   , ensure: Boolean  // 'install'
@@ -67,14 +83,33 @@ proto.configDefs = {
   , proxy: String // 'install'
 }
 
-proto.shorthands = {}
+/**
+ * nopt shorthands
+ */
+
+proto.shorthands = {
+    release: '--no-debug'
+  , C: '--directory'
+}
+
+/**
+ * Parses the given argv array and sets the 'opts',
+ * 'argv' and 'command' properties.
+ */
 
 proto.parseArgv = function parseOpts (argv) {
   this.opts = nopt(this.configDefs, this.shorthands, argv)
   this.argv = this.opts.argv.remain.slice()
 
-  var command = this.argv.shift()
-  this.command = aliases[command] || command
+  var commands = []
+  this.argv.slice().forEach(function (arg) {
+    if (arg in this.commands) {
+      this.argv.splice(this.argv.indexOf(arg), 1)
+      commands.push(arg)
+    }
+  }, this)
+
+  this.todo = commands
 }
 
 /**
@@ -100,6 +135,11 @@ proto.info = function info () {
   args.unshift('info')
   this.emit.apply(this, args)
 }
+proto.warn = function warn () {
+  var args = Array.prototype.slice.call(arguments)
+  args.unshift('warn')
+  this.emit.apply(this, args)
+}
 
 proto.verbose = function verbose () {
   var args = Array.prototype.slice.call(arguments)
index a194040..2844ec0 100644 (file)
@@ -14,10 +14,7 @@ var fs = require('fs')
 
 function remove (gyp, argv, callback) {
 
-  // TODO: Make ~/.node-gyp configurable
-  var nodeGypDir = path.resolve(process.env.HOME, '.node-gyp')
-
-  gyp.verbose('using node-gyp dir', nodeGypDir)
+  gyp.verbose('using node-gyp dir', gyp.devDir)
 
   // get the user-specified version to remove
   var v = argv[0] || gyp.opts.target
@@ -36,7 +33,7 @@ function remove (gyp, argv, callback) {
   // flatten the version Array into a String
   version = version.slice(1, 4).join('.')
 
-  var versionPath = path.resolve(nodeGypDir, version)
+  var versionPath = path.resolve(gyp.devDir, version)
   gyp.verbose('removing development files for version', version)
 
   // first check if its even installed
diff --git a/deps/npm/node_modules/node-gyp/lib/util/asyncEmit.js b/deps/npm/node_modules/node-gyp/lib/util/asyncEmit.js
deleted file mode 100644 (file)
index eb3d29f..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-/**
- * An `asyncEmit()` function that accepts an EventEmitter, an Array of args, and
- * a callback function. If the emitter listener function has an arity
- * > args.length then there is an assumed callback function on the emitter, which
- * means that it is doing some async work. We have to wait for the callbacks for
- * any async listener functions.
- *
- * It works like this:
- *
- *   var emitter = new EventEmitter
- *
- *   // this is an async listener
- *   emitter.on('something', function (val, done) {
- *     // val may be any number of input arguments
- *     setTimeout(function () {
- *       done()
- *     }, 1000)
- *   })
- *
- *   // this is a sync listener, no callback function
- *   emitter.on('something', function (val) {
- *
- *   })
- *
- *   asyncEmit(emitter, 'something', [ 5 ], function (err) {
- *     if (err) throw err
- *     console.log('DONE!')
- *   })
- */
-
-module.exports = asyncEmit
-function asyncEmit (emitter, eventName, args, callback) {
-
-  if (typeof args == 'function') {
-    callback = args
-    args = []
-  }
-
-  var async = emitter.listeners(eventName).filter(function (func) {
-    return func.length > args.length
-  }).length
-
-  var argv = [ eventName ].concat(args)
-
-  // callback function
-  argv.push(function (err) {
-    if (err && !callback.called) {
-      callback.called = true
-      callback(err)
-    }
-    --async || callback()
-  })
-
-  // no async listeners
-  if (async === 0) {
-    process.nextTick(callback)
-  }
-
-  return emitter.emit.apply(emitter, argv)
-}
diff --git a/deps/npm/node_modules/node-gyp/lib/util/hook.js b/deps/npm/node_modules/node-gyp/lib/util/hook.js
deleted file mode 100644 (file)
index d31cc2e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-
-/**
- * This is our "Hook" class that allows a script to hook into the lifecyle of the
- * "configure", "build" and "clean" commands. It's basically a hack into the
- * module.js file to allow custom hooks into the module-space, specifically to
- * make the global scope act as an EventEmitter.
- */
-
-var fs = require('fs')
-  , path = require('path')
-  , Module = require('module')
-  , EventEmitter = require('events').EventEmitter
-  , functions = Object.keys(EventEmitter.prototype).filter(function (k) {
-      return typeof EventEmitter.prototype[k] == 'function'
-    })
-  , boilerplate = functions.map(function (k) {
-      return 'var ' + k + ' = module.emitter.' + k + '.bind(module.emitter);'
-    }).join('')
-
-module.exports = createHook
-function createHook (filename, callback) {
-
-  var emitter = new EventEmitter
-
-  // first read the file contents
-  fs.readFile(filename, 'utf8', function (err, code) {
-    if (err) {
-      if (err.code == 'ENOENT') {
-        // hook file doesn't exist, oh well
-        callback(null, emitter)
-      } else {
-        callback(err)
-      }
-      return
-    }
-    // got a hook file, now execute it
-    var mod = new Module(filename)
-    mod.filename = filename
-    mod.paths = Module._nodeModulePaths(filename)
-    mod.emitter = emitter
-    try {
-      mod._compile(boilerplate + code, filename)
-    } catch (e) {
-      return callback(e)
-    }
-    callback(null, emitter)
-  })
-}
index 259382f..9352a0b 100644 (file)
@@ -41,8 +41,8 @@
   "dependencies": {},
   "optionalDependencies": {},
   "_engineSupported": true,
-  "_npmVersion": "1.1.13",
-  "_nodeVersion": "v0.7.7-pre",
+  "_npmVersion": "1.1.16",
+  "_nodeVersion": "v0.7.8-pre",
   "_defaultsLoaded": true,
   "_from": "ansi@0.0.x"
 }
index 952ea1b..83e88f6 100644 (file)
@@ -36,8 +36,8 @@
   "_id": "glob@3.1.9",
   "optionalDependencies": {},
   "_engineSupported": true,
-  "_npmVersion": "1.1.13",
-  "_nodeVersion": "v0.7.7-pre",
+  "_npmVersion": "1.1.16",
+  "_nodeVersion": "v0.7.8-pre",
   "_defaultsLoaded": true,
   "_from": "glob@3"
 }
index 3dc0457..1962859 100644 (file)
@@ -10,8 +10,8 @@
     "bindings",
     "gyp"
   ],
-  "version": "0.3.9",
-  "installVersion": 5,
+  "version": "0.4.1",
+  "installVersion": 7,
   "author": {
     "name": "Nathan Rajlich",
     "email": "nathan@tootallnate.net",
     "name": "isaacs",
     "email": "i@izs.me"
   },
-  "_id": "node-gyp@0.3.9",
+  "_id": "node-gyp@0.4.1",
   "devDependencies": {},
   "optionalDependencies": {},
   "_engineSupported": true,
-  "_npmVersion": "1.1.13",
-  "_nodeVersion": "v0.7.7-pre",
+  "_npmVersion": "1.1.16",
+  "_nodeVersion": "v0.7.8-pre",
   "_defaultsLoaded": true,
   "dist": {
-    "shasum": "78c01d4b662c55607e7220b8c8e2a1f25390474a"
+    "shasum": "05a017b115527b63fdec1321d0b5888bc5d7b04f"
   },
-  "_from": "node-gyp@~0.3.7"
+  "_from": "node-gyp@latest"
 }
diff --git a/deps/npm/node_modules/read/LICENCE b/deps/npm/node_modules/read/LICENCE
new file mode 100644 (file)
index 0000000..74489e2
--- /dev/null
@@ -0,0 +1,25 @@
+Copyright (c) Isaac Z. Schlueter
+All rights reserved.
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
index 246044b..ba2ef0a 100644 (file)
@@ -5,6 +5,14 @@ var buffer = ""
   , tty = require("tty")
   , StringDecoder = require("string_decoder").StringDecoder
 
+function raw (mode) {
+  try {
+    process.stdin.setRawMode(mode)
+  } catch (e) {
+    tty.setRawMode(mode)
+  }
+}
+
 function read (opts, cb) {
   if (!cb) cb = opts, opts = {}
 
@@ -25,7 +33,7 @@ function read (opts, cb) {
     cb = (function (cb) {
       var called = false
       var t = setTimeout(function () {
-        tty.setRawMode(false)
+        raw(false)
         process.stdout.write("\n")
         if (def) done(null, def)
         else done(new Error("timeout"))
@@ -109,7 +117,7 @@ function rawRead (def, timeout, delim, silent, num, cb) {
     , val = ""
     , decoder = new StringDecoder
 
-  tty.setRawMode(true)
+  raw(true)
   stdin.resume()
   stdin.on("error", cb)
   stdin.on("data", function D (c) {
@@ -122,7 +130,7 @@ function rawRead (def, timeout, delim, silent, num, cb) {
 
       case "\u0004": // EOF
       case delim:
-        tty.setRawMode(false)
+        raw(false)
         stdin.removeListener("data", D)
         stdin.removeListener("error", cb)
         val = val.trim() || def
@@ -131,7 +139,7 @@ function rawRead (def, timeout, delim, silent, num, cb) {
         return cb(null, val)
 
       case "\u0003": case "\0": // ^C or other signal abort
-        tty.setRawMode(false)
+        raw(false)
         stdin.removeListener("data", D)
         stdin.removeListener("error", cb)
         stdin.pause()
index bc05577..f206a71 100644 (file)
@@ -1,16 +1,28 @@
 {
   "name": "read",
-  "version": "0.0.1",
+  "version": "0.0.2",
   "main": "lib/read.js",
   "dependencies": {},
   "devDependencies": {},
   "engines": {
     "node": ">=0.6"
   },
-  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me",
+    "url": "http://blog.izs.me/"
+  },
   "description": "read(1) for node programs",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/read.git"
-  }
+  },
+  "license": "BSD",
+  "_id": "read@0.0.2",
+  "optionalDependencies": {},
+  "_engineSupported": true,
+  "_npmVersion": "1.1.15",
+  "_nodeVersion": "v0.7.7",
+  "_defaultsLoaded": true,
+  "_from": "read@0"
 }
index d7cdd1c..87be455 100644 (file)
@@ -10,7 +10,7 @@
     "install",
     "package.json"
   ],
-  "version": "1.1.15",
+  "version": "1.1.18",
   "preferGlobal": true,
   "config": {
     "publishtest": false
@@ -53,8 +53,8 @@
     "mkdirp": "0.3",
     "read": "0",
     "lru-cache": "1",
-    "node-gyp": "~0.3.7",
-    "fstream-npm": "0 >=0.0.4",
+    "node-gyp": "~0.4.1",
+    "fstream-npm": "0 >=0.0.5",
     "uid-number": "0",
     "archy": "0",
     "chownr": "0"
@@ -77,7 +77,6 @@
     "block-stream",
     "inherits",
     "mkdirp",
-    "fast-list",
     "read",
     "lru-cache",
     "node-gyp",
index b3c19a0..551bb1d 100755 (executable)
@@ -12,6 +12,7 @@ fs.readdir(api, done("api"))
 
 function done (which) { return function (er, docs) {
   if (er) throw er
+  docs.sort()
   if (which === "api") apidocs = docs
   else clidocs = docs