Olivier Melcher <olivier.melcher@gmail.com>
Ra'Shaun Stovall <rashaunstovall@gmail.com>
Rebecca Turner <me@re-becca.org> <turner@mikomi.org>
+Rebecca Turner <me@re-becca.org> <rebecca@npmjs.com>
Ryan Emery <seebees@gmail.com>
Sam Mikes <smikes@cubane.com>
Takaya Kobayashi <jigsaw@live.jp>
laiso <laiso@lai.so>
Matt Zorn <zornme@gmail.com>
Kyle Mitchell <kyle@kemitchell.com>
+Michael Hayes <mhayes@newrelic.com>
+Benjamin Coe <ben@npmjs.com>
+Jeremiah Senkpiel <fishrock123@rocketmail.com>
+Michael Klein <mischkl@users.noreply.github.com>
+Simen Bekkhus <sbekkhus91@gmail.com>
+Victor <victor.shih@gmail.com>
+thefourtheye <thechargingvolcano@gmail.com>
+Clay Carpenter <claycarpenter@gmail.com>
+bangbang93 <bangbang93@163.com>
+### v2.11.0 (2015-05-21):
+
+For the first time in a very long time, we've added new events to the life
+cycle used by `npm run-script`. Since running `npm version (major|minor|patch)`
+is typically the last thing many developers do before publishing their updated
+packages, it makes sense to add life cycle hooks to run tests or otherwise
+preflight the package before doing a full publish. Thanks, as always, to the
+indefatigable [@watilde](https://github.com/watilde) for yet another great
+usability improvement for npm!
+
+#### FEATURELETS
+
+* [`b07f7c7`](https://github.com/npm/npm/commit/b07f7c7c1e5021730b3c320f1b3a46e70f8a21ff)
+ [#7906](https://github.com/npm/npm/issues/7906)
+ Add new [`scripts`](https://github.com/npm/npm/blob/master/doc/misc/npm-scripts.md) to
+ allow you to run scripts before and after
+ the [`npm version`](https://github.com/npm/npm/blob/master/doc/cli/npm-version.md)
+ command has run. This makes it easy to, for instance, require that your
+ test suite passes before bumping the version by just adding `"preversion":
+ "npm test"` to the scripts section of your `package.json`.
+ ([@watilde](https://github.com/watilde))
+* [`8a46136`](https://github.com/npm/npm/commit/8a46136f42e416cbadb533bcf89d73d681ed421d)
+ [#8185](https://github.com/npm/npm/issues/8185)
+ When we get a "not found" error from the registry, we'll now check to see
+ if the package name you specified is invalid and if so, give you a better
+ error message. ([@thefourtheye](https://github.com/thefourtheye))
+
+#### BUG FIXES
+
+* [`9bcf573`](https://github.com/npm/npm/commit/9bcf5730bd0316f210dafea898afe9103849cea9)
+ [#8324](https://github.com/npm/npm/pull/8324) On Windows, when you've configured a
+ custom `node-gyp`, run it with node itself instead of using the default open action (which
+ is almost never what you want). ([@bangbang93](https://github.com/bangbang93))
+* [`1da9b04`](https://github.com/npm/npm/commit/1da9b0411d3416c7fca17d08cbbcfca7ae86e92d)
+ [#7195](https://github.com/npm/npm/issues/7195)
+ [#7260](https://github.com/npm/npm/issues/7260) `npm-registry-client@6.4.0`:
+ (Re-)allow publication of existing mixed-case packages (part 1).
+ ([@smikes](https://github.com/smikes))
+* [`e926783`](https://github.com/npm/npm/commit/e9267830ab261c751f12723e84d2458ae9238646)
+ [#7195](https://github.com/npm/npm/issues/7195)
+ [#7260](https://github.com/npm/npm/issues/7260)
+ `normalize-package-data@2.2.0`: (Re-)allow publication of existing mixed-case
+ packages (part 2). ([@smikes](https://github.com/smikes))
+
+#### DOCUMENTATION IMPROVEMENTS
+
+* [`f62ee05`](https://github.com/npm/npm/commit/f62ee05333b141539a8e851c620dd2e82ff06860)
+ [#8314](https://github.com/npm/npm/issues/8314) Update the README to warn
+ folks away from using the CLI's internal API. For the love of glob, just use a
+ child process to run the CLI! ([@claycarpenter](https://github.com/claycarpenter))
+* [`1093921`](https://github.com/npm/npm/commit/1093921c04db41ab46db24a170a634a4b2acd8d9)
+ [#8279](https://github.com/npm/npm/pull/8279)
+ Update the documentation to note that, yes, you can publish scoped packages to the
+ public registry now! ([@mantoni](https://github.com/mantoni))
+* [`f87cde5`](https://github.com/npm/npm/commit/f87cde5234a760d3e515ffdaacaed6f5b71dbf44)
+ [#8292](https://github.com/npm/npm/pull/8292)
+ Fix typo in an example and grammar in the description in
+ the [shrinkwrap documentation](https://github.com/npm/npm/blob/master/doc/cli/npm-shrinkwrap.md).
+ ([@vshih](https://github.com/vshih))
+* [`d3526ce`](https://github.com/npm/npm/commit/d3526ceb09a0c29fdb7d4124536ae09057d033e7)
+ Improve the formatting in
+ the [shrinkwrap documentation](https://github.com/npm/npm/blob/master/doc/cli/npm-shrinkwrap.md).
+ ([@othiym23](https://github.com/othiym23))
+* [`19fe6d2`](https://github.com/npm/npm/commit/19fe6d20883e28956ff916fe4dae42d73ee6195b)
+ [#8311](https://github.com/npm/npm/pull/8311)
+ Update [README.md](https://github.com/npm/npm#readme) to use syntax highlighting in
+ its code samples and bits of shell scripts. ([@SimenB](https://github.com/SimenB))
+
+#### DEPENDENCY UPDATES! ALWAYS AND FOREVER!
+
+* [`fc52160`](https://github.com/npm/npm/commit/fc52160d0223226fffe4166f42fdfd3b899b3c1e)
+ [#4700](https://github.com/npm/npm/issues/4700) [#5044](https://github.com/npm/npm/issues/5044)
+ `init-package-json@1.6.0`: Make entering an invalid version while running `npm init` give
+ you an immediate error and prompt you to correct it. ([@watilde](https://github.com/watilde))
+* [`738853e`](https://github.com/npm/npm/commit/738853eb1f55636476a2a410c2c04732eec9d51e)
+ [#7763](https://github.com/npm/npm/issues/7763) `fs-write-stream-atomic@1.0.3`: Fix a bug
+ where errors would not propagate, making error messages unhelpful.
+ ([@iarna](https://github.com/iarna))
+* [`6d74a2d`](https://github.com/npm/npm/commit/6d74a2d2ac7f92750cf6a2cfafae1af23b569098)
+ `npm-package-arg@4.0.1`: Fix tests on windows ([@Bacra](https://github.com)) and with
+ more recent `hosted-git-info`. ([@iarna](https://github.com/iarna))
+* [`50f7178`](https://github.com/npm/npm/commit/50f717852fbf713ef6cbc4e0a9ab42657decbbbd)
+ `hosted-git-info@2.1.4`: Correct spelling in its documentation.
+ ([@iarna](https://github.com/iarna))
+* [`d7956ca`](https://github.com/npm/npm/commit/d7956ca17c057d5383ff0d3fc5cf6ac2940b034d)
+ `glob@5.0.7`: Fix a bug where unusual error conditions could make
+ further use of the module fail. ([@isaacs](https://github.com/isaacs))
+* [`44f7d74`](https://github.com/npm/npm/commit/44f7d74c5d3181d37da7ea7949c86b344153f8d9)
+ `tap@1.1.0`: Update to the most recent tap to get a whole host of bug
+ fixes and integration with [coveralls](https://coveralls.io/).
+ ([@isaacs](https://github.com/isaacs))
+* [`c21e8a8`](https://github.com/npm/npm/commit/c21e8a8d94bcf0ad79dc583ddc53f8366d4813b3)
+ `nock@2.2.0` ([@othiym23](https://github.com/othiym23))
+
+#### LICENSE FILES FOR THE LICENSE GOD
+
+* Add missing ISC license file to package ([@kasicka](https://github.com/kasicka)):
+ * [`aa9908c`](https://github.com/npm/npm/commit/aa9908c20017729673b9d410b77f9a16b7aae8a4) `realize-package-specifier@3.0.1`
+ * [`23a3b1a`](https://github.com/npm/npm/commit/23a3b1a726b9176c70ce0ccf3cd9d25c54429bdf) `fs-vacuum@1.2.6`
+ * [`8e04bba`](https://github.com/npm/npm/commit/8e04bba830d4353d84751d21803cd127c96153a7) `dezalgo@1.0.2`
+ * [`50f7178`](https://github.com/npm/npm/commit/50f717852fbf713ef6cbc4e0a9ab42657decbbbd) `hosted-git-info@2.1.4`
+ * [`6a54917`](https://github.com/npm/npm/commit/6a54917fbd4df995495a95d4b548defd44b77c93) `write-file-atomic@1.1.2`
+ * [`971f92c`](https://github.com/npm/npm/commit/971f92c4a4e5514217d1e4db45d1ccf71a60ff19) `async-some@1.0.2`
+ * [`67b50b7`](https://github.com/npm/npm/commit/67b50b7667a42bb3340a660eb2e617e1a554d2d4) `normalize-git-url@1.0.1`
+
+#### SPDX LICENSE UPDATES
+
+* Switch license to
+ [BSD-2-Clause](http://spdx.org/licenses/BSD-2-Clause.html#licenseText) from
+ plain "BSD" ([@isaacs](https://github.com/isaacs)):
+ * [`efdb733`](https://github.com/npm/npm/commit/efdb73332eeedcad4c609796929070b62abb37ab) `npm-user-validate@0.1.2`
+ * [`e926783`](https://github.com/npm/npm/commit/e9267830ab261c751f12723e84d2458ae9238646) `normalize-package-data@2.2.0`
+* Switch license to [ISC](http://spdx.org/licenses/ISC.html#licenseText) from
+ [BSD](http://spdx.org/licenses/BSD-2-Clause.html#licenseText)
+ ([@isaacs](https://github.com/isaacs)):
+ * [`c300956`](https://github.com/npm/npm/commit/c3009565a964f0ead4ac4ab234b1a458e2365f17) `block-stream@0.0.8`
+ * [`1de1253`](https://github.com/npm/npm/commit/1de125355765fecd31e682ed0ff9d2edbeac0bb0) `lockfile@1.0.1`
+ * [`0d5698a`](https://github.com/npm/npm/commit/0d5698ab132e376c7aec93ae357c274932116220) `osenv@0.1.1`
+ * [`2e84921`](https://github.com/npm/npm/commit/2e84921474e1ffb18de9fce4616e73171fa8046d) `abbrev@1.0.6`
+ * [`872fac9`](https://github.com/npm/npm/commit/872fac9d10c11607e4d0348c08a683b84e64d30b) `chmodr@0.1.1`
+ * [`01eb7f6`](https://github.com/npm/npm/commit/01eb7f60acba584346ad8aae846657899f3b6887) `chownr@0.0.2`
+ * [`294336f`](https://github.com/npm/npm/commit/294336f0f31c7b9fe31a50075ed750db6db134d1) `read@1.0.6`
+ * [`ebdf6a1`](https://github.com/npm/npm/commit/ebdf6a14d17962cdb7128402c53b452f91d44ca7) `graceful-fs@3.0.7`
+* Switch license to [ISC](http://spdx.org/licenses/ISC.html#licenseText) from
+ [MIT](http://spdx.org/licenses/MIT.html#licenseText)
+ ([@isaacs](https://github.com/isaacs)):
+ * [`e5d237f`](https://github.com/npm/npm/commit/e5d237fc0f436dd2a89437ebf8a9632a2e35ccbe) `nopt@3.0.2`
+ * [`79fef14`](https://github.com/npm/npm/commit/79fef1421b78f044980f0d1bf0e97039b6992710) `rimraf@2.3.4`
+ * [`22527da`](https://github.com/npm/npm/commit/22527da4816e7c2746cdc0317c5fb4a85152d554) `minimatch@2.0.8`
+ * [`882ac87`](https://github.com/npm/npm/commit/882ac87a6c4123ca985d7ad4394ea5085e5b0ef5) `lru-cache@2.6.4`
+ * [`9d9d015`](https://github.com/npm/npm/commit/9d9d015a2e972f68664dda54fbb204db28b21ede) `npmlog@1.2.1`
+
### v2.10.1 (2015-05-14):
#### BUG FIXES & DOCUMENTATION TWEAKS
tag:
npm tag npm@$(PUBLISHTAG) latest
-authors:
- @bash scripts/update-authors.sh &&\
- git add AUTHORS &&\
- git commit -m "update AUTHORS" || true
-
-publish: authors link doc
+publish: link doc
@git push origin :v$(shell npm -v) 2>&1 || true
git clean -fd &&\
git push origin $(BRANCH) &&\
sandwich:
@[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || (echo "make it yourself" && exit 13)
-.PHONY: all latest install dev link doc clean uninstall test man doc-clean docclean release authors
+.PHONY: all latest install dev link doc clean uninstall test man doc-clean docclean release
Here's an example using curl:
- curl -L https://www.npmjs.com/install.sh | sh
+```sh
+curl -L https://www.npmjs.com/install.sh | sh
+```
### Slightly Fancier
You can set any npm configuration params with that script:
- npm_config_prefix=/some/path sh install.sh
+```sh
+npm_config_prefix=/some/path sh install.sh
+```
Or, you can run it in uber-debuggery mode:
- npm_debug=1 sh install.sh
+```sh
+npm_debug=1 sh install.sh
+```
### Even Fancier
So sad to see you go.
- sudo npm uninstall npm -g
-
+```sh
+sudo npm uninstall npm -g
+```
Or, if that fails,
- sudo make uninstall
+```sh
+sudo make uninstall
+```
## More Severe Uninstalling
To remove cruft left behind by npm 0.x, you can use the included
`clean-old.sh` script file. You can run it conveniently like this:
- npm explore npm -g -- sh scripts/clean-old.sh
+```sh
+npm explore npm -g -- sh scripts/clean-old.sh
+```
npm uses two configuration files, one for per-user configs, and another
for global (every-user) configs. You can view them by doing:
- npm config get userconfig # defaults to ~/.npmrc
- npm config get globalconfig # defaults to /usr/local/etc/npmrc
+```sh
+npm config get userconfig # defaults to ~/.npmrc
+npm config get globalconfig # defaults to /usr/local/etc/npmrc
+```
Uninstalling npm does not remove configuration files by default. You
must remove them yourself manually if you want them gone. Note that
## Using npm Programmatically
-If you would like to use npm programmatically, you can do that.
-It's not very well documented, but it *is* rather simple.
-
-Most of the time, unless you actually want to do all the things that
-npm does, you should try using one of npm's dependencies rather than
-using npm itself, if possible.
-
-Eventually, npm will be just a thin cli wrapper around the modules
-that it depends on, but for now, there are some things that you must
-use npm itself to do.
-
- var npm = require("npm")
- npm.load(myConfigObject, function (er) {
- if (er) return handlError(er)
- npm.commands.install(["some", "args"], function (er, data) {
- if (er) return commandFailed(er)
- // command succeeded, and data might have some info
- })
- npm.registry.log.on("log", function (message) { .... })
- })
+Although npm can be used programmatically, its API is meant for use by the CLI
+*only*, and no guarantees are made regarding its fitness for any other purpose.
+If you want to use npm to reliably perform some task, the safest thing to do is
+to invoke the desired `npm` command with appropriate arguments.
+
+The semantic version of npm refers to the CLI itself, rather than the
+underlying API. _The internal API is not guaranteed to remain stable even when
+npm's version indicates no breaking changes have been made according to
+semver._
+
+If you _still_ would like to use npm programmatically, it's _possible_. The API
+isn't very well documented, but it _is_ rather simple.
+
+Eventually, npm will be just a thin CLI wrapper around the modules that it
+depends on, but for now, there are some things that only the CLI can do. You
+should try using one of npm's dependencies first, and only use the API if what
+you're trying to do is only supported by npm itself.
+
+```javascript
+var npm = require("npm")
+npm.load(myConfigObject, function (er) {
+ if (er) return handlError(er)
+ npm.commands.install(["some", "args"], function (er, data) {
+ if (er) return commandFailed(er)
+ // command succeeded, and data might have some info
+ })
+ npm.registry.log.on("log", function (message) { .... })
+})
+```
The `load` function takes an object hash of the command-line configs.
The various `npm.commands.<cmd>` functions take an **array** of
if not defined npm_config_node_gyp (\r
node "%~dp0\..\..\node_modules\node-gyp\bin\node-gyp.js" %*\r
) else (\r
- %npm_config_node_gyp% %*\r
+ node %npm_config_node_gyp% %*
)\r
required if you want to use `npm install`.
By default, `npm install` recursively installs the target's
-dependencies (as specified in package.json), choosing the latest
+dependencies (as specified in `package.json`), choosing the latest
available version that satisfies the dependency's semver pattern. In
some situations, particularly when shipping software where each change
is tightly managed, it's desirable to fully specify each version of
each dependency recursively so that subsequent builds and deploys do
not inadvertently pick up newer versions of a dependency that satisfy
the semver pattern. Specifying specific semver patterns in each
-dependency's package.json would facilitate this, but that's not always
+dependency's `package.json` would facilitate this, but that's not always
possible or desirable, as when another author owns the npm package.
It's also possible to check dependencies directly into source control,
but that may be undesirable for other reasons.
and package C:
{
- "name": "C,
+ "name": "C",
"version": "0.0.1"
}
npm shrinkwrap
-This generates npm-shrinkwrap.json, which will look something like this:
+This generates `npm-shrinkwrap.json`, which will look something like this:
{
"name": "A",
The shrinkwrap command has locked down the dependencies based on
what's currently installed in node_modules. When `npm install`
-installs a package with a npm-shrinkwrap.json file in the package
-root, the shrinkwrap file (rather than package.json files) completely
+installs a package with an `npm-shrinkwrap.json` in the package
+root, the shrinkwrap file (rather than `package.json` files) completely
drives the installation of that package and all of its dependencies
(recursively). So now the author publishes A@0.1.0, and subsequent
installs of this package will use B@0.0.1 and C@0.0.1, regardless the
-dependencies and versions listed in A's, B's, and C's package.json
+dependencies and versions listed in A's, B's, and C's `package.json`
files.
Using a shrinkwrapped package is no different than using any other
package: you can `npm install` it by hand, or add a dependency to your
-package.json file and `npm install` it.
+`package.json` file and `npm install` it.
### Building shrinkwrapped packages
1. Run `npm install` in the package root to install the current
versions of all dependencies.
2. Validate that the package works as expected with these versions.
-3. Run `npm shrinkwrap`, add npm-shrinkwrap.json to git, and publish
+3. Run `npm shrinkwrap`, add `npm-shrinkwrap.json` to git, and publish
your package.
To add or update a dependency in a shrinkwrapped package:
1. Run `npm install` in the package root to install the current
versions of all dependencies.
2. Add or update dependencies. `npm install` each new or updated
- package individually and then update package.json. Note that they
+ package individually and then update `package.json`. Note that they
must be explicitly named in order to be installed: running `npm
install` with no arguments will merely reproduce the existing
shrinkwrap.
3. Validate that the package works as expected with the new
dependencies.
-4. Run `npm shrinkwrap`, commit the new npm-shrinkwrap.json, and
+4. Run `npm shrinkwrap`, commit the new `npm-shrinkwrap.json`, and
publish your package.
You can use npm-outdated(1) to view dependencies with newer versions
### Other Notes
-A shrinkwrap file must be consistent with the package's package.json
+A shrinkwrap file must be consistent with the package's `package.json`
file. `npm shrinkwrap` will fail if required dependencies are not
already installed, since that would result in a shrinkwrap that
wouldn't actually work. Similarly, the command will fail if there are
-extraneous packages (not referenced by package.json), since that would
-indicate that package.json is not correct.
+extraneous packages (not referenced by `package.json`), since that would
+indicate that `package.json` is not correct.
Since `npm shrinkwrap` is intended to lock down your dependencies for
production use, `devDependencies` will not be included unless you
Enter passphrase:
+If "preversion", "version", "postversion" in the "scripts" property of
+the package.json, it will execute by running `npm version`. preversion
+and version ware executed before bump the package version, postversion
+was executed after bump the package version. For example to run `npm version`
+after passed all test:
+
+ "scripts": { "preversion": "npm test" }
+
## CONFIGURATION
### git-tag-version
## SEE ALSO
* npm-init(1)
+* npm-run-script(1)
+* npm-scripts(7)
* package.json(5)
* semver(7)
* config(7)
## Why no namespaces?
npm has only one global namespace. If you want to namespace your own packages,
-you may: simply use the `-` character to separate the names. npm is a mostly
-anarchic system. There is not sufficient need to impose namespace rules on
-everyone.
+you may: simply use the `-` character to separate the names or use scoped
+packages. npm is a mostly anarchic system. There is not sufficient need to
+impose namespace rules on everyone.
As of 2.0, npm supports scoped packages, which allow you to publish a group of
related modules without worrying about name collisions.
scope by naming them as if they were files under the scope directory, e.g., by
setting `name` in `package.json` to `@npm/npm`.
-Scoped packages can coexist with public npm packages in a private npm registry.
-At present (2014-11-04) scoped packages may NOT be published to the public npm
-registry.
+Scoped packages are supported by the public npm registry. The npm client is
+backwards-compatible with un-scoped registries, so it can be used to work with
+scoped and un-scoped registries at the same time.
-Unscoped packages can only depend on other unscoped packages. Scoped packages
+Unscoped packages can only depend on other unscoped packages. Scoped packages
can depend on packages from their own scope, a different scope, or the public
registry (unscoped).
Run BEFORE the package is uninstalled.
* postuninstall:
Run AFTER the package is uninstalled.
+* preversion, version:
+ Run BEFORE bump the package version.
+* postversion:
+ Run AFTER bump the package version.
* pretest, test, posttest:
Run by the `npm test` command.
* prestop, stop, poststop:
<p>There's a pretty robust install script at
<a href="https://www.npmjs.com/install.sh">https://www.npmjs.com/install.sh</a>. You can download that and run it.</p>
<p>Here's an example using curl:</p>
-<pre><code>curl -L https://www.npmjs.com/install.sh | sh
-</code></pre><h3 id="slightly-fancier">Slightly Fancier</h3>
+<pre><code class="lang-sh">curl -L https://www.npmjs.com/install.sh | sh
+</code></pre>
+<h3 id="slightly-fancier">Slightly Fancier</h3>
<p>You can set any npm configuration params with that script:</p>
-<pre><code>npm_config_prefix=/some/path sh install.sh
-</code></pre><p>Or, you can run it in uber-debuggery mode:</p>
-<pre><code>npm_debug=1 sh install.sh
-</code></pre><h3 id="even-fancier">Even Fancier</h3>
+<pre><code class="lang-sh">npm_config_prefix=/some/path sh install.sh
+</code></pre>
+<p>Or, you can run it in uber-debuggery mode:</p>
+<pre><code class="lang-sh">npm_debug=1 sh install.sh
+</code></pre>
+<h3 id="even-fancier">Even Fancier</h3>
<p>Get the code with git. Use <code>make</code> to build the docs and do other stuff.
If you plan on hacking on npm, <code>make link</code> is your friend.</p>
<p>If you've got the npm source code, you can also semi-permanently set
<p>No.</p>
<h2 id="uninstalling">Uninstalling</h2>
<p>So sad to see you go.</p>
-<pre><code>sudo npm uninstall npm -g
-</code></pre><p>Or, if that fails,</p>
-<pre><code>sudo make uninstall
-</code></pre><h2 id="more-severe-uninstalling">More Severe Uninstalling</h2>
+<pre><code class="lang-sh">sudo npm uninstall npm -g
+</code></pre>
+<p>Or, if that fails,</p>
+<pre><code class="lang-sh">sudo make uninstall
+</code></pre>
+<h2 id="more-severe-uninstalling">More Severe Uninstalling</h2>
<p>Usually, the above instructions are sufficient. That will remove
npm, but leave behind anything you've installed.</p>
<p>If you would like to remove all the packages that you have installed,
remove them.</p>
<p>To remove cruft left behind by npm 0.x, you can use the included
<code>clean-old.sh</code> script file. You can run it conveniently like this:</p>
-<pre><code>npm explore npm -g -- sh scripts/clean-old.sh
-</code></pre><p>npm uses two configuration files, one for per-user configs, and another
+<pre><code class="lang-sh">npm explore npm -g -- sh scripts/clean-old.sh
+</code></pre>
+<p>npm uses two configuration files, one for per-user configs, and another
for global (every-user) configs. You can view them by doing:</p>
-<pre><code>npm config get userconfig # defaults to ~/.npmrc
+<pre><code class="lang-sh">npm config get userconfig # defaults to ~/.npmrc
npm config get globalconfig # defaults to /usr/local/etc/npmrc
-</code></pre><p>Uninstalling npm does not remove configuration files by default. You
+</code></pre>
+<p>Uninstalling npm does not remove configuration files by default. You
must remove them yourself manually if you want them gone. Note that
this means that future npm installs will not remember the settings that
you have chosen.</p>
<h2 id="using-npm-programmatically">Using npm Programmatically</h2>
-<p>If you would like to use npm programmatically, you can do that.
-It's not very well documented, but it <em>is</em> rather simple.</p>
-<p>Most of the time, unless you actually want to do all the things that
-npm does, you should try using one of npm's dependencies rather than
-using npm itself, if possible.</p>
-<p>Eventually, npm will be just a thin cli wrapper around the modules
-that it depends on, but for now, there are some things that you must
-use npm itself to do.</p>
-<pre><code>var npm = require("npm")
+<p>Although npm can be used programmatically, its API is meant for use by the CLI
+<em>only</em>, and no guarantees are made regarding its fitness for any other purpose.
+If you want to use npm to reliably perform some task, the safest thing to do is
+to invoke the desired <code>npm</code> command with appropriate arguments.</p>
+<p>The semantic version of npm refers to the CLI itself, rather than the
+underlying API. <em>The internal API is not guaranteed to remain stable even when
+npm's version indicates no breaking changes have been made according to
+semver.</em></p>
+<p>If you <em>still</em> would like to use npm programmatically, it's <em>possible</em>. The API
+isn't very well documented, but it <em>is</em> rather simple.</p>
+<p>Eventually, npm will be just a thin CLI wrapper around the modules that it
+depends on, but for now, there are some things that only the CLI can do. You
+should try using one of npm's dependencies first, and only use the API if what
+you're trying to do is only supported by npm itself.</p>
+<pre><code class="lang-javascript">var npm = require("npm")
npm.load(myConfigObject, function (er) {
if (er) return handlError(er)
npm.commands.install(["some", "args"], function (er, data) {
})
npm.registry.log.on("log", function (message) { .... })
})
-</code></pre><p>The <code>load</code> function takes an object hash of the command-line configs.
+</code></pre>
+<p>The <code>load</code> function takes an object hash of the command-line configs.
The various <code>npm.commands.<cmd></code> functions take an <strong>array</strong> of
positional argument <strong>strings</strong>. The last argument to any
<code>npm.commands.<cmd></code> function is a callback. Some commands take other
<p>If you have a complaint about a package in the public npm registry,
and cannot <a href="https://docs.npmjs.com/misc/disputes">resolve it with the package
owner</a>, please email
-<a href="mailto:support@npmjs.com">support@npmjs.com</a> and explain the situation.</p>
+<a href="mailto:support@npmjs.com">support@npmjs.com</a> and explain the situation.</p>
<p>Any data published to The npm Registry (including user account
information) may be removed or modified at the sole discretion of the
npm server administrators.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer"><a href="../doc/README.html">README</a> — npm@2.10.1</p>
+<p id="footer"><a href="../doc/README.html">README</a> — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-bin — npm@2.10.1</p>
+<p id="footer">npm-bin — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-bugs — npm@2.10.1</p>
+<p id="footer">npm-bugs — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-cache — npm@2.10.1</p>
+<p id="footer">npm-cache — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-commands — npm@2.10.1</p>
+<p id="footer">npm-commands — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-config — npm@2.10.1</p>
+<p id="footer">npm-config — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-deprecate — npm@2.10.1</p>
+<p id="footer">npm-deprecate — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-docs — npm@2.10.1</p>
+<p id="footer">npm-docs — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-edit — npm@2.10.1</p>
+<p id="footer">npm-edit — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-explore — npm@2.10.1</p>
+<p id="footer">npm-explore — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-help-search — npm@2.10.1</p>
+<p id="footer">npm-help-search — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-init — npm@2.10.1</p>
+<p id="footer">npm-init — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-install — npm@2.10.1</p>
+<p id="footer">npm-install — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-link — npm@2.10.1</p>
+<p id="footer">npm-link — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-load — npm@2.10.1</p>
+<p id="footer">npm-load — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-ls — npm@2.10.1</p>
+<p id="footer">npm-ls — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-outdated — npm@2.10.1</p>
+<p id="footer">npm-outdated — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-owner — npm@2.10.1</p>
+<p id="footer">npm-owner — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-pack — npm@2.10.1</p>
+<p id="footer">npm-pack — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-prefix — npm@2.10.1</p>
+<p id="footer">npm-prefix — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-prune — npm@2.10.1</p>
+<p id="footer">npm-prune — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-publish — npm@2.10.1</p>
+<p id="footer">npm-publish — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-rebuild — npm@2.10.1</p>
+<p id="footer">npm-rebuild — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-repo — npm@2.10.1</p>
+<p id="footer">npm-repo — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-restart — npm@2.10.1</p>
+<p id="footer">npm-restart — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-root — npm@2.10.1</p>
+<p id="footer">npm-root — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-run-script — npm@2.10.1</p>
+<p id="footer">npm-run-script — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-search — npm@2.10.1</p>
+<p id="footer">npm-search — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-shrinkwrap — npm@2.10.1</p>
+<p id="footer">npm-shrinkwrap — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-start — npm@2.10.1</p>
+<p id="footer">npm-start — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-stop — npm@2.10.1</p>
+<p id="footer">npm-stop — npm@2.11.0</p>
--- /dev/null
+<!doctype html>
+<html>
+ <title>npm-submodule</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/api/npm-submodule.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../api/npm-submodule.html">npm-submodule</a></h1> <p>Add a package as a git submodule</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.submodule(packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>For each package specified, npm will check if it has a git repository url
+in its package.json description then add it as a git submodule at
+<code>node_modules/<pkg name></code>.</p>
+<p>This is a convenience only. From then on, it's up to you to manage
+updates by using the appropriate git commands. npm will stubbornly
+refuse to update, modify, or remove anything with a <code>.git</code> subfolder
+in it.</p>
+<p>This command also does not install missing dependencies, if the package
+does not include them in its git repository. If <code>npm ls</code> reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do <code>npm explore <pkgname> -- npm install</code> to install the
+dependencies into the submodule folder.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li>npm help json</li>
+<li>git help submodule</li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18> </td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)"> </td><td style="width:40px;height:10px;background:#fff" colspan=4> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4> </td><td style="width:40px;height:10px;background:#fff" colspan=4> </td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)"> </td><td colspan=6 style="width:60px;height:10px;background:#fff"> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4> </td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2> </td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2> </td></tr>
+<tr><td style="width:10px;height:10px;background:#fff"> </td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
+</table>
+<p id="footer">npm-submodule — npm@1.4.28</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-tag — npm@2.10.1</p>
+<p id="footer">npm-tag — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-test — npm@2.10.1</p>
+<p id="footer">npm-test — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-uninstall — npm@2.10.1</p>
+<p id="footer">npm-uninstall — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-unpublish — npm@2.10.1</p>
+<p id="footer">npm-unpublish — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-update — npm@2.10.1</p>
+<p id="footer">npm-update — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-version — npm@2.10.1</p>
+<p id="footer">npm-version — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-view — npm@2.10.1</p>
+<p id="footer">npm-view — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-whoami — npm@2.10.1</p>
+<p id="footer">npm-whoami — npm@2.11.0</p>
npm.commands.install(["package"], cb)
})
</code></pre><h2 id="version">VERSION</h2>
-<p>2.10.1</p>
+<p>2.11.0</p>
<h2 id="description">DESCRIPTION</h2>
<p>This is the API documentation for npm.
To find documentation of the command line
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm — npm@2.10.1</p>
+<p id="footer">npm — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-access — npm@2.10.1</p>
+<p id="footer">npm-access — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-adduser — npm@2.10.1</p>
+<p id="footer">npm-adduser — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-bin — npm@2.10.1</p>
+<p id="footer">npm-bin — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-bugs — npm@2.10.1</p>
+<p id="footer">npm-bugs — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-build — npm@2.10.1</p>
+<p id="footer">npm-build — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-bundle — npm@2.10.1</p>
+<p id="footer">npm-bundle — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-cache — npm@2.10.1</p>
+<p id="footer">npm-cache — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-completion — npm@2.10.1</p>
+<p id="footer">npm-completion — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-config — npm@2.10.1</p>
+<p id="footer">npm-config — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-dedupe — npm@2.10.1</p>
+<p id="footer">npm-dedupe — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-deprecate — npm@2.10.1</p>
+<p id="footer">npm-deprecate — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-dist-tag — npm@2.10.1</p>
+<p id="footer">npm-dist-tag — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-docs — npm@2.10.1</p>
+<p id="footer">npm-docs — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-edit — npm@2.10.1</p>
+<p id="footer">npm-edit — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-explore — npm@2.10.1</p>
+<p id="footer">npm-explore — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-help-search — npm@2.10.1</p>
+<p id="footer">npm-help-search — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-help — npm@2.10.1</p>
+<p id="footer">npm-help — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-init — npm@2.10.1</p>
+<p id="footer">npm-init — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-install — npm@2.10.1</p>
+<p id="footer">npm-install — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-link — npm@2.10.1</p>
+<p id="footer">npm-link — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-logout — npm@2.10.1</p>
+<p id="footer">npm-logout — npm@2.11.0</p>
limit the results to only the paths to the packages named. Note that
nested packages will <em>also</em> show the paths to the specified packages.
For example, running <code>npm ls promzard</code> in npm's source tree will show:</p>
-<pre><code>npm@2.10.1 /path/to/npm
+<pre><code>npm@2.11.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
</code></pre><p>It will print out extraneous, missing, and invalid packages.</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-ls — npm@2.10.1</p>
+<p id="footer">npm-ls — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-outdated — npm@2.10.1</p>
+<p id="footer">npm-outdated — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-owner — npm@2.10.1</p>
+<p id="footer">npm-owner — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-pack — npm@2.10.1</p>
+<p id="footer">npm-pack — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-prefix — npm@2.10.1</p>
+<p id="footer">npm-prefix — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-prune — npm@2.10.1</p>
+<p id="footer">npm-prune — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-publish — npm@2.10.1</p>
+<p id="footer">npm-publish — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-rebuild — npm@2.10.1</p>
+<p id="footer">npm-rebuild — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-repo — npm@2.10.1</p>
+<p id="footer">npm-repo — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-restart — npm@2.10.1</p>
+<p id="footer">npm-restart — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-rm — npm@2.10.1</p>
+<p id="footer">npm-rm — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-root — npm@2.10.1</p>
+<p id="footer">npm-root — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-run-script — npm@2.10.1</p>
+<p id="footer">npm-run-script — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-search — npm@2.10.1</p>
+<p id="footer">npm-search — npm@2.11.0</p>
used when your package is installed. The <code>package.json</code> file is still
required if you want to use <code>npm install</code>.</p>
<p>By default, <code>npm install</code> recursively installs the target's
-dependencies (as specified in package.json), choosing the latest
+dependencies (as specified in <code>package.json</code>), choosing the latest
available version that satisfies the dependency's semver pattern. In
some situations, particularly when shipping software where each change
is tightly managed, it's desirable to fully specify each version of
each dependency recursively so that subsequent builds and deploys do
not inadvertently pick up newer versions of a dependency that satisfy
the semver pattern. Specifying specific semver patterns in each
-dependency's package.json would facilitate this, but that's not always
+dependency's <code>package.json</code> would facilitate this, but that's not always
possible or desirable, as when another author owns the npm package.
It's also possible to check dependencies directly into source control,
but that may be undesirable for other reasons.</p>
}
</code></pre><p>and package C:</p>
<pre><code>{
- "name": "C,
+ "name": "C",
"version": "0.0.1"
}
</code></pre><p>If these are the only versions of A, B, and C available in the
when B hasn't changed at all.</p>
<p>In this case, A's author can run</p>
<pre><code>npm shrinkwrap
-</code></pre><p>This generates npm-shrinkwrap.json, which will look something like this:</p>
+</code></pre><p>This generates <code>npm-shrinkwrap.json</code>, which will look something like this:</p>
<pre><code>{
"name": "A",
"version": "0.1.0",
}
</code></pre><p>The shrinkwrap command has locked down the dependencies based on
what's currently installed in node_modules. When <code>npm install</code>
-installs a package with a npm-shrinkwrap.json file in the package
-root, the shrinkwrap file (rather than package.json files) completely
+installs a package with an <code>npm-shrinkwrap.json</code> in the package
+root, the shrinkwrap file (rather than <code>package.json</code> files) completely
drives the installation of that package and all of its dependencies
(recursively). So now the author publishes A@0.1.0, and subsequent
installs of this package will use B@0.0.1 and C@0.0.1, regardless the
-dependencies and versions listed in A's, B's, and C's package.json
+dependencies and versions listed in A's, B's, and C's <code>package.json</code>
files.</p>
<h3 id="using-shrinkwrapped-packages">Using shrinkwrapped packages</h3>
<p>Using a shrinkwrapped package is no different than using any other
package: you can <code>npm install</code> it by hand, or add a dependency to your
-package.json file and <code>npm install</code> it.</p>
+<code>package.json</code> file and <code>npm install</code> it.</p>
<h3 id="building-shrinkwrapped-packages">Building shrinkwrapped packages</h3>
<p>To shrinkwrap an existing package:</p>
<ol>
<li>Run <code>npm install</code> in the package root to install the current
versions of all dependencies.</li>
<li>Validate that the package works as expected with these versions.</li>
-<li>Run <code>npm shrinkwrap</code>, add npm-shrinkwrap.json to git, and publish
+<li>Run <code>npm shrinkwrap</code>, add <code>npm-shrinkwrap.json</code> to git, and publish
your package.</li>
</ol>
<p>To add or update a dependency in a shrinkwrapped package:</p>
<li>Run <code>npm install</code> in the package root to install the current
versions of all dependencies.</li>
<li>Add or update dependencies. <code>npm install</code> each new or updated
-package individually and then update package.json. Note that they
+package individually and then update <code>package.json</code>. Note that they
must be explicitly named in order to be installed: running <code>npm
install</code> with no arguments will merely reproduce the existing
shrinkwrap.</li>
<li>Validate that the package works as expected with the new
dependencies.</li>
-<li>Run <code>npm shrinkwrap</code>, commit the new npm-shrinkwrap.json, and
+<li>Run <code>npm shrinkwrap</code>, commit the new <code>npm-shrinkwrap.json</code>, and
publish your package.</li>
</ol>
<p>You can use <a href="../cli/npm-outdated.html"><a href="../cli/npm-outdated.html">npm-outdated(1)</a></a> to view dependencies with newer versions
available.</p>
<h3 id="other-notes">Other Notes</h3>
-<p>A shrinkwrap file must be consistent with the package's package.json
+<p>A shrinkwrap file must be consistent with the package's <code>package.json</code>
file. <code>npm shrinkwrap</code> will fail if required dependencies are not
already installed, since that would result in a shrinkwrap that
wouldn't actually work. Similarly, the command will fail if there are
-extraneous packages (not referenced by package.json), since that would
-indicate that package.json is not correct.</p>
+extraneous packages (not referenced by <code>package.json</code>), since that would
+indicate that <code>package.json</code> is not correct.</p>
<p>Since <code>npm shrinkwrap</code> is intended to lock down your dependencies for
production use, <code>devDependencies</code> will not be included unless you
explicitly set the <code>--dev</code> flag when you run <code>npm shrinkwrap</code>. If
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-shrinkwrap — npm@2.10.1</p>
+<p id="footer">npm-shrinkwrap — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-star — npm@2.10.1</p>
+<p id="footer">npm-star — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-stars — npm@2.10.1</p>
+<p id="footer">npm-stars — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-start — npm@2.10.1</p>
+<p id="footer">npm-start — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-stop — npm@2.10.1</p>
+<p id="footer">npm-stop — npm@2.11.0</p>
--- /dev/null
+<!doctype html>
+<html>
+ <title>npm-submodule</title>
+ <meta http-equiv="content-type" value="text/html;utf-8">
+ <link rel="stylesheet" type="text/css" href="../../static/style.css">
+ <link rel="canonical" href="https://www.npmjs.org/doc/cli/npm-submodule.html">
+ <script async=true src="../../static/toc.js"></script>
+
+ <body>
+ <div id="wrapper">
+
+<h1><a href="../cli/npm-submodule.html">npm-submodule</a></h1> <p>Add a package as a git submodule</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm submodule <pkg>
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>If the specified package has a git repository url in its package.json
+description, then this command will add it as a git submodule at
+<code>node_modules/<pkg name></code>.</p>
+<p>This is a convenience only. From then on, it's up to you to manage
+updates by using the appropriate git commands. npm will stubbornly
+refuse to update, modify, or remove anything with a <code>.git</code> subfolder
+in it.</p>
+<p>This command also does not install missing dependencies, if the package
+does not include them in its git repository. If <code>npm ls</code> reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do <code>npm explore <pkgname> -- npm install</code> to install the
+dependencies into the submodule folder.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li>git help submodule</li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18> </td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)"> </td><td style="width:40px;height:10px;background:#fff" colspan=4> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4> </td><td style="width:40px;height:10px;background:#fff" colspan=4> </td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)"> </td><td colspan=6 style="width:60px;height:10px;background:#fff"> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4> </td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2> </td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2> </td></tr>
+<tr><td style="width:10px;height:10px;background:#fff"> </td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
+</table>
+<p id="footer">npm-submodule — npm@1.4.28</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-tag — npm@2.10.1</p>
+<p id="footer">npm-tag — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-test — npm@2.10.1</p>
+<p id="footer">npm-test — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-uninstall — npm@2.10.1</p>
+<p id="footer">npm-uninstall — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-unpublish — npm@2.10.1</p>
+<p id="footer">npm-unpublish — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-update — npm@2.10.1</p>
+<p id="footer">npm-update — npm@2.11.0</p>
2048-bit RSA key, ID 6C481CF6, created 2010-08-31
Enter passphrase:
+</code></pre><p>If "preversion", "version", "postversion" in the "scripts" property of
+the package.json, it will execute by running <code>npm version</code>. preversion
+and version ware executed before bump the package version, postversion
+was executed after bump the package version. For example to run <code>npm version</code>
+after passed all test:</p>
+<pre><code>"scripts": { "preversion": "npm test" }
</code></pre><h2 id="configuration">CONFIGURATION</h2>
<h3 id="git-tag-version">git-tag-version</h3>
<ul>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-init.html"><a href="../cli/npm-init.html">npm-init(1)</a></a></li>
+<li><a href="../cli/npm-run-script.html"><a href="../cli/npm-run-script.html">npm-run-script(1)</a></a></li>
+<li><a href="../misc/npm-scripts.html"><a href="../misc/npm-scripts.html">npm-scripts(7)</a></a></li>
<li><a href="../files/package.json.html"><a href="../files/package.json.html">package.json(5)</a></a></li>
<li><a href="../misc/semver.html"><a href="../misc/semver.html">semver(7)</a></a></li>
<li><a href="../misc/config.html"><a href="../misc/config.html">config(7)</a></a></li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-version — npm@2.10.1</p>
+<p id="footer">npm-version — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-view — npm@2.10.1</p>
+<p id="footer">npm-view — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-whoami — npm@2.10.1</p>
+<p id="footer">npm-whoami — npm@2.11.0</p>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm <command> [args]
</code></pre><h2 id="version">VERSION</h2>
-<p>2.10.1</p>
+<p>2.11.0</p>
<h2 id="description">DESCRIPTION</h2>
<p>npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
the issues list or ask on the mailing list.</p>
<ul>
<li><a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
-<li><a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li>
+<li><a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li>
</ul>
<h2 id="bugs">BUGS</h2>
<p>When you find issues, please report them:</p>
<li>web:
<a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
<li>email:
-<a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li>
+<a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li>
</ul>
<p>Be sure to include <em>all</em> of the output from the npm command that didn't work
as expected. The <code>npm-debug.log</code> file is also helpful to provide.</p>
<p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
<a href="https://github.com/isaacs/">isaacs</a> ::
<a href="http://twitter.com/izs">@izs</a> ::
-<a href="mailto:i@izs.me">i@izs.me</a></p>
+<a href="mailto:i@izs.me">i@izs.me</a></p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-help.html"><a href="../cli/npm-help.html">npm-help(1)</a></a></li>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm — npm@2.10.1</p>
+<p id="footer">npm — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-folders — npm@2.10.1</p>
+<p id="footer">npm-folders — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-global — npm@2.10.1</p>
+<p id="footer">npm-global — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-json — npm@2.10.1</p>
+<p id="footer">npm-json — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npmrc — npm@2.10.1</p>
+<p id="footer">npmrc — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">package.json — npm@2.10.1</p>
+<p id="footer">package.json — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">index — npm@2.10.1</p>
+<p id="footer">index — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-coding-style — npm@2.10.1</p>
+<p id="footer">npm-coding-style — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-config — npm@2.10.1</p>
+<p id="footer">npm-config — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-developers — npm@2.10.1</p>
+<p id="footer">npm-developers — npm@2.11.0</p>
<h2 id="synopsis">SYNOPSIS</h2>
<ol>
<li>Get the author email with <code>npm owner ls <pkgname></code></li>
-<li>Email the author, CC <a href="mailto:support@npmjs.com">support@npmjs.com</a></li>
+<li>Email the author, CC <a href="mailto:support@npmjs.com">support@npmjs.com</a></li>
<li>After a few weeks, if there's no resolution, we'll sort it out.</li>
</ol>
<p>Don't squat on package names. Publish code or move out of the way.</p>
owner (Bob).</li>
<li>Joe emails Bob, explaining the situation <strong>as respectfully as
possible</strong>, and what he would like to do with the module name. He
-adds the npm support staff <a href="mailto:support@npmjs.com">support@npmjs.com</a> to the CC list of
+adds the npm support staff <a href="mailto:support@npmjs.com">support@npmjs.com</a> to the CC list of
the email. Mention in the email that Bob can run <code>npm owner add
joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
<li>After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can't come to any sort of resolution, email support
-<a href="mailto:support@npmjs.com">support@npmjs.com</a> and we'll sort it out. ("Reasonable" is
+<a href="mailto:support@npmjs.com">support@npmjs.com</a> and we'll sort it out. ("Reasonable" is
usually at least 4 weeks, but extra time is allowed around common
holidays.)</li>
</ol>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-disputes — npm@2.10.1</p>
+<p id="footer">npm-disputes — npm@2.11.0</p>
<p>To check if the registry is down, open up
<a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a> in a web browser. This will also tell
you if you are just unable to access the internet for some reason.</p>
-<p>If the registry IS down, let us know by emailing <a href="mailto:support@npmjs.com">support@npmjs.com</a>
+<p>If the registry IS down, let us know by emailing <a href="mailto:support@npmjs.com">support@npmjs.com</a>
or posting an issue at <a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a>. If it's
down for the world (and not just on your local network) then we're
probably already being pinged about it.</p>
on Freenode IRC.</p>
<h2 id="why-no-namespaces-">Why no namespaces?</h2>
<p>npm has only one global namespace. If you want to namespace your own packages,
-you may: simply use the <code>-</code> character to separate the names. npm is a mostly
-anarchic system. There is not sufficient need to impose namespace rules on
-everyone.</p>
+you may: simply use the <code>-</code> character to separate the names or use scoped
+packages. npm is a mostly anarchic system. There is not sufficient need to
+impose namespace rules on everyone.</p>
<p>As of 2.0, npm supports scoped packages, which allow you to publish a group of
related modules without worrying about name collisions.</p>
<p>Every npm user owns the scope associated with their username. For example, the
user named <code>npm</code> owns the scope <code>@npm</code>. Scoped packages are published inside a
scope by naming them as if they were files under the scope directory, e.g., by
setting <code>name</code> in <code>package.json</code> to <code>@npm/npm</code>.</p>
-<p>Scoped packages can coexist with public npm packages in a private npm registry.
-At present (2014-11-04) scoped packages may NOT be published to the public npm
-registry.</p>
-<p>Unscoped packages can only depend on other unscoped packages. Scoped packages
+<p>Scoped packages are supported by the public npm registry. The npm client is
+backwards-compatible with un-scoped registries, so it can be used to work with
+scoped and un-scoped registries at the same time.</p>
+<p>Unscoped packages can only depend on other unscoped packages. Scoped packages
can depend on packages from their own scope, a different scope, or the public
registry (unscoped).</p>
<p>For the current documentation of scoped packages, see
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-faq — npm@2.10.1</p>
+<p id="footer">npm-faq — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-index — npm@2.10.1</p>
+<p id="footer">npm-index — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-registry — npm@2.10.1</p>
+<p id="footer">npm-registry — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-scope — npm@2.10.1</p>
+<p id="footer">npm-scope — npm@2.11.0</p>
Run BEFORE the package is uninstalled.</li>
<li>postuninstall:
Run AFTER the package is uninstalled.</li>
+<li>preversion, version:
+Run BEFORE bump the package version.</li>
+<li>postversion:
+Run AFTER bump the package version.</li>
<li>pretest, test, posttest:
Run by the <code>npm test</code> command.</li>
<li>prestop, stop, poststop:
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">npm-scripts — npm@2.10.1</p>
+<p id="footer">npm-scripts — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">removing-npm — npm@2.10.1</p>
+<p id="footer">removing-npm — npm@2.11.0</p>
<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
<tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
</table>
-<p id="footer">semver — npm@2.10.1</p>
+<p id="footer">semver — npm@2.11.0</p>
<p>There's a pretty robust install script at
<a href="https://www.npmjs.com/install.sh">https://www.npmjs.com/install.sh</a>. You can download that and run it.</p>
<p>Here's an example using curl:</p>
-<pre><code>curl -L https://www.npmjs.com/install.sh | sh
-</code></pre><h3 id="slightly-fancier">Slightly Fancier</h3>
+<pre><code class="lang-sh">curl -L https://www.npmjs.com/install.sh | sh
+</code></pre>
+<h3 id="slightly-fancier">Slightly Fancier</h3>
<p>You can set any npm configuration params with that script:</p>
-<pre><code>npm_config_prefix=/some/path sh install.sh
-</code></pre><p>Or, you can run it in uber-debuggery mode:</p>
-<pre><code>npm_debug=1 sh install.sh
-</code></pre><h3 id="even-fancier">Even Fancier</h3>
+<pre><code class="lang-sh">npm_config_prefix=/some/path sh install.sh
+</code></pre>
+<p>Or, you can run it in uber-debuggery mode:</p>
+<pre><code class="lang-sh">npm_debug=1 sh install.sh
+</code></pre>
+<h3 id="even-fancier">Even Fancier</h3>
<p>Get the code with git. Use <code>make</code> to build the docs and do other stuff.
If you plan on hacking on npm, <code>make link</code> is your friend.</p>
<p>If you've got the npm source code, you can also semi-permanently set
<p>No.</p>
<h2 id="uninstalling">Uninstalling</h2>
<p>So sad to see you go.</p>
-<pre><code>sudo npm uninstall npm -g
-</code></pre><p>Or, if that fails,</p>
-<pre><code>sudo make uninstall
-</code></pre><h2 id="more-severe-uninstalling">More Severe Uninstalling</h2>
+<pre><code class="lang-sh">sudo npm uninstall npm -g
+</code></pre>
+<p>Or, if that fails,</p>
+<pre><code class="lang-sh">sudo make uninstall
+</code></pre>
+<h2 id="more-severe-uninstalling">More Severe Uninstalling</h2>
<p>Usually, the above instructions are sufficient. That will remove
npm, but leave behind anything you've installed.</p>
<p>If you would like to remove all the packages that you have installed,
remove them.</p>
<p>To remove cruft left behind by npm 0.x, you can use the included
<code>clean-old.sh</code> script file. You can run it conveniently like this:</p>
-<pre><code>npm explore npm -g -- sh scripts/clean-old.sh
-</code></pre><p>npm uses two configuration files, one for per-user configs, and another
+<pre><code class="lang-sh">npm explore npm -g -- sh scripts/clean-old.sh
+</code></pre>
+<p>npm uses two configuration files, one for per-user configs, and another
for global (every-user) configs. You can view them by doing:</p>
-<pre><code>npm config get userconfig # defaults to ~/.npmrc
+<pre><code class="lang-sh">npm config get userconfig # defaults to ~/.npmrc
npm config get globalconfig # defaults to /usr/local/etc/npmrc
-</code></pre><p>Uninstalling npm does not remove configuration files by default. You
+</code></pre>
+<p>Uninstalling npm does not remove configuration files by default. You
must remove them yourself manually if you want them gone. Note that
this means that future npm installs will not remember the settings that
you have chosen.</p>
<h2 id="using-npm-programmatically">Using npm Programmatically</h2>
-<p>If you would like to use npm programmatically, you can do that.
-It's not very well documented, but it <em>is</em> rather simple.</p>
-<p>Most of the time, unless you actually want to do all the things that
-npm does, you should try using one of npm's dependencies rather than
-using npm itself, if possible.</p>
-<p>Eventually, npm will be just a thin cli wrapper around the modules
-that it depends on, but for now, there are some things that you must
-use npm itself to do.</p>
-<pre><code>var npm = require("npm")
+<p>Although npm can be used programmatically, its API is meant for use by the CLI
+<em>only</em>, and no guarantees are made regarding its fitness for any other purpose.
+If you want to use npm to reliably perform some task, the safest thing to do is
+to invoke the desired <code>npm</code> command with appropriate arguments.</p>
+<p>The semantic version of npm refers to the CLI itself, rather than the
+underlying API. <em>The internal API is not guaranteed to remain stable even when
+npm's version indicates no breaking changes have been made according to
+semver.</em></p>
+<p>If you <em>still</em> would like to use npm programmatically, it's <em>possible</em>. The API
+isn't very well documented, but it <em>is</em> rather simple.</p>
+<p>Eventually, npm will be just a thin CLI wrapper around the modules that it
+depends on, but for now, there are some things that only the CLI can do. You
+should try using one of npm's dependencies first, and only use the API if what
+you're trying to do is only supported by npm itself.</p>
+<pre><code class="lang-javascript">var npm = require("npm")
npm.load(myConfigObject, function (er) {
if (er) return handlError(er)
npm.commands.install(["some", "args"], function (er, data) {
})
npm.registry.log.on("log", function (message) { .... })
})
-</code></pre><p>The <code>load</code> function takes an object hash of the command-line configs.
+</code></pre>
+<p>The <code>load</code> function takes an object hash of the command-line configs.
The various <code>npm.commands.<cmd></code> functions take an <strong>array</strong> of
positional argument <strong>strings</strong>. The last argument to any
<code>npm.commands.<cmd></code> function is a callback. Some commands take other
<p>If you have a complaint about a package in the public npm registry,
and cannot <a href="https://docs.npmjs.com/misc/disputes">resolve it with the package
owner</a>, please email
-<a href="mailto:support@npmjs.com">support@npmjs.com</a> and explain the situation.</p>
+<a href="mailto:support@npmjs.com">support@npmjs.com</a> and explain the situation.</p>
<p>Any data published to The npm Registry (including user account
information) may be removed or modified at the sole discretion of the
npm server administrators.</p>
--- /dev/null
+<h1><a href="../api/npm-submodule.html">npm-submodule</a></h1> <p>Add a package as a git submodule</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm.commands.submodule(packages, callback)
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>For each package specified, npm will check if it has a git repository url
+in its package.json description then add it as a git submodule at
+<code>node_modules/<pkg name></code>.</p>
+<p>This is a convenience only. From then on, it's up to you to manage
+updates by using the appropriate git commands. npm will stubbornly
+refuse to update, modify, or remove anything with a <code>.git</code> subfolder
+in it.</p>
+<p>This command also does not install missing dependencies, if the package
+does not include them in its git repository. If <code>npm ls</code> reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do <code>npm explore <pkgname> -- npm install</code> to install the
+dependencies into the submodule folder.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li>npm help json</li>
+<li>git help submodule</li>
+</ul>
npm.commands.install(["package"], cb)
})
</code></pre><h2 id="version">VERSION</h2>
-<p>2.10.1</p>
+<p>2.11.0</p>
<h2 id="description">DESCRIPTION</h2>
<p>This is the API documentation for npm.
To find documentation of the command line
limit the results to only the paths to the packages named. Note that
nested packages will <em>also</em> show the paths to the specified packages.
For example, running <code>npm ls promzard</code> in npm's source tree will show:</p>
-<pre><code>npm@2.10.1 /path/to/npm
+<pre><code>npm@2.11.0 /path/to/npm
└─┬ init-package-json@0.0.4
└── promzard@0.1.5
</code></pre><p>It will print out extraneous, missing, and invalid packages.</p>
used when your package is installed. The <code>package.json</code> file is still
required if you want to use <code>npm install</code>.</p>
<p>By default, <code>npm install</code> recursively installs the target's
-dependencies (as specified in package.json), choosing the latest
+dependencies (as specified in <code>package.json</code>), choosing the latest
available version that satisfies the dependency's semver pattern. In
some situations, particularly when shipping software where each change
is tightly managed, it's desirable to fully specify each version of
each dependency recursively so that subsequent builds and deploys do
not inadvertently pick up newer versions of a dependency that satisfy
the semver pattern. Specifying specific semver patterns in each
-dependency's package.json would facilitate this, but that's not always
+dependency's <code>package.json</code> would facilitate this, but that's not always
possible or desirable, as when another author owns the npm package.
It's also possible to check dependencies directly into source control,
but that may be undesirable for other reasons.</p>
}
</code></pre><p>and package C:</p>
<pre><code>{
- "name": "C,
+ "name": "C",
"version": "0.0.1"
}
</code></pre><p>If these are the only versions of A, B, and C available in the
when B hasn't changed at all.</p>
<p>In this case, A's author can run</p>
<pre><code>npm shrinkwrap
-</code></pre><p>This generates npm-shrinkwrap.json, which will look something like this:</p>
+</code></pre><p>This generates <code>npm-shrinkwrap.json</code>, which will look something like this:</p>
<pre><code>{
"name": "A",
"version": "0.1.0",
}
</code></pre><p>The shrinkwrap command has locked down the dependencies based on
what's currently installed in node_modules. When <code>npm install</code>
-installs a package with a npm-shrinkwrap.json file in the package
-root, the shrinkwrap file (rather than package.json files) completely
+installs a package with an <code>npm-shrinkwrap.json</code> in the package
+root, the shrinkwrap file (rather than <code>package.json</code> files) completely
drives the installation of that package and all of its dependencies
(recursively). So now the author publishes A@0.1.0, and subsequent
installs of this package will use B@0.0.1 and C@0.0.1, regardless the
-dependencies and versions listed in A's, B's, and C's package.json
+dependencies and versions listed in A's, B's, and C's <code>package.json</code>
files.</p>
<h3 id="using-shrinkwrapped-packages">Using shrinkwrapped packages</h3>
<p>Using a shrinkwrapped package is no different than using any other
package: you can <code>npm install</code> it by hand, or add a dependency to your
-package.json file and <code>npm install</code> it.</p>
+<code>package.json</code> file and <code>npm install</code> it.</p>
<h3 id="building-shrinkwrapped-packages">Building shrinkwrapped packages</h3>
<p>To shrinkwrap an existing package:</p>
<ol>
<li>Run <code>npm install</code> in the package root to install the current
versions of all dependencies.</li>
<li>Validate that the package works as expected with these versions.</li>
-<li>Run <code>npm shrinkwrap</code>, add npm-shrinkwrap.json to git, and publish
+<li>Run <code>npm shrinkwrap</code>, add <code>npm-shrinkwrap.json</code> to git, and publish
your package.</li>
</ol>
<p>To add or update a dependency in a shrinkwrapped package:</p>
<li>Run <code>npm install</code> in the package root to install the current
versions of all dependencies.</li>
<li>Add or update dependencies. <code>npm install</code> each new or updated
-package individually and then update package.json. Note that they
+package individually and then update <code>package.json</code>. Note that they
must be explicitly named in order to be installed: running <code>npm
install</code> with no arguments will merely reproduce the existing
shrinkwrap.</li>
<li>Validate that the package works as expected with the new
dependencies.</li>
-<li>Run <code>npm shrinkwrap</code>, commit the new npm-shrinkwrap.json, and
+<li>Run <code>npm shrinkwrap</code>, commit the new <code>npm-shrinkwrap.json</code>, and
publish your package.</li>
</ol>
<p>You can use <a href="../cli/npm-outdated.html">npm-outdated(1)</a> to view dependencies with newer versions
available.</p>
<h3 id="other-notes">Other Notes</h3>
-<p>A shrinkwrap file must be consistent with the package's package.json
+<p>A shrinkwrap file must be consistent with the package's <code>package.json</code>
file. <code>npm shrinkwrap</code> will fail if required dependencies are not
already installed, since that would result in a shrinkwrap that
wouldn't actually work. Similarly, the command will fail if there are
-extraneous packages (not referenced by package.json), since that would
-indicate that package.json is not correct.</p>
+extraneous packages (not referenced by <code>package.json</code>), since that would
+indicate that <code>package.json</code> is not correct.</p>
<p>Since <code>npm shrinkwrap</code> is intended to lock down your dependencies for
production use, <code>devDependencies</code> will not be included unless you
explicitly set the <code>--dev</code> flag when you run <code>npm shrinkwrap</code>. If
--- /dev/null
+<h1><a href="../cli/npm-submodule.html">npm-submodule</a></h1> <p>Add a package as a git submodule</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm submodule <pkg>
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>If the specified package has a git repository url in its package.json
+description, then this command will add it as a git submodule at
+<code>node_modules/<pkg name></code>.</p>
+<p>This is a convenience only. From then on, it's up to you to manage
+updates by using the appropriate git commands. npm will stubbornly
+refuse to update, modify, or remove anything with a <code>.git</code> subfolder
+in it.</p>
+<p>This command also does not install missing dependencies, if the package
+does not include them in its git repository. If <code>npm ls</code> reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do <code>npm explore <pkgname> -- npm install</code> to install the
+dependencies into the submodule folder.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../files/package.json.html">package.json(5)</a></li>
+<li>git help submodule</li>
+</ul>
2048-bit RSA key, ID 6C481CF6, created 2010-08-31
Enter passphrase:
+</code></pre><p>If "preversion", "version", "postversion" in the "scripts" property of
+the package.json, it will execute by running <code>npm version</code>. preversion
+and version ware executed before bump the package version, postversion
+was executed after bump the package version. For example to run <code>npm version</code>
+after passed all test:</p>
+<pre><code>"scripts": { "preversion": "npm test" }
</code></pre><h2 id="configuration">CONFIGURATION</h2>
<h3 id="git-tag-version">git-tag-version</h3>
<ul>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-init.html">npm-init(1)</a></li>
+<li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li>
+<li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li>
<li><a href="../files/package.json.html">package.json(5)</a></li>
<li><a href="../misc/semver.html">semver(7)</a></li>
<li><a href="../misc/config.html">config(7)</a></li>
<h2 id="synopsis">SYNOPSIS</h2>
<pre><code>npm <command> [args]
</code></pre><h2 id="version">VERSION</h2>
-<p>2.10.1</p>
+<p>2.11.0</p>
<h2 id="description">DESCRIPTION</h2>
<p>npm is the package manager for the Node JavaScript platform. It puts
modules in place so that node can find them, and manages dependency
the issues list or ask on the mailing list.</p>
<ul>
<li><a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
-<li><a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li>
+<li><a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li>
</ul>
<h2 id="bugs">BUGS</h2>
<p>When you find issues, please report them:</p>
<li>web:
<a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
<li>email:
-<a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li>
+<a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li>
</ul>
<p>Be sure to include <em>all</em> of the output from the npm command that didn't work
as expected. The <code>npm-debug.log</code> file is also helpful to provide.</p>
<p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
<a href="https://github.com/isaacs/">isaacs</a> ::
<a href="http://twitter.com/izs">@izs</a> ::
-<a href="mailto:i@izs.me">i@izs.me</a></p>
+<a href="mailto:i@izs.me">i@izs.me</a></p>
<h2 id="see-also">SEE ALSO</h2>
<ul>
<li><a href="../cli/npm-help.html">npm-help(1)</a></li>
<h2 id="synopsis">SYNOPSIS</h2>
<ol>
<li>Get the author email with <code>npm owner ls <pkgname></code></li>
-<li>Email the author, CC <a href="mailto:support@npmjs.com">support@npmjs.com</a></li>
+<li>Email the author, CC <a href="mailto:support@npmjs.com">support@npmjs.com</a></li>
<li>After a few weeks, if there's no resolution, we'll sort it out.</li>
</ol>
<p>Don't squat on package names. Publish code or move out of the way.</p>
owner (Bob).</li>
<li>Joe emails Bob, explaining the situation <strong>as respectfully as
possible</strong>, and what he would like to do with the module name. He
-adds the npm support staff <a href="mailto:support@npmjs.com">support@npmjs.com</a> to the CC list of
+adds the npm support staff <a href="mailto:support@npmjs.com">support@npmjs.com</a> to the CC list of
the email. Mention in the email that Bob can run <code>npm owner add
joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
<li>After a reasonable amount of time, if Bob has not responded, or if
Bob and Joe can't come to any sort of resolution, email support
-<a href="mailto:support@npmjs.com">support@npmjs.com</a> and we'll sort it out. ("Reasonable" is
+<a href="mailto:support@npmjs.com">support@npmjs.com</a> and we'll sort it out. ("Reasonable" is
usually at least 4 weeks, but extra time is allowed around common
holidays.)</li>
</ol>
<p>To check if the registry is down, open up
<a href="https://registry.npmjs.org/">https://registry.npmjs.org/</a> in a web browser. This will also tell
you if you are just unable to access the internet for some reason.</p>
-<p>If the registry IS down, let us know by emailing <a href="mailto:support@npmjs.com">support@npmjs.com</a>
+<p>If the registry IS down, let us know by emailing <a href="mailto:support@npmjs.com">support@npmjs.com</a>
or posting an issue at <a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a>. If it's
down for the world (and not just on your local network) then we're
probably already being pinged about it.</p>
on Freenode IRC.</p>
<h2 id="why-no-namespaces-">Why no namespaces?</h2>
<p>npm has only one global namespace. If you want to namespace your own packages,
-you may: simply use the <code>-</code> character to separate the names. npm is a mostly
-anarchic system. There is not sufficient need to impose namespace rules on
-everyone.</p>
+you may: simply use the <code>-</code> character to separate the names or use scoped
+packages. npm is a mostly anarchic system. There is not sufficient need to
+impose namespace rules on everyone.</p>
<p>As of 2.0, npm supports scoped packages, which allow you to publish a group of
related modules without worrying about name collisions.</p>
<p>Every npm user owns the scope associated with their username. For example, the
user named <code>npm</code> owns the scope <code>@npm</code>. Scoped packages are published inside a
scope by naming them as if they were files under the scope directory, e.g., by
setting <code>name</code> in <code>package.json</code> to <code>@npm/npm</code>.</p>
-<p>Scoped packages can coexist with public npm packages in a private npm registry.
-At present (2014-11-04) scoped packages may NOT be published to the public npm
-registry.</p>
-<p>Unscoped packages can only depend on other unscoped packages. Scoped packages
+<p>Scoped packages are supported by the public npm registry. The npm client is
+backwards-compatible with un-scoped registries, so it can be used to work with
+scoped and un-scoped registries at the same time.</p>
+<p>Unscoped packages can only depend on other unscoped packages. Scoped packages
can depend on packages from their own scope, a different scope, or the public
registry (unscoped).</p>
<p>For the current documentation of scoped packages, see
Run BEFORE the package is uninstalled.</li>
<li>postuninstall:
Run AFTER the package is uninstalled.</li>
+<li>preversion, version:
+Run BEFORE bump the package version.</li>
+<li>postversion:
+Run AFTER bump the package version.</li>
<li>pretest, test, posttest:
Run by the <code>npm test</code> command.</li>
<li>prestop, stop, poststop:
, rollbacks = npm.rollbacks
, chain = require("slide").chain
, writeStream = require("fs-write-stream-atomic")
+ , nameValidator = require("validate-npm-package-name")
process.on("exit", function (code) {
case "E404":
var msg = [er.message]
if (er.pkgid && er.pkgid !== "-") {
- msg.push("", "'"+er.pkgid+"' is not in the npm registry."
- ,"You should bug the author to publish it (or use the name yourself!)")
+ msg.push("", "'" + er.pkgid + "' is not in the npm registry.")
+
+ var valResult = nameValidator(er.pkgid)
+
+ if (valResult.validForNewPackages) {
+ msg.push("You should bug the author to publish it (or use the name yourself!)")
+ } else {
+ msg.push("Your package name is not valid, because", "")
+
+ var errorsArray = (valResult.errors || []).concat(valResult.warnings || [])
+ errorsArray.forEach(function(item, idx) {
+ msg.push(" " + (idx + 1) + ". " + item)
+ })
+ }
+
if (er.parent) {
msg.push("It was specified as a dependency of '"+er.parent+"'")
}
, npm = require("./npm.js")
, git = require("./utils/git.js")
, assert = require("assert")
+ , lifecycle = require("./utils/lifecycle.js")
version.usage = "npm version [<newversion> | major | minor | patch | prerelease | preminor | premajor ]\n"
+ "\n(run in package dir)\n"
var packagePath = path.join(npm.localPrefix, "package.json")
fs.readFile(packagePath, function (er, data) {
- function cb (er) {
- if (!er && !silent) console.log("v" + data.version)
- cb_(er)
- }
-
if (data) data = data.toString()
try {
data = JSON.parse(data)
if (data.version === newVersion) return cb_(new Error("Version not changed"))
data.version = newVersion
- checkGit(function (er, hasGit) {
- if (er) return cb_(er)
+ chain([
+ [lifecycle, data, "preversion"]
+ , [version_, data, silent]
+ , [lifecycle, data, "version"]
+ , [lifecycle, data, "postversion"] ]
+ , cb_)
+ })
+}
+
+function version_ (data, silent, cb_) {
+ function cb (er) {
+ if (!er && !silent) console.log("v" + data.version)
+ cb_(er)
+ }
- write(data, "package.json", function (er) {
- if (er) return cb_(er)
+ checkGit(function (er, hasGit) {
+ if (er) return cb(new Error(er))
- updateShrinkwrap(newVersion, function (er, hasShrinkwrap) {
- if (er || !hasGit) return cb(er)
+ write(data, "package.json", function (er) {
+ if (er) return cb(new Error(er))
- commit(data.version, hasShrinkwrap, cb)
- })
+ updateShrinkwrap(data.version, function (er, hasShrinkwrap) {
+ if (er || !hasGit) return cb(er)
+ commit(data.version, hasShrinkwrap, cb)
})
})
})
you have chosen\.
.SH Using npm Programmatically
.P
-If you would like to use npm programmatically, you can do that\.
-It's not very well documented, but it \fIis\fR rather simple\.
-.P
-Most of the time, unless you actually want to do all the things that
-npm does, you should try using one of npm's dependencies rather than
-using npm itself, if possible\.
-.P
-Eventually, npm will be just a thin cli wrapper around the modules
-that it depends on, but for now, there are some things that you must
-use npm itself to do\.
+Although npm can be used programmatically, its API is meant for use by the CLI
+\fIonly\fR, and no guarantees are made regarding its fitness for any other purpose\.
+If you want to use npm to reliably perform some task, the safest thing to do is
+to invoke the desired \fBnpm\fR command with appropriate arguments\.
+.P
+The semantic version of npm refers to the CLI itself, rather than the
+underlying API\. \fIThe internal API is not guaranteed to remain stable even when
+npm's version indicates no breaking changes have been made according to
+semver\.\fR
+.P
+If you \fIstill\fR would like to use npm programmatically, it's \fIpossible\fR\|\. The API
+isn't very well documented, but it \fIis\fR rather simple\.
+.P
+Eventually, npm will be just a thin CLI wrapper around the modules that it
+depends on, but for now, there are some things that only the CLI can do\. You
+should try using one of npm's dependencies first, and only use the API if what
+you're trying to do is only supported by npm itself\.
.P
.RS 2
.nf
.P
.RS 2
.nf
-npm@2.10.1 /path/to/npm
+npm@2.11.0 /path/to/npm
└─┬ init\-package\-json@0\.0\.4
└── promzard@0\.1\.5
.fi
required if you want to use \fBnpm install\fR\|\.
.P
By default, \fBnpm install\fR recursively installs the target's
-dependencies (as specified in package\.json), choosing the latest
+dependencies (as specified in \fBpackage\.json\fR), choosing the latest
available version that satisfies the dependency's semver pattern\. In
some situations, particularly when shipping software where each change
is tightly managed, it's desirable to fully specify each version of
each dependency recursively so that subsequent builds and deploys do
not inadvertently pick up newer versions of a dependency that satisfy
the semver pattern\. Specifying specific semver patterns in each
-dependency's package\.json would facilitate this, but that's not always
+dependency's \fBpackage\.json\fR would facilitate this, but that's not always
possible or desirable, as when another author owns the npm package\.
It's also possible to check dependencies directly into source control,
but that may be undesirable for other reasons\.
.RS 2
.nf
{
- "name": "C,
+ "name": "C",
"version": "0\.0\.1"
}
.fi
.fi
.RE
.P
-This generates npm\-shrinkwrap\.json, which will look something like this:
+This generates \fBnpm\-shrinkwrap\.json\fR, which will look something like this:
.P
.RS 2
.nf
.P
The shrinkwrap command has locked down the dependencies based on
what's currently installed in node_modules\. When \fBnpm install\fR
-installs a package with a npm\-shrinkwrap\.json file in the package
-root, the shrinkwrap file (rather than package\.json files) completely
+installs a package with an \fBnpm\-shrinkwrap\.json\fR in the package
+root, the shrinkwrap file (rather than \fBpackage\.json\fR files) completely
drives the installation of that package and all of its dependencies
(recursively)\. So now the author publishes A@0\.1\.0, and subsequent
installs of this package will use B@0\.0\.1 and C@0\.0\.1, regardless the
-dependencies and versions listed in A's, B's, and C's package\.json
+dependencies and versions listed in A's, B's, and C's \fBpackage\.json\fR
files\.
.SS Using shrinkwrapped packages
.P
Using a shrinkwrapped package is no different than using any other
package: you can \fBnpm install\fR it by hand, or add a dependency to your
-package\.json file and \fBnpm install\fR it\.
+\fBpackage\.json\fR file and \fBnpm install\fR it\.
.SS Building shrinkwrapped packages
.P
To shrinkwrap an existing package:
.IP 2. 3
Validate that the package works as expected with these versions\.
.IP 3. 3
-Run \fBnpm shrinkwrap\fR, add npm\-shrinkwrap\.json to git, and publish
+Run \fBnpm shrinkwrap\fR, add \fBnpm\-shrinkwrap\.json\fR to git, and publish
your package\.
.RE
versions of all dependencies\.
.IP 2. 3
Add or update dependencies\. \fBnpm install\fR each new or updated
-package individually and then update package\.json\. Note that they
+package individually and then update \fBpackage\.json\fR\|\. Note that they
must be explicitly named in order to be installed: running \fBnpm
install\fR with no arguments will merely reproduce the existing
shrinkwrap\.
Validate that the package works as expected with the new
dependencies\.
.IP 4. 3
-Run \fBnpm shrinkwrap\fR, commit the new npm\-shrinkwrap\.json, and
+Run \fBnpm shrinkwrap\fR, commit the new \fBnpm\-shrinkwrap\.json\fR, and
publish your package\.
.RE
available\.
.SS Other Notes
.P
-A shrinkwrap file must be consistent with the package's package\.json
+A shrinkwrap file must be consistent with the package's \fBpackage\.json\fR
file\. \fBnpm shrinkwrap\fR will fail if required dependencies are not
already installed, since that would result in a shrinkwrap that
wouldn't actually work\. Similarly, the command will fail if there are
-extraneous packages (not referenced by package\.json), since that would
-indicate that package\.json is not correct\.
+extraneous packages (not referenced by \fBpackage\.json\fR), since that would
+indicate that \fBpackage\.json\fR is not correct\.
.P
Since \fBnpm shrinkwrap\fR is intended to lock down your dependencies for
production use, \fBdevDependencies\fR will not be included unless you
--- /dev/null
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SUBMODULE" "1" "September 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-submodule\fR \-\- Add a package as a git submodule
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm submodule <pkg>
+.
+.fi
+.
+.SH "DESCRIPTION"
+If the specified package has a git repository url in its package\.json
+description, then this command will add it as a git submodule at \fBnode_modules/<pkg name>\fR\|\.
+.
+.P
+This is a convenience only\. From then on, it\'s up to you to manage
+updates by using the appropriate git commands\. npm will stubbornly
+refuse to update, modify, or remove anything with a \fB\|\.git\fR subfolder
+in it\.
+.
+.P
+This command also does not install missing dependencies, if the package
+does not include them in its git repository\. If \fBnpm ls\fR reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do \fBnpm explore <pkgname> \-\- npm install\fR to install the
+dependencies into the submodule folder\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help 5 package\.json
+.
+.IP "\(bu" 4
+git help submodule
+.
+.IP "" 0
Enter passphrase:
.fi
.RE
+.P
+If "preversion", "version", "postversion" in the "scripts" property of
+the package\.json, it will execute by running \fBnpm version\fR\|\. preversion
+and version ware executed before bump the package version, postversion
+was executed after bump the package version\. For example to run \fBnpm version\fR
+after passed all test:
+.P
+.RS 2
+.nf
+"scripts": { "preversion": "npm test" }
+.fi
+.RE
.SH CONFIGURATION
.SS git\-tag\-version
.RS 0
.IP \(bu 2
npm help init
.IP \(bu 2
+npm help run\-script
+.IP \(bu 2
+npm help 7 scripts
+.IP \(bu 2
npm help 5 package\.json
.IP \(bu 2
npm help 7 semver
.RE
.SH VERSION
.P
-2.10.1
+2.11.0
.SH DESCRIPTION
.P
npm is the package manager for the Node JavaScript platform\. It puts
--- /dev/null
+.\" Generated with Ronnjs 0.3.8
+.\" http://github.com/kapouer/ronnjs/
+.
+.TH "NPM\-SUBMODULE" "3" "September 2014" "" ""
+.
+.SH "NAME"
+\fBnpm-submodule\fR \-\- Add a package as a git submodule
+.
+.SH "SYNOPSIS"
+.
+.nf
+npm\.commands\.submodule(packages, callback)
+.
+.fi
+.
+.SH "DESCRIPTION"
+For each package specified, npm will check if it has a git repository url
+in its package\.json description then add it as a git submodule at \fBnode_modules/<pkg name>\fR\|\.
+.
+.P
+This is a convenience only\. From then on, it\'s up to you to manage
+updates by using the appropriate git commands\. npm will stubbornly
+refuse to update, modify, or remove anything with a \fB\|\.git\fR subfolder
+in it\.
+.
+.P
+This command also does not install missing dependencies, if the package
+does not include them in its git repository\. If \fBnpm ls\fR reports that
+things are missing, you can either install, link, or submodule them yourself,
+or you can do \fBnpm explore <pkgname> \-\- npm install\fR to install the
+dependencies into the submodule folder\.
+.
+.SH "SEE ALSO"
+.
+.IP "\(bu" 4
+npm help json
+.
+.IP "\(bu" 4
+git help submodule
+.
+.IP "" 0
.RE
.SH VERSION
.P
-2.10.1
+2.11.0
.SH DESCRIPTION
.P
This is the API documentation for npm\.
.SH Why no namespaces?
.P
npm has only one global namespace\. If you want to namespace your own packages,
-you may: simply use the \fB\-\fR character to separate the names\. npm is a mostly
-anarchic system\. There is not sufficient need to impose namespace rules on
-everyone\.
+you may: simply use the \fB\-\fR character to separate the names or use scoped
+packages\. npm is a mostly anarchic system\. There is not sufficient need to
+impose namespace rules on everyone\.
.P
As of 2\.0, npm supports scoped packages, which allow you to publish a group of
related modules without worrying about name collisions\.
scope by naming them as if they were files under the scope directory, e\.g\., by
setting \fBname\fR in \fBpackage\.json\fR to \fB@npm/npm\fR\|\.
.P
-Scoped packages can coexist with public npm packages in a private npm registry\.
-At present (2014\-11\-04) scoped packages may NOT be published to the public npm
-registry\.
+Scoped packages are supported by the public npm registry\. The npm client is
+backwards\-compatible with un\-scoped registries, so it can be used to work with
+scoped and un\-scoped registries at the same time\.
.P
-Unscoped packages can only depend on other unscoped packages\. Scoped packages
+Unscoped packages can only depend on other unscoped packages\. Scoped packages
can depend on packages from their own scope, a different scope, or the public
registry (unscoped)\.
.P
postuninstall:
Run AFTER the package is uninstalled\.
.IP \(bu 2
+preversion, version:
+Run BEFORE bump the package version\.
+.IP \(bu 2
+postversion:
+Run AFTER bump the package version\.
+.IP \(bu 2
pretest, test, posttest:
Run by the \fBnpm test\fR command\.
.IP \(bu 2
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC License
-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:
+Copyright (c) Isaac Z. Schlueter and Contributors
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
"name": "abbrev",
- "version": "1.0.5",
+ "version": "1.0.6",
"description": "Like ruby's abbrev module, but in js",
"author": {
"name": "Isaac Z. Schlueter",
},
"repository": {
"type": "git",
- "url": "http://github.com/isaacs/abbrev-js"
- },
- "license": {
- "type": "MIT",
- "url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE"
+ "url": "git+ssh://git@github.com/isaacs/abbrev-js.git"
},
+ "license": "ISC",
+ "gitHead": "648a6735d9c5a7a04885e3ada49eed4db36181c2",
"bugs": {
"url": "https://github.com/isaacs/abbrev-js/issues"
},
- "homepage": "https://github.com/isaacs/abbrev-js",
- "_id": "abbrev@1.0.5",
- "_shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03",
- "_from": "abbrev@latest",
- "_npmVersion": "1.4.7",
+ "homepage": "https://github.com/isaacs/abbrev-js#readme",
+ "_id": "abbrev@1.0.6",
+ "_shasum": "b6d632b859b3fa2d6f7e4b195472461b9e32dc30",
+ "_from": "abbrev@1.0.6",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
"_npmUser": {
"name": "isaacs",
- "email": "i@izs.me"
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "b6d632b859b3fa2d6f7e4b195472461b9e32dc30",
+ "tarball": "http://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz"
},
"maintainers": [
{
"email": "i@izs.me"
}
],
- "dist": {
- "shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03",
- "tarball": "http://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
- },
"directories": {},
- "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
+ "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz"
}
--- /dev/null
+Copyright (c) 2014-2015, Forrest L Norvell
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
{
"name": "async-some",
- "version": "1.0.1",
+ "version": "1.0.2",
"description": "short-circuited, asynchronous version of Array.protototype.some",
"main": "some.js",
"scripts": {
},
"repository": {
"type": "git",
- "url": "https://github.com/othiym23/async-some.git"
+ "url": "git+https://github.com/othiym23/async-some.git"
},
"keywords": [
"async",
},
"homepage": "https://github.com/othiym23/async-some",
"dependencies": {
- "dezalgo": "^1.0.0"
+ "dezalgo": "^1.0.2"
},
"devDependencies": {
- "tap": "^0.4.11"
- },
- "gitHead": "e73d6d1fbc03cca5a0d54f456f39bab294a4c7b7",
- "_id": "async-some@1.0.1",
- "_shasum": "8b54f08d46f0f9babc72ea9d646c245d23a4d9e5",
- "_from": "async-some@>=1.0.1-0 <2.0.0-0",
- "_npmVersion": "1.5.0-pre",
- "_npmUser": {
- "name": "othiym23",
- "email": "ogd@aoaioxxysz.net"
- },
- "maintainers": [
- {
- "name": "othiym23",
- "email": "ogd@aoaioxxysz.net"
- }
- ],
- "dist": {
- "shasum": "8b54f08d46f0f9babc72ea9d646c245d23a4d9e5",
- "tarball": "http://registry.npmjs.org/async-some/-/async-some-1.0.1.tgz"
- },
- "directories": {},
- "_resolved": "https://registry.npmjs.org/async-some/-/async-some-1.0.1.tgz",
- "readme": "ERROR: No README data found!"
+ "tap": "^1.1.0"
+ },
+ "readme": "# some\n\nShort-circuited async Array.prototype.some implementation.\n\nSerially evaluates a list of values from a JS array or arraylike\nagainst an asynchronous predicate, terminating on the first truthy\nvalue. If the predicate encounters an error, pass it to the completion\ncallback. Otherwise, pass the truthy value passed by the predicate, or\n`false` if no truthy value was passed.\n\nIs\n[Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)-proof,\nbrowser-safe, and pretty efficient.\n\n## Usage\n\n```javascript\nvar some = require(\"async-some\");\nvar resolve = require(\"path\").resolve;\nvar stat = require(\"fs\").stat;\nvar readFileSync = require(\"fs\").readFileSync;\n\nsome([\"apple\", \"seaweed\", \"ham\", \"quince\"], porkDetector, function (error, match) {\n if (error) return console.error(error);\n\n if (match) return console.dir(JSON.parse(readFileSync(match)));\n\n console.error(\"time to buy more Sporkle™!\");\n});\n\nvar PREFIX = resolve(__dirname, \"../pork_store\");\nfunction porkDetector(value, cb) {\n var path = resolve(PREFIX, value + \".json\");\n stat(path, function (er, stat) {\n if (er) {\n if (er.code === \"ENOENT\") return cb(null, false);\n\n return cb(er);\n }\n\n cb(er, path);\n });\n}\n```\n\n### some(list, test, callback)\n\n* `list` {Object} An arraylike (either an Array or the arguments arraylike) to\n be checked.\n* `test` {Function} The predicate against which the elements of `list` will be\n tested. Takes two parameters:\n * `element` {any} The element of the list to be tested.\n * `callback` {Function} The continuation to be called once the test is\n complete. Takes (again) two values:\n * `error` {Error} Any errors that the predicate encountered.\n * `value` {any} A truthy value. A non-falsy result terminates checking the\n entire list.\n* `callback` {Function} The callback to invoke when either a value has been\n found or the entire input list has been processed with no result. Is invoked\n with the traditional two parameters:\n * `error` {Error} Errors that were encountered during the evaluation of some().\n * `match` {any} Value successfully matched by `test`, if any.\n",
+ "readmeFilename": "README.md",
+ "gitHead": "3a5086ad54739c48b2bbf073f23bcc95658199e3",
+ "_id": "async-some@1.0.2",
+ "_shasum": "4d8a81620d5958791b5b98f802d3207776e95509",
+ "_from": "async-some@>=1.0.2 <1.1.0"
}
--- /dev/null
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
},
"name": "block-stream",
"description": "a stream of blocks",
- "version": "0.0.7",
+ "version": "0.0.8",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/block-stream.git"
"scripts": {
"test": "tap test/"
},
- "license": "BSD",
- "readme": "# block-stream\n\nA stream of blocks.\n\nWrite data into it, and it'll output data in buffer blocks the size you\nspecify, padding with zeroes if necessary.\n\n```javascript\nvar block = new BlockStream(512)\nfs.createReadStream(\"some-file\").pipe(block)\nblock.pipe(fs.createWriteStream(\"block-file\"))\n```\n\nWhen `.end()` or `.flush()` is called, it'll pad the block with zeroes.\n",
- "readmeFilename": "README.md",
+ "license": "ISC",
+ "gitHead": "b35520314f4763af0788d65a846bb43d9c0a8f02",
"bugs": {
"url": "https://github.com/isaacs/block-stream/issues"
},
- "_id": "block-stream@0.0.7",
- "_from": "block-stream@latest"
+ "homepage": "https://github.com/isaacs/block-stream#readme",
+ "_id": "block-stream@0.0.8",
+ "_shasum": "0688f46da2bbf9cff0c4f68225a0cb95cbe8a46b",
+ "_from": "block-stream@0.0.8",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "0688f46da2bbf9cff0c4f68225a0cb95cbe8a46b",
+ "tarball": "http://registry.npmjs.org/block-stream/-/block-stream-0.0.8.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.8.tgz"
}
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+The ISC License
-The BSD License
+Copyright (c) Isaac Z. Schlueter and Contributors
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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 AUTHOR 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 AUTHOR 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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
},
"name": "chmodr",
"description": "like `chmod -R`",
- "version": "0.1.0",
+ "version": "0.1.1",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/chmodr.git"
"scripts": {
"test": "tap test/*.js"
},
- "license": "BSD",
- "readme": "Like `chmod -R`.\n\nTakes the same arguments as `fs.chmod()`\n",
- "readmeFilename": "README.md",
- "_id": "chmodr@0.1.0",
- "_from": "chmodr@latest"
+ "license": "ISC",
+ "gitHead": "2f301476bc6fc93e47d2ba2e3ab0409f0d0c15ba",
+ "bugs": {
+ "url": "https://github.com/isaacs/chmodr/issues"
+ },
+ "homepage": "https://github.com/isaacs/chmodr#readme",
+ "_id": "chmodr@0.1.1",
+ "_shasum": "115c8f9ec62be3ef019085782c9448e471560261",
+ "_from": "chmodr@0.1.1",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "115c8f9ec62be3ef019085782c9448e471560261",
+ "tarball": "http://registry.npmjs.org/chmodr/-/chmodr-0.1.1.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/chmodr/-/chmodr-0.1.1.tgz"
}
--- /dev/null
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
},
"name": "chownr",
"description": "like `chown -R`",
- "version": "0.0.1",
+ "version": "0.0.2",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/chownr.git"
"scripts": {
"test": "tap test/*.js"
},
- "license": "BSD",
+ "license": "ISC",
+ "gitHead": "3cafeb70b2c343e893f710750406b3909ec537cb",
+ "bugs": {
+ "url": "https://github.com/isaacs/chownr/issues"
+ },
+ "homepage": "https://github.com/isaacs/chownr#readme",
+ "_id": "chownr@0.0.2",
+ "_shasum": "2f9aebf746f90808ce00607b72ba73b41604c485",
+ "_from": "chownr@0.0.2",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
"_npmUser": {
"name": "isaacs",
- "email": "i@izs.me"
- },
- "_id": "chownr@0.0.1",
- "dependencies": {},
- "optionalDependencies": {},
- "engines": {
- "node": "*"
+ "email": "isaacs@npmjs.com"
},
- "_engineSupported": true,
- "_npmVersion": "1.1.23",
- "_nodeVersion": "v0.7.10-pre",
- "_defaultsLoaded": true,
"dist": {
- "shasum": "51d18189d9092d5f8afd623f3288bfd1c6bf1a62"
+ "shasum": "2f9aebf746f90808ce00607b72ba73b41604c485",
+ "tarball": "http://registry.npmjs.org/chownr/-/chownr-0.0.2.tgz"
},
- "_from": "../chownr"
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/chownr/-/chownr-0.0.2.tgz"
}
--- /dev/null
+if (!process.getuid || !process.getgid) {
+ throw new Error("Tests require getuid/getgid support")
+}
+
+var curUid = +process.getuid()
+, curGid = +process.getgid()
+, chownr = require("../")
+, test = require("tap").test
+, mkdirp = require("mkdirp")
+, rimraf = require("rimraf")
+, fs = require("fs")
+
+// sniff the 'id' command for other groups that i can legally assign to
+var exec = require("child_process").exec
+, groups
+, dirs = []
+
+exec("id", function (code, output) {
+ if (code) throw new Error("failed to run 'id' command")
+ groups = output.trim().split("groups=")[1].split(",").map(function (s) {
+ return parseInt(s, 10)
+ }).filter(function (g) {
+ return g !== curGid
+ })
+
+ console.error([curUid, groups[0]], "uid, gid")
+
+ rimraf("/tmp/chownr", function (er) {
+ if (er) throw er
+ var cnt = 5
+ for (var i = 0; i < 5; i ++) {
+ mkdirp(getDir(), then)
+ }
+ function then (er) {
+ if (er) throw er
+ if (-- cnt === 0) {
+ runTest()
+ }
+ }
+ })
+})
+
+function getDir () {
+ var dir = "/tmp/chownr"
+
+ dir += "/" + Math.floor(Math.random() * Math.pow(16,4)).toString(16)
+ dirs.push(dir)
+ dir += "/" + Math.floor(Math.random() * Math.pow(16,4)).toString(16)
+ dirs.push(dir)
+ dir += "/" + Math.floor(Math.random() * Math.pow(16,4)).toString(16)
+ dirs.push(dir)
+ return dir
+}
+
+function runTest () {
+ test("should complete successfully", function (t) {
+ console.error("calling chownr", curUid, groups[0], typeof curUid, typeof groups[0])
+ chownr("/tmp/chownr", curUid, groups[0], function (er) {
+ t.ifError(er)
+ t.end()
+ })
+ })
+
+ dirs.forEach(function (dir) {
+ test("verify "+dir, function (t) {
+ fs.stat(dir, function (er, st) {
+ if (er) {
+ t.ifError(er)
+ return t.end()
+ }
+ t.equal(st.uid, curUid, "uid should be " + curUid)
+ t.equal(st.gid, groups[0], "gid should be "+groups[0])
+ t.end()
+ })
+ })
+ })
+
+ test("cleanup", function (t) {
+ rimraf("/tmp/chownr/", function (er) {
+ t.ifError(er)
+ t.end()
+ })
+ })
+}
--- /dev/null
+if (!process.getuid || !process.getgid) {
+ throw new Error("Tests require getuid/getgid support")
+}
+
+var curUid = +process.getuid()
+, curGid = +process.getgid()
+, chownr = require("../")
+, test = require("tap").test
+, mkdirp = require("mkdirp")
+, rimraf = require("rimraf")
+, fs = require("fs")
+
+// sniff the 'id' command for other groups that i can legally assign to
+var exec = require("child_process").exec
+, groups
+, dirs = []
+
+exec("id", function (code, output) {
+ if (code) throw new Error("failed to run 'id' command")
+ groups = output.trim().split("groups=")[1].split(",").map(function (s) {
+ return parseInt(s, 10)
+ }).filter(function (g) {
+ return g !== curGid
+ })
+
+ console.error([curUid, groups[0]], "uid, gid")
+
+ rimraf("/tmp/chownr", function (er) {
+ if (er) throw er
+ var cnt = 5
+ for (var i = 0; i < 5; i ++) {
+ mkdirp(getDir(), then)
+ }
+ function then (er) {
+ if (er) throw er
+ if (-- cnt === 0) {
+ runTest()
+ }
+ }
+ })
+})
+
+function getDir () {
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var dir = "/tmp/chownr/" + [x,y,z].join("/")
+ dirs.push(dir)
+ return dir
+}
+
+function runTest () {
+ test("should complete successfully", function (t) {
+ console.error("calling chownr", curUid, groups[0], typeof curUid, typeof groups[0])
+ chownr.sync("/tmp/chownr", curUid, groups[0])
+ t.end()
+ })
+
+ dirs.forEach(function (dir) {
+ test("verify "+dir, function (t) {
+ fs.stat(dir, function (er, st) {
+ if (er) {
+ t.ifError(er)
+ return t.end()
+ }
+ t.equal(st.uid, curUid, "uid should be " + curUid)
+ t.equal(st.gid, groups[0], "gid should be "+groups[0])
+ t.end()
+ })
+ })
+ })
+
+ test("cleanup", function (t) {
+ rimraf("/tmp/chownr/", function (er) {
+ t.ifError(er)
+ t.end()
+ })
+ })
+}
--- /dev/null
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
}
],
"main": "asap",
- "readme": "\n# ASAP\n\nThis `asap` CommonJS package contains a single `asap` module that\nexports a single `asap` function that executes a function **as soon as\npossible**.\n\n```javascript\nasap(function () {\n // ...\n});\n```\n\nMore formally, ASAP provides a fast event queue that will execute tasks\nuntil it is empty before yielding to the JavaScript engine's underlying\nevent-loop. When the event queue becomes non-empty, ASAP schedules a\nflush event, preferring for that event to occur before the JavaScript\nengine has an opportunity to perform IO tasks or rendering, thus making\nthe first task and subsequent tasks semantically indistinguishable.\nASAP uses a variety of techniques to preserve this invariant on\ndifferent versions of browsers and NodeJS.\n\nBy design, ASAP can starve the event loop on the theory that, if there\nis enough work to be done synchronously, albeit in separate events, long\nenough to starve input or output, it is a strong indicator that the\nprogram needs to push back on scheduling more work.\n\nTake care. ASAP can sustain infinite recursive calls indefinitely\nwithout warning. This is behaviorally equivalent to an infinite loop.\nIt will not halt from a stack overflow, but it *will* chew through\nmemory (which is an oddity I cannot explain at this time). Just as with\ninfinite loops, you can monitor a Node process for this behavior with a\nheart-beat signal. As with infinite loops, a very small amount of\ncaution goes a long way to avoiding problems.\n\n```javascript\nfunction loop() {\n asap(loop);\n}\nloop();\n```\n\nASAP is distinct from `setImmediate` in that it does not suffer the\noverhead of returning a handle and being possible to cancel. For a\n`setImmediate` shim, consider [setImmediate][].\n\n[setImmediate]: https://github.com/noblejs/setimmediate\n\nIf a task throws an exception, it will not interrupt the flushing of\nhigh-priority tasks. The exception will be postponed to a later,\nlow-priority event to avoid slow-downs, when the underlying JavaScript\nengine will treat it as it does any unhandled exception.\n\n## Heritage\n\nASAP has been factored out of the [Q][] asynchronous promise library.\nIt originally had a naïve implementation in terms of `setTimeout`, but\n[Malte Ubl][NonBlocking] provided an insight that `postMessage` might be\nuseful for creating a high-priority, no-delay event dispatch hack.\nSince then, Internet Explorer proposed and implemented `setImmediate`.\nRobert Kratić began contributing to Q by measuring the performance of\nthe internal implementation of `asap`, paying particular attention to\nerror recovery. Domenic, Robert, and I collectively settled on the\ncurrent strategy of unrolling the high-priority event queue internally\nregardless of what strategy we used to dispatch the potentially\nlower-priority flush event. Domenic went on to make ASAP cooperate with\nNodeJS domains.\n\n[Q]: https://github.com/kriskowal/q\n[NonBlocking]: http://www.nonblocking.io/2011/06/windownexttick.html\n\nFor further reading, Nicholas Zakas provided a thorough article on [The\nCase for setImmediate][NCZ].\n\n[NCZ]: http://www.nczonline.net/blog/2013/07/09/the-case-for-setimmediate/\n\n## License\n\nCopyright 2009-2013 by Contributors\nMIT License (enclosed)\n\n",
- "readmeFilename": "README.md",
"_id": "asap@1.0.0",
"dist": {
"shasum": "b2a45da5fdfa20b0496fc3768cc27c12fa916a7d",
],
"directories": {},
"_shasum": "b2a45da5fdfa20b0496fc3768cc27c12fa916a7d",
- "_resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz"
+ "_resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz",
+ "readme": "ERROR: No README data found!"
}
{
"name": "dezalgo",
- "version": "1.0.1",
+ "version": "1.0.2",
"description": "Contain async insanity so that the dark pony lord doesn't eat souls",
"main": "dezalgo.js",
"directories": {
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/dezalgo"
+ "url": "git+https://github.com/npm/dezalgo.git"
},
"keywords": [
"async",
"url": "https://github.com/npm/dezalgo/issues"
},
"homepage": "https://github.com/npm/dezalgo",
- "gitHead": "0a5eee75c179611f8b67f663015d68bb517e57d2",
- "_id": "dezalgo@1.0.1",
- "_shasum": "12bde135060807900d5a7aebb607c2abb7c76937",
- "_from": "dezalgo@latest",
- "_npmVersion": "2.0.0",
- "_nodeVersion": "0.10.31",
+ "gitHead": "fabfd09a9a4ad458d0c801a1dbfff2338b9bc001",
+ "_id": "dezalgo@1.0.2",
+ "_shasum": "2bc8b5a1683131764a98def7e4aa22105a688a5a",
+ "_from": "dezalgo@>=1.0.1 <1.1.0",
+ "_npmVersion": "2.10.1",
+ "_nodeVersion": "2.0.2",
"_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ "dist": {
+ "shasum": "2bc8b5a1683131764a98def7e4aa22105a688a5a",
+ "tarball": "http://registry.npmjs.org/dezalgo/-/dezalgo-1.0.2.tgz"
},
"maintainers": [
{
"name": "isaacs",
- "email": "i@izs.me"
+ "email": "isaacs@npmjs.com"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
}
],
- "dist": {
- "shasum": "12bde135060807900d5a7aebb607c2abb7c76937",
- "tarball": "http://registry.npmjs.org/dezalgo/-/dezalgo-1.0.1.tgz"
- },
- "_resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.1.tgz"
+ "_resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.2.tgz"
}
--- /dev/null
+Copyright (c) 2015, Forrest L Norvell
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
{
"name": "fs-vacuum",
- "version": "1.2.5",
+ "version": "1.2.6",
"description": "recursively remove empty directories -- to a point",
"main": "vacuum.js",
"scripts": {
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/fs-vacuum.git"
+ "url": "git+https://github.com/npm/fs-vacuum.git"
},
"keywords": [
"rm",
"path-is-inside": "^1.0.1",
"rimraf": "^2.2.8"
},
- "readme": "# fs-vacuum\n\nRemove the empty branches of a directory tree, optionally up to (but not\nincluding) a specified base directory. Optionally nukes the leaf directory.\n\n## Usage\n\n```javascript\nvar logger = require(\"npmlog\");\nvar vacuum = require(\"fs-vacuum\");\n\nvar options = {\n base : \"/path/to/my/tree/root\",\n purge : true,\n log : logger.silly.bind(logger, \"myCleanup\")\n};\n\n/* Assuming there are no other files or directories in \"out\", \"to\", or \"my\",\n * the final path will just be \"/path/to/my/tree/root\".\n */\nvacuum(\"/path/to/my/tree/root/out/to/my/files\", function (error) {\n if (error) console.error(\"Unable to cleanly vacuum:\", error.message);\n});\n```\n# vacuum(directory, options, callback)\n\n* `directory` {String} Leaf node to remove. **Must be a directory, symlink, or file.**\n* `options` {Object}\n * `base` {String} No directories at or above this level of the filesystem will be removed.\n * `purge` {Boolean} If set, nuke the whole leaf directory, including its contents.\n * `log` {Function} A logging function that takes `npmlog`-compatible argument lists.\n* `callback` {Function} Function to call once vacuuming is complete.\n * `error` {Error} What went wrong along the way, if anything.\n",
- "readmeFilename": "README.md",
- "gitHead": "4911a38a65b6a6cb19fc980d18304e1cfca91fbf",
- "_id": "fs-vacuum@1.2.5",
- "_shasum": "a5cbaa844b4b3a7cff139f3cc90e7f7007e5fbb8",
- "_from": "fs-vacuum@~1.2.5"
+ "gitHead": "04b5093ac6fbcc4135835fb1c4ed990dfed5a04c",
+ "_id": "fs-vacuum@1.2.6",
+ "_shasum": "860c5e4b3e3aa2a6a3cbb327c57534f3a3bff642",
+ "_from": "fs-vacuum@>=1.2.5 <1.3.0",
+ "_npmVersion": "2.10.1",
+ "_nodeVersion": "2.0.2",
+ "_npmUser": {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ "dist": {
+ "shasum": "860c5e4b3e3aa2a6a3cbb327c57534f3a3bff642",
+ "tarball": "http://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.6.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.6.tgz"
}
}.bind(this))
}
-function cleanupSync (er) {
+function cleanupSync () {
try {
fs.unlinkSync(this.__atomicTmp)
} finally {
- return fs.WriteStream.prototype.emit.call(this, 'error', er)
+ return
}
}
// When we *would* emit 'close' or 'finish', instead do our stuff
WriteStream.prototype.emit = function (ev) {
if (ev === 'error')
- return cleanupSync(this)
+ cleanupSync.call(this)
if (ev !== 'close' && ev !== 'finish')
return fs.WriteStream.prototype.emit.apply(this, arguments)
{
"name": "fs-write-stream-atomic",
- "version": "1.0.2",
+ "version": "1.0.3",
"description": "Like `fs.createWriteStream(...)`, but atomic.",
"main": "index.js",
"directories": {
"url": "https://github.com/npm/fs-write-stream-atomic/issues"
},
"homepage": "https://github.com/npm/fs-write-stream-atomic",
- "gitHead": "86b111ed1d5db84e8a9680986ef7917036b9c97b",
- "_id": "fs-write-stream-atomic@1.0.2",
- "_shasum": "fe0c6cec75256072b2fef8180d97e309fe3f5efb",
- "_from": "fs-write-stream-atomic@>=1.0.2 <1.1.0",
- "_npmVersion": "2.1.0",
- "_nodeVersion": "0.10.31",
+ "gitHead": "78573c09271f3ec672740862dad80be3d75e1963",
+ "_id": "fs-write-stream-atomic@1.0.3",
+ "_shasum": "c8fe17f66d7d3f50e9aee59195c358e7710372cc",
+ "_from": "fs-write-stream-atomic@1.0.3",
+ "_npmVersion": "2.7.6",
+ "_nodeVersion": "1.6.2",
"_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "dist": {
+ "shasum": "c8fe17f66d7d3f50e9aee59195c358e7710372cc",
+ "tarball": "http://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.3.tgz"
},
"maintainers": [
{
"name": "isaacs",
"email": "i@izs.me"
+ },
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
}
],
- "dist": {
- "shasum": "fe0c6cec75256072b2fef8180d97e309fe3f5efb",
- "tarball": "http://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.2.tgz"
- },
- "_resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.2.tgz"
+ "_resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.3.tgz"
}
--- /dev/null
+var path = require('path')
+var test = require('tap').test
+var writeStream = require('../index.js')
+
+function repeat(times, string) {
+ var output = ''
+ for (var ii = 0; ii < times; ++ii) {
+ output += string
+ }
+ return output
+}
+
+var target = path.resolve(__dirname, repeat(1000,'test'))
+
+test('name too long', function (t) {
+ var stream = writeStream(target)
+ stream.on('error', function (er) {
+ t.is(er.code, 'ENAMETOOLONG', target.length + " character name results in ENAMETOOLONG")
+ })
+ stream.on('close', function () {
+ t.end()
+ })
+ stream.end()
+})
\ No newline at end of file
pattern = "**/" + pattern
}
+ self.silent = !!options.silent
self.pattern = pattern
self.strict = options.strict !== false
self.realpath = !!options.realpath
default: // some unusual error. Treat as failure.
this.cache[this._makeAbs(f)] = false
- if (this.strict) return this.emit('error', er)
- if (!this.silent) console.error('glob error', er)
+ if (this.strict) {
+ this.emit('error', er)
+ // If the error is handled, then we abort
+ // if not, we threw out of here
+ this.abort()
+ }
+ if (!this.silent)
+ console.error('glob error', er)
break
}
+
return cb()
}
},
"name": "glob",
"description": "a little globber",
- "version": "5.0.6",
+ "version": "5.0.7",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-glob.git"
"benchclean": "bash benchclean.sh"
},
"license": "ISC",
- "gitHead": "7a0d65d7ed11871be6b5a68dc6f15e3f4b3fb93d",
+ "gitHead": "cfd963c3c95e51864d69092e32479ddb73c3278e",
"bugs": {
"url": "https://github.com/isaacs/node-glob/issues"
},
"homepage": "https://github.com/isaacs/node-glob#readme",
- "_id": "glob@5.0.6",
- "_shasum": "51f1377c8d5ba36015997655d22bd7d20246accd",
+ "_id": "glob@5.0.7",
+ "_shasum": "9748021208e3fd7c3bcc7167ddbd2f1f94676a43",
"_from": "glob@>=5.0.6 <5.1.0",
- "_npmVersion": "2.9.1",
+ "_npmVersion": "2.10.0",
"_nodeVersion": "2.0.1",
"_npmUser": {
"name": "isaacs",
"email": "isaacs@npmjs.com"
},
"dist": {
- "shasum": "51f1377c8d5ba36015997655d22bd7d20246accd",
- "tarball": "http://registry.npmjs.org/glob/-/glob-5.0.6.tgz"
+ "shasum": "9748021208e3fd7c3bcc7167ddbd2f1f94676a43",
+ "tarball": "http://registry.npmjs.org/glob/-/glob-5.0.7.tgz"
},
"maintainers": [
{
}
],
"directories": {},
- "_resolved": "https://registry.npmjs.org/glob/-/glob-5.0.6.tgz"
+ "_resolved": "https://registry.npmjs.org/glob/-/glob-5.0.7.tgz"
}
default: // some unusual error. Treat as failure.
this.cache[this._makeAbs(f)] = false
- if (this.strict) throw er
- if (!this.silent) console.error('glob error', er)
+ if (this.strict)
+ throw er
+ if (!this.silent)
+ console.error('glob error', er)
break
}
}
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+The ISC License
-The BSD License
+Copyright (c) Isaac Z. Schlueter and Contributors
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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 AUTHOR 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 AUTHOR 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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
},
"name": "graceful-fs",
"description": "A drop-in replacement for fs, making various improvements.",
- "version": "3.0.6",
+ "version": "3.0.7",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-graceful-fs.git"
"EPERM",
"EACCESS"
],
- "license": "BSD",
+ "license": "ISC",
"devDependencies": {
"mkdirp": "^0.5.0",
"rimraf": "^2.2.8",
"tap": "^0.4.13"
},
- "gitHead": "8c93aeee947014dafa113dcc8fa04d2e6a6e3e14",
+ "gitHead": "4aa1ba4a0a1ae59948dc3b14decb7c4a8ab62bce",
"bugs": {
"url": "https://github.com/isaacs/node-graceful-fs/issues"
},
- "homepage": "https://github.com/isaacs/node-graceful-fs",
- "_id": "graceful-fs@3.0.6",
- "_shasum": "dce3a18351cb94cdc82e688b2e3dd2842d1b09bb",
- "_from": "graceful-fs@>=3.0.6 <3.1.0",
- "_npmVersion": "2.7.1",
- "_nodeVersion": "1.4.2",
+ "homepage": "https://github.com/isaacs/node-graceful-fs#readme",
+ "_id": "graceful-fs@3.0.7",
+ "_shasum": "e935be4b3e57892d289dc3bef7be8c02779d2b54",
+ "_from": "graceful-fs@>=3.0.7 <3.1.0",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
"_npmUser": {
"name": "isaacs",
- "email": "i@izs.me"
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "e935be4b3e57892d289dc3bef7be8c02779d2b54",
+ "tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.7.tgz"
},
"maintainers": [
{
"email": "i@izs.me"
}
],
- "dist": {
- "shasum": "dce3a18351cb94cdc82e688b2e3dd2842d1b09bb",
- "tarball": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz"
- },
- "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz",
+ "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.7.tgz",
"readme": "ERROR: No README data found!"
}
--- /dev/null
+Copyright (c) 2015, Rebecca Turner
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
* info.file(path)
Given the path of a file relative to the repository, returns a URL for
-directly fetching it from the githost. If no comittish was set then
+directly fetching it from the githost. If no committish was set then
`master` will be used as the default.
For example `hostedGitInfo.fromUrl("git@github.com:npm/hosted-git-info.git#v1.0.0").file("package.json")`
'protocols': [ 'git', 'http', 'git+ssh', 'git+https', 'ssh', 'https' ],
'domain': 'github.com',
'treepath': 'tree',
- 'filetemplate': 'https://{auth@}raw.githubusercontent.com/{user}/{project}/{comittish}/{path}',
+ 'filetemplate': 'https://{auth@}raw.githubusercontent.com/{user}/{project}/{committish}/{path}',
'bugstemplate': 'https://{domain}/{user}/{project}/issues',
- 'gittemplate': 'git://{auth@}{domain}/{user}/{project}.git{#comittish}'
+ 'gittemplate': 'git://{auth@}{domain}/{user}/{project}.git{#committish}'
},
bitbucket: {
'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
'domain': 'gitlab.com',
'treepath': 'tree',
- 'docstemplate': 'https://{domain}/{user}/{project}{/tree/comittish}#README',
+ 'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#README',
'bugstemplate': 'https://{domain}/{user}/{project}/issues'
},
gist: {
'protocols': [ 'git', 'git+ssh', 'git+https', 'ssh', 'https' ],
'domain': 'gist.github.com',
'pathmatch': /^[/](?:([^/]+)[/])?([a-z0-9]+)(?:[.]git)?$/,
- 'filetemplate': 'https://gist.githubusercontent.com/{user}/{project}/raw{/comittish}/{path}',
+ 'filetemplate': 'https://gist.githubusercontent.com/{user}/{project}/raw{/committish}/{path}',
'bugstemplate': 'https://{domain}/{project}',
- 'gittemplate': 'git://{domain}/{project}.git{#comittish}',
- 'sshtemplate': 'git@{domain}:/{project}.git{#comittish}',
- 'sshurltemplate': 'git+ssh://git@{domain}/{project}.git{#comittish}',
- 'browsetemplate': 'https://{domain}/{project}{/comittish}',
- 'docstemplate': 'https://{domain}/{project}{/comittish}',
- 'httpstemplate': 'git+https://{domain}/{project}.git{#comittish}',
- 'shortcuttemplate': '{type}:{project}{#comittish}',
- 'pathtemplate': '{project}{#comittish}'
+ 'gittemplate': 'git://{domain}/{project}.git{#committish}',
+ 'sshtemplate': 'git@{domain}:/{project}.git{#committish}',
+ 'sshurltemplate': 'git+ssh://git@{domain}/{project}.git{#committish}',
+ 'browsetemplate': 'https://{domain}/{project}{/committish}',
+ 'docstemplate': 'https://{domain}/{project}{/committish}',
+ 'httpstemplate': 'git+https://{domain}/{project}.git{#committish}',
+ 'shortcuttemplate': '{type}:{project}{#committish}',
+ 'pathtemplate': '{project}{#committish}'
}
}
var gitHostDefaults = {
- 'sshtemplate': 'git@{domain}:{user}/{project}.git{#comittish}',
- 'sshurltemplate': 'git+ssh://git@{domain}/{user}/{project}.git{#comittish}',
- 'browsetemplate': 'https://{domain}/{user}/{project}{/tree/comittish}',
- 'docstemplate': 'https://{domain}/{user}/{project}{/tree/comittish}#readme',
- 'httpstemplate': 'git+https://{auth@}{domain}/{user}/{project}.git{#comittish}',
- 'filetemplate': 'https://{domain}/{user}/{project}/raw/{comittish}/{path}',
- 'shortcuttemplate': '{type}:{user}/{project}{#comittish}',
- 'pathtemplate': '{user}/{project}{#comittish}',
+ 'sshtemplate': 'git@{domain}:{user}/{project}.git{#committish}',
+ 'sshurltemplate': 'git+ssh://git@{domain}/{user}/{project}.git{#committish}',
+ 'browsetemplate': 'https://{domain}/{user}/{project}{/tree/committish}',
+ 'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#readme',
+ 'httpstemplate': 'git+https://{auth@}{domain}/{user}/{project}.git{#committish}',
+ 'filetemplate': 'https://{domain}/{user}/{project}/raw/{committish}/{path}',
+ 'shortcuttemplate': '{type}:{user}/{project}{#committish}',
+ 'pathtemplate': '{user}/{project}{#committish}',
'pathmatch': /^[/]([^/]+)[/]([^/]+?)(?:[.]git)?$/
}
'use strict'
var gitHosts = require('./git-host-info.js')
-var GitHost = module.exports = function (type, user, auth, project, comittish, defaultRepresentation) {
+var GitHost = module.exports = function (type, user, auth, project, committish, defaultRepresentation) {
var gitHostInfo = this
gitHostInfo.type = type
Object.keys(gitHosts[type]).forEach(function (key) {
gitHostInfo.user = user
gitHostInfo.auth = auth
gitHostInfo.project = project
- gitHostInfo.comittish = comittish
+ gitHostInfo.committish = committish
gitHostInfo.default = defaultRepresentation
}
GitHost.prototype = {}
GitHost.prototype.hash = function () {
- return this.comittish ? '#' + this.comittish : ''
+ return this.committish ? '#' + this.committish : ''
}
GitHost.prototype._fill = function (template, vars) {
if (self[key] != null && vars[key] == null) vars[key] = self[key]
})
var rawAuth = vars.auth
- var rawComittish = vars.comittish
+ var rawComittish = vars.committish
Object.keys(vars).forEach(function (key) {
vars[key] = encodeURIComponent(vars[key])
})
vars['auth@'] = rawAuth ? rawAuth + '@' : ''
- vars['#comittish'] = rawComittish ? '#' + rawComittish : ''
- vars['/tree/comittish'] = vars.comittish
- ? '/' + vars.treepath + '/' + vars.comittish
+ vars['#committish'] = rawComittish ? '#' + rawComittish : ''
+ vars['/tree/committish'] = vars.committish
+ ? '/' + vars.treepath + '/' + vars.committish
: ''
- vars['/comittish'] = vars.comittish ? '/' + vars.comittish : ''
- vars.comittish = vars.comittish || 'master'
+ vars['/committish'] = vars.committish ? '/' + vars.committish : ''
+ vars.committish = vars.committish || 'master'
var res = template
Object.keys(vars).forEach(function (key) {
res = res.replace(new RegExp('[{]' + key + '[}]', 'g'), vars[key])
if (parsed.auth && authProtocols[parsed.protocol]) {
auth = decodeURIComponent(parsed.auth)
}
- var comittish = parsed.hash ? decodeURIComponent(parsed.hash.substr(1)) : null
+ var committish = parsed.hash ? decodeURIComponent(parsed.hash.substr(1)) : null
var user = null
var project = null
var defaultRepresentation = null
if (matched[2] != null) project = decodeURIComponent(matched[2])
defaultRepresentation = protocolToRepresentation(parsed.protocol)
}
- return new GitHost(gitHostName, user, auth, project, comittish, defaultRepresentation)
+ return new GitHost(gitHostName, user, auth, project, committish, defaultRepresentation)
}).filter(function (gitHostInfo) { return gitHostInfo })
if (matches.length !== 1) return
return matches[0]
{
"name": "hosted-git-info",
- "version": "2.1.2",
+ "version": "2.1.4",
"description": "Provides metadata and conversions from repository urls for Github, Bitbucket and Gitlab",
"main": "index.js",
"repository": {
"standard": "^3.3.2",
"tap": "^0.4.13"
},
- "readme": "# hosted-git-info\n\nThis will let you identify and transform various git hosts URLs between\nprotocols. It also can tell you what the URL is for the raw path for\nparticular file for direct access without git.\n\n## Usage\n\n```javascript\nvar hostedGitInfo = require(\"hosted-git-info\")\nvar info = hostedGitInfo.fromUrl(\"git@github.com:npm/hosted-git-info.git\")\n/* info looks like:\n{\n type: \"github\",\n domain: \"github.com\",\n user: \"npm\",\n project: \"hosted-git-info\"\n}\n*/\n```\n\nIf the URL can't be matched with a git host, `null` will be returned. We\ncan match git, ssh and https urls. Additionally, we can match ssh connect\nstrings (`git@github.com:npm/hosted-git-info`) and shortcuts (eg,\n`github:npm/hosted-git-info`). Github specifically, is detected in the case\nof a third, unprefixed, form: `npm/hosted-git-info`.\n\nIf it does match, the returned object has properties of:\n\n* info.type -- The short name of the service\n* info.domain -- The domain for git protocol use\n* info.user -- The name of the user/org on the git host\n* info.project -- The name of the project on the git host\n\nAnd methods of:\n\n* info.file(path)\n\nGiven the path of a file relative to the repository, returns a URL for\ndirectly fetching it from the githost. If no comittish was set then\n`master` will be used as the default.\n\nFor example `hostedGitInfo.fromUrl(\"git@github.com:npm/hosted-git-info.git#v1.0.0\").file(\"package.json\")`\nwould return `https://raw.githubusercontent.com/npm/hosted-git-info/v1.0.0/package.json`\n\n* info.shortcut()\n\neg, `github:npm/hosted-git-info`\n\n* info.browse()\n\neg, `https://github.com/npm/hosted-git-info/tree/v1.2.0`\n\n* info.bugs()\n\neg, `https://github.com/npm/hosted-git-info/issues`\n\n* info.docs()\n\neg, `https://github.com/npm/hosted-git-info/tree/v1.2.0#readme`\n\n* info.https()\n\neg, `git+https://github.com/npm/hosted-git-info.git`\n\n* info.sshurl()\n\neg, `git+ssh://git@github.com/npm/hosted-git-info.git`\n\n* info.ssh()\n\neg, `git@github.com:npm/hosted-git-info.git`\n\n* info.path()\n\neg, `npm/hosted-git-info`\n\n* info.getDefaultRepresentation()\n\nReturns the default output type. The default output type is based on the\nstring you passed in to be parsed\n\n* info.toString()\n\nUses the getDefaultRepresentation to call one of the other methods to get a URL for\nthis resource. As such `hostedGitInfo.fromUrl(url).toString()` will give\nyou a normalized version of the URL that still uses the same protocol.\n\nShortcuts will still be returned as shortcuts, but the special case github\nform of `org/project` will be normalized to `github:org/project`.\n\nSSH connect strings will be normalized into `git+ssh` URLs.\n\n\n## Supported hosts\n\nCurrently this supports Github, Bitbucket and Gitlab. Pull requests for\nadditional hosts welcome.\n\n",
- "readmeFilename": "README.md",
- "gitHead": "9f24fee147bb76595e234b7556ecc9d0448215fa",
- "_id": "hosted-git-info@2.1.2",
- "_shasum": "f947976852931851c33644bbce80d1e499795246",
- "_from": "hosted-git-info@>=2.1.2 <2.2.0"
+ "gitHead": "9e1a36df8eb050a663713c79e56d89dadba2bd8d",
+ "_id": "hosted-git-info@2.1.4",
+ "_shasum": "d9e953b26988be88096c46e926494d9604c300f8",
+ "_from": "hosted-git-info@>=2.1.2 <2.2.0",
+ "_npmVersion": "2.10.1",
+ "_nodeVersion": "2.0.2",
+ "_npmUser": {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ "dist": {
+ "shasum": "d9e953b26988be88096c46e926494d9604c300f8",
+ "tarball": "http://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.4.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.4.tgz"
}
var validateLicense = require('validate-npm-package-license')
var validateName = require('validate-npm-package-name')
var npa = require('npm-package-arg')
+var semver = require('semver')
// more popular packages should go here, maybe?
function isTestPkg (p) {
config.get('init.version') ||
config.get('init-version') ||
'1.0.0'
-exports.version = yes ? version : prompt('version', version)
+exports.version = yes ?
+ version :
+ prompt('version', version, function (version) {
+ if (semver.valid(version)) return version
+ var er = new Error('Invalid version: "' + version + '"')
+ er.notValid = true
+ er.again = true
+ return er
+ })
if (!package.description) {
exports.description = yes ? '' : prompt('description')
"description": "prompting wizardly",
"version": "0.3.0",
"repository": {
- "url": "git://github.com/isaacs/promzard.git"
+ "url": "git://github.com/isaacs/promzard"
},
"dependencies": {
"read": "1"
"main": "spdx-correct.js",
"repository": {
"type": "git",
- "url": "git+https://github.com/kemitchell/spdx-correct.git"
+ "url": "https://github.com/kemitchell/spdx-correct"
},
"scripts": {
"lint": "jshint spdx-correct.js test && jscs spdx-correct.js test",
"main": "index.js",
"repository": {
"type": "git",
- "url": "git+https://github.com/kemitchell/npm-valid-package-license.git"
+ "url": "https://github.com/kemitchell/npm-valid-package-license"
},
"scripts": {
"precommit": "npm run test",
{
"name": "init-package-json",
- "version": "1.5.0",
+ "version": "1.6.0",
"main": "init-package-json.js",
"scripts": {
"test": "tap test/*.js"
},
"repository": {
"type": "git",
- "url": "git://github.com/isaacs/init-package-json.git"
+ "url": "git://github.com/isaacs/init-package-json"
},
"author": {
"name": "Isaac Z. Schlueter",
"prompt",
"start"
],
- "readme": "# init-package-json\n\nA node module to get your node module started.\n\n[![Build Status](https://secure.travis-ci.org/npm/init-package-json.svg)](http://travis-ci.org/npm/init-package-json)\n\n## Usage\n\n```javascript\nvar init = require('init-package-json')\nvar path = require('path')\n\n// a path to a promzard module. In the event that this file is\n// not found, one will be provided for you.\nvar initFile = path.resolve(process.env.HOME, '.npm-init')\n\n// the dir where we're doin stuff.\nvar dir = process.cwd()\n\n// extra stuff that gets put into the PromZard module's context.\n// In npm, this is the resolved config object. Exposed as 'config'\n// Optional.\nvar configData = { some: 'extra stuff' }\n\n// Any existing stuff from the package.json file is also exposed in the\n// PromZard module as the `package` object. There will also be free\n// vars for:\n// * `filename` path to the package.json file\n// * `basename` the tip of the package dir\n// * `dirname` the parent of the package dir\n\ninit(dir, initFile, configData, function (er, data) {\n // the data's already been written to {dir}/package.json\n // now you can do stuff with it\n})\n```\n\nOr from the command line:\n\n```\n$ npm-init\n```\n\nSee [PromZard](https://github.com/isaacs/promzard) for details about\nwhat can go in the config file.\n",
- "readmeFilename": "README.md",
- "gitHead": "17721cb55112690da3dc41b21d58354e89836067",
+ "gitHead": "b747e9f71eb65b22bb9139e5252bf8efb23571e1",
"bugs": {
"url": "https://github.com/isaacs/init-package-json/issues"
},
- "homepage": "https://github.com/isaacs/init-package-json#readme",
- "_id": "init-package-json@1.5.0",
- "_shasum": "85b701b81463593d61da8bb66b46e352f4f2e298",
- "_from": "init-package-json@>=1.5.0 <1.6.0"
+ "homepage": "https://github.com/isaacs/init-package-json",
+ "_id": "init-package-json@1.6.0",
+ "_shasum": "8c4c2561abca1ad30d88f5594ddb4159211a36ff",
+ "_from": "init-package-json@1.6.0",
+ "_npmVersion": "2.7.6",
+ "_nodeVersion": "1.6.2",
+ "_npmUser": {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ "dist": {
+ "shasum": "8c4c2561abca1ad30d88f5594ddb4159211a36ff",
+ "tarball": "http://registry.npmjs.org/init-package-json/-/init-package-json-1.6.0.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.6.0.tgz"
}
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+The ISC License
-The BSD License
+Copyright (c) Isaac Z. Schlueter and Contributors
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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 AUTHOR 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 AUTHOR 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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Check if the lockfile is locked and not stale.
-Returns boolean.
+Callback is called with `cb(error, isLocked)`.
-### lockFile.checkSync(path, [opts], cb)
+### lockFile.checkSync(path, [opts])
Check if the lockfile is locked and not stale.
-Callback is called with `cb(error, isLocked)`.
+Returns boolean.
## Options
{
"name": "lockfile",
- "version": "1.0.0",
+ "version": "1.0.1",
"main": "lockfile.js",
"directories": {
"test": "test"
},
"repository": {
"type": "git",
- "url": "git://github.com/isaacs/lockfile"
+ "url": "git://github.com/isaacs/lockfile.git"
},
"keywords": [
"lockfile",
"email": "i@izs.me",
"url": "http://blog.izs.me/"
},
- "license": "BSD",
+ "license": "ISC",
"description": "A very polite lock file utility, which endeavors to not litter, and to wait patiently for others.",
- "gitHead": "9590c6f02521eb1bb154ddc3ca9a7e84ce770c45",
+ "gitHead": "9d338ed8e3e3a166955d051f6b5fb6bb1e563ca8",
"bugs": {
"url": "https://github.com/isaacs/lockfile/issues"
},
- "homepage": "https://github.com/isaacs/lockfile",
- "_id": "lockfile@1.0.0",
- "_shasum": "b3a7609dda6012060083bacb0ab0ecbca58e9203",
- "_from": "lockfile@1.0.0",
- "_npmVersion": "1.4.23",
+ "homepage": "https://github.com/isaacs/lockfile#readme",
+ "_id": "lockfile@1.0.1",
+ "_shasum": "9d353ecfe3f54d150bb57f89d51746935a39c4f5",
+ "_from": "lockfile@>=1.0.0 <1.1.0",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
"_npmUser": {
"name": "isaacs",
- "email": "i@izs.me"
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "9d353ecfe3f54d150bb57f89d51746935a39c4f5",
+ "tarball": "http://registry.npmjs.org/lockfile/-/lockfile-1.0.1.tgz"
},
"maintainers": [
{
"email": "i@izs.me"
}
],
- "dist": {
- "shasum": "b3a7609dda6012060083bacb0ab0ecbca58e9203",
- "tarball": "http://registry.npmjs.org/lockfile/-/lockfile-1.0.0.tgz"
- },
- "_resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.0.tgz",
- "readme": "ERROR: No README data found!"
+ "_resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.1.tgz"
}
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC License
-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:
+Copyright (c) Isaac Z. Schlueter and Contributors
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
"name": "lru-cache",
"description": "A cache object that deletes the least-recently-used items.",
- "version": "2.6.3",
+ "version": "2.6.4",
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me"
"tap": "^0.7.1",
"weak": ""
},
- "license": {
- "type": "MIT",
- "url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE"
- },
- "gitHead": "0654ce0b1f2d676a0cfc1f3001a097af9e7b0dfb",
+ "license": "ISC",
+ "gitHead": "aea58fc0a12714c6e1422963e7ebea66460ec39e",
"bugs": {
"url": "https://github.com/isaacs/node-lru-cache/issues"
},
"homepage": "https://github.com/isaacs/node-lru-cache#readme",
- "_id": "lru-cache@2.6.3",
- "_shasum": "51ccd0b4fc0c843587d7a5709ce4d3b7629bedc5",
- "_from": "lru-cache@>=2.6.3 <2.7.0",
+ "_id": "lru-cache@2.6.4",
+ "_shasum": "2675190ccd1b0701ec2f652a4d0d3d400d76c0dd",
+ "_from": "lru-cache@>=2.6.4 <2.7.0",
"_npmVersion": "2.10.0",
"_nodeVersion": "2.0.1",
"_npmUser": {
"email": "isaacs@npmjs.com"
},
"dist": {
- "shasum": "51ccd0b4fc0c843587d7a5709ce4d3b7629bedc5",
- "tarball": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.6.3.tgz"
+ "shasum": "2675190ccd1b0701ec2f652a4d0d3d400d76c0dd",
+ "tarball": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz"
},
"maintainers": [
{
"name": "isaacs",
- "email": "i@izs.me"
+ "email": "isaacs@npmjs.com"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
}
],
"directories": {},
- "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.3.tgz"
+ "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz",
+ "readme": "ERROR: No README data found!"
}
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC License
-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:
+Copyright (c) Isaac Z. Schlueter and Contributors
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
},
"name": "minimatch",
"description": "a glob matcher in javascript",
- "version": "2.0.7",
+ "version": "2.0.8",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/minimatch.git"
"standard": "^3.7.2",
"tap": ""
},
- "license": {
- "type": "MIT",
- "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
- },
+ "license": "ISC",
"files": [
"minimatch.js",
"browser.js"
],
- "gitHead": "4bd6dc22c248c7ea07cc49d63181fe6f6aafae9c",
+ "gitHead": "0bc7d9c4b2bc816502184862b45bd090de3406a3",
"bugs": {
"url": "https://github.com/isaacs/minimatch/issues"
},
- "homepage": "https://github.com/isaacs/minimatch",
- "_id": "minimatch@2.0.7",
- "_shasum": "d23652ab10e663e7d914602e920e21f9f66492be",
- "_from": "minimatch@>=2.0.7 <2.1.0",
- "_npmVersion": "2.7.6",
- "_nodeVersion": "1.7.1",
+ "homepage": "https://github.com/isaacs/minimatch#readme",
+ "_id": "minimatch@2.0.8",
+ "_shasum": "0bc20f6bf3570a698ef0ddff902063c6cabda6bf",
+ "_from": "minimatch@>=2.0.8 <2.1.0",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
"_npmUser": {
"name": "isaacs",
"email": "isaacs@npmjs.com"
},
"dist": {
- "shasum": "d23652ab10e663e7d914602e920e21f9f66492be",
- "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-2.0.7.tgz"
+ "shasum": "0bc20f6bf3570a698ef0ddff902063c6cabda6bf",
+ "tarball": "http://registry.npmjs.org/minimatch/-/minimatch-2.0.8.tgz"
},
"maintainers": [
{
}
],
"directories": {},
- "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.7.tgz",
+ "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.8.tgz",
"readme": "ERROR: No README data found!"
}
{
'target_defaults': {
'type': 'loadable_module',
- 'win_delay_load_hook': 'true',
'product_prefix': '',
-
'include_dirs': [
'<(node_root_dir)/src',
'<(node_root_dir)/deps/uv/include',
'product_extension': 'node',
'defines': [ 'BUILDING_NODE_EXTENSION' ],
}],
-
['_type=="static_library"', {
# set to `1` to *disable* the -T thin archive 'ld' flag.
# older linkers don't support this flag.
'standalone_static_library': '<(standalone_static_library)'
}],
-
- ['_win_delay_load_hook=="true"', {
- # If the addon specifies `'win_delay_load_hook': 'true'` in its
- # binding.gyp, link a delay-load hook into the DLL. This hook ensures
- # that the addon will work regardless of whether the node/iojs binary
- # is named node.exe, iojs.exe, or something else.
- 'conditions': [
- [ 'OS=="win"', {
- 'sources': [
- 'src/win_delay_load_hook.c',
- ],
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'DelayLoadDLLs': [ 'iojs.exe', 'node.exe' ],
- # Don't print a linker warning when no imports from either .exe
- # are used.
- 'AdditionalOptions': [ '/ignore:4199' ],
- },
- },
- }],
- ],
- }],
],
'conditions': [
'-luuid.lib',
'-lodbc32.lib',
'-lDelayImp.lib',
- '-l"<(node_root_dir)/$(ConfigurationName)/iojs.lib"'
+ '-l"<(node_root_dir)/$(ConfigurationName)/node.lib"'
],
# warning C4251: 'node::ObjectWrap::handle_' : class 'v8::Persistent<T>'
# needs to have dll-interface to be used by clients of class 'node::ObjectWrap'
}
/**
- * Copies the iojs.lib file for the current target architecture into the
+ * Copies the node.lib file for the current target architecture into the
* current proper dev dir location.
*/
if (!win || !copyDevLib) return doBuild()
var buildDir = path.resolve(nodeDir, buildType)
- , archNodeLibPath = path.resolve(nodeDir, arch, 'iojs.lib')
- , buildNodeLibPath = path.resolve(buildDir, 'iojs.lib')
+ , archNodeLibPath = path.resolve(nodeDir, arch, 'node.lib')
+ , buildNodeLibPath = path.resolve(buildDir, 'node.lib')
mkdirp(buildDir, function (err, isNew) {
if (err) return callback(err)
log.verbose('"' + buildType + '" dir needed to be created?', isNew)
var rs = fs.createReadStream(archNodeLibPath)
, ws = fs.createWriteStream(buildNodeLibPath)
- log.verbose('copying "iojs.lib" for ' + arch, buildNodeLibPath)
+ log.verbose('copying "node.lib" for ' + arch, buildNodeLibPath)
rs.pipe(ws)
rs.on('error', callback)
ws.on('error', callback)
}
}
- var distUrl = gyp.opts['dist-url'] || gyp.opts.disturl || 'https://iojs.org/dist'
+ var distUrl = gyp.opts['dist-url'] || gyp.opts.disturl || 'http://nodejs.org/dist'
// Determine which node dev files version we are installing
// now download the node tarball
var tarPath = gyp.opts['tarball']
- var tarballUrl = tarPath ? tarPath : distUrl + '/v' + version + '/iojs-v' + version + '.tar.gz'
+ var tarballUrl = tarPath ? tarPath : distUrl + '/v' + version + '/node-v' + version + '.tar.gz'
, badDownload = false
, extractCount = 0
, gunzip = zlib.createGunzip()
var async = 0
if (win) {
- // need to download iojs.lib
+ // need to download node.lib
async++
downloadNodeLib(deref)
}
}
function downloadNodeLib (done) {
- log.verbose('on Windows; need to download `iojs.lib`...')
+ log.verbose('on Windows; need to download `node.lib`...')
var dir32 = path.resolve(devDir, 'ia32')
, dir64 = path.resolve(devDir, 'x64')
- , nodeLibPath32 = path.resolve(dir32, 'iojs.lib')
- , nodeLibPath64 = path.resolve(dir64, 'iojs.lib')
- , nodeLibUrl32 = distUrl + '/v' + version + '/win-x86/iojs.lib'
- , nodeLibUrl64 = distUrl + '/v' + version + '/win-x64/iojs.lib'
+ , 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'
- log.verbose('32-bit iojs.lib dir', dir32)
- log.verbose('64-bit iojs.lib dir', dir64)
- log.verbose('`iojs.lib` 32-bit url', nodeLibUrl32)
- log.verbose('`iojs.lib` 64-bit url', nodeLibUrl64)
+ log.verbose('32-bit node.lib dir', dir32)
+ log.verbose('64-bit node.lib dir', dir64)
+ log.verbose('`node.lib` 32-bit url', nodeLibUrl32)
+ log.verbose('`node.lib` 64-bit url', nodeLibUrl64)
var async = 2
mkdir(dir32, function (err) {
if (err) return done(err)
- log.verbose('streaming 32-bit iojs.lib to:', nodeLibPath32)
+ log.verbose('streaming 32-bit node.lib to:', nodeLibPath32)
var req = download(nodeLibUrl32)
if (!req) return
req.on('error', done)
req.on('response', function (res) {
if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading 32-bit iojs.lib'))
+ done(new Error(res.statusCode + ' status code downloading 32-bit node.lib'))
return
}
getContentSha(res, function (_, checksum) {
- contentShasums['win-x86/iojs.lib'] = checksum
- log.verbose('content checksum', 'win-x86/iojs.lib', checksum)
+ contentShasums['node.lib'] = checksum
+ log.verbose('content checksum', 'node.lib', checksum)
})
var ws = fs.createWriteStream(nodeLibPath32)
})
mkdir(dir64, function (err) {
if (err) return done(err)
- log.verbose('streaming 64-bit iojs.lib to:', nodeLibPath64)
+ log.verbose('streaming 64-bit node.lib to:', nodeLibPath64)
var req = download(nodeLibUrl64)
if (!req) return
req.on('error', done)
req.on('response', function (res) {
if (res.statusCode !== 200) {
- done(new Error(res.statusCode + ' status code downloading 64-bit iojs.lib'))
+ done(new Error(res.statusCode + ' status code downloading 64-bit node.lib'))
return
}
getContentSha(res, function (_, checksum) {
- contentShasums['win-x64/iojs.lib'] = checksum
- log.verbose('content checksum', 'win-x64/iojs.lib', checksum)
+ contentShasums['x64/node.lib'] = checksum
+ log.verbose('content checksum', 'x64/node.lib', checksum)
})
var ws = fs.createWriteStream(nodeLibPath64)
--- /dev/null
+{
+ "asi": true,
+ "laxcomma": true
+}
+++ /dev/null
-/*
- * When this file is linked to a DLL, it sets up a delay-load hook that
- * intervenes when the DLL is trying to load 'node.exe' or 'iojs.exe'
- * dynamically. Instead of trying to locate the .exe file it'll just return
- * a handle to the process image.
- *
- * This allows compiled addons to work when node.exe or iojs.exe is renamed.
- */
-
-#ifdef _MSC_VER
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-#include <delayimp.h>
-#include <string.h>
-
-static FARPROC WINAPI load_exe_hook(unsigned int event, DelayLoadInfo* info) {
- HMODULE m;
- if (event != dliNotePreLoadLibrary)
- return NULL;
-
- if (_stricmp(info->szDll, "iojs.exe") != 0 &&
- _stricmp(info->szDll, "node.exe") != 0)
- return NULL;
-
- m = GetModuleHandle(NULL);
- return (FARPROC) m;
-}
-
-PfnDliHook __pfnDliNotifyHook2 = load_exe_hook;
-
-#endif
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC License
-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:
+Copyright (c) Isaac Z. Schlueter and Contributors
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
"name": "nopt",
- "version": "3.0.1",
+ "version": "3.0.2",
"description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
"author": {
"name": "Isaac Z. Schlueter",
},
"repository": {
"type": "git",
- "url": "http://github.com/isaacs/nopt"
+ "url": "git+ssh://git@github.com/isaacs/nopt.git"
},
"bin": {
"nopt": "./bin/nopt.js"
},
- "license": {
- "type": "MIT",
- "url": "https://github.com/isaacs/nopt/raw/master/LICENSE"
- },
+ "license": "ISC",
"dependencies": {
"abbrev": "1"
},
"devDependencies": {
"tap": "~0.4.8"
},
- "readme": "If you want to write an option parser, and have it be good, there are\ntwo ways to do it. The Right Way, and the Wrong Way.\n\nThe Wrong Way is to sit down and write an option parser. We've all done\nthat.\n\nThe Right Way is to write some complex configurable program with so many\noptions that you go half-insane just trying to manage them all, and put\nit off with duct-tape solutions until you see exactly to the core of the\nproblem, and finally snap and write an awesome option parser.\n\nIf you want to write an option parser, don't write an option parser.\nWrite a package manager, or a source control system, or a service\nrestarter, or an operating system. You probably won't end up with a\ngood one of those, but if you don't give up, and you are relentless and\ndiligent enough in your procrastination, you may just end up with a very\nnice option parser.\n\n## USAGE\n\n // my-program.js\n var nopt = require(\"nopt\")\n , Stream = require(\"stream\").Stream\n , path = require(\"path\")\n , knownOpts = { \"foo\" : [String, null]\n , \"bar\" : [Stream, Number]\n , \"baz\" : path\n , \"bloo\" : [ \"big\", \"medium\", \"small\" ]\n , \"flag\" : Boolean\n , \"pick\" : Boolean\n , \"many\" : [String, Array]\n }\n , shortHands = { \"foofoo\" : [\"--foo\", \"Mr. Foo\"]\n , \"b7\" : [\"--bar\", \"7\"]\n , \"m\" : [\"--bloo\", \"medium\"]\n , \"p\" : [\"--pick\"]\n , \"f\" : [\"--flag\"]\n }\n // everything is optional.\n // knownOpts and shorthands default to {}\n // arg list defaults to process.argv\n // slice defaults to 2\n , parsed = nopt(knownOpts, shortHands, process.argv, 2)\n console.log(parsed)\n\nThis would give you support for any of the following:\n\n```bash\n$ node my-program.js --foo \"blerp\" --no-flag\n{ \"foo\" : \"blerp\", \"flag\" : false }\n\n$ node my-program.js ---bar 7 --foo \"Mr. Hand\" --flag\n{ bar: 7, foo: \"Mr. Hand\", flag: true }\n\n$ node my-program.js --foo \"blerp\" -f -----p\n{ foo: \"blerp\", flag: true, pick: true }\n\n$ node my-program.js -fp --foofoo\n{ foo: \"Mr. Foo\", flag: true, pick: true }\n\n$ node my-program.js --foofoo -- -fp # -- stops the flag parsing.\n{ foo: \"Mr. Foo\", argv: { remain: [\"-fp\"] } }\n\n$ node my-program.js --blatzk -fp # unknown opts are ok.\n{ blatzk: true, flag: true, pick: true }\n\n$ node my-program.js --blatzk=1000 -fp # but you need to use = if they have a value\n{ blatzk: 1000, flag: true, pick: true }\n\n$ node my-program.js --no-blatzk -fp # unless they start with \"no-\"\n{ blatzk: false, flag: true, pick: true }\n\n$ node my-program.js --baz b/a/z # known paths are resolved.\n{ baz: \"/Users/isaacs/b/a/z\" }\n\n# if Array is one of the types, then it can take many\n# values, and will always be an array. The other types provided\n# specify what types are allowed in the list.\n\n$ node my-program.js --many 1 --many null --many foo\n{ many: [\"1\", \"null\", \"foo\"] }\n\n$ node my-program.js --many foo\n{ many: [\"foo\"] }\n```\n\nRead the tests at the bottom of `lib/nopt.js` for more examples of\nwhat this puppy can do.\n\n## Types\n\nThe following types are supported, and defined on `nopt.typeDefs`\n\n* String: A normal string. No parsing is done.\n* path: A file system path. Gets resolved against cwd if not absolute.\n* url: A url. If it doesn't parse, it isn't accepted.\n* Number: Must be numeric.\n* Date: Must parse as a date. If it does, and `Date` is one of the options,\n then it will return a Date object, not a string.\n* Boolean: Must be either `true` or `false`. If an option is a boolean,\n then it does not need a value, and its presence will imply `true` as\n the value. To negate boolean flags, do `--no-whatever` or `--whatever\n false`\n* NaN: Means that the option is strictly not allowed. Any value will\n fail.\n* Stream: An object matching the \"Stream\" class in node. Valuable\n for use when validating programmatically. (npm uses this to let you\n supply any WriteStream on the `outfd` and `logfd` config options.)\n* Array: If `Array` is specified as one of the types, then the value\n will be parsed as a list of options. This means that multiple values\n can be specified, and that the value will always be an array.\n\nIf a type is an array of values not on this list, then those are\nconsidered valid values. For instance, in the example above, the\n`--bloo` option can only be one of `\"big\"`, `\"medium\"`, or `\"small\"`,\nand any other value will be rejected.\n\nWhen parsing unknown fields, `\"true\"`, `\"false\"`, and `\"null\"` will be\ninterpreted as their JavaScript equivalents.\n\nYou can also mix types and values, or multiple types, in a list. For\ninstance `{ blah: [Number, null] }` would allow a value to be set to\neither a Number or null. When types are ordered, this implies a\npreference, and the first type that can be used to properly interpret\nthe value will be used.\n\nTo define a new type, add it to `nopt.typeDefs`. Each item in that\nhash is an object with a `type` member and a `validate` method. The\n`type` member is an object that matches what goes in the type list. The\n`validate` method is a function that gets called with `validate(data,\nkey, val)`. Validate methods should assign `data[key]` to the valid\nvalue of `val` if it can be handled properly, or return boolean\n`false` if it cannot.\n\nYou can also call `nopt.clean(data, types, typeDefs)` to clean up a\nconfig object and remove its invalid properties.\n\n## Error Handling\n\nBy default, nopt outputs a warning to standard error when invalid\noptions are found. You can change this behavior by assigning a method\nto `nopt.invalidHandler`. This method will be called with\nthe offending `nopt.invalidHandler(key, val, types)`.\n\nIf no `nopt.invalidHandler` is assigned, then it will console.error\nits whining. If it is assigned to boolean `false` then the warning is\nsuppressed.\n\n## Abbreviations\n\nYes, they are supported. If you define options like this:\n\n```javascript\n{ \"foolhardyelephants\" : Boolean\n, \"pileofmonkeys\" : Boolean }\n```\n\nThen this will work:\n\n```bash\nnode program.js --foolhar --pil\nnode program.js --no-f --pileofmon\n# etc.\n```\n\n## Shorthands\n\nShorthands are a hash of shorter option names to a snippet of args that\nthey expand to.\n\nIf multiple one-character shorthands are all combined, and the\ncombination does not unambiguously match any other option or shorthand,\nthen they will be broken up into their constituent parts. For example:\n\n```json\n{ \"s\" : [\"--loglevel\", \"silent\"]\n, \"g\" : \"--global\"\n, \"f\" : \"--force\"\n, \"p\" : \"--parseable\"\n, \"l\" : \"--long\"\n}\n```\n\n```bash\nnpm ls -sgflp\n# just like doing this:\nnpm ls --loglevel silent --global --force --long --parseable\n```\n\n## The Rest of the args\n\nThe config object returned by nopt is given a special member called\n`argv`, which is an object with the following fields:\n\n* `remain`: The remaining args after all the parsing has occurred.\n* `original`: The args as they originally appeared.\n* `cooked`: The args after flags and shorthands are expanded.\n\n## Slicing\n\nNode programs are called with more or less the exact argv as it appears\nin C land, after the v8 and node-specific options have been plucked off.\nAs such, `argv[0]` is always `node` and `argv[1]` is always the\nJavaScript program being run.\n\nThat's usually not very useful to you. So they're sliced off by\ndefault. If you want them, then you can pass in `0` as the last\nargument, or any other number that you'd like to slice off the start of\nthe list.\n",
- "readmeFilename": "README.md",
- "gitHead": "4296f7aba7847c198fea2da594f9e1bec02817ec",
+ "gitHead": "a0ff8dcbb29ae9da68769c9f782bd4d70746b02d",
"bugs": {
"url": "https://github.com/isaacs/nopt/issues"
},
- "homepage": "https://github.com/isaacs/nopt",
- "_id": "nopt@3.0.1",
- "_shasum": "bce5c42446a3291f47622a370abbf158fbbacbfd",
- "_from": "nopt@latest"
+ "homepage": "https://github.com/isaacs/nopt#readme",
+ "_id": "nopt@3.0.2",
+ "_shasum": "a82a87f9d8c3df140fe78fb29657a7a774403b5e",
+ "_from": "nopt@>=3.0.2 <3.1.0",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "a82a87f9d8c3df140fe78fb29657a7a774403b5e",
+ "tarball": "http://registry.npmjs.org/nopt/-/nopt-3.0.2.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.2.tgz",
+ "readme": "ERROR: No README data found!"
}
--- /dev/null
+{
+ "env" : {
+ "node" : true
+ },
+ "rules" : {
+ "semi": [2, "never"],
+ "strict": 0,
+ "quotes": [1, "double", "avoid-escape"],
+ "no-use-before-define": 0,
+ "curly": 0,
+ "no-underscore-dangle": 0,
+ "no-lonely-if": 1,
+ "no-unused-vars": [2, {"vars" : "all", "args" : "after-used"}],
+ "no-mixed-requires": 0,
+ "space-infix-ops": 0,
+ "key-spacing": 0,
+ "no-multi-spaces": 0
+ }
+}
--- /dev/null
+Copyright (c) 2014-2015, Forrest L Norvell
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
{
"name": "normalize-git-url",
- "version": "1.0.0",
+ "version": "1.0.1",
"description": "Normalizes Git URLs. For npm, but you can use it too.",
"main": "normalize-git-url.js",
"directories": {
},
"dependencies": {},
"devDependencies": {
- "tap": "^0.4.13"
+ "tap": "^1.1.0"
},
"scripts": {
"test": "tap test/*.js"
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/normalize-git-url.git"
+ "url": "git+https://github.com/npm/normalize-git-url.git"
},
"keywords": [
"git",
"homepage": "https://github.com/npm/normalize-git-url",
"readme": "# normalize-git-url\n\nYou have a bunch of Git URLs. You want to convert them to a canonical\nrepresentation, probably for use inside npm so that it doesn't end up creating\na bunch of superfluous cached origins. You use this package.\n\n## Usage\n\n```javascript\nvar ngu = require('normalize-git-url');\nvar normalized = ngu(\"git+ssh://git@github.com:organization/repo.git#hashbrowns\")\n// get back:\n// {\n// url : \"ssh://git@github.com/organization/repo.git\",\n// branch : \"hashbrowns\" // did u know hashbrowns are delicious?\n// }\n```\n\n## API\n\nThere's just the one function, and all it takes is a single parameter, a non-normalized Git URL.\n\n### normalizeGitUrl(url)\n\n* `url` {String} The Git URL (very loosely speaking) to be normalized.\n\nReturns an object with the following format:\n\n* `url` {String} The normalized URL.\n* `branch` {String} The treeish to be checked out once the repo at `url` is\n cloned. It doesn't have to be a branch, but it's a lot easier to intuit what\n the output is for with that name.\n\n## Limitations\n\nRight now this doesn't try to special-case GitHub too much -- it doesn't ensure\nthat `.git` is added to the end of URLs, it doesn't prefer `https:` over\n`http:` or `ssh:`, it doesn't deal with redirects, and it doesn't try to\nresolve symbolic names to treeish hashcodes. For now, it just tries to account\nfor minor differences in representation.\n",
"readmeFilename": "README.md",
- "gitHead": "e51f43718af66ffbced4ccfd9a6514470fc4c553",
- "_id": "normalize-git-url@1.0.0",
- "_shasum": "80e59471f0616b579893973e3f1b3684bedbad48",
- "_from": "normalize-git-url@>=1.0.0 <1.1.0"
+ "gitHead": "d87bf42e845ed664e4a8bab3490052fb44c90433",
+ "_id": "normalize-git-url@1.0.1",
+ "_shasum": "1b561345d66e3a3bc5513a5ace85f155ca42613e",
+ "_from": "normalize-git-url@>=1.0.1 <1.1.0"
}
modifyPeople(data, parsePerson)
}
-, fixNameField: function(data, strict) {
+, fixNameField: function(data, options) {
+ if (typeof options === "boolean") options = {strict: options}
+ else if (typeof options === "undefined") options = {}
+ var strict = options.strict
if (!data.name && !strict) {
data.name = ""
return
}
if (!strict)
data.name = data.name.trim()
- ensureValidName(data.name, strict)
+ ensureValidName(data.name, strict, options.allowLegacyCase)
if (coreModuleNames.indexOf(data.name) !== -1)
this.warn("conflictingName", data.name)
}
spec === encodeURIComponent(spec)
}
-function ensureValidName (name, strict) {
+function ensureValidName (name, strict, allowLegacyCase) {
if (name.charAt(0) === "." ||
!(isValidScopedPackageName(name) || isCorrectlyEncodedName(name)) ||
- (strict && name !== name.toLowerCase()) ||
+ (strict && (!allowLegacyCase) && name !== name.toLowerCase()) ||
name.toLowerCase() === "node_modules" ||
name.toLowerCase() === "favicon.ico") {
throw new Error("Invalid name: " + JSON.stringify(name))
module.exports = normalize
var fixer = require("./fixer")
+normalize.fixer = fixer
+
var makeWarning = require("./make_warning")
var fieldsToFix = ['name','version','description','repository','modules','scripts'
{
"name": "normalize-package-data",
- "version": "2.1.0",
+ "version": "2.2.0",
"author": {
"name": "Meryn Stol",
"email": "merynstol@gmail.com"
},
"description": "Normalizes data that can be found in package.json files.",
+ "license": "BSD-2-Clause",
"repository": {
"type": "git",
"url": "git://github.com/npm/normalize-package-data.git"
],
"readme": "# normalize-package-data [![Build Status](https://travis-ci.org/npm/normalize-package-data.png?branch=master)](https://travis-ci.org/npm/normalize-package-data)\n\nnormalize-package data exports a function that normalizes package metadata. This data is typically found in a package.json file, but in principle could come from any source - for example the npm registry.\n\nnormalize-package-data is used by [read-package-json](https://npmjs.org/package/read-package-json) to normalize the data it reads from a package.json file. In turn, read-package-json is used by [npm](https://npmjs.org/package/npm) and various npm-related tools.\n\n## Installation\n\n```\nnpm install normalize-package-data\n```\n\n## Usage\n\nBasic usage is really simple. You call the function that normalize-package-data exports. Let's call it `normalizeData`.\n\n```javascript\nnormalizeData = require('normalize-package-data')\npackageData = fs.readFileSync(\"package.json\")\nnormalizeData(packageData)\n// packageData is now normalized\n```\n\n#### Strict mode\n\nYou may activate strict validation by passing true as the second argument.\n\n```javascript\nnormalizeData = require('normalize-package-data')\npackageData = fs.readFileSync(\"package.json\")\nwarnFn = function(msg) { console.error(msg) }\nnormalizeData(packageData, true)\n// packageData is now normalized\n```\n\nIf strict mode is activated, only Semver 2.0 version strings are accepted. Otherwise, Semver 1.0 strings are accepted as well. Packages must have a name, and the name field must not have contain leading or trailing whitespace.\n\n#### Warnings\n\nOptionally, you may pass a \"warning\" function. It gets called whenever the `normalizeData` function encounters something that doesn't look right. It indicates less than perfect input data.\n\n```javascript\nnormalizeData = require('normalize-package-data')\npackageData = fs.readFileSync(\"package.json\")\nwarnFn = function(msg) { console.error(msg) }\nnormalizeData(packageData, warnFn)\n// packageData is now normalized. Any number of warnings may have been logged.\n```\n\nYou may combine strict validation with warnings by passing `true` as the second argument, and `warnFn` as third.\n\nWhen `private` field is set to `true`, warnings will be suppressed.\n\n### Potential exceptions\n\nIf the supplied data has an invalid name or version vield, `normalizeData` will throw an error. Depending on where you call `normalizeData`, you may want to catch these errors so can pass them to a callback.\n\n## What normalization (currently) entails\n\n* The value of `name` field gets trimmed (unless in strict mode).\n* The value of the `version` field gets cleaned by `semver.clean`. See [documentation for the semver module](https://github.com/isaacs/node-semver).\n* If `name` and/or `version` fields are missing, they are set to empty strings.\n* If `files` field is not an array, it will be removed.\n* If `bin` field is a string, then `bin` field will become an object with `name` set to the value of the `name` field, and `bin` set to the original string value.\n* If `man` field is a string, it will become an array with the original string as its sole member.\n* If `keywords` field is string, it is considered to be a list of keywords separated by one or more white-space characters. It gets converted to an array by splitting on `\\s+`.\n* All people fields (`author`, `maintainers`, `contributors`) get converted into objects with name, email and url properties.\n* If `bundledDependencies` field (a typo) exists and `bundleDependencies` field does not, `bundledDependencies` will get renamed to `bundleDependencies`.\n* If the value of any of the dependencies fields (`dependencies`, `devDependencies`, `optionalDependencies`) is a string, it gets converted into an object with familiar `name=>value` pairs.\n* The values in `optionalDependencies` get added to `dependencies`. The `optionalDependencies` array is left untouched.\n* As of v2: Dependencies that point at known hosted git providers (currently: github, bitbucket, gitlab) will have their URLs canonicalized, but protocols will be preserved.\n* As of v2: Dependencies that use shortcuts for hosted git providers (`org/proj`, `github:org/proj`, `bitbucket:org/proj`, `gitlab:org/proj`, `gist:docid`) will have the shortcut left in place. (In the case of github, the `org/proj` form will be expanded to `github:org/proj`.) THIS MARKS A BREAKING CHANGE FROM V1, where the shorcut was previously expanded to a URL.\n* If `description` field does not exist, but `readme` field does, then (more or less) the first paragraph of text that's found in the readme is taken as value for `description`.\n* If `repository` field is a string, it will become an object with `url` set to the original string value, and `type` set to `\"git\"`.\n* If `repository.url` is not a valid url, but in the style of \"[owner-name]/[repo-name]\", `repository.url` will be set to https://github.com/[owner-name]/[repo-name]\n* If `bugs` field is a string, the value of `bugs` field is changed into an object with `url` set to the original string value.\n* If `bugs` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `bugs` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/issues . If the repository field points to a GitHub Gist repo url, the associated http url is chosen.\n* If `bugs` field is an object, the resulting value only has email and url properties. If email and url properties are not strings, they are ignored. If no valid values for either email or url is found, bugs field will be removed.\n* If `homepage` field is not a string, it will be removed.\n* If the url in the `homepage` field does not specify a protocol, then http is assumed. For example, `myproject.org` will be changed to `http://myproject.org`.\n* If `homepage` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `homepage` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/ . If the repository field points to a GitHub Gist repo url, the associated http url is chosen.\n\n### Rules for name field\n\nIf `name` field is given, the value of the name field must be a string. The string may not:\n\n* start with a period.\n* contain the following characters: `/@\\s+%`\n* contain and characters that would need to be encoded for use in urls.\n* resemble the word `node_modules` or `favicon.ico` (case doesn't matter).\n\n### Rules for version field\n\nIf `version` field is given, the value of the version field must be a valid *semver* string, as determined by the `semver.valid` method. See [documentation for the semver module](https://github.com/isaacs/node-semver).\n\n### Rules for license field\n\nThe `license` field should be a valid *SDPDX license expression* string, as determined by the `spdx.valid` method. See [documentation for the spdx module](https://github.com/kemitchell/spdx.js).\n\n## Credits\n\nThis package contains code based on read-package-json written by Isaac Z. Schlueter. Used with permisson.\n\n## License\n\nnormalize-package-data is released under the [BSD 2-Clause License](http://opensource.org/licenses/MIT). \nCopyright (c) 2013 Meryn Stol \n",
"readmeFilename": "README.md",
- "gitHead": "a168f6153570465db33d96601576b612a63ed446",
+ "gitHead": "5b7630cb2a9c475bc93cc8a05854587f2dc9a26c",
"bugs": {
"url": "https://github.com/npm/normalize-package-data/issues"
},
- "homepage": "https://github.com/npm/normalize-package-data#readme",
- "_id": "normalize-package-data@2.1.0",
- "_shasum": "31381afb0567a8ab0ae730230c8652ff8a0cdd11",
- "_from": "normalize-package-data@>=2.1.0 <2.2.0"
+ "homepage": "https://github.com/npm/normalize-package-data",
+ "_id": "normalize-package-data@2.2.0",
+ "_shasum": "b4f65b40df659b04820f30a2688db5dabc9dfad9",
+ "_from": "normalize-package-data@2.2.0"
}
--- /dev/null
+var test = require('tap').test
+
+var normalize = require('../')
+var fixer = normalize.fixer
+
+test('mixedcase', function (t) {
+ t.doesNotThrow(function () {
+ fixer.fixNameField({name: 'foo'}, true)
+ })
+
+ t.doesNotThrow(function () {
+ fixer.fixNameField({name: 'foo'}, false)
+ })
+
+ t.doesNotThrow(function () {
+ fixer.fixNameField({name: 'foo'})
+ })
+
+ t.throws(function () {
+ fixer.fixNameField({name: 'Foo'}, true)
+ }, new Error('Invalid name: "Foo"'), 'should throw an error')
+
+ t.throws(function () {
+ fixer.fixNameField({name: 'Foo'}, {strict: true})
+ }, new Error('Invalid name: "Foo"'), 'should throw an error')
+
+ t.doesNotThrow(function () {
+ fixer.fixNameField({name: 'Foo'}, {strict: true, allowLegacyCase: true})
+ })
+
+ t.end()
+})
{
"name": "npm-package-arg",
- "version": "4.0.0",
+ "version": "4.0.1",
"description": "Parse the things that can be arguments to `npm install`",
"main": "npa.js",
"directories": {
"test": "test"
},
"dependencies": {
- "hosted-git-info": "^2.0.2",
+ "hosted-git-info": "^2.1.4",
"semver": "4"
},
"devDependencies": {
},
"repository": {
"type": "git",
- "url": "https://github.com/npm/npm-package-arg"
+ "url": "git+https://github.com/npm/npm-package-arg.git"
},
"author": {
"name": "Isaac Z. Schlueter",
"url": "https://github.com/npm/npm-package-arg/issues"
},
"homepage": "https://github.com/npm/npm-package-arg",
- "gitHead": "25ac404d9f3b77b14be9b05a7dafd9cb99557fdc",
"readme": "# npm-package-arg\n\nParse package name and specifier passed to commands like `npm install` or\n`npm cache add`. This just parses the text given-- it's worth noting that\n`npm` has further logic it applies by looking at your disk to figure out\nwhat ambiguous specifiers are. If you want that logic, please see\n[realize-package-specifier].\n\n[realize-package-specifier]: https://www.npmjs.org/package/realize-package-specifier\n\nArguments look like: `foo@1.2`, `@bar/foo@1.2`, `foo@user/foo`, `http://x.com/foo.tgz`,\n`git+https://github.com/user/foo`, `bitbucket:user/foo`, `foo.tar.gz` or `bar`\n\n## EXAMPLES\n\n```javascript\nvar assert = require(\"assert\")\nvar npa = require(\"npm-package-arg\")\n\n// Pass in the descriptor, and it'll return an object\nvar parsed = npa(\"@bar/foo@1.2\")\n\n// Returns an object like:\n{\n raw: '@bar/foo@1.2', // what was passed in\n name: \"@bar/foo\", // the name of the package\n scope: \"@bar\", // the private scope of the package, or null\n type: \"range\", // the type of specifier this is\n spec: \">=1.2.0 <1.3.0\" // the expanded specifier\n rawSpec: \"1.2\" // the specifier as passed in\n }\n\n// Parsing urls pointing at hosted git services produces a variation:\nvar parsed = npa(\"git+https://github.com/user/foo\")\n\n// Returns an object like:\n{\n raw: 'git+https://github.com/user/foo',\n scope: null,\n name: null,\n rawSpec: 'git+https://github.com/user/foo',\n spec: 'user/foo',\n type: 'hosted',\n hosted: {\n type: 'github',\n ssh: 'git@github.com:user/foo.git',\n sshurl: 'git+ssh://git@github.com/user/foo.git',\n https: 'https://github.com/user/foo.git',\n directUrl: 'https://raw.githubusercontent.com/user/foo/master/package.json'\n }\n}\n\n// Completely unreasonable invalid garbage throws an error\n// Make sure you wrap this in a try/catch if you have not\n// already sanitized the inputs!\nassert.throws(function() {\n npa(\"this is not \\0 a valid package name or url\")\n})\n```\n\n## USING\n\n`var npa = require('npm-package-arg')`\n\n* var result = npa(*arg*)\n\nParses *arg* and returns a result object detailing what *arg* is.\n\n*arg* -- a package descriptor, like: `foo@1.2`, or `foo@user/foo`, or\n`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`\n\n## RESULT OBJECT\n\nThe objects that are returned by npm-package-arg contain the following\nkeys:\n\n* `name` - If known, the `name` field expected in the resulting pkg.\n* `type` - One of the following strings:\n * `git` - A git repo\n * `hosted` - A hosted project, from github, bitbucket or gitlab. Originally\n either a full url pointing at one of these services or a shorthand like\n `user/project` or `github:user/project` for github or `bitbucket:user/project`\n for bitbucket.\n * `tag` - A tagged version, like `\"foo@latest\"`\n * `version` - A specific version number, like `\"foo@1.2.3\"`\n * `range` - A version range, like `\"foo@2.x\"`\n * `local` - A local file or folder path\n * `remote` - An http url (presumably to a tgz)\n* `spec` - The \"thing\". URL, the range, git repo, etc.\n* `hosted` - If type=hosted this will be an object with the following keys:\n * `type` - github, bitbucket or gitlab\n * `ssh` - The ssh path for this git repo\n * `sshUrl` - The ssh URL for this git repo\n * `httpsUrl` - The HTTPS URL for this git repo\n * `directUrl` - The URL for the package.json in this git repo\n* `raw` - The original un-modified string that was provided.\n* `rawSpec` - The part after the `name@...`, as it was originally\n provided.\n* `scope` - If a name is something like `@org/module` then the `scope`\n field will be set to `org`. If it doesn't have a scoped name, then\n scope is `null`.\n",
"readmeFilename": "README.md",
- "_id": "npm-package-arg@4.0.0",
- "_shasum": "04766dc98dbc19f6d627a5817075f4ce13d64a5d",
- "_from": "npm-package-arg@>=4.0.0 <5.0.0"
+ "gitHead": "794c9981033bb16bd4a88c7ba45c109107439172",
+ "_id": "npm-package-arg@4.0.1",
+ "_shasum": "bfbea17cd2b9fdc4fca2f02796794173dbf1877c",
+ "_from": "npm-package-arg@>=4.0.0 <4.1.0"
}
"/path/to/foo": {
name: null,
type: "local",
- spec: "/path/to/foo",
+ spec: path.resolve(__dirname, "/path/to/foo"),
raw: "/path/to/foo"
},
name: null,
type: "hosted",
hosted: { type: "bitbucket" },
- spec: "https://bitbucket.org/user/foo.git",
+ spec: "git+https://bitbucket.org/user/foo.git",
raw: "https://bitbucket.org/user/foo.git"
},
name: null,
type: "hosted",
hosted: { type: "github" },
- spec: "https://github.com/user/foo.git",
+ spec: "git+https://github.com/user/foo.git",
raw: "https://github.com/user/foo.git"
},
name: null,
type: "hosted",
hosted: { type: "gitlab" },
- spec: "https://gitlab.com/user/foo.git",
+ spec: "git+https://gitlab.com/user/foo.git",
raw: "https://gitlab.com/user/foo.git"
},
var crypto = require('crypto')
var Stream = require('stream').Stream
var assert = require('assert')
-var fixer = require('normalize-package-data/lib/fixer.js')
+var fixer = require('normalize-package-data').fixer
var concat = require('concat-stream')
function escaped (name) {
'must pass package metadata to publish'
)
try {
- fixer.fixNameField(metadata, true)
+ fixer.fixNameField(metadata, {strict: true, allowLegacyCase: true})
} catch (er) {
return cb(er)
}
assert(params && typeof params === 'object', 'must pass params to star')
assert(typeof cb === 'function', 'must pass callback to star')
- var starred = params.starred ? true : false
+ var starred = !!params.starred
var auth = params.auth
assert(auth && typeof auth === 'object', 'must pass auth to star')
"browserify"
],
"license": "MIT",
- "readme": "**string_decoder.js** (`require('string_decoder')`) from Node.js core\n\nCopyright Joyent, Inc. and other Node contributors. See LICENCE file for details.\n\nVersion numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. **Prefer the stable version over the unstable.**\n\nThe *build/* directory contains a build script that will scrape the source from the [joyent/node](https://github.com/joyent/node) repo given a specific Node version.",
- "readmeFilename": "README.md",
+ "gitHead": "d46d4fd87cf1d06e031c23f1ba170ca7d4ade9a0",
"bugs": {
"url": "https://github.com/rvagg/string_decoder/issues"
},
"_id": "string_decoder@0.10.31",
"_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94",
+ "_from": "string_decoder@>=0.10.0 <0.11.0",
+ "_npmVersion": "1.4.23",
+ "_npmUser": {
+ "name": "rvagg",
+ "email": "rod@vagg.org"
+ },
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ },
+ {
+ "name": "rvagg",
+ "email": "rod@vagg.org"
+ }
+ ],
+ "dist": {
+ "shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94",
+ "tarball": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ },
+ "directories": {},
"_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "_from": "string_decoder@>=0.10.0 <0.11.0"
+ "readme": "ERROR: No README data found!"
}
},
"name": "npm-registry-client",
"description": "Client for the npm registry",
- "version": "6.3.3",
+ "version": "6.4.0",
"repository": {
"url": "git://github.com/isaacs/npm-registry-client.git"
},
"license": "ISC",
"readme": "# npm-registry-client\n\nThe code that npm uses to talk to the registry.\n\nIt handles all the caching and HTTP calls.\n\n## Usage\n\n```javascript\nvar RegClient = require('npm-registry-client')\nvar client = new RegClient(config)\nvar uri = \"https://registry.npmjs.org/npm\"\nvar params = {timeout: 1000}\n\nclient.get(uri, params, function (error, data, raw, res) {\n // error is an error if there was a problem.\n // data is the parsed data object\n // raw is the json string\n // res is the response from couch\n})\n```\n\n# Registry URLs\n\nThe registry calls take either a full URL pointing to a resource in the\nregistry, or a base URL for the registry as a whole (including the registry\npath – but be sure to terminate the path with `/`). `http` and `https` URLs are\nthe only ones supported.\n\n## Using the client\n\nEvery call to the client follows the same pattern:\n\n* `uri` {String} The *fully-qualified* URI of the registry API method being\n invoked.\n* `params` {Object} Per-request parameters.\n* `callback` {Function} Callback to be invoked when the call is complete.\n\n### Credentials\n\nMany requests to the registry can by authenticated, and require credentials\nfor authorization. These credentials always look the same:\n\n* `username` {String}\n* `password` {String}\n* `email` {String}\n* `alwaysAuth` {Boolean} Whether calls to the target registry are always\n authed.\n\n**or**\n\n* `token` {String}\n* `alwaysAuth` {Boolean} Whether calls to the target registry are always\n authed.\n\n## API\n\n### client.access(uri, params, cb)\n\n* `uri` {String} Registry URL for the package's access API endpoint.\n Looks like `/-/package/<package name>/access`.\n* `params` {Object} Object containing per-request properties.\n * `access` {String} New access level for the package. Can be either\n `public` or `restricted`. Registry will raise an error if trying\n to change the access level of an unscoped package.\n * `auth` {Credentials}\n\nSet the access level for scoped packages. For now, there are only two\naccess levels: \"public\" and \"restricted\".\n\n### client.adduser(uri, params, cb)\n\n* `uri` {String} Base registry URL.\n* `params` {Object} Object containing per-request properties.\n * `auth` {Credentials}\n* `cb` {Function}\n * `error` {Error | null}\n * `data` {Object} the parsed data object\n * `raw` {String} the json\n * `res` {Response Object} response from couch\n\nAdd a user account to the registry, or verify the credentials.\n\n### client.deprecate(uri, params, cb)\n\n* `uri` {String} Full registry URI for the deprecated package.\n* `params` {Object} Object containing per-request properties.\n * `version` {String} Semver version range.\n * `message` {String} The message to use as a deprecation warning.\n * `auth` {Credentials}\n* `cb` {Function}\n\nDeprecate a version of a package in the registry.\n\n### client.distTags.fetch(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `auth` {Credentials}\n* `cb` {Function}\n\nFetch all of the `dist-tags` for the named package.\n\n### client.distTags.add(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `distTag` {String} Name of the new `dist-tag`.\n * `version` {String} Exact version to be mapped to the `dist-tag`.\n * `auth` {Credentials}\n* `cb` {Function}\n\nAdd (or replace) a single dist-tag onto the named package.\n\n### client.distTags.set(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `distTags` {Object} Object containing a map from tag names to package\n versions.\n * `auth` {Credentials}\n* `cb` {Function}\n\nSet all of the `dist-tags` for the named package at once, creating any\n`dist-tags` that do not already exit. Any `dist-tags` not included in the\n`distTags` map will be removed.\n\n### client.distTags.update(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `distTags` {Object} Object containing a map from tag names to package\n versions.\n * `auth` {Credentials}\n* `cb` {Function}\n\nUpdate the values of multiple `dist-tags`, creating any `dist-tags` that do\nnot already exist. Any pre-existing `dist-tags` not included in the `distTags`\nmap will be left alone.\n\n### client.distTags.rm(uri, params, cb)\n\n* `uri` {String} Base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `package` {String} Name of the package.\n * `distTag` {String} Name of the new `dist-tag`.\n * `auth` {Credentials}\n* `cb` {Function}\n\nRemove a single `dist-tag` from the named package.\n\n### client.get(uri, params, cb)\n\n* `uri` {String} The complete registry URI to fetch\n* `params` {Object} Object containing per-request properties.\n * `timeout` {Number} Duration before the request times out. Optional\n (default: never).\n * `follow` {Boolean} Follow 302/301 responses. Optional (default: true).\n * `staleOk` {Boolean} If there's cached data available, then return that to\n the callback quickly, and update the cache the background. Optional\n (default: false).\n * `auth` {Credentials} Optional.\n* `cb` {Function}\n\nFetches data from the registry via a GET request, saving it in the cache folder\nwith the ETag or the \"Last Modified\" timestamp.\n\n### client.publish(uri, params, cb)\n\n* `uri` {String} The registry URI for the package to publish.\n* `params` {Object} Object containing per-request properties.\n * `metadata` {Object} Package metadata.\n * `access` {String} Access for the package. Can be `public` or `restricted` (no default).\n * `body` {Stream} Stream of the package body / tarball.\n * `auth` {Credentials}\n* `cb` {Function}\n\nPublish a package to the registry.\n\nNote that this does not create the tarball from a folder.\n\n### client.star(uri, params, cb)\n\n* `uri` {String} The complete registry URI for the package to star.\n* `params` {Object} Object containing per-request properties.\n * `starred` {Boolean} True to star the package, false to unstar it. Optional\n (default: false).\n * `auth` {Credentials}\n* `cb` {Function}\n\nStar or unstar a package.\n\nNote that the user does not have to be the package owner to star or unstar a\npackage, though other writes do require that the user be the package owner.\n\n### client.stars(uri, params, cb)\n\n* `uri` {String} The base URL for the registry.\n* `params` {Object} Object containing per-request properties.\n * `username` {String} Name of user to fetch starred packages for. Optional\n (default: user in `auth`).\n * `auth` {Credentials} Optional (required if `username` is omitted).\n* `cb` {Function}\n\nView your own or another user's starred packages.\n\n### client.tag(uri, params, cb)\n\n* `uri` {String} The complete registry URI to tag\n* `params` {Object} Object containing per-request properties.\n * `version` {String} Version to tag.\n * `tag` {String} Tag name to apply.\n * `auth` {Credentials}\n* `cb` {Function}\n\nMark a version in the `dist-tags` hash, so that `pkg@tag` will fetch the\nspecified version.\n\n### client.unpublish(uri, params, cb)\n\n* `uri` {String} The complete registry URI of the package to unpublish.\n* `params` {Object} Object containing per-request properties.\n * `version` {String} version to unpublish. Optional – omit to unpublish all\n versions.\n * `auth` {Credentials}\n* `cb` {Function}\n\nRemove a version of a package (or all versions) from the registry. When the\nlast version us unpublished, the entire document is removed from the database.\n\n### client.whoami(uri, params, cb)\n\n* `uri` {String} The base registry for the URI.\n* `params` {Object} Object containing per-request properties.\n * `auth` {Credentials}\n* `cb` {Function}\n\nSimple call to see who the registry thinks you are. Especially useful with\ntoken-based auth.\n\n\n## PLUMBING\n\nThe below are primarily intended for use by the rest of the API, or by the npm\ncaching logic directly.\n\n### client.request(uri, params, cb)\n\n* `uri` {String} URI pointing to the resource to request.\n* `params` {Object} Object containing per-request properties.\n * `method` {String} HTTP method. Optional (default: \"GET\").\n * `body` {Stream | Buffer | String | Object} The request body. Objects\n that are not Buffers or Streams are encoded as JSON. Optional – body\n only used for write operations.\n * `etag` {String} The cached ETag. Optional.\n * `lastModified` {String} The cached Last-Modified timestamp. Optional.\n * `follow` {Boolean} Follow 302/301 responses. Optional (default: true).\n * `auth` {Credentials} Optional.\n* `cb` {Function}\n * `error` {Error | null}\n * `data` {Object} the parsed data object\n * `raw` {String} the json\n * `res` {Response Object} response from couch\n\nMake a generic request to the registry. All the other methods are wrappers\naround `client.request`.\n\n### client.fetch(uri, params, cb)\n\n* `uri` {String} The complete registry URI to upload to\n* `params` {Object} Object containing per-request properties.\n * `headers` {Stream} HTTP headers to be included with the request. Optional.\n * `auth` {Credentials} Optional.\n* `cb` {Function}\n\nFetch a package from a URL, with auth set appropriately if included. Used to\ncache remote tarballs as well as request package tarballs from the registry.\n\n# Configuration\n\nThe client uses its own configuration, which is just passed in as a simple\nnested object. The following are the supported values (with their defaults, if\nany):\n\n* `proxy.http` {URL} The URL to proxy HTTP requests through.\n* `proxy.https` {URL} The URL to proxy HTTPS requests through. Defaults to be\n the same as `proxy.http` if unset.\n* `proxy.localAddress` {IP} The local address to use on multi-homed systems.\n* `ssl.ca` {String} Certificate signing authority certificates to trust.\n* `ssl.certificate` {String} Client certificate (PEM encoded). Enable access\n to servers that require client certificates.\n* `ssl.key` {String} Private key (PEM encoded) for client certificate.\n* `ssl.strict` {Boolean} Whether or not to be strict with SSL certificates.\n Default = `true`\n* `retry.count` {Number} Number of times to retry on GET failures. Default = 2.\n* `retry.factor` {Number} `factor` setting for `node-retry`. Default = 10.\n* `retry.minTimeout` {Number} `minTimeout` setting for `node-retry`.\n Default = 10000 (10 seconds)\n* `retry.maxTimeout` {Number} `maxTimeout` setting for `node-retry`.\n Default = 60000 (60 seconds)\n* `userAgent` {String} User agent header to send. Default =\n `\"node/{process.version}\"`\n* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\n that works, otherwise logs are disabled.\n* `defaultTag` {String} The default tag to use when publishing new packages.\n Default = `\"latest\"`\n* `couchToken` {Object} A token for use with\n [couch-login](https://npmjs.org/package/couch-login).\n* `sessionToken` {string} A random identifier for this set of client requests.\n Default = 8 random hexadecimal bytes.\n",
"readmeFilename": "README.md",
- "gitHead": "bd0ab6fb27f614fca299bc9426dcfbea2fc83adc",
+ "gitHead": "a8d3193832487fb2e6b5015e30d15fe1b15f48e2",
"bugs": {
"url": "https://github.com/isaacs/npm-registry-client/issues"
},
- "homepage": "https://github.com/isaacs/npm-registry-client#readme",
- "_id": "npm-registry-client@6.3.3",
- "_shasum": "fe9cc45b3b8404dfa888b99d7aff3964f3470fb0",
- "_from": "npm-registry-client@6.3.3"
+ "homepage": "https://github.com/isaacs/npm-registry-client",
+ "_id": "npm-registry-client@6.4.0",
+ "_shasum": "4da1adfd1b63c9a7b9a6626eb10e36665c29b5f4",
+ "_from": "npm-registry-client@6.4.0"
}
--- /dev/null
+var tap = require('tap')
+var fs = require('fs')
+
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
+
+var auth = {
+ username: 'username',
+ password: '%1234@asdf%',
+ email: 'i@izs.me',
+ alwaysAuth: true
+}
+
+var client = common.freshClient()
+
+tap.test('publish mixcase name', function (t) {
+ // not really a tarball, but doesn't matter
+ var bodyPath = require.resolve('../package.json')
+ var tarball = fs.createReadStream(bodyPath)
+ var pd = fs.readFileSync(bodyPath, 'base64')
+ var pkg = require('../package.json')
+ var lastTime = null
+
+ // change to mixed case name
+ pkg.name = 'npm-Registry-Client'
+
+ server.expect('/npm-Registry-Client', function (req, res) {
+ t.equal(req.method, 'PUT')
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
+ b += d
+ })
+
+ req.on('end', function () {
+ var o = lastTime = JSON.parse(b)
+ t.equal(o._id, 'npm-Registry-Client')
+ t.equal(o['dist-tags'].latest, pkg.version)
+ t.has(o.versions[pkg.version], pkg)
+ t.same(o.maintainers, [ { name: 'username', email: 'i@izs.me' } ])
+ var att = o._attachments[ pkg.name + '-' + pkg.version + '.tgz' ]
+ t.same(att.data, pd)
+ res.statusCode = 409
+ res.json({reason: 'must supply latest _rev to update existing package'})
+ })
+ })
+
+ server.expect('/npm-Registry-Client?write=true', function (req, res) {
+ t.equal(req.method, 'GET')
+ t.ok(lastTime)
+ for (var i in lastTime.versions) {
+ var v = lastTime.versions[i]
+ delete lastTime.versions[i]
+ lastTime.versions['0.0.2'] = v
+ lastTime['dist-tags'] = { latest: '0.0.2' }
+ }
+ lastTime._rev = 'asdf'
+ res.json(lastTime)
+ })
+
+ server.expect('/npm-Registry-Client', function (req, res) {
+ t.equal(req.method, 'PUT')
+ t.ok(lastTime)
+
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
+ b += d
+ })
+
+ req.on('end', function () {
+ var o = JSON.parse(b)
+ t.equal(o._rev, 'asdf')
+ t.deepEqual(o.versions['0.0.2'], o.versions[pkg.version])
+ res.statusCode = 201
+ res.json({created: true})
+ })
+ })
+
+ var params = {
+ metadata: pkg,
+ access: 'public',
+ body: tarball,
+ auth: auth
+ }
+ client.publish('http://localhost:1337/', params, function (er, data) {
+ if (er) throw er
+ t.deepEqual(data, { created: true })
+ t.end()
+ })
+})
--- /dev/null
+var test = require('tap').test
+var crypto = require('crypto')
+var fs = require('fs')
+
+var server = require('./lib/server.js')
+var common = require('./lib/common.js')
+var client = common.freshClient()
+
+var URI = 'http://localhost:1337/'
+var USERNAME = 'username'
+var PASSWORD = '%1234@asdf%'
+var EMAIL = 'i@izs.me'
+var METADATA = require('../package.json')
+var ACCESS = 'public'
+// not really a tarball, but doesn't matter
+var BODY_PATH = require.resolve('../package.json')
+var BODY = fs.createReadStream(BODY_PATH)
+var AUTH = {
+ username: USERNAME,
+ password: PASSWORD,
+ email: EMAIL
+}
+var PARAMS = {
+ metadata: METADATA,
+ access: ACCESS,
+ body: BODY,
+ auth: AUTH
+}
+
+test('publish-new-mixcase-name', function (t) {
+ var pd = fs.readFileSync(BODY_PATH, 'base64')
+
+ // change to mixed-case name
+ METADATA.name = 'npm-Registry-Client'
+
+ server.expect('/npm-Registry-Client', function (req, res) {
+ t.equal(req.method, 'PUT')
+ var b = ''
+ req.setEncoding('utf8')
+ req.on('data', function (d) {
+ b += d
+ })
+
+ req.on('end', function () {
+ var o = JSON.parse(b)
+ t.equal(o._id, 'npm-Registry-Client')
+ t.equal(o['dist-tags'].latest, METADATA.version)
+ t.equal(o.access, ACCESS)
+ t.has(o.versions[METADATA.version], METADATA)
+ t.same(o.maintainers, [{ name: 'username', email: 'i@izs.me' }])
+ t.same(o.maintainers, o.versions[METADATA.version].maintainers)
+
+ var att = o._attachments[METADATA.name + '-' + METADATA.version + '.tgz']
+ t.same(att.data, pd)
+
+ var hash = crypto.createHash('sha1').update(pd, 'base64').digest('hex')
+ t.equal(o.versions[METADATA.version].dist.shasum, hash)
+
+ res.statusCode = 403
+ res.json({error: 'Name must be lower-case'})
+ })
+ })
+
+ client.publish(URI, PARAMS, function (er, data, json, res) {
+ t.assert(er instanceof Error) // expect error
+
+ // TODO: need a test that ensures useful error message
+ // t.similar(data.error, /must be lower-case/)
+
+ t.end()
+ })
+})
})
test('run request through its paces', function (t) {
- t.plan(28)
+ t.plan(29)
server.expect('/request-defaults', function (req, res) {
t.equal(req.method, 'GET', 'uses GET by default')
{
"name": "npm-user-validate",
- "version": "0.1.1",
+ "version": "0.1.2",
"description": "User validations for npm",
"main": "npm-user-validate.js",
"devDependencies": {
"name": "Robert Kowalski",
"email": "rok@kowalski.gd"
},
- "license": "BSD",
- "gitHead": "64c9bd4ded742c41afdb3a8414fbbfdbfdcdf6b7",
+ "license": "BSD-2-Clause",
+ "gitHead": "e5b280babff5b73fe74b496461bcf424a51881e1",
"bugs": {
"url": "https://github.com/npm/npm-user-validate/issues"
},
- "homepage": "https://github.com/npm/npm-user-validate",
- "_id": "npm-user-validate@0.1.1",
- "_shasum": "ea7774636c3c8fe6d01e174bd9f2ee0e22eeed57",
+ "homepage": "https://github.com/npm/npm-user-validate#readme",
+ "_id": "npm-user-validate@0.1.2",
+ "_shasum": "d585da0b47c9f41a9e6ca684b6fd84ba41ebe87d",
"_from": "npm-user-validate@>=0.1.1 <0.2.0",
- "_npmVersion": "2.1.3",
- "_nodeVersion": "0.10.31",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
"_npmUser": {
"name": "isaacs",
- "email": "i@izs.me"
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "d585da0b47c9f41a9e6ca684b6fd84ba41ebe87d",
+ "tarball": "http://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.1.2.tgz"
},
"maintainers": [
{
"email": "i@izs.me"
}
],
- "dist": {
- "shasum": "ea7774636c3c8fe6d01e174bd9f2ee0e22eeed57",
- "tarball": "http://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.1.1.tgz"
- },
"directories": {},
- "_resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.1.1.tgz"
+ "_resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.1.2.tgz"
}
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+The ISC License
-The BSD License
+Copyright (c) Isaac Z. Schlueter and Contributors
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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 AUTHOR 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 AUTHOR 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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
var gaugeTheme = undefined
log.enableUnicode = function () {
- gaugeTheme = gauge.unicode
+ gaugeTheme = Gauge.unicode
log.gauge.setTheme(gaugeTheme)
}
log.disableUnicode = function () {
- gaugeTheme = gauge.ascii
+ gaugeTheme = Gauge.ascii
log.gauge.setTheme(gaugeTheme)
}
"version": "0.1.0",
"repository": {
"type": "git",
- "url": "git://github.com/visionmedia/node-delegates"
+ "url": "git://github.com/visionmedia/node-delegates.git"
},
"description": "delegate methods and accessors to another property",
"keywords": [
"tarball": "http://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz"
+ "_resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz",
+ "readme": "ERROR: No README data found!"
}
"main": "lib/util.js",
"repository": {
"type": "git",
- "url": "git://github.com/isaacs/core-util-is"
+ "url": "git://github.com/isaacs/core-util-is.git"
},
"keywords": [
"util",
},
"readme": "# core-util-is\n\nThe `util.is*` functions introduced in Node v0.12.\n",
"readmeFilename": "README.md",
- "homepage": "https://github.com/isaacs/core-util-is",
+ "homepage": "https://github.com/isaacs/core-util-is#readme",
"_id": "core-util-is@1.0.1",
- "dist": {
- "shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
- "tarball": "http://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
- },
- "_from": "core-util-is@>=1.0.0 <1.1.0",
- "_npmVersion": "1.3.23",
- "_npmUser": {
- "name": "isaacs",
- "email": "i@izs.me"
- },
- "maintainers": [
- {
- "name": "isaacs",
- "email": "i@izs.me"
- }
- ],
- "directories": {},
"_shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
- "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+ "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz",
+ "_from": "core-util-is@>=1.0.0 <1.1.0"
}
"url": "http://juliangruber.com"
},
"license": "MIT",
- "_id": "isarray@0.0.1",
- "dist": {
- "shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf",
- "tarball": "http://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
- },
- "_from": "isarray@0.0.1",
- "_npmVersion": "1.2.18",
- "_npmUser": {
- "name": "juliangruber",
- "email": "julian@juliangruber.com"
- },
- "maintainers": [
- {
- "name": "juliangruber",
- "email": "julian@juliangruber.com"
- }
- ],
- "directories": {},
- "_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf",
- "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "readme": "\n# isarray\n\n`Array#isArray` for older browsers.\n\n## Usage\n\n```js\nvar isArray = require('isarray');\n\nconsole.log(isArray([])); // => true\nconsole.log(isArray({})); // => false\n```\n\n## Installation\n\nWith [npm](http://npmjs.org) do\n\n```bash\n$ npm install isarray\n```\n\nThen bundle for the browser with\n[browserify](https://github.com/substack/browserify).\n\nWith [component](http://component.io) do\n\n```bash\n$ component install juliangruber/isarray\n```\n\n## License\n\n(MIT)\n\nCopyright (c) 2013 Julian Gruber <julian@juliangruber.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
+ "readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/juliangruber/isarray/issues"
},
- "readme": "ERROR: No README data found!"
+ "_id": "isarray@0.0.1",
+ "_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf",
+ "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "_from": "isarray@0.0.1"
}
"browserify"
],
"license": "MIT",
- "gitHead": "d46d4fd87cf1d06e031c23f1ba170ca7d4ade9a0",
+ "readme": "**string_decoder.js** (`require('string_decoder')`) from Node.js core\n\nCopyright Joyent, Inc. and other Node contributors. See LICENCE file for details.\n\nVersion numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. **Prefer the stable version over the unstable.**\n\nThe *build/* directory contains a build script that will scrape the source from the [joyent/node](https://github.com/joyent/node) repo given a specific Node version.",
+ "readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/rvagg/string_decoder/issues"
},
"_id": "string_decoder@0.10.31",
"_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94",
- "_from": "string_decoder@>=0.10.0 <0.11.0",
- "_npmVersion": "1.4.23",
- "_npmUser": {
- "name": "rvagg",
- "email": "rod@vagg.org"
- },
- "maintainers": [
- {
- "name": "substack",
- "email": "mail@substack.net"
- },
- {
- "name": "rvagg",
- "email": "rod@vagg.org"
- }
- ],
- "dist": {
- "shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94",
- "tarball": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
- },
- "directories": {},
"_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "readme": "ERROR: No README data found!"
+ "_from": "string_decoder@>=0.10.0 <0.11.0"
}
},
"repository": {
"type": "git",
- "url": "git://github.com/isaacs/readable-stream"
+ "url": "git://github.com/isaacs/readable-stream.git"
},
"keywords": [
"readable",
},
"repository": {
"type": "git",
- "url": "https://github.com/iarna/are-we-there-yet.git"
+ "url": "git+https://github.com/iarna/are-we-there-yet.git"
},
"author": {
"name": "Rebecca Turner",
"tarball": "http://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.4.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.4.tgz"
+ "_resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.4.tgz",
+ "readme": "ERROR: No README data found!"
}
+++ /dev/null
-gauge
-=====
-
-A nearly stateless terminal based horizontal guage / progress bar.
-
-```javascript
-var Gauge = require("gauge")
-
-var gauge = new Gauge()
-
-gauge.show("test", 0.20)
-
-gauge.pulse("this")
-
-gauge.hide()
-```
-
-![](example.png)
-
-
-### `var gauge = new Gauge([options], [ansiStream])`
-
-* **options** – *(optional)* An option object. (See [below] for details.)
-* **ansiStream** – *(optional)* A stream that's been blessed by the [ansi]
- module to include various commands for controlling the cursor in a terminal.
-
-[ansi]: https://www.npmjs.com/package/ansi
-[below]: #theme-objects
-
-Constructs a new gauge. Gauges are drawn on a single line, and are not drawn
-if the current terminal isn't a tty.
-
-The **options** object can have the following properties, all of which are
-optional:
-
-* maxUpdateFrequency: defaults to 50 msec, the gauge will not be drawn more
- than once in this period of time. This applies to `show` and `pulse`
- calls, but if you `hide` and then `show` the gauge it will draw it
- regardless of time since last draw.
-* theme: defaults to Gauge.unicode` if the terminal supports
- unicode according to [has-unicode], otherwise it defaults to `Gauge.ascii`.
- Details on the [theme object](#theme-objects) are documented elsewhere.
-* template: see [documentation elsewhere](#template-objects) for
- defaults and details.
-
-[has-unicode]: https://www.npmjs.com/package/has-unicode
-
-If **ansiStream** isn't passed in, then one will be constructed from stderr
-with `ansi(process.stderr)`.
-
-### `gauge.show([name, [completed]])`
-
-* **name** – *(optional)* The name of the current thing contributing to progress. Defaults to the last value used, or "".
-* **completed** – *(optional)* The portion completed as a value between 0 and 1. Defaults to the last value used, or 0.
-
-If `process.stdout.isTTY` is false then this does nothing. If completed is 0
-and `gauge.pulse` has never been called, then similarly nothing will be printed.
-
-If `maxUpdateFrequency` msec haven't passed since the last call to `show` or
-`pulse` then similarly, nothing will be printed. (Actually, the update is
-deferred until `maxUpdateFrequency` msec have passed and if nothing else has
-happened, the gauge update will happen.)
-
-### `gauge.hide()`
-
-Removes the gauge from the terminal.
-
-### `gauge.pulse([name])`
-
-* **name** – *(optional)* The specific thing that triggered this pulse
-
-Spins the spinner in the gauge to show output. If **name** is included then
-it will be combined with the last name passed to `gauge.show` using the
-subsection property of the theme (typically a right facing arrow).
-
-### `gauge.disable()`
-
-Hides the gauge and ignores further calls to `show` or `pulse`.
-
-### `gauge.enable()`
-
-Shows the gauge and resumes updating when `show` or `pulse` is called.
-
-### Theme Objects
-
-There are two theme objects available as a part of the module, `Gauge.unicode` and `Gauge.ascii`.
-Theme objects have the follow properties:
-
-| Property | Unicode | ASCII |
-| ---------- | ------- | ----- |
-| startgroup | ╢ | \| |
-| endgroup | ╟ | \| |
-| complete | █ | # |
-| incomplete | ░ | - |
-| spinner | ▀▐▄▌ | -\\\|/ |
-| subsection | → | -> |
-
-*startgroup*, *endgroup* and *subsection* can be as many characters as you want.
-
-*complete* and *incomplete* should be a single character width each.
-
-*spinner* is a list of characters to use in turn when displaying an activity
-spinner. The Gauge will spin as many characters as you give here.
-
-### Template Objects
-
-A template is an array of objects and strings that, after being evaluated,
-will be turned into the gauge line. The default template is:
-
-```javascript
-[
- {type: "name", separated: true, maxLength: 25, minWidth: 25, align: "left"},
- {type: "spinner", separated: true},
- {type: "startgroup"},
- {type: "completionbar"},
- {type: "endgroup"}
-]
-```
-
-The various template elements can either be **plain strings**, in which case they will
-be be included verbatum in the output.
-
-If the template element is an object, it can have the following keys:
-
-* *type* can be:
- * `name` – The most recent name passed to `show`; if this is in response to a
- `pulse` then the name passed to `pulse` will be appended along with the
- subsection property from the theme.
- * `spinner` – If you've ever called `pulse` this will be one of the characters
- from the spinner property of the theme.
- * `startgroup` – The `startgroup` property from the theme.
- * `completionbar` – This progress bar itself
- * `endgroup` – The `endgroup` property from the theme.
-* *separated* – If true, the element will be separated with spaces from things on
- either side (and margins count as space, so it won't be indented), but only
- if its included.
-* *maxLength* – The maximum length for this element. If its value is longer it
- will be truncated.
-* *minLength* – The minimum length for this element. If its value is shorter it
- will be padded according to the *align* value.
-* *align* – (Default: left) Possible values "left", "right" and "center". Works
- as you'd expect from word processors.
-* *length* – Provides a single value for both *minLength* and *maxLength*. If both
- *length* and *minLength or *maxLength* are specifed then the latter take precedence.
-
-### Tracking Completion
-
-If you have more than one thing going on that you want to track completion
-of, you may find the related [are-we-there-yet] helpful. It's `change`
-event can be wired up to the `show` method to get a more traditional
-progress bar interface.
-
-[are-we-there-yet]: https://www.npmjs.com/package/are-we-there-yet
+++ /dev/null
-has-unicode
-===========
-
-Try to guess if your terminal supports unicode
},
"repository": {
"type": "git",
- "url": "https://github.com/iarna/has-unicode"
+ "url": "git+https://github.com/iarna/has-unicode.git"
},
"keywords": [
"unicode",
"tarball": "http://registry.npmjs.org/has-unicode/-/has-unicode-1.0.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-1.0.0.tgz"
+ "_resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-1.0.0.tgz",
+ "readme": "ERROR: No README data found!"
}
],
"repository": {
"type": "git",
- "url": "https://github.com/lodash/lodash"
+ "url": "git+https://github.com/lodash/lodash.git"
},
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
],
"repository": {
"type": "git",
- "url": "https://github.com/lodash/lodash"
+ "url": "git+https://github.com/lodash/lodash.git"
},
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
],
"repository": {
"type": "git",
- "url": "https://github.com/lodash/lodash"
+ "url": "git+https://github.com/lodash/lodash.git"
},
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
],
"repository": {
"type": "git",
- "url": "https://github.com/lodash/lodash"
+ "url": "git+https://github.com/lodash/lodash.git"
},
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
"tarball": "http://registry.npmjs.org/lodash.pad/-/lodash.pad-3.1.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-3.1.0.tgz"
+ "_resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-3.1.0.tgz",
+ "readme": "ERROR: No README data found!"
}
-# lodash.padleft v3.1.0
+# lodash.padleft v3.1.1
The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.padLeft` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
var padLeft = require('lodash.padleft');
```
-See the [documentation](https://lodash.com/docs#padLeft) or [package source](https://github.com/lodash/lodash/blob/3.1.0-npm-packages/lodash.padleft) for more details.
+See the [documentation](https://lodash.com/docs#padLeft) or [package source](https://github.com/lodash/lodash/blob/3.1.1-npm-packages/lodash.padleft) for more details.
/**
- * lodash 3.1.0 (Custom Build) <https://lodash.com/>
+ * lodash 3.1.1 (Custom Build) <https://lodash.com/>
* Build: `lodash modern modularize exports="npm" -o ./`
* Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.8.2 <http://underscorejs.org/LICENSE>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license <https://lodash.com/license>
*/
function createPadDir(fromRight) {
return function(string, length, chars) {
string = baseToString(string);
- return string && ((fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string));
+ return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);
};
}
{
"name": "lodash.padleft",
- "version": "3.1.0",
+ "version": "3.1.1",
"description": "The modern build of lodash’s `_.padLeft` as a module.",
"homepage": "https://lodash.com/",
"icon": "https://lodash.com/icon.svg",
],
"repository": {
"type": "git",
- "url": "https://github.com/lodash/lodash"
+ "url": "git+https://github.com/lodash/lodash.git"
},
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
"bugs": {
"url": "https://github.com/lodash/lodash/issues"
},
- "_id": "lodash.padleft@3.1.0",
- "_shasum": "ac94eeeb3ec4df6394b893c6f4f7faa5cb96a5c1",
+ "_id": "lodash.padleft@3.1.1",
+ "_shasum": "150151f1e0245edba15d50af2d71f1d5cff46530",
"_from": "lodash.padleft@>=3.0.0 <4.0.0",
- "_npmVersion": "2.7.3",
- "_nodeVersion": "0.12.0",
+ "_npmVersion": "2.9.0",
+ "_nodeVersion": "0.12.2",
"_npmUser": {
"name": "jdalton",
"email": "john.david.dalton@gmail.com"
}
],
"dist": {
- "shasum": "ac94eeeb3ec4df6394b893c6f4f7faa5cb96a5c1",
- "tarball": "http://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.1.0.tgz"
+ "shasum": "150151f1e0245edba15d50af2d71f1d5cff46530",
+ "tarball": "http://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.1.1.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.1.0.tgz"
+ "_resolved": "https://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.1.1.tgz",
+ "readme": "ERROR: No README data found!"
}
-# lodash.padright v3.1.0
+# lodash.padright v3.1.1
The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.padRight` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
var padRight = require('lodash.padright');
```
-See the [documentation](https://lodash.com/docs#padRight) or [package source](https://github.com/lodash/lodash/blob/3.1.0-npm-packages/lodash.padright) for more details.
+See the [documentation](https://lodash.com/docs#padRight) or [package source](https://github.com/lodash/lodash/blob/3.1.1-npm-packages/lodash.padright) for more details.
/**
- * lodash 3.1.0 (Custom Build) <https://lodash.com/>
+ * lodash 3.1.1 (Custom Build) <https://lodash.com/>
* Build: `lodash modern modularize exports="npm" -o ./`
* Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
- * Based on Underscore.js 1.8.2 <http://underscorejs.org/LICENSE>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
* Available under MIT license <https://lodash.com/license>
*/
function createPadDir(fromRight) {
return function(string, length, chars) {
string = baseToString(string);
- return string && ((fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string));
+ return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);
};
}
{
"name": "lodash.padright",
- "version": "3.1.0",
+ "version": "3.1.1",
"description": "The modern build of lodash’s `_.padRight` as a module.",
"homepage": "https://lodash.com/",
"icon": "https://lodash.com/icon.svg",
],
"repository": {
"type": "git",
- "url": "https://github.com/lodash/lodash"
+ "url": "git+https://github.com/lodash/lodash.git"
},
"scripts": {
"test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
"bugs": {
"url": "https://github.com/lodash/lodash/issues"
},
- "_id": "lodash.padright@3.1.0",
- "_shasum": "155aa4ed10f4103829031a14516dcb5f3f6c777f",
+ "_id": "lodash.padright@3.1.1",
+ "_shasum": "79f7770baaa39738c040aeb5465e8d88f2aacec0",
"_from": "lodash.padright@>=3.0.0 <4.0.0",
- "_npmVersion": "2.7.3",
- "_nodeVersion": "0.12.0",
+ "_npmVersion": "2.9.0",
+ "_nodeVersion": "0.12.2",
"_npmUser": {
"name": "jdalton",
"email": "john.david.dalton@gmail.com"
}
],
"dist": {
- "shasum": "155aa4ed10f4103829031a14516dcb5f3f6c777f",
- "tarball": "http://registry.npmjs.org/lodash.padright/-/lodash.padright-3.1.0.tgz"
+ "shasum": "79f7770baaa39738c040aeb5465e8d88f2aacec0",
+ "tarball": "http://registry.npmjs.org/lodash.padright/-/lodash.padright-3.1.1.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/lodash.padright/-/lodash.padright-3.1.0.tgz"
+ "_resolved": "https://registry.npmjs.org/lodash.padright/-/lodash.padright-3.1.1.tgz",
+ "readme": "ERROR: No README data found!"
}
},
"repository": {
"type": "git",
- "url": "https://github.com/iarna/gauge"
+ "url": "git+https://github.com/iarna/gauge.git"
},
"keywords": [
"progressbar",
"tarball": "http://registry.npmjs.org/gauge/-/gauge-1.2.0.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.0.tgz"
+ "_resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.0.tgz",
+ "readme": "ERROR: No README data found!"
}
},
"name": "npmlog",
"description": "logger for npm",
- "version": "1.2.0",
+ "version": "1.2.1",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/npmlog.git"
"devDependencies": {
"tap": ""
},
- "license": "BSD",
- "gitHead": "1fe2892a8b9dacb775d4fb365315865f421f4ca9",
+ "license": "ISC",
+ "gitHead": "4e1a73a567036064ded425a7d48c863d53550b4f",
"bugs": {
"url": "https://github.com/isaacs/npmlog/issues"
},
- "homepage": "https://github.com/isaacs/npmlog",
- "_id": "npmlog@1.2.0",
- "_shasum": "b512f18ae8696a0192ada78ba00c06dbbd91bafb",
- "_from": "npmlog@>=1.2.0 <1.3.0",
- "_npmVersion": "2.6.0",
- "_nodeVersion": "1.1.0",
+ "homepage": "https://github.com/isaacs/npmlog#readme",
+ "_id": "npmlog@1.2.1",
+ "_shasum": "28e7be619609b53f7ad1dd300a10d64d716268b6",
+ "_from": "npmlog@>=1.2.1 <1.3.0",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
"_npmUser": {
- "name": "iarna",
- "email": "me@re-becca.org"
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "28e7be619609b53f7ad1dd300a10d64d716268b6",
+ "tarball": "http://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz"
},
"maintainers": [
{
"email": "me@re-becca.org"
}
],
- "dist": {
- "shasum": "b512f18ae8696a0192ada78ba00c06dbbd91bafb",
- "tarball": "http://registry.npmjs.org/npmlog/-/npmlog-1.2.0.tgz"
- },
"directories": {},
- "_resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.0.tgz"
+ "_resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz",
+ "readme": "ERROR: No README data found!"
}
--- /dev/null
+*.swp
+.*.swp
+
+.DS_Store
+*~
+.project
+.settings
+npm-debug.log
+coverage.html
+.idea
+lib-cov
+
+node_modules
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+The ISC License
-The BSD License
+Copyright (c) Isaac Z. Schlueter and Contributors
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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 AUTHOR 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 AUTHOR 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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
"name": "osenv",
- "version": "0.1.0",
+ "version": "0.1.1",
"main": "osenv.js",
"directories": {
"test": "test"
},
"repository": {
"type": "git",
- "url": "git://github.com/isaacs/osenv"
+ "url": "git+https://github.com/npm/osenv.git"
},
"keywords": [
"environment",
"email": "i@izs.me",
"url": "http://blog.izs.me/"
},
- "license": "BSD",
+ "license": "ISC",
"description": "Look up environment settings specific to different operating systems",
- "readme": "# osenv\n\nLook up environment settings specific to different operating systems.\n\n## Usage\n\n```javascript\nvar osenv = require('osenv')\nvar path = osenv.path()\nvar user = osenv.user()\n// etc.\n\n// Some things are not reliably in the env, and have a fallback command:\nvar h = osenv.hostname(function (er, hostname) {\n h = hostname\n})\n// This will still cause it to be memoized, so calling osenv.hostname()\n// is now an immediate operation.\n\n// You can always send a cb, which will get called in the nextTick\n// if it's been memoized, or wait for the fallback data if it wasn't\n// found in the environment.\nosenv.hostname(function (er, hostname) {\n if (er) console.error('error looking up hostname')\n else console.log('this machine calls itself %s', hostname)\n})\n```\n\n## osenv.hostname()\n\nThe machine name. Calls `hostname` if not found.\n\n## osenv.user()\n\nThe currently logged-in user. Calls `whoami` if not found.\n\n## osenv.prompt()\n\nEither PS1 on unix, or PROMPT on Windows.\n\n## osenv.tmpdir()\n\nThe place where temporary files should be created.\n\n## osenv.home()\n\nNo place like it.\n\n## osenv.path()\n\nAn array of the places that the operating system will search for\nexecutables.\n\n## osenv.editor() \n\nReturn the executable name of the editor program. This uses the EDITOR\nand VISUAL environment variables, and falls back to `vi` on Unix, or\n`notepad.exe` on Windows.\n\n## osenv.shell()\n\nThe SHELL on Unix, which Windows calls the ComSpec. Defaults to 'bash'\nor 'cmd'.\n",
- "readmeFilename": "README.md",
+ "gitHead": "769ada6737026254372e3013b702c450a9b781e9",
"bugs": {
- "url": "https://github.com/isaacs/osenv/issues"
+ "url": "https://github.com/npm/osenv/issues"
},
- "homepage": "https://github.com/isaacs/osenv",
- "_id": "osenv@0.1.0",
- "_shasum": "61668121eec584955030b9f470b1d2309504bfcb",
- "_from": "osenv@~0.1.0"
+ "homepage": "https://github.com/npm/osenv#readme",
+ "_id": "osenv@0.1.1",
+ "_shasum": "ddc7c4bb86c64a3022e95f030ee028e9a5996c07",
+ "_from": "osenv@0.1.1",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "ddc7c4bb86c64a3022e95f030ee028e9a5996c07",
+ "tarball": "http://registry.npmjs.org/osenv/-/osenv-0.1.1.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "robertkowalski",
+ "email": "rok@kowalski.gd"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ }
+ ],
+ "_resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.1.tgz"
}
--- /dev/null
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-Copyright (c) Isaac Z. Schlueter ("Author")
-All rights reserved.
+The ISC License
-The BSD License
+Copyright (c) Isaac Z. Schlueter and Contributors
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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 AUTHOR 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 AUTHOR 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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
"name": "mute-stream",
- "version": "0.0.4",
+ "version": "0.0.5",
"main": "mute.js",
"directories": {
"test": "test"
},
"repository": {
"type": "git",
- "url": "git://github.com/isaacs/mute-stream"
+ "url": "git://github.com/isaacs/mute-stream.git"
},
"keywords": [
"mute",
"email": "i@izs.me",
"url": "http://blog.izs.me/"
},
- "license": "BSD",
+ "license": "ISC",
"description": "Bytes go in, but they don't come out (when muted).",
- "readme": "# mute-stream\n\nBytes go in, but they don't come out (when muted).\n\nThis is a basic pass-through stream, but when muted, the bytes are\nsilently dropped, rather than being passed through.\n\n## Usage\n\n```javascript\nvar MuteStream = require('mute-stream')\n\nvar ms = new MuteStream(options)\n\nms.pipe(process.stdout)\nms.write('foo') // writes 'foo' to stdout\nms.mute()\nms.write('bar') // does not write 'bar'\nms.unmute()\nms.write('baz') // writes 'baz' to stdout\n\n// can also be used to mute incoming data\nvar ms = new MuteStream\ninput.pipe(ms)\n\nms.on('data', function (c) {\n console.log('data: ' + c)\n})\n\ninput.emit('data', 'foo') // logs 'foo'\nms.mute()\ninput.emit('data', 'bar') // does not log 'bar'\nms.unmute()\ninput.emit('data', 'baz') // logs 'baz'\n```\n\n## Options\n\nAll options are optional.\n\n* `replace` Set to a string to replace each character with the\n specified string when muted. (So you can show `****` instead of the\n password, for example.)\n\n* `prompt` If you are using a replacement char, and also using a\n prompt with a readline stream (as for a `Password: *****` input),\n then specify what the prompt is so that backspace will work\n properly. Otherwise, pressing backspace will overwrite the prompt\n with the replacement character, which is weird.\n\n## ms.mute()\n\nSet `muted` to `true`. Turns `.write()` into a no-op.\n\n## ms.unmute()\n\nSet `muted` to `false`\n\n## ms.isTTY\n\nTrue if the pipe destination is a TTY, or if the incoming pipe source is\na TTY.\n\n## Other stream methods...\n\nThe other standard readable and writable stream methods are all\navailable. The MuteStream object acts as a facade to its pipe source\nand destination.\n",
- "readmeFilename": "README.md",
+ "gitHead": "17d9854a315f56088d039534f87b740e470a9af0",
"bugs": {
"url": "https://github.com/isaacs/mute-stream/issues"
},
- "_id": "mute-stream@0.0.4",
- "_from": "mute-stream@~0.0.4"
+ "homepage": "https://github.com/isaacs/mute-stream#readme",
+ "_id": "mute-stream@0.0.5",
+ "_shasum": "8fbfabb0a98a253d3184331f9e8deb7372fac6c0",
+ "_from": "mute-stream@>=0.0.4 <0.1.0",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "8fbfabb0a98a253d3184331f9e8deb7372fac6c0",
+ "tarball": "http://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "_resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz"
}
{
"name": "read",
- "version": "1.0.5",
+ "version": "1.0.6",
"main": "lib/read.js",
"dependencies": {
"mute-stream": "~0.0.4"
"type": "git",
"url": "git://github.com/isaacs/read.git"
},
- "license": "BSD",
+ "license": "ISC",
"scripts": {
"test": "tap test/*.js"
},
- "readme": "## read\n\nFor reading user input from stdin.\n\nSimilar to the `readline` builtin's `question()` method, but with a\nfew more features.\n\n## USAGE\n\n```javascript\nvar read = require(\"read\")\nread(options, callback)\n```\n\nThe callback gets called with either the user input, or the default\nspecified, or an error, as `callback(error, result, isDefault)`\nnode style.\n\n## OPTIONS\n\nEvery option is optional.\n\n* `prompt` What to write to stdout before reading input.\n* `silent` Don't echo the output as the user types it.\n* `replace` Replace silenced characters with the supplied character value.\n* `timeout` Number of ms to wait for user input before giving up.\n* `default` The default value if the user enters nothing.\n* `edit` Allow the user to edit the default value.\n* `terminal` Treat the output as a TTY, whether it is or not.\n* `input` Readable stream to get input data from. (default `process.stdin`)\n* `output` Writeable stream to write prompts to. (default: `process.stdout`)\n\nIf silent is true, and the input is a TTY, then read will set raw\nmode, and read character by character.\n\n## COMPATIBILITY\n\nThis module works sort of with node 0.6. It does not work with node\nversions less than 0.6. It is best on node 0.8.\n\nOn node version 0.6, it will remove all listeners on the input\nstream's `data` and `keypress` events, because the readline module did\nnot fully clean up after itself in that version of node, and did not\nmake it possible to clean up after it in a way that has no potential\nfor side effects.\n\nAdditionally, some of the readline options (like `terminal`) will not\nfunction in versions of node before 0.8, because they were not\nimplemented in the builtin readline module.\n\n## CONTRIBUTING\n\nPatches welcome.\n",
- "readmeFilename": "README.md",
+ "gitHead": "2f5101c8e41332a033e5aa4e27e33fd6e09598e2",
"bugs": {
"url": "https://github.com/isaacs/read/issues"
},
- "_id": "read@1.0.5",
- "_from": "read@latest"
+ "homepage": "https://github.com/isaacs/read#readme",
+ "_id": "read@1.0.6",
+ "_shasum": "09873c14ecc114d063fad43b8ca5a33d304721c8",
+ "_from": "read@1.0.6",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "dist": {
+ "shasum": "09873c14ecc114d063fad43b8ca5a33d304721c8",
+ "tarball": "http://registry.npmjs.org/read/-/read-1.0.6.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/read/-/read-1.0.6.tgz"
}
--- /dev/null
+Copyright (c) 2015, Rebecca Turner
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
{
"name": "realize-package-specifier",
- "version": "3.0.0",
+ "version": "3.0.1",
"description": "Like npm-package-arg, but more so, producing full file paths and differentiating local tar and directory sources.",
"main": "index.js",
"scripts": {
"license": "ISC",
"repository": {
"type": "git",
- "url": "https://github.com/npm/realize-package-specifier.git"
+ "url": "git+https://github.com/npm/realize-package-specifier.git"
},
"author": {
"name": "Rebecca Turner",
"require-inject": "^1.1.0",
"tap": "^0.4.12"
},
- "readme": "realize-package-specifier\n-------------------------\n\nParse a package specifier, peeking at the disk to differentiate between\nlocal tarballs, directories and named modules. This implements the logic\nused by `npm install` and `npm cache` to determine where to get packages\nfrom.\n\n```javascript\nvar realizePackageSpecifier = require(\"realize-package-specifier\")\nrealizePackageSpecifier(\"foo.tar.gz\", \".\", function (err, package) {\n …\n})\n```\n\n## Using\n\n* realizePackageSpecifier(*spec*, [*where*,] *callback*)\n\nParses *spec* using `npm-package-arg` and then uses stat to check to see if\nit refers to a local tarball or package directory. Stats are done relative\nto *where*. If it does then the local module is loaded. If it doesn't then\ntarget is left as a remote package specifier. Package directories are\nrecognized by the presence of a package.json in them.\n\n*spec* -- a package specifier, like: `foo@1.2`, or `foo@user/foo`, or\n`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`\n\n*where* (optional, default: .) -- The directory in which we should look for\nlocal tarballs or package directories.\n\n*callback* function(*err*, *result*) -- Called once we've determined what\nkind of specifier this is. The *result* object will be very like the one\nreturned by `npm-package-arg` except with three differences: 1) There's a\nnew type of `directory`. 2) The `local` type only refers to tarballs. 2)\nFor all `local` and `directory` type results spec will contain the full path of\nthe local package.\n\n## Result Object\n\nThe full definition of the result object is:\n\n* `name` - If known, the `name` field expected in the resulting pkg.\n* `type` - One of the following strings:\n * `git` - A git repo\n * `hosted` - A hosted project, from github, bitbucket or gitlab. Originally\n either a full url pointing at one of these services or a shorthand like\n `user/project` or `github:user/project` for github or `bitbucket:user/project`\n for bitbucket.\n * `tag` - A tagged version, like `\"foo@latest\"`\n * `version` - A specific version number, like `\"foo@1.2.3\"`\n * `range` - A version range, like `\"foo@2.x\"`\n * `local` - A local file path\n * `directory` - A local package directory\n * `remote` - An http url (presumably to a tgz)\n* `spec` - The \"thing\". URL, the range, git repo, etc.\n* `hosted` - If type=hosted this will be an object with the following keys:\n * `type` - github, bitbucket or gitlab\n * `ssh` - The ssh path for this git repo\n * `sshurl` - The ssh URL for this git repo\n * `https` - The HTTPS URL for this git repo\n * `directUrl` - The URL for the package.json in this git repo\n* `raw` - The original un-modified string that was provided.\n* `rawSpec` - The part after the `name@...`, as it was originally\n provided.\n* `scope` - If a name is something like `@org/module` then the `scope`\n field will be set to `org`. If it doesn't have a scoped name, then\n scope is `null`.\n\n",
- "readmeFilename": "README.md",
- "gitHead": "2a465b11a70b288d0fb56312dcb45ba8de45b320",
+ "gitHead": "4f50130fa6b5e80954a90ea12bab382f53d890b1",
"bugs": {
"url": "https://github.com/npm/realize-package-specifier/issues"
},
- "_id": "realize-package-specifier@3.0.0",
- "_shasum": "38224d63f546d4972f0a68cb6e91f6cf73ac67fa",
- "_from": "realize-package-specifier@>=3.0.0 <4.0.0"
+ "_id": "realize-package-specifier@3.0.1",
+ "_shasum": "fde32e926448e38f99334d95b7b08d51e3a98d9f",
+ "_from": "realize-package-specifier@>=3.0.0 <3.1.0",
+ "_npmVersion": "2.10.1",
+ "_nodeVersion": "2.0.2",
+ "_npmUser": {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ },
+ "dist": {
+ "shasum": "fde32e926448e38f99334d95b7b08d51e3a98d9f",
+ "tarball": "http://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-3.0.1.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "iarna",
+ "email": "me@re-becca.org"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/realize-package-specifier/-/realize-package-specifier-3.0.1.tgz"
}
--- /dev/null
+{
+ "env": {
+ "node": true
+ },
+ "rules": {
+ // 2-space indentation
+ "indent": [2, 2],
+ // Disallow semi-colons, unless needed to disambiguate statement
+ "semi": [2, "never"],
+ // Require strings to use single quotes
+ "quotes": [2, "single"],
+ // Require curly braces for all control statements
+ "curly": 2,
+ // Disallow using variables and functions before they've been defined
+ "no-use-before-define": 2,
+ // Allow any case for variable naming
+ "camelcase": 0,
+ // Disallow unused variables, except as function arguments
+ "no-unused-vars": [2, {"args":"none"}],
+ // Allow leading underscores for method names
+ // REASON: we use underscores to denote private methods
+ "no-underscore-dangle": 0,
+ // Allow multi spaces around operators since they are
+ // used for alignment. This is not consistent in the
+ // code.
+ "no-multi-spaces": 0,
+ // Style rule is: most objects use { beforeColon: false, afterColon: true }, unless aligning which uses:
+ //
+ // {
+ // beforeColon : true,
+ // afterColon : true
+ // }
+ //
+ // eslint can't handle this, so the check is disabled.
+ "key-spacing": 0,
+ // Allow shadowing vars in outer scope (needs discussion)
+ "no-shadow": 0,
+ // Use if () { }
+ // ^ space
+ "space-after-keywords": [2, "always"],
+ // Use if () { }
+ // ^ space
+ "space-before-blocks": [2, "always"]
+ }
+}
--- /dev/null
+{
+ "predef": [ ]
+ , "bitwise": false
+ , "camelcase": false
+ , "curly": false
+ , "eqeqeq": false
+ , "forin": false
+ , "immed": false
+ , "latedef": false
+ , "noarg": true
+ , "noempty": true
+ , "nonew": true
+ , "plusplus": false
+ , "quotmark": true
+ , "regexp": false
+ , "undef": true
+ , "unused": true
+ , "strict": false
+ , "trailing": true
+ , "maxlen": 120
+ , "asi": true
+ , "boss": true
+ , "debug": true
+ , "eqnull": true
+ , "esnext": true
+ , "evil": true
+ , "expr": true
+ , "funcscope": false
+ , "globalstrict": false
+ , "iterator": false
+ , "lastsemic": true
+ , "laxbreak": true
+ , "laxcomma": true
+ , "loopfunc": true
+ , "multistr": false
+ , "onecase": false
+ , "proto": false
+ , "regexdash": false
+ , "scripturl": true
+ , "smarttabs": false
+ , "shadow": false
+ , "sub": true
+ , "supernew": false
+ , "validthis": true
+ , "browser": true
+ , "couch": false
+ , "devel": false
+ , "dojo": false
+ , "mootools": false
+ , "node": true
+ , "nonstandard": true
+ , "prototypejs": false
+ , "rhino": false
+ , "worker": true
+ , "wsh": false
+ , "nomen": false
+ , "onevar": false
+ , "passfail": false
+}
\ No newline at end of file
--- /dev/null
+{
+ "maxdepth": 4,
+ "maxstatements": 200,
+ "maxcomplexity": 12,
+ "maxlen": 80,
+ "maxparams": 5,
+
+ "curly": true,
+ "eqeqeq": true,
+ "immed": true,
+ "latedef": false,
+ "noarg": true,
+ "noempty": true,
+ "nonew": true,
+ "undef": true,
+ "unused": "vars",
+ "trailing": true,
+
+ "quotmark": true,
+ "expr": true,
+ "asi": true,
+
+ "browser": false,
+ "esnext": true,
+ "devel": false,
+ "node": false,
+ "nonstandard": false,
+
+ "predef": ["require", "module", "__dirname", "__filename"]
+}
--- /dev/null
+{
+ "predef": [ ]
+ , "bitwise": false
+ , "camelcase": false
+ , "curly": false
+ , "eqeqeq": false
+ , "forin": false
+ , "immed": false
+ , "latedef": false
+ , "noarg": true
+ , "noempty": true
+ , "nonew": true
+ , "plusplus": false
+ , "quotmark": true
+ , "regexp": false
+ , "undef": true
+ , "unused": true
+ , "strict": false
+ , "trailing": true
+ , "maxlen": 120
+ , "asi": true
+ , "boss": true
+ , "debug": true
+ , "eqnull": true
+ , "esnext": true
+ , "evil": true
+ , "expr": true
+ , "funcscope": false
+ , "globalstrict": false
+ , "iterator": false
+ , "lastsemic": true
+ , "laxbreak": true
+ , "laxcomma": true
+ , "loopfunc": true
+ , "multistr": false
+ , "onecase": false
+ , "proto": false
+ , "regexdash": false
+ , "scripturl": true
+ , "smarttabs": false
+ , "shadow": false
+ , "sub": true
+ , "supernew": false
+ , "validthis": true
+ , "browser": true
+ , "couch": false
+ , "devel": false
+ , "dojo": false
+ , "mootools": false
+ , "node": true
+ , "nonstandard": true
+ , "prototypejs": false
+ , "rhino": false
+ , "worker": true
+ , "wsh": false
+ , "nomen": false
+ , "onevar": false
+ , "passfail": false
+}
\ No newline at end of file
--- /dev/null
+{
+ "node": true,
+
+ "curly": true,
+ "latedef": true,
+ "quotmark": true,
+ "undef": true,
+ "unused": true,
+ "trailing": true
+}
--- /dev/null
+{
+ "node": true,
+ "asi": true,
+ "laxcomma": true
+}
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC License
-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:
+Copyright (c) Isaac Z. Schlueter and Contributors
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
-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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
"name": "rimraf",
- "version": "2.3.3",
+ "version": "2.3.4",
"main": "rimraf.js",
"description": "A deep deletion module for node (like `rm -rf`)",
"author": {
"email": "i@izs.me",
"url": "http://blog.izs.me/"
},
- "license": {
- "type": "MIT",
- "url": "https://github.com/isaacs/rimraf/raw/master/LICENSE"
- },
+ "license": "ISC",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/rimraf.git"
"LICENSE",
"README.md"
],
- "gitHead": "ad4efe8102a72c77bf2b13165ecc2229a9a68955",
+ "gitHead": "2a6cc45bbbdd8da5fd703d8af62843565f7dea57",
"bugs": {
"url": "https://github.com/isaacs/rimraf/issues"
},
- "homepage": "https://github.com/isaacs/rimraf",
- "_id": "rimraf@2.3.3",
- "_shasum": "d0073d8b3010611e8f3ad377b08e9a3c18b98f06",
- "_from": "rimraf@>=2.3.3 <2.4.0",
- "_npmVersion": "2.7.6",
- "_nodeVersion": "1.7.1",
+ "homepage": "https://github.com/isaacs/rimraf#readme",
+ "_id": "rimraf@2.3.4",
+ "_shasum": "82d9bc1b2fcf31e205ac7b28138a025d08e9159a",
+ "_from": "rimraf@>=2.3.4 <2.4.0",
+ "_npmVersion": "2.10.0",
+ "_nodeVersion": "2.0.1",
"_npmUser": {
"name": "isaacs",
"email": "isaacs@npmjs.com"
},
"dist": {
- "shasum": "d0073d8b3010611e8f3ad377b08e9a3c18b98f06",
- "tarball": "http://registry.npmjs.org/rimraf/-/rimraf-2.3.3.tgz"
+ "shasum": "82d9bc1b2fcf31e205ac7b28138a025d08e9159a",
+ "tarball": "http://registry.npmjs.org/rimraf/-/rimraf-2.3.4.tgz"
},
"maintainers": [
{
}
],
"directories": {},
- "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.3.tgz"
+ "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.4.tgz",
+ "readme": "ERROR: No README data found!"
}
assert(p, 'rimraf: missing path')
assert.equal(typeof p, 'string', 'rimraf: path should be a string')
assert(options, 'rimraf: missing options')
+ assert.equal(typeof options, 'object', 'rimraf: options should be object')
var results
-0.0.7 / 2014-09-01
+0.0.7 / 2014-09-01
==================
* update .repository
-0.0.6 / 2014-09-01
+0.0.6 / 2014-09-01
==================
* add travis
* add timers
-0.0.3 / 2014-02-22
+0.0.3 / 2014-02-22
==================
* add buffer
-0.0.2 / 2014-02-11
+0.0.2 / 2014-02-11
==================
* add assert
-0.0.1 / 2014-02-11
+0.0.1 / 2014-02-11
==================
* add main
"gitHead": "acef1219c13a0cf4cf6b8706d65f606d82a7d472",
"_id": "validate-npm-package-name@2.2.0",
"_shasum": "4cb6ff120bd7afb0b5681406cfaea8df2d763477",
- "_from": "validate-npm-package-name@>=2.0.1 <3.0.0",
+ "_from": "validate-npm-package-name@2.2.0",
"_npmVersion": "2.7.6",
"_nodeVersion": "1.6.2",
"_npmUser": {
--- /dev/null
+Copyright (c) 2015, Rebecca Turner
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
"name": "write-file-atomic",
- "version": "1.1.0",
+ "version": "1.1.2",
"description": "Write files in an atomic fashion w/configurable ownership",
"main": "index.js",
"scripts": {
"require-inject": "^1.1.0",
"tap": "^0.4.12"
},
- "gitHead": "28e4df86547c6728eab0b51bca6f00cf44ef392c",
- "_id": "write-file-atomic@1.1.0",
- "_shasum": "e114cfb8f82188353f98217c5945451c9b4dc060",
- "_from": "write-file-atomic@>=1.1.0 <2.0.0",
- "_npmVersion": "1.4.28",
+ "gitHead": "b721f8a71223bcf162f1ee4ff4677f31de1c061f",
+ "_id": "write-file-atomic@1.1.2",
+ "_shasum": "ff3d61f1c2f5bb71e8ebe491a7157bf7d60435a4",
+ "_from": "write-file-atomic@>=1.1.2 <1.2.0",
+ "_npmVersion": "2.7.6",
+ "_nodeVersion": "1.6.2",
"_npmUser": {
"name": "iarna",
"email": "me@re-becca.org"
},
+ "dist": {
+ "shasum": "ff3d61f1c2f5bb71e8ebe491a7157bf7d60435a4",
+ "tarball": "http://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.1.2.tgz"
+ },
"maintainers": [
{
"name": "iarna",
"email": "me@re-becca.org"
}
],
- "dist": {
- "shasum": "e114cfb8f82188353f98217c5945451c9b4dc060",
- "tarball": "http://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.1.0.tgz"
- },
"directories": {},
- "_resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.1.0.tgz"
+ "_resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.1.2.tgz"
}
{
- "version": "2.10.1",
+ "version": "2.11.0",
"name": "npm",
"description": "a package manager for JavaScript",
"keywords": [
"main": "./lib/npm.js",
"bin": "./bin/npm-cli.js",
"dependencies": {
- "abbrev": "~1.0.5",
+ "abbrev": "~1.0.6",
"ansi": "~0.3.0",
"ansi-regex": "~1.1.1",
"ansicolors": "~0.3.2",
"ansistyles": "~0.1.3",
"archy": "~1.0.0",
- "async-some": "~1.0.1",
- "block-stream": "0.0.7",
+ "async-some": "~1.0.2",
+ "block-stream": "0.0.8",
"char-spinner": "~1.0.1",
- "chmodr": "~0.1.0",
- "chownr": "0",
+ "chmodr": "~0.1.1",
+ "chownr": "0.0.2",
"cmd-shim": "~2.0.1",
"columnify": "~1.5.1",
"config-chain": "~1.1.8",
- "dezalgo": "~1.0.1",
+ "dezalgo": "~1.0.2",
"editor": "~1.0.0",
- "fs-vacuum": "~1.2.5",
- "fs-write-stream-atomic": "~1.0.2",
+ "fs-vacuum": "~1.2.6",
+ "fs-write-stream-atomic": "~1.0.3",
"fstream": "~1.0.6",
"fstream-npm": "~1.0.2",
"github-url-from-git": "~1.4.0",
"github-url-from-username-repo": "~1.0.2",
- "glob": "~5.0.6",
- "graceful-fs": "~3.0.6",
- "hosted-git-info": "~2.1.2",
+ "glob": "~5.0.7",
+ "graceful-fs": "~3.0.7",
+ "hosted-git-info": "~2.1.4",
"inflight": "~1.0.4",
"inherits": "~2.0.1",
"ini": "~1.3.3",
- "init-package-json": "~1.5.0",
- "lockfile": "~1.0.0",
- "lru-cache": "~2.6.3",
- "minimatch": "~2.0.7",
+ "init-package-json": "~1.6.0",
+ "lockfile": "~1.0.1",
+ "lru-cache": "~2.6.4",
+ "minimatch": "~2.0.8",
"mkdirp": "~0.5.1",
"node-gyp": "~1.0.3",
- "nopt": "~3.0.1",
- "normalize-git-url": "~1.0.0",
- "normalize-package-data": "~2.1.0",
+ "nopt": "~3.0.2",
+ "normalize-git-url": "~1.0.1",
+ "normalize-package-data": "~2.2.0",
"npm-cache-filename": "~1.0.1",
"npm-install-checks": "~1.0.5",
- "npm-package-arg": "~4.0.0",
- "npm-registry-client": "~6.3.3",
- "npm-user-validate": "~0.1.1",
- "npmlog": "~1.2.0",
+ "npm-package-arg": "~4.0.1",
+ "npm-registry-client": "~6.4.0",
+ "npm-user-validate": "~0.1.2",
+ "npmlog": "~1.2.1",
"once": "~1.3.2",
"opener": "~1.4.1",
- "osenv": "~0.1.0",
+ "osenv": "~0.1.1",
"path-is-inside": "~1.0.0",
- "read": "~1.0.4",
+ "read": "~1.0.6",
"read-installed": "~4.0.0",
"read-package-json": "~2.0.0",
"readable-stream": "~1.0.33",
- "realize-package-specifier": "~3.0.0",
+ "realize-package-specifier": "~3.0.1",
"request": "~2.55.0",
"retry": "~0.6.1",
- "rimraf": "~2.3.3",
+ "rimraf": "~2.3.4",
"semver": "~4.3.4",
"sha": "~1.3.0",
"slide": "~1.1.6",
"text-table": "~0.2.0",
"uid-number": "0.0.6",
"umask": "~1.1.0",
+ "validate-npm-package-name": "2.2.0",
"which": "~1.1.1",
"wrappy": "~1.0.1",
- "write-file-atomic": "~1.1.0"
+ "write-file-atomic": "~1.1.2"
},
"bundleDependencies": [
"abbrev",
"text-table",
"uid-number",
"umask",
+ "validate-npm-package-name",
"which",
"wrappy",
"write-file-atomic"
"deep-equal": "~1.0.0",
"marked": "~0.3.3",
"marked-man": "~0.1.4",
- "nock": "~2.0.1",
+ "nock": "~2.2.0",
"npm-registry-couchapp": "~2.6.7",
"npm-registry-mock": "~1.0.0",
"require-inject": "~1.2.0",
"sprintf-js": "~1.0.2",
- "tap": "~1.0.4"
+ "tap": "~1.1.0"
},
"scripts": {
"test-legacy": "node ./test/run.js",
"test": "tap --timeout 240 test/tap/*.js",
"tap": "tap --timeout 240 test/tap/*.js",
"test-all": "npm run test-legacy && npm test",
+ "preversion": "cd .. && bash scripts/update-authors.sh && git add AUTHORS && git commit -m \"update AUTHORS\" || true",
"prepublish": "node bin/npm-cli.js prune --prefix=. --no-global && rimraf test/*/*/node_modules && make -j4 doc",
"dumpconf": "env | grep npm | sort | uniq"
},
#!/bin/sh
-git log --reverse --format='%aN <%aE>' | perl -we '
-
+git log --reverse --format='%aN <%aE>' | perl -wnE '
BEGIN {
- %seen = (), @authors = ();
-}
-
-while (<>) {
- next if $seen{$_};
- $seen{$_} = push @authors, $_;
+ say "# Authors sorted by whether or not they\x27re me";
}
-END {
- print "# Authors sorted by whether or not they'\''re me\n";
- print @authors;
-}
+print $seen{$_} = $_ unless $seen{$_}
' > AUTHORS
-globalconfig=/Users/rebecca/code/npm-release/test/fixtures/config/globalconfig
+globalconfig=/Users/ogd/Documents/projects/npm/npm/test/fixtures/config/globalconfig
email=i@izs.me
env-thing=asdf
init.author.name=Isaac Z. Schlueter
poststart: 'exit 123',
prerestart: 'exit 123',
restart: 'exit 123',
- postrestart: 'exit 123'
+ postrestart: 'exit 123',
+ preversion: 'exit 123',
+ version: 'exit 123',
+ postversion: 'exit 123'
}
}
'pretest', 'test', 'posttest',
'prestop', 'stop', 'poststop',
'prestart', 'start', 'poststart',
- 'prerestart', 'restart', 'postrestart'
+ 'prerestart', 'restart', 'postrestart',
+ 'preversion', 'version', 'postversion'
]
scripts.forEach(function (script) {
}, function (err, code, stdout, stderr) {
t.ifErr(err, 'npm i ' + dep + ' finished without error')
t.equal(code, 0, 'npm i ' + dep + ' exited ok')
- console.log('stderr', stderr)
t.notOk(stderr, 'no output stderr')
t.end()
})
test('test', function (t) {
common.npm(['run', 'foo'], EXEC_OPTS, function (err, code, stdout, stderr) {
stderr = stderr.trim()
- if (stderr)
- console.error(stderr)
+ if (stderr) console.error(stderr)
t.ifErr(err, 'npm run finished without error')
t.equal(code, 0, 'npm run exited ok')
t.notOk(stderr, 'no output stderr: ' + stderr)
})
version(["patch"], function(err) {
- if (err) return t.fail("Error performing version patch")
+ if (! t.error(err)) return t.end()
var p = path.resolve(pkg, "package")
var testPkg = require(p)
t.equal("0.0.1", testPkg.version, "\"" + testPkg.version+"\" === \"0.0.1\"")
})
})
+test("npm view with invalid package name", function (t) {
+ var invalidName = "InvalidPackage"
+ obj = {}
+ obj["/" + invalidName] = [404, {"error": "not found"}]
+
+ mr({port : common.port, mocks: {"get": obj}}, function (er, s) {
+ common.npm([
+ "view"
+ , invalidName
+ , "--registry=" + common.registry
+ ], {}, function (err, code, stdout, stderr) {
+ t.ifError(err, "view command finished successfully")
+ t.equal(code, 1, "exit not ok")
+
+ t.similar(stderr, new RegExp("is not in the npm registry"),
+ "Package should NOT be found")
+
+ t.dissimilar(stderr, new RegExp("use the name yourself!"),
+ "Suggestion should not be there")
+
+ t.similar(stderr, new RegExp("name can no longer contain capital letters"),
+ "Suggestion about Capital letter should be there")
+
+ s.close()
+ t.end()
+ })
+ })
+})
+
+
+test("npm view with valid but non existent package name", function (t) {
+ mr({port : common.port, mocks: {
+ "get": {
+ "/valid-but-non-existent-package" : [404, {"error": "not found"}]
+ }
+ }}, function (er, s) {
+ common.npm([
+ "view"
+ , "valid-but-non-existent-package"
+ , "--registry=" + common.registry
+ ], {}, function (err, code, stdout, stderr) {
+ t.ifError(err, "view command finished successfully")
+ t.equal(code, 1, "exit not ok")
+
+ t.similar(stderr,
+ new RegExp("'valid-but-non-existent-package' is not in the npm registry\."),
+ "Package should NOT be found")
+
+ t.similar(stderr, new RegExp("use the name yourself!"),
+ "Suggestion should be there")
+
+ s.close()
+ t.end()
+ })
+ })
+})
+
test("cleanup", function (t) {
process.chdir(osenv.tmpdir())
rimraf.sync(t1dir)