deps: upgrade npm to 2.4.1
authorForrest L Norvell <forrest@npmjs.com>
Fri, 30 Jan 2015 11:12:07 +0000 (03:12 -0800)
committerBen Noordhuis <info@bnoordhuis.nl>
Sat, 31 Jan 2015 17:57:30 +0000 (18:57 +0100)
PR-URL: https://github.com/iojs/io.js/pull/663
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
202 files changed:
deps/npm/CHANGELOG.md
deps/npm/doc/cli/npm-access.md [new file with mode: 0644]
deps/npm/doc/cli/npm-dist-tag.md [new file with mode: 0644]
deps/npm/doc/cli/npm-publish.md
deps/npm/doc/cli/npm-tag.md
deps/npm/doc/misc/npm-config.md
deps/npm/doc/misc/npm-index.md
deps/npm/html/doc/README.html
deps/npm/html/doc/api/npm-bin.html
deps/npm/html/doc/api/npm-bugs.html
deps/npm/html/doc/api/npm-cache.html
deps/npm/html/doc/api/npm-commands.html
deps/npm/html/doc/api/npm-config.html
deps/npm/html/doc/api/npm-deprecate.html
deps/npm/html/doc/api/npm-docs.html
deps/npm/html/doc/api/npm-edit.html
deps/npm/html/doc/api/npm-explore.html
deps/npm/html/doc/api/npm-help-search.html
deps/npm/html/doc/api/npm-init.html
deps/npm/html/doc/api/npm-install.html
deps/npm/html/doc/api/npm-link.html
deps/npm/html/doc/api/npm-load.html
deps/npm/html/doc/api/npm-ls.html
deps/npm/html/doc/api/npm-outdated.html
deps/npm/html/doc/api/npm-owner.html
deps/npm/html/doc/api/npm-pack.html
deps/npm/html/doc/api/npm-prefix.html
deps/npm/html/doc/api/npm-prune.html
deps/npm/html/doc/api/npm-publish.html
deps/npm/html/doc/api/npm-rebuild.html
deps/npm/html/doc/api/npm-repo.html
deps/npm/html/doc/api/npm-restart.html
deps/npm/html/doc/api/npm-root.html
deps/npm/html/doc/api/npm-run-script.html
deps/npm/html/doc/api/npm-search.html
deps/npm/html/doc/api/npm-shrinkwrap.html
deps/npm/html/doc/api/npm-start.html
deps/npm/html/doc/api/npm-stop.html
deps/npm/html/doc/api/npm-tag.html
deps/npm/html/doc/api/npm-test.html
deps/npm/html/doc/api/npm-uninstall.html
deps/npm/html/doc/api/npm-unpublish.html
deps/npm/html/doc/api/npm-update.html
deps/npm/html/doc/api/npm-version.html
deps/npm/html/doc/api/npm-view.html
deps/npm/html/doc/api/npm-whoami.html
deps/npm/html/doc/api/npm.html
deps/npm/html/doc/cli/npm-access.html [new file with mode: 0644]
deps/npm/html/doc/cli/npm-adduser.html
deps/npm/html/doc/cli/npm-bin.html
deps/npm/html/doc/cli/npm-bugs.html
deps/npm/html/doc/cli/npm-build.html
deps/npm/html/doc/cli/npm-bundle.html
deps/npm/html/doc/cli/npm-cache.html
deps/npm/html/doc/cli/npm-completion.html
deps/npm/html/doc/cli/npm-config.html
deps/npm/html/doc/cli/npm-dedupe.html
deps/npm/html/doc/cli/npm-deprecate.html
deps/npm/html/doc/cli/npm-dist-tag.html [new file with mode: 0644]
deps/npm/html/doc/cli/npm-docs.html
deps/npm/html/doc/cli/npm-edit.html
deps/npm/html/doc/cli/npm-explore.html
deps/npm/html/doc/cli/npm-help-search.html
deps/npm/html/doc/cli/npm-help.html
deps/npm/html/doc/cli/npm-init.html
deps/npm/html/doc/cli/npm-install.html
deps/npm/html/doc/cli/npm-link.html
deps/npm/html/doc/cli/npm-ls.html
deps/npm/html/doc/cli/npm-outdated.html
deps/npm/html/doc/cli/npm-owner.html
deps/npm/html/doc/cli/npm-pack.html
deps/npm/html/doc/cli/npm-prefix.html
deps/npm/html/doc/cli/npm-prune.html
deps/npm/html/doc/cli/npm-publish.html
deps/npm/html/doc/cli/npm-rebuild.html
deps/npm/html/doc/cli/npm-repo.html
deps/npm/html/doc/cli/npm-restart.html
deps/npm/html/doc/cli/npm-rm.html
deps/npm/html/doc/cli/npm-root.html
deps/npm/html/doc/cli/npm-run-script.html
deps/npm/html/doc/cli/npm-search.html
deps/npm/html/doc/cli/npm-shrinkwrap.html
deps/npm/html/doc/cli/npm-star.html
deps/npm/html/doc/cli/npm-stars.html
deps/npm/html/doc/cli/npm-start.html
deps/npm/html/doc/cli/npm-stop.html
deps/npm/html/doc/cli/npm-tag.html
deps/npm/html/doc/cli/npm-test.html
deps/npm/html/doc/cli/npm-uninstall.html
deps/npm/html/doc/cli/npm-unpublish.html
deps/npm/html/doc/cli/npm-update.html
deps/npm/html/doc/cli/npm-version.html
deps/npm/html/doc/cli/npm-view.html
deps/npm/html/doc/cli/npm-whoami.html
deps/npm/html/doc/cli/npm.html
deps/npm/html/doc/files/npm-folders.html
deps/npm/html/doc/files/npm-global.html
deps/npm/html/doc/files/npm-json.html
deps/npm/html/doc/files/npmrc.html
deps/npm/html/doc/files/package.json.html
deps/npm/html/doc/index.html
deps/npm/html/doc/misc/npm-coding-style.html
deps/npm/html/doc/misc/npm-config.html
deps/npm/html/doc/misc/npm-developers.html
deps/npm/html/doc/misc/npm-disputes.html
deps/npm/html/doc/misc/npm-faq.html
deps/npm/html/doc/misc/npm-index.html
deps/npm/html/doc/misc/npm-registry.html
deps/npm/html/doc/misc/npm-scope.html
deps/npm/html/doc/misc/npm-scripts.html
deps/npm/html/doc/misc/removing-npm.html
deps/npm/html/doc/misc/semver.html
deps/npm/html/partial/doc/README.html
deps/npm/html/partial/doc/api/npm.html
deps/npm/html/partial/doc/cli/npm-access.html [new file with mode: 0644]
deps/npm/html/partial/doc/cli/npm-dist-tag.html [new file with mode: 0644]
deps/npm/html/partial/doc/cli/npm-ls.html
deps/npm/html/partial/doc/cli/npm-publish.html
deps/npm/html/partial/doc/cli/npm-tag.html
deps/npm/html/partial/doc/cli/npm.html
deps/npm/html/partial/doc/index.html
deps/npm/html/partial/doc/misc/npm-config.html
deps/npm/html/partial/doc/misc/npm-disputes.html
deps/npm/html/partial/doc/misc/npm-faq.html
deps/npm/html/partial/doc/misc/npm-index.html
deps/npm/lib/access.js [new file with mode: 0644]
deps/npm/lib/cache/caching-client.js
deps/npm/lib/config/defaults.js
deps/npm/lib/dist-tag.js [new file with mode: 0644]
deps/npm/lib/npm.js
deps/npm/lib/owner.js
deps/npm/lib/publish.js
deps/npm/lib/tag.js
deps/npm/lib/unbuild.js
deps/npm/lib/utils/read-local-package.js [new file with mode: 0644]
deps/npm/man/man1/npm-access.1 [new file with mode: 0644]
deps/npm/man/man1/npm-dist-tag.1 [new file with mode: 0644]
deps/npm/man/man1/npm-ls.1
deps/npm/man/man1/npm-publish.1
deps/npm/man/man1/npm-tag.1
deps/npm/man/man1/npm.1
deps/npm/man/man3/npm.3
deps/npm/man/man7/npm-config.7
deps/npm/man/man7/npm-index.7
deps/npm/node_modules/init-package-json/default-input.js
deps/npm/node_modules/init-package-json/node_modules/promzard/package.json
deps/npm/node_modules/init-package-json/package.json
deps/npm/node_modules/init-package-json/test/npm-defaults.js
deps/npm/node_modules/node-gyp/addon.gypi
deps/npm/node_modules/node-gyp/lib/build.js
deps/npm/node_modules/node-gyp/lib/install.js
deps/npm/node_modules/npm-registry-client/README.md
deps/npm/node_modules/npm-registry-client/index.js
deps/npm/node_modules/npm-registry-client/lib/access.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/lib/dist-tags/add.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/lib/dist-tags/fetch.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/lib/dist-tags/rm.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/lib/dist-tags/set.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/lib/dist-tags/update.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/lib/publish.js
deps/npm/node_modules/npm-registry-client/lib/tag.js
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/LICENSE [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/README.md [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.npmignore [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.travis.yml [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/README.md [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/index.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/package.json [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/basic.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/bitbucket.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gist.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/github.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gitlab.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/lib/standard-tests.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/npa.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/package.json [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/basic.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/bitbucket.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/github.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/gitlab.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/windows.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/package.json
deps/npm/node_modules/npm-registry-client/test/access.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/test/dist-tags-add.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/test/dist-tags-fetch.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/test/dist-tags-rm.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/test/dist-tags-set.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/test/dist-tags-update.js [new file with mode: 0644]
deps/npm/node_modules/npm-registry-client/test/publish-again-scoped.js
deps/npm/node_modules/npm-registry-client/test/publish-again.js
deps/npm/node_modules/npm-registry-client/test/publish-failed-no-message.js
deps/npm/node_modules/npm-registry-client/test/publish-scoped-auth-token.js
deps/npm/node_modules/npm-registry-client/test/publish-scoped.js
deps/npm/node_modules/npm-registry-client/test/publish.js
deps/npm/node_modules/npm-registry-client/test/tag.js
deps/npm/node_modules/npm-registry-client/test/whoami.js
deps/npm/package.json
deps/npm/test/tap/access.js [new file with mode: 0644]
deps/npm/test/tap/dist-tag.js [new file with mode: 0644]
deps/npm/test/tap/owner.js
deps/npm/test/tap/publish-access-scoped.js [new file with mode: 0644]
deps/npm/test/tap/publish-access-unscoped.js [new file with mode: 0644]

index b73d83ac7054777fdacb70d4ab54fd5db3be975a..1a38e066190790dd5cec6359b40cea90e27801af 100644 (file)
@@ -1,3 +1,55 @@
+### v2.4.1 (2015-01-23):
+
+![bridge that doesn't meet in the middle](http://www.static-18.themodernnomad.com/wp-content/uploads/2011/08/bridge-fail.jpg)
+
+Let's accentuate the positive: the `dist-tag` endpoints for `npm dist-tag
+{add,rm,ls}` are now live on the public npm registry.
+
+* [`f70272b`](https://github.com/npm/npm/commit/f70272bed7d77032d1e21553371dd5662fef32f2)
+  `npm-registry-client@6.0.3`: Properly escape JSON tag version strings and
+  filter `_etag` from CouchDB docs. ([@othiym23](https://github.com/othiym23))
+
+### v2.4.0 (2015-01-22):
+
+#### REGISTRY 2: ACCESS AND DIST-TAGS
+
+NOTE: This week's registry-2 commands are leading the implementation on
+registry.npmjs.org a little bit, so some of the following may not work for
+another week or so. Also note that `npm access` has documentation and
+subcommands that are not yet finished, because they depend on incompletely
+specified registry API endpoints. Things are coming together very quickly,
+though, so expect the missing pieces to be filled in the coming weeks.
+
+* [`c963eb2`](https://github.com/npm/npm/commit/c963eb295cf766921b1680f4a71fd0ed3e1bcad8)
+  [#7181](https://github.com/npm/npm/issues/7181) NEW `npm access public` and
+  `npm access restricted`: Toggle visibility of scoped packages.
+  ([@othiym23](https://github.com/othiym23))
+* [`dc51810`](https://github.com/npm/npm/commit/dc51810e08c0f104259146c9c035d255de4f7d1d)
+  [#6243](https://github.com/npm/npm/issues/6243) /
+  [#6854](https://github.com/npm/npm/issues/6854) NEW `npm dist-tags`: Directly
+  manage `dist-tags` on packages. Most notably, `dist-tags` can now be deleted.
+  ([@othiym23](https://github.com/othiym23))
+* [`4c7c132`](https://github.com/npm/npm/commit/4c7c132a6b8305dca2974943226c39c0cdc64ff9)
+  [#7181](https://github.com/npm/npm/issues/7181) /
+  [#6854](https://github.com/npm/npm/issues/6854) `npm-registry-client@6.0.1`:
+  Add new `access` and `dist-tags` endpoints
+  ([@othiym23](https://github.com/othiym23))
+
+#### NOT EXACTLY SELF-DEPRECATING
+
+* [`10d5c77`](https://github.com/npm/npm/commit/10d5c77653487f15759ac7de262a97e9c655240c)
+  [#6274](https://github.com/npm/npm/issues/6274) Deprecate `npm tag` in favor
+  of `npm dist-tag`. ([@othiym23](https://github.com/othiym23))
+
+#### BUG FIX AND TINY FEATURE
+
+* [`29a6ef3`](https://github.com/npm/npm/commit/29a6ef38ef86ac318c5d9ea4bee28ce614672fa6)
+  [#6850](https://github.com/npm/npm/issues/6850) Be smarter about determining
+  base of file deletion when unbuilding. ([@phated](https://github.com/phated))
+* [`4ad01ea`](https://github.com/npm/npm/commit/4ad01ea2930a7a1cf88be121cc5ce9eba40c6807)
+  `init-package-json@1.2.0`: Support `--save-exact` in `npm init`.
+  ([@gustavnikolaj](https://github.com/gustavnikolaj))
+
 ### v2.3.0 (2015-01-15):
 
 #### REGISTRY 2: OH MY STARS! WHO AM I?
diff --git a/deps/npm/doc/cli/npm-access.md b/deps/npm/doc/cli/npm-access.md
new file mode 100644 (file)
index 0000000..85db7e6
--- /dev/null
@@ -0,0 +1,63 @@
+npm-access(1) -- Set access level on published packages
+=======================================================
+
+## SYNOPSIS
+
+    npm access public [<package>]
+    npm access restricted [<package>]
+
+    npm access add <read-only|read-write> <entity> [<package>]
+    npm access rm <entity> [<package>]
+
+    npm access ls [<package>]
+    npm access edit [<package>]
+
+## DESCRIPTION
+
+Used to set access controls on private packages.
+
+For all of the subcommands, `npm access` will perform actions on the packages
+in the current working directory if no package name is passed to the
+subcommand.
+
+* public / restricted:
+  Set a package to be either publicly accessible or restricted.
+
+* add / rm:
+  Add or remove the ability of users and teams to have read-only or read-write
+  access to a package.
+
+* ls:
+  Show all of the access privileges for a package. Will only show permissions
+  for packages to which you have at least read access.
+
+* edit:
+  Set the access privileges for a package at once using `$EDITOR`.
+
+## DETAILS
+
+`npm access` always operates directly on the current registry, configurable
+from the command line using `--registry=<registry url>`.
+
+Unscoped packages are *always public*.
+
+Scoped packages *default to restricted*, but you can either publish them as
+public using `npm publish --access=public`, or set their access as public using
+`npm access public` after the initial publish.
+
+You must have privileges to set the access of a package:
+
+* You are an owner of an unscoped or scoped package.
+* You are a member of the team that owns a scope.
+* You have been given read-write privileges for a package, either as a member
+  of a team or directly as an owner.
+
+If your account is not paid, then attempts to publish scoped packages will fail
+with an HTTP 402 status code (logically enough), unless you use
+`--access=public`.
+
+## SEE ALSO
+
+* npm-publish(1)
+* npm-config(7)
+* npm-registry(7)
diff --git a/deps/npm/doc/cli/npm-dist-tag.md b/deps/npm/doc/cli/npm-dist-tag.md
new file mode 100644 (file)
index 0000000..b8eabe7
--- /dev/null
@@ -0,0 +1,72 @@
+npm-dist-tag(1) -- Modify package distribution tags
+===================================================
+
+## SYNOPSIS
+
+    npm dist-tag add <pkg>@<version> [<tag>]
+    npm dist-tag rm <pkg> <tag>
+    npm dist-tag ls [<pkg>]
+
+## DESCRIPTION
+
+Add, remove, and enumerate distribution tags on a package:
+
+* add:
+  Tags the specified version of the package with the specified tag, or the
+  `--tag` config if not specified.
+
+* rm:
+  Clear a tag that is no longer in use from the package.
+
+* ls:
+  Show all of the dist-tags for a package, defaulting to the package in
+  the curren prefix.
+
+A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:
+
+    npm install <name>@<tag>
+
+When installing dependencies, a preferred tagged version may be specified:
+
+    npm install --tag <tag>
+
+This also applies to `npm dedupe`.
+
+Publishing a package always sets the "latest" tag to the published version.
+
+## PURPOSE
+
+Tags can be used to provide an alias instead of version numbers.  For
+example, `npm` currently uses the tag "next" to identify the upcoming
+version, and the tag "latest" to identify the current version.
+
+A project might choose to have multiple streams of development, e.g.,
+"stable", "canary".
+
+## CAVEATS
+
+This command used to be known as `npm tag`, which only created new tags, and so
+had a different syntax.
+
+Tags must share a namespace with version numbers, because they are specified in
+the same slot: `npm install <pkg>@<version>` vs `npm install <pkg>@<tag>`.
+
+Tags that can be interpreted as valid semver ranges will be rejected. For
+example, `v1.4` cannot be used as a tag, because it is interpreted by semver as
+`>=1.4.0 <1.5.0`.  See <https://github.com/npm/npm/issues/6082>.
+
+The simplest way to avoid semver problems with tags is to use tags that do not
+begin with a number or the letter `v`.
+
+## SEE ALSO
+
+* npm-tag(1)
+* npm-publish(1)
+* npm-install(1)
+* npm-dedupe(1)
+* npm-registry(7)
+* npm-config(1)
+* npm-config(7)
+* npm-tag(3)
+* npmrc(5)
index 30e816c7fdf20cab6b32d0995cf82c5633e8710f..8c447d0df9c4d5d7f60d4cb5c212170939207488 100644 (file)
@@ -4,8 +4,8 @@ npm-publish(1) -- Publish a package
 
 ## SYNOPSIS
 
-    npm publish <tarball> [--tag <tag>]
-    npm publish <folder> [--tag <tag>]
+    npm publish <tarball> [--tag <tag>] [--access <public|restricted>]
+    npm publish <folder> [--tag <tag>] [--access <public|restricted>]
 
 ## DESCRIPTION
 
@@ -29,6 +29,12 @@ specifying a different default registry or using a `npm-scope(7)` in the name
   <name>@<tag>` will install this version.  By default, `npm publish` updates
   and `npm install` installs the `latest` tag.
 
+* `[--access <public|restricted>]`
+  Tells the registry whether this package should be published as public or
+  restricted. Only applies to scoped packages, which default to `restricted`.
+  If you don't have a paid account, you must publish with `--access public`
+  to publish scoped packages.
+
 Fails if the package name and version combination already exists in
 the specified registry.
 
@@ -39,6 +45,7 @@ it is removed with npm-unpublish(1).
 ## SEE ALSO
 
 * npm-registry(7)
+* npm-scope(7)
 * npm-adduser(1)
 * npm-owner(1)
 * npm-deprecate(1)
index 28a1c9334fb0bf7ee140abeaf5fac10efd0b5706..d7118d4e581a23afbbfac79edfe73ce7600ffdaf 100644 (file)
@@ -7,6 +7,8 @@ npm-tag(1) -- Tag a published version
 
 ## DESCRIPTION
 
+THIS COMMAND IS DEPRECATED. See npm-dist-tag(1) for details.
+
 Tags the specified version of the package with the specified tag, or the
 `--tag` config if not specified.
 
index 7aaaffb8d6beebd8236c86a146da7398ec963ac6..1772b34ec1788975e98cdc69e92ec119dafcf295 100644 (file)
@@ -107,6 +107,16 @@ See package.json(5) for more information.
 
 ## Config Settings
 
+### access
+
+* Default: `restricted`
+* Type: Access
+
+When publishing scoped packages, the access level defaults to `restricted`.  If
+you want your scoped package to be publicly viewable (and installable) set
+`--access=public`. The only valid values for `access` are `public` and
+`restricted`. Unscoped packages _always_ have an access level of `public`.
+
 ### always-auth
 
 * Default: false
index 96c62cced613e5ad56a7cd0271d80f1818daac02..4cbfbdc8bc81ae5603f8545af6f246845b89a53c 100644 (file)
@@ -13,6 +13,10 @@ Using npm on the command line
 
 javascript package manager
 
+### npm-access(1)
+
+Set access level on published packages
+
 ### npm-adduser(1)
 
 Add a registry user account
@@ -53,6 +57,10 @@ Reduce duplication
 
 Deprecate a version of a package
 
+### npm-dist-tag(1)
+
+Modify package distribution tags
+
 ### npm-docs(1)
 
 Docs for a package in a web browser maybe
index a9953056c971ceac8ce36ec8ff91258893291fc7..3edb83a9679f87a090086e37d9eeb9cad377c090 100644 (file)
@@ -126,7 +126,7 @@ specific purpose, or lack of malice in any given npm package.</p>
 <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="&#109;&#x61;&#105;&#x6c;&#x74;&#x6f;&#58;&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;">&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;</a> and explain the situation.</p>
+<a href="&#109;&#x61;&#x69;&#108;&#116;&#111;&#x3a;&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#x40;&#x6e;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#109;">&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#x40;&#x6e;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#109;</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>
@@ -169,5 +169,5 @@ will no doubt tell you to put the output in a gist or email.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@2.3.0</p>
+<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@2.4.1</p>
 
index d1b9fb5bca0b1302c25f329ebfe45eab0f29b99b..b927594b10a1def4fbb119b15dcbc91683cc46dc 100644 (file)
@@ -28,5 +28,5 @@ to the <code>npm.bin</code> property.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-bin &mdash; npm@2.3.0</p>
+<p id="footer">npm-bin &mdash; npm@2.4.1</p>
 
index a7f3c3e4ad377f51b187d8ec3236068c82da438a..976535097e6ffa1ac56ed5a2d35d79b4a7b06992 100644 (file)
@@ -33,5 +33,5 @@ friendly for programmatic use.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-bugs &mdash; npm@2.3.0</p>
+<p id="footer">npm-bugs &mdash; npm@2.4.1</p>
 
index 952856f8691783610ccb68886f63f5181fde3012..94f242c4f0bdf1250cb428e332ebf72edae96b4f 100644 (file)
@@ -42,5 +42,5 @@ incrementation.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-cache &mdash; npm@2.3.0</p>
+<p id="footer">npm-cache &mdash; npm@2.4.1</p>
 
index 16292985c88871dd8a708b1f4e9e11b1727321a0..80968ebace38100bf992f453957012612721ca70 100644 (file)
@@ -36,5 +36,5 @@ usage, or <code>man 3 npm-&lt;command&gt;</code> for programmatic usage.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-commands &mdash; npm@2.3.0</p>
+<p id="footer">npm-commands &mdash; npm@2.4.1</p>
 
index 758eef37ace7abb603cfa25723c89e0d0ace9041..6d763526fb245b9ebc1a718b8394c67c0b4cf48f 100644 (file)
@@ -57,5 +57,5 @@ functions instead.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-config &mdash; npm@2.3.0</p>
+<p id="footer">npm-config &mdash; npm@2.4.1</p>
 
index eb965608ef4a3dbb35179f6ef22ff1488de2b5f8..6072d9371a0ea7adea53cebb4c6d5eb27fbfccdb 100644 (file)
@@ -47,5 +47,5 @@ a deprecation warning to all who attempt to install it.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-deprecate &mdash; npm@2.3.0</p>
+<p id="footer">npm-deprecate &mdash; npm@2.4.1</p>
 
index 25fa5167f4b1350c4f53c0f577ff6959fef005a6..42e0ed8f2ca05e50eed88a2625effcae92da38d3 100644 (file)
@@ -33,5 +33,5 @@ friendly for programmatic use.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-docs &mdash; npm@2.3.0</p>
+<p id="footer">npm-docs &mdash; npm@2.4.1</p>
 
index f7e777d86d2fb87b5f1f15b3607a87f12dedc447..b494c3eb4f487e3813895dc38edf90a26006c3d2 100644 (file)
@@ -36,5 +36,5 @@ and how this is used.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-edit &mdash; npm@2.3.0</p>
+<p id="footer">npm-edit &mdash; npm@2.4.1</p>
 
index fb8b36e1b293575405db07e6ddb65d76f2b9bb78..31ada6942d07b9ab509a1d9e302d3e385aed00a5 100644 (file)
@@ -31,5 +31,5 @@ sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-explore &mdash; npm@2.3.0</p>
+<p id="footer">npm-explore &mdash; npm@2.4.1</p>
 
index 3612ae521fdc23678b57c3037497adab6976bfec..42f3ca527d8a2fc02f39562e2207c876026b7c95 100644 (file)
@@ -44,5 +44,5 @@ Name of the file that matched</li>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-help-search &mdash; npm@2.3.0</p>
+<p id="footer">npm-help-search &mdash; npm@2.4.1</p>
 
index dc32dfdbe5abdc78588130309955275aa3d98dc7..32526521c341b1da8aa311e2ae7b3f30a7f22824 100644 (file)
@@ -39,5 +39,5 @@ then go ahead and use this programmatically.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-init &mdash; npm@2.3.0</p>
+<p id="footer">npm-init &mdash; npm@2.4.1</p>
 
index ef095d462cb050f64c9607fe7a1ea602e692dff2..43ed6e366aa0589cec505a0866fe9a2b09d81382 100644 (file)
@@ -32,5 +32,5 @@ installed or when an error has been encountered.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-install &mdash; npm@2.3.0</p>
+<p id="footer">npm-install &mdash; npm@2.4.1</p>
 
index 7a80c5297dcff9a7913b642777ac74ef28c55316..44cac12f47f55dd4a0253c123c97d22e9ffadc8d 100644 (file)
@@ -42,5 +42,5 @@ the package in the current working directory</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-link &mdash; npm@2.3.0</p>
+<p id="footer">npm-link &mdash; npm@2.4.1</p>
 
index 3882694cf03ae24546cea384ae79dd87cdc497c6..97f85a0abc1fff55f1ab933e80cca6c1f5221ee2 100644 (file)
@@ -37,5 +37,5 @@ config object.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-load &mdash; npm@2.3.0</p>
+<p id="footer">npm-load &mdash; npm@2.4.1</p>
 
index 8b0bc0c6fb796eca135e858c9ab09361d9babd9a..330c35fa6847d1b0b5ff036d55a1aeb831136386 100644 (file)
@@ -63,5 +63,5 @@ dependency will only be output once.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-ls &mdash; npm@2.3.0</p>
+<p id="footer">npm-ls &mdash; npm@2.4.1</p>
 
index eeff9318d0ae045b84d8c5b76934ea145959d921..37548fae9b25ef1d29e48ca3cd17a1f7086d1c03 100644 (file)
@@ -28,5 +28,5 @@ currently outdated.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-outdated &mdash; npm@2.3.0</p>
+<p id="footer">npm-outdated &mdash; npm@2.4.1</p>
 
index 6fff13787514daaba218a94c71152a87fef7826d..65216030a4291508dd42304687072ccb82693a6b 100644 (file)
@@ -47,5 +47,5 @@ that is not implemented at this time.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-owner &mdash; npm@2.3.0</p>
+<p id="footer">npm-owner &mdash; npm@2.4.1</p>
 
index 13a1ed8f5de3e73f9c29766fe6883f18d1659b50..ec3e4cb670df4c7e772030ad56fc3702403bc05e 100644 (file)
@@ -33,5 +33,5 @@ overwritten the second time.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-pack &mdash; npm@2.3.0</p>
+<p id="footer">npm-pack &mdash; npm@2.4.1</p>
 
index 22398c50df1913b5a96167692e1ebfd29948ce53..9b26a42de94cbb48e6f81d1d8fb0e37ced83159b 100644 (file)
@@ -29,5 +29,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-prefix &mdash; npm@2.3.0</p>
+<p id="footer">npm-prefix &mdash; npm@2.4.1</p>
 
index 6ee9e7d59f48eba3ed4a7c42f8ddb91dff22ad94..645cb21b20376af5e2e837dedb91a4daffea17b6 100644 (file)
@@ -30,5 +30,5 @@ package&#39;s dependencies list.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-prune &mdash; npm@2.3.0</p>
+<p id="footer">npm-prune &mdash; npm@2.4.1</p>
 
index dccedcab6ce061ae0843ecd640b86b72a1a6a67d..cd7e7446b17bfc0d8796b60f5b2be7aa2bfd9548 100644 (file)
@@ -46,5 +46,5 @@ the registry.  Overwrites when the &quot;force&quot; environment variable is set
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-publish &mdash; npm@2.3.0</p>
+<p id="footer">npm-publish &mdash; npm@2.4.1</p>
 
index 1203b177a220089c573363a1480cd71dbd70049a..d957bfdf1cbdd9f38cd1168e4a45091402cd7213 100644 (file)
@@ -30,5 +30,5 @@ the new binary. If no &#39;packages&#39; parameter is specify, every package wil
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-rebuild &mdash; npm@2.3.0</p>
+<p id="footer">npm-rebuild &mdash; npm@2.4.1</p>
 
index 718f55aae626484d8d9181bd7e485a7d051d11b4..34ec71cab11638a9a1726d15c83d22e16a35b9f6 100644 (file)
@@ -33,5 +33,5 @@ friendly for programmatic use.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-repo &mdash; npm@2.3.0</p>
+<p id="footer">npm-repo &mdash; npm@2.4.1</p>
 
index e3c90034fef95c145f616340418e636a236851de..2c87673aba5b861c5125e8d19925e26d8e9ffacf 100644 (file)
@@ -52,5 +52,5 @@ behavior will be accompanied by an increase in major version number</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-restart &mdash; npm@2.3.0</p>
+<p id="footer">npm-restart &mdash; npm@2.4.1</p>
 
index 5231b853fdb6e37e98f83cf45ae0f8316613f23b..8acc1a58f4b2f05b207071f2250f8c098e285a35 100644 (file)
@@ -29,5 +29,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-root &mdash; npm@2.3.0</p>
+<p id="footer">npm-root &mdash; npm@2.4.1</p>
 
index c9877f401251fc2db4268c8ae3f26ac7fdedacec..63befb7a5b23c14a3169c9ea9a48f935ca9d9a42 100644 (file)
@@ -41,5 +41,5 @@ assumed to be the command to run. All other elements are ignored.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-run-script &mdash; npm@2.3.0</p>
+<p id="footer">npm-run-script &mdash; npm@2.4.1</p>
 
index 8d116367aefbe52464d7816988589fe9633440cd..bc8f712647cf1ae7eeb2d74832e7bfa9d7e6044b 100644 (file)
@@ -53,5 +53,5 @@ like).</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-search &mdash; npm@2.3.0</p>
+<p id="footer">npm-search &mdash; npm@2.4.1</p>
 
index 08aec3538cf8dae50f175d51ea26f69ab913ab4b..5d686266ee61fb67fdcb89904512955f0feb074e 100644 (file)
@@ -33,5 +33,5 @@ been saved.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-shrinkwrap &mdash; npm@2.3.0</p>
+<p id="footer">npm-shrinkwrap &mdash; npm@2.4.1</p>
 
index 74e8271a541b656ba9b6b1431a05209d14543922..497fe9eb6eaa57075411ad0fb987d54e4b955a6d 100644 (file)
@@ -28,5 +28,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-start &mdash; npm@2.3.0</p>
+<p id="footer">npm-start &mdash; npm@2.4.1</p>
 
index 018b57ea3b248b4814d53a644337f52909074213..65fc48fe6381c47e36d88b3aca434c19df4244bc 100644 (file)
@@ -28,5 +28,5 @@ in the <code>packages</code> parameter.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-stop &mdash; npm@2.3.0</p>
+<p id="footer">npm-stop &mdash; npm@2.4.1</p>
 
index bc145f5f058a55b98f2565fcab78f5c873627939..f2ef22f26d239b2be3aefcf0e819bcdb6128a9a8 100644 (file)
@@ -36,5 +36,5 @@ used. For more information about how to set this config, check
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-tag &mdash; npm@2.3.0</p>
+<p id="footer">npm-tag &mdash; npm@2.4.1</p>
 
index b799e3a7ff40e307d775aca787e05265f03e984d..574006ece96b436da7ee9fe42fbb74c97c5af102 100644 (file)
@@ -30,5 +30,5 @@ in the <code>packages</code> parameter.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-test &mdash; npm@2.3.0</p>
+<p id="footer">npm-test &mdash; npm@2.4.1</p>
 
index 51720cc7d8516879ed73820d988c42efa9be88e2..8004e1a7f4bb17c3ddfbcac70d6f0c8f905ef493 100644 (file)
@@ -30,5 +30,5 @@ uninstalled or when an error has been encountered.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-uninstall &mdash; npm@2.3.0</p>
+<p id="footer">npm-uninstall &mdash; npm@2.4.1</p>
 
index 004ca7ed7f1490f9e40ef8926c51c0c21bd65ddc..0567809e1e251bec9eedc4679dc331f48d3e021f 100644 (file)
@@ -33,5 +33,5 @@ the root package entry is removed from the registry entirely.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-unpublish &mdash; npm@2.3.0</p>
+<p id="footer">npm-unpublish &mdash; npm@2.4.1</p>
 
index 5feecc4b4634bfdacada874aad42d9e1bd31bae1..044359cf1e35fbbe232c9d728c57654506136d1c 100644 (file)
@@ -27,5 +27,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-update &mdash; npm@2.3.0</p>
+<p id="footer">npm-update &mdash; npm@2.4.1</p>
 
index cdd410a14c617ec1ae632ecf57592516a562d921..6627acec54302601d0a408ed3099f1cd537b513a 100644 (file)
@@ -32,5 +32,5 @@ not have exactly one element. The only element should be a version number.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-version &mdash; npm@2.3.0</p>
+<p id="footer">npm-version &mdash; npm@2.4.1</p>
 
index 627f9e65f0b81fb2df3322bb135d3960ac8a8da6..938ade87dd544cdf2ff5061d402c68c131932a75 100644 (file)
@@ -81,5 +81,5 @@ the field name.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-view &mdash; npm@2.3.0</p>
+<p id="footer">npm-view &mdash; npm@2.4.1</p>
 
index c381923cd88b4874a086a68c109a077957435caa..2ae1832bfc43bb1a9c96e8df3aff0661876a82a5 100644 (file)
@@ -29,5 +29,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-whoami &mdash; npm@2.3.0</p>
+<p id="footer">npm-whoami &mdash; npm@2.4.1</p>
 
index ef985922c643f2cc93fa455c5bcd2353d61457a3..d5328254e9d4562c942584617fa837ae80ced9d1 100644 (file)
@@ -23,7 +23,7 @@ npm.load([configObject, ]function (er, npm) {
   npm.commands.install([&quot;package&quot;], cb)
 })
 </code></pre><h2 id="version">VERSION</h2>
-<p>2.3.0</p>
+<p>2.4.1</p>
 <h2 id="description">DESCRIPTION</h2>
 <p>This is the API documentation for npm.
 To find documentation of the command line
@@ -109,5 +109,5 @@ method names.  Use the <code>npm.deref</code> method to find the real name.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm &mdash; npm@2.3.0</p>
+<p id="footer">npm &mdash; npm@2.4.1</p>
 
diff --git a/deps/npm/html/doc/cli/npm-access.html b/deps/npm/html/doc/cli/npm-access.html
new file mode 100644 (file)
index 0000000..e9fe0e7
--- /dev/null
@@ -0,0 +1,78 @@
+<!doctype html>
+<html>
+  <title>npm-access</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-access.html">
+  <script async=true src="../../static/toc.js"></script>
+
+  <body>
+    <div id="wrapper">
+
+<h1><a href="../cli/npm-access.html">npm-access</a></h1> <p>Set access level on published packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm access public [&lt;package&gt;]
+npm access restricted [&lt;package&gt;]
+
+npm access add &lt;read-only|read-write&gt; &lt;entity&gt; [&lt;package&gt;]
+npm access rm &lt;entity&gt; [&lt;package&gt;]
+
+npm access ls [&lt;package&gt;]
+npm access edit [&lt;package&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Used to set access controls on private packages.</p>
+<p>For all of the subcommands, <code>npm access</code> will perform actions on the packages
+in the current working directory if no package name is passed to the
+subcommand.</p>
+<ul>
+<li><p>public / restricted:
+Set a package to be either publicly accessible or restricted.</p>
+</li>
+<li><p>add / rm:
+Add or remove the ability of users and teams to have read-only or read-write
+access to a package.</p>
+</li>
+<li><p>ls:
+Show all of the access privileges for a package. Will only show permissions
+for packages to which you have at least read access.</p>
+</li>
+<li><p>edit:
+Set the access privileges for a package at once using <code>$EDITOR</code>.</p>
+</li>
+</ul>
+<h2 id="details">DETAILS</h2>
+<p><code>npm access</code> always operates directly on the current registry, configurable
+from the command line using <code>--registry=&lt;registry url&gt;</code>.</p>
+<p>Unscoped packages are <em>always public</em>.</p>
+<p>Scoped packages <em>default to restricted</em>, but you can either publish them as
+public using <code>npm publish --access=public</code>, or set their access as public using
+<code>npm access public</code> after the initial publish.</p>
+<p>You must have privileges to set the access of a package:</p>
+<ul>
+<li>You are an owner of an unscoped or scoped package.</li>
+<li>You are a member of the team that owns a scope.</li>
+<li>You have been given read-write privileges for a package, either as a member
+of a team or directly as an owner.</li>
+</ul>
+<p>If your account is not paid, then attempts to publish scoped packages will fail
+with an HTTP 402 status code (logically enough), unless you use
+<code>--access=public</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-publish.html"><a href="../cli/npm-publish.html">npm-publish(1)</a></a></li>
+<li><a href="../misc/npm-config.html"><a href="../misc/npm-config.html">npm-config(7)</a></a></li>
+<li><a href="../misc/npm-registry.html"><a href="../misc/npm-registry.html">npm-registry(7)</a></a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-access &mdash; npm@2.4.1</p>
index 541ad0c41fa64ed7e148da494d856c6c941e9e36..e25299b6c90f31a2c11c7567d7308e5ce92c90e3 100644 (file)
@@ -68,5 +68,5 @@ precedence over any global configuration.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-adduser &mdash; npm@2.3.0</p>
+<p id="footer">npm-adduser &mdash; npm@2.4.1</p>
 
index 0f61d5c0be8c9e46f0c515a784c42d75af92e394..e599f97a8337b1ea45198492e1240258d381fd5c 100644 (file)
@@ -35,5 +35,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-bin &mdash; npm@2.3.0</p>
+<p id="footer">npm-bin &mdash; npm@2.4.1</p>
 
index ccb59fe063993b4838e14331a451f42d81860b6c..a0eb7624d9ad4adff4514754e979c6785a4ef151 100644 (file)
@@ -54,5 +54,5 @@ a <code>package.json</code> in the current folder and use the <code>name</code>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-bugs &mdash; npm@2.3.0</p>
+<p id="footer">npm-bugs &mdash; npm@2.4.1</p>
 
index a32234b9f75fd7e02a7f26c165366e23a10890de..09cbd1cdaf7c2ee8963eb0f3c1d58144f23f4920 100644 (file)
@@ -38,5 +38,5 @@ A folder containing a <code>package.json</code> file in its root.</li>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-build &mdash; npm@2.3.0</p>
+<p id="footer">npm-build &mdash; npm@2.4.1</p>
 
index 2aec65af8a9bd187eb39fbe046de7d90c5c970a8..5ea73eda4fec9a11766b67cca72ef5b35d9aa3fd 100644 (file)
@@ -31,5 +31,5 @@ install packages into the local space.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-bundle &mdash; npm@2.3.0</p>
+<p id="footer">npm-bundle &mdash; npm@2.4.1</p>
 
index d0d392a29c46c581b05a2eedb6ddac33c2b0a7ef..82277f48ea3776b6af88b0c708a88da996924c9a 100644 (file)
@@ -81,5 +81,5 @@ they do not make an HTTP request to the registry.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-cache &mdash; npm@2.3.0</p>
+<p id="footer">npm-cache &mdash; npm@2.4.1</p>
 
index 69da1503e450da4baf4f4e934893121b11f5ab96..1bfebc72830ffd33658fabbe3e157c14552af3ea 100644 (file)
@@ -42,5 +42,5 @@ completions based on the arguments.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-completion &mdash; npm@2.3.0</p>
+<p id="footer">npm-completion &mdash; npm@2.4.1</p>
 
index 7521a212a81ad53c31e24ea22d6527ac58ff1a7f..6c70244eac18783df95318ef03959295fec4758f 100644 (file)
@@ -66,5 +66,5 @@ global config.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-config &mdash; npm@2.3.0</p>
+<p id="footer">npm-config &mdash; npm@2.4.1</p>
 
index 2ea5f3de96fbe27e5d35651bcf7c0aa21d6bef1a..233b2ec5f502e3980701bc7c3262574c33fffe0f 100644 (file)
@@ -63,5 +63,5 @@ versions.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-dedupe &mdash; npm@2.3.0</p>
+<p id="footer">npm-dedupe &mdash; npm@2.4.1</p>
 
index 886ddd1696f881c737f6be452503e9e6b4b15fa6..68dc7488d52d52ea0d289de7c51abfec2c4d81fc 100644 (file)
@@ -38,5 +38,5 @@ something like this:</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-deprecate &mdash; npm@2.3.0</p>
+<p id="footer">npm-deprecate &mdash; npm@2.4.1</p>
 
diff --git a/deps/npm/html/doc/cli/npm-dist-tag.html b/deps/npm/html/doc/cli/npm-dist-tag.html
new file mode 100644 (file)
index 0000000..a0cadee
--- /dev/null
@@ -0,0 +1,79 @@
+<!doctype html>
+<html>
+  <title>npm-dist-tag</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-dist-tag.html">
+  <script async=true src="../../static/toc.js"></script>
+
+  <body>
+    <div id="wrapper">
+
+<h1><a href="../cli/npm-dist-tag.html">npm-dist-tag</a></h1> <p>Modify package distribution tags</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm dist-tag add &lt;pkg&gt;@&lt;version&gt; [&lt;tag&gt;]
+npm dist-tag rm &lt;pkg&gt; &lt;tag&gt;
+npm dist-tag ls [&lt;pkg&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Add, remove, and enumerate distribution tags on a package:</p>
+<ul>
+<li><p>add:
+Tags the specified version of the package with the specified tag, or the
+<code>--tag</code> config if not specified.</p>
+</li>
+<li><p>rm:
+Clear a tag that is no longer in use from the package.</p>
+</li>
+<li><p>ls:
+Show all of the dist-tags for a package, defaulting to the package in
+the curren prefix.</p>
+</li>
+</ul>
+<p>A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:</p>
+<pre><code>npm install &lt;name&gt;@&lt;tag&gt;
+</code></pre><p>When installing dependencies, a preferred tagged version may be specified:</p>
+<pre><code>npm install --tag &lt;tag&gt;
+</code></pre><p>This also applies to <code>npm dedupe</code>.</p>
+<p>Publishing a package always sets the &quot;latest&quot; tag to the published version.</p>
+<h2 id="purpose">PURPOSE</h2>
+<p>Tags can be used to provide an alias instead of version numbers.  For
+example, <code>npm</code> currently uses the tag &quot;next&quot; to identify the upcoming
+version, and the tag &quot;latest&quot; to identify the current version.</p>
+<p>A project might choose to have multiple streams of development, e.g.,
+&quot;stable&quot;, &quot;canary&quot;.</p>
+<h2 id="caveats">CAVEATS</h2>
+<p>This command used to be known as <code>npm tag</code>, which only created new tags, and so
+had a different syntax.</p>
+<p>Tags must share a namespace with version numbers, because they are specified in
+the same slot: <code>npm install &lt;pkg&gt;@&lt;version&gt;</code> vs <code>npm install &lt;pkg&gt;@&lt;tag&gt;</code>.</p>
+<p>Tags that can be interpreted as valid semver ranges will be rejected. For
+example, <code>v1.4</code> cannot be used as a tag, because it is interpreted by semver as
+<code>&gt;=1.4.0 &lt;1.5.0</code>.  See <a href="https://github.com/npm/npm/issues/6082">https://github.com/npm/npm/issues/6082</a>.</p>
+<p>The simplest way to avoid semver problems with tags is to use tags that do not
+begin with a number or the letter <code>v</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-tag.html"><a href="../cli/npm-tag.html">npm-tag(1)</a></a></li>
+<li><a href="../cli/npm-publish.html"><a href="../cli/npm-publish.html">npm-publish(1)</a></a></li>
+<li><a href="../cli/npm-install.html"><a href="../cli/npm-install.html">npm-install(1)</a></a></li>
+<li><a href="../cli/npm-dedupe.html"><a href="../cli/npm-dedupe.html">npm-dedupe(1)</a></a></li>
+<li><a href="../misc/npm-registry.html"><a href="../misc/npm-registry.html">npm-registry(7)</a></a></li>
+<li><a href="../cli/npm-config.html"><a href="../cli/npm-config.html">npm-config(1)</a></a></li>
+<li><a href="../misc/npm-config.html"><a href="../misc/npm-config.html">npm-config(7)</a></a></li>
+<li><a href="../api/npm-tag.html"><a href="../api/npm-tag.html">npm-tag(3)</a></a></li>
+<li><a href="../files/npmrc.html"><a href="../files/npmrc.html">npmrc(5)</a></a></li>
+</ul>
+
+</div>
+
+<table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
+<tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18>&nbsp;</td></tr>
+<tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td><td style="width:40px;height:10px;background:#fff" colspan=4>&nbsp;</td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td><td colspan=6 style="width:60px;height:10px;background:#fff">&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4>&nbsp;</td></tr>
+<tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2>&nbsp;</td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:#fff" rowspan=3>&nbsp;</td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff" rowspan=2>&nbsp;</td></tr>
+<tr><td style="width:10px;height:10px;background:#fff">&nbsp;</td></tr>
+<tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
+<tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
+</table>
+<p id="footer">npm-dist-tag &mdash; npm@2.4.1</p>
index 0721663da06f71a0a53166b7e01759cefe26868f..e8c4f58161a86f79b3bd45062b845b06c06626f4 100644 (file)
@@ -56,5 +56,5 @@ the current folder and use the <code>name</code> property.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-docs &mdash; npm@2.3.0</p>
+<p id="footer">npm-docs &mdash; npm@2.4.1</p>
 
index 6a068adb155787d092158a4a04c1cc44622b0805..34c261de894e91cc29766d8c66c6230f63455706 100644 (file)
@@ -49,5 +49,5 @@ or <code>&quot;notepad&quot;</code> on Windows.</li>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-edit &mdash; npm@2.3.0</p>
+<p id="footer">npm-edit &mdash; npm@2.4.1</p>
 
index 38e79ce0d600da8e4078b3e0f81c551e8c78b546..84396a3094b7f73a132b85a855500c4757d332eb 100644 (file)
@@ -49,5 +49,5 @@ Windows</li>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-explore &mdash; npm@2.3.0</p>
+<p id="footer">npm-explore &mdash; npm@2.4.1</p>
 
index 3584c29b881083a6dc451e1766c64fcbf990cf5f..079fcc6c2fa3e4888a4eb204e92f8ac3fdc14919 100644 (file)
@@ -46,5 +46,5 @@ where the terms were found in the documentation.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-help-search &mdash; npm@2.3.0</p>
+<p id="footer">npm-help-search &mdash; npm@2.4.1</p>
 
index eb463a8cd992c03c4d7336d41c8b150f82dfc3d7..8c93fbb3d0770b2b8a6cb9ea9d4c0cf4b6289a63 100644 (file)
@@ -52,5 +52,5 @@ matches are equivalent to specifying a topic name.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-help &mdash; npm@2.3.0</p>
+<p id="footer">npm-help &mdash; npm@2.4.1</p>
 
index c0586d97b7858f9f0885241c915fe9c5ffcb1a8f..4353534e7d29ef48ffbbf566025f04522ba4fd7b 100644 (file)
@@ -40,5 +40,5 @@ defaults and not prompt you for any options.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-init &mdash; npm@2.3.0</p>
+<p id="footer">npm-init &mdash; npm@2.4.1</p>
 
index 6a7f9dd7dd9f2c9ab0e572ade43c8570eac5291b..13adbec882750785efcaf37a4f6560b58a33f717 100644 (file)
@@ -239,5 +239,5 @@ affects a real use-case, it will be investigated.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-install &mdash; npm@2.3.0</p>
+<p id="footer">npm-install &mdash; npm@2.4.1</p>
 
index b783736d3252eeaa977fb8bc2a36c90d311e41b7..03e9dca9c27520f688a7d4c94e7a6a22d0b7310b 100644 (file)
@@ -71,5 +71,5 @@ include that scope, e.g.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-link &mdash; npm@2.3.0</p>
+<p id="footer">npm-link &mdash; npm@2.4.1</p>
 
index d4d80cfdaae83a9890f1bff96c3fe1d6f9d0a1d4..6beb97a637288f6b1c7a49de5f5f4489747885d7 100644 (file)
@@ -22,7 +22,7 @@ installed, as well as their dependencies, in a tree-structure.</p>
 limit the results to only the paths to the packages named.  Note that
 nested packages will <em>also</em> show the paths to the specified packages.
 For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
-<pre><code>npm@2.3.0 /path/to/npm
+<pre><code>npm@2.4.1 /path/to/npm
 â””─┬ init-package-json@0.0.4
   â””── promzard@0.1.5
 </code></pre><p>It will print out extraneous, missing, and invalid packages.</p>
@@ -85,5 +85,5 @@ project.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-ls &mdash; npm@2.3.0</p>
+<p id="footer">npm-ls &mdash; npm@2.4.1</p>
 
index 81552873ad11be26712c8efd674786b1ccf290c4..c4e5d91a85fd5ac0ab32b7bc937517e815f5bc1e 100644 (file)
@@ -67,5 +67,5 @@ project.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-outdated &mdash; npm@2.3.0</p>
+<p id="footer">npm-outdated &mdash; npm@2.4.1</p>
 
index ed9bcafcb984fcf3cd6fb08fba5d72d7855a43dd..a295affe05c073e5f938d25014261b620248e126 100644 (file)
@@ -49,5 +49,5 @@ that is not implemented at this time.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-owner &mdash; npm@2.3.0</p>
+<p id="footer">npm-owner &mdash; npm@2.4.1</p>
 
index c5ebe07989580434a6115bea0c60cc58b4fde89b..634aaa442879e429f630390420ae0a97c0a469c5 100644 (file)
@@ -41,5 +41,5 @@ overwritten the second time.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-pack &mdash; npm@2.3.0</p>
+<p id="footer">npm-pack &mdash; npm@2.4.1</p>
 
index f3926644edbdf06f75a0522d4e5004d405b4c677..2a186e65d71b1c8fda1c8b03baa8e329eb3efc91 100644 (file)
@@ -38,5 +38,5 @@ to contain a package.json file unless <code>-g</code> is also specified.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-prefix &mdash; npm@2.3.0</p>
+<p id="footer">npm-prefix &mdash; npm@2.4.1</p>
 
index 03b306dad3ea353a3c1b220eac370e1c4c216173..b7034bf7497520953c2869ab97db388931606874 100644 (file)
@@ -39,5 +39,5 @@ packages specified in your <code>devDependencies</code>.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-prune &mdash; npm@2.3.0</p>
+<p id="footer">npm-prune &mdash; npm@2.4.1</p>
 
index 6dc61da6583ee4a586a3bcfa353916c13e060285..3ff6b37e98b044353bcd3e3d375b9f0c373c2b34 100644 (file)
@@ -11,8 +11,8 @@
 
 <h1><a href="../cli/npm-publish.html">npm-publish</a></h1> <p>Publish a package</p>
 <h2 id="synopsis">SYNOPSIS</h2>
-<pre><code>npm publish &lt;tarball&gt; [--tag &lt;tag&gt;]
-npm publish &lt;folder&gt; [--tag &lt;tag&gt;]
+<pre><code>npm publish &lt;tarball&gt; [--tag &lt;tag&gt;] [--access &lt;public|restricted&gt;]
+npm publish &lt;folder&gt; [--tag &lt;tag&gt;] [--access &lt;public|restricted&gt;]
 </code></pre><h2 id="description">DESCRIPTION</h2>
 <p>Publishes a package to the registry so that it can be installed by name. See
 <code><a href="../misc/npm-developers.html"><a href="../misc/npm-developers.html">npm-developers(7)</a></a></code> for details on what&#39;s included in the published package, as
@@ -33,6 +33,12 @@ Registers the published package with the given tag, such that <code>npm install
 &lt;name&gt;@&lt;tag&gt;</code> will install this version.  By default, <code>npm publish</code> updates
 and <code>npm install</code> installs the <code>latest</code> tag.</p>
 </li>
+<li><p><code>[--access &lt;public|restricted&gt;]</code>
+Tells the registry whether this package should be published as public or
+restricted. Only applies to scoped packages, which default to <code>restricted</code>.
+If you don&#39;t have a paid account, you must publish with <code>--access public</code>
+to publish scoped packages.</p>
+</li>
 </ul>
 <p>Fails if the package name and version combination already exists in
 the specified registry.</p>
@@ -42,6 +48,7 @@ it is removed with <a href="../cli/npm-unpublish.html"><a href="../cli/npm-unpub
 <h2 id="see-also">SEE ALSO</h2>
 <ul>
 <li><a href="../misc/npm-registry.html"><a href="../misc/npm-registry.html">npm-registry(7)</a></a></li>
+<li><a href="../misc/npm-scope.html"><a href="../misc/npm-scope.html">npm-scope(7)</a></a></li>
 <li><a href="../cli/npm-adduser.html"><a href="../cli/npm-adduser.html">npm-adduser(1)</a></a></li>
 <li><a href="../cli/npm-owner.html"><a href="../cli/npm-owner.html">npm-owner(1)</a></a></li>
 <li><a href="../cli/npm-deprecate.html"><a href="../cli/npm-deprecate.html">npm-deprecate(1)</a></a></li>
@@ -59,5 +66,5 @@ it is removed with <a href="../cli/npm-unpublish.html"><a href="../cli/npm-unpub
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-publish &mdash; npm@2.3.0</p>
+<p id="footer">npm-publish &mdash; npm@2.4.1</p>
 
index 27252fcbba24fbccd687717e2152e9ef3e5ea57c..d130d328e198a295f4064acce7bfb84034f4aad5 100644 (file)
@@ -38,5 +38,5 @@ the new binary.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-rebuild &mdash; npm@2.3.0</p>
+<p id="footer">npm-rebuild &mdash; npm@2.4.1</p>
 
index 2ac34d35d436bf6195c9fc6f4a9f4580d31aea08..21650e141439fe042b04ccfabf1760310de3c91c 100644 (file)
@@ -42,5 +42,5 @@ a <code>package.json</code> in the current folder and use the <code>name</code>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-repo &mdash; npm@2.3.0</p>
+<p id="footer">npm-repo &mdash; npm@2.4.1</p>
 
index e107a541c07c6582b5e27ed4fe709bd5f517960f..a0b7f933f92855c856ec2a6ab648b65fd4ebc8a3 100644 (file)
@@ -53,5 +53,5 @@ behavior will be accompanied by an increase in major version number</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-restart &mdash; npm@2.3.0</p>
+<p id="footer">npm-restart &mdash; npm@2.4.1</p>
 
index 617de0c68158db9a36e148ebda839809d77a47b0..c99c99f56d232a324ad174d9a568a583908f3abc 100644 (file)
@@ -39,5 +39,5 @@ on its behalf.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-rm &mdash; npm@2.3.0</p>
+<p id="footer">npm-rm &mdash; npm@2.4.1</p>
 
index 08adcec8e12a8cfad73fded789d38f1b2f848aae..99d01d9ab01b034a0459d7214aa69da20e6687ed 100644 (file)
@@ -35,5 +35,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-root &mdash; npm@2.3.0</p>
+<p id="footer">npm-root &mdash; npm@2.4.1</p>
 
index 508e04025a67f9bb1c846c2c64dd4e2f86003308..64c1c5076e26fd6b6f227fbee6739638d7c014ac 100644 (file)
@@ -50,5 +50,5 @@ and not to any pre or post script.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-run-script &mdash; npm@2.3.0</p>
+<p id="footer">npm-run-script &mdash; npm@2.4.1</p>
 
index 7b613de6b3f0f8d4f7dd7eaef83f62bfbcb46561..af063aeee78ffbee17b6a5942a178f404e32df49 100644 (file)
@@ -49,5 +49,5 @@ fall on multiple lines.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-search &mdash; npm@2.3.0</p>
+<p id="footer">npm-search &mdash; npm@2.4.1</p>
 
index 2495eeb3aa4b2e83fe00a93fd3f8c58f64458873..9eec81fa89d08b85aeba6aeb8f356886fdaa4878 100644 (file)
@@ -164,5 +164,5 @@ contents rather than versions.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-shrinkwrap &mdash; npm@2.3.0</p>
+<p id="footer">npm-shrinkwrap &mdash; npm@2.4.1</p>
 
index ae434f6e40fe5c71f622c32baab7ad617d38a9ad..14ea00285a19889ca0c083ebf9cccb0ecd303c93 100644 (file)
@@ -36,5 +36,5 @@ a vaguely positive way to show that you care.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-star &mdash; npm@2.3.0</p>
+<p id="footer">npm-star &mdash; npm@2.4.1</p>
 
index 6ec03a5099092e489c416b72b1107fe4efa531f9..9216d12163b81ab45bb3f86eb0e68402b7e4b921 100644 (file)
@@ -37,5 +37,5 @@ you will most certainly enjoy this command.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-stars &mdash; npm@2.3.0</p>
+<p id="footer">npm-stars &mdash; npm@2.4.1</p>
 
index eedbd240c2ef40a833e879400cdb275e5f2725fc..39d229780fd9776b104e97d0bd7ee9c3ece6e75c 100644 (file)
@@ -34,5 +34,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-start &mdash; npm@2.3.0</p>
+<p id="footer">npm-start &mdash; npm@2.4.1</p>
 
index 610da60698718922f13d868fa383036e8070685b..9318e5d09f64cb3a76d871bec8c943e8e9bddb1e 100644 (file)
@@ -34,5 +34,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-stop &mdash; npm@2.3.0</p>
+<p id="footer">npm-stop &mdash; npm@2.4.1</p>
 
index 57757dfa796c34e6145acdd178b5ddaa016f2010..6082a27b03adf2a79e7545f348ca36a396e67e8a 100644 (file)
@@ -13,6 +13,7 @@
 <h2 id="synopsis">SYNOPSIS</h2>
 <pre><code>npm tag &lt;name&gt;@&lt;version&gt; [&lt;tag&gt;]
 </code></pre><h2 id="description">DESCRIPTION</h2>
+<p>THIS COMMAND IS DEPRECATED. See <a href="../cli/npm-dist-tag.html"><a href="../cli/npm-dist-tag.html">npm-dist-tag(1)</a></a> for details.</p>
 <p>Tags the specified version of the package with the specified tag, or the
 <code>--tag</code> config if not specified.</p>
 <p>A tag can be used when installing packages as a reference to a version instead
@@ -61,5 +62,5 @@ that do not begin with a number or the letter <code>v</code>.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-tag &mdash; npm@2.3.0</p>
+<p id="footer">npm-tag &mdash; npm@2.4.1</p>
 
index e7eacf8890f5a9dc4028cdc3fdc53d9094403651..7a6a7f53fe2387540611b64f5b082318379621b6 100644 (file)
@@ -37,5 +37,5 @@ true.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-test &mdash; npm@2.3.0</p>
+<p id="footer">npm-test &mdash; npm@2.4.1</p>
 
index a0799b36b1adba999a2995ce5d632ccf81b1e872..253b02913c93a338ae962564a05767fcdb8e5457 100644 (file)
@@ -57,5 +57,5 @@ npm uninstall dtrace-provider --save-optional
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-uninstall &mdash; npm@2.3.0</p>
+<p id="footer">npm-uninstall &mdash; npm@2.4.1</p>
 
index a277055b1fe2289c7965f30d71b863943f247ee7..7d96895bcd204719d53364502481c9551174943b 100644 (file)
@@ -47,5 +47,5 @@ package again, a new version number must be used.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-unpublish &mdash; npm@2.3.0</p>
+<p id="footer">npm-unpublish &mdash; npm@2.4.1</p>
 
index d1e66aa81260eef118c5076142db8c84d5060719..81501b70f2fe649d7f5ce19c32711cb6d91c678d 100644 (file)
@@ -42,5 +42,5 @@ or local) will be updated.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-update &mdash; npm@2.3.0</p>
+<p id="footer">npm-update &mdash; npm@2.4.1</p>
 
index dfb537a74d206e04c2c7ea66a47204ee636db7ab..2a7f8af764a6c59773b2a5a22ea1ee756bca56f2 100644 (file)
@@ -55,5 +55,5 @@ Enter passphrase:
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-version &mdash; npm@2.3.0</p>
+<p id="footer">npm-version &mdash; npm@2.4.1</p>
 
index 8c54064ce522d2d7895d9cf6ac844e8d17a6de56..31100a80b0d6e64e297693a4bab4d1156a9b8668 100644 (file)
@@ -82,5 +82,5 @@ the field name.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-view &mdash; npm@2.3.0</p>
+<p id="footer">npm-view &mdash; npm@2.4.1</p>
 
index fbd5544e95dd9831bfa8ec39d564ec68863c05fc..6d871fe91f939b217ef32fa5d0cb0cefdaf2f01b 100644 (file)
@@ -33,5 +33,5 @@
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-whoami &mdash; npm@2.3.0</p>
+<p id="footer">npm-whoami &mdash; npm@2.4.1</p>
 
index f561c7eb82a850ccfdebba19f1bd525164b949a6..a25c71ae0b610a4dc3009b212e288294db3e9bef 100644 (file)
@@ -13,7 +13,7 @@
 <h2 id="synopsis">SYNOPSIS</h2>
 <pre><code>npm &lt;command&gt; [args]
 </code></pre><h2 id="version">VERSION</h2>
-<p>2.3.0</p>
+<p>2.4.1</p>
 <h2 id="description">DESCRIPTION</h2>
 <p>npm is the package manager for the Node JavaScript platform.  It puts
 modules in place so that node can find them, and manages dependency
@@ -110,7 +110,7 @@ easily by doing <code>npm view npm contributors</code>.</p>
 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="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#x3a;&#x6e;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#108;&#101;&#x67;&#x72;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#x6d;">&#x6e;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#108;&#101;&#x67;&#x72;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#x6d;</a></li>
+<li><a href="&#109;&#x61;&#105;&#108;&#x74;&#x6f;&#58;&#110;&#x70;&#x6d;&#45;&#64;&#x67;&#111;&#111;&#x67;&#108;&#101;&#x67;&#114;&#x6f;&#117;&#x70;&#115;&#46;&#x63;&#111;&#109;">&#110;&#x70;&#x6d;&#45;&#64;&#x67;&#111;&#111;&#x67;&#108;&#101;&#x67;&#114;&#x6f;&#117;&#x70;&#115;&#46;&#x63;&#111;&#109;</a></li>
 </ul>
 <h2 id="bugs">BUGS</h2>
 <p>When you find issues, please report them:</p>
@@ -118,7 +118,7 @@ the issues list or ask on the mailing list.</p>
 <li>web:
 <a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
 <li>email:
-<a href="&#x6d;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#x6e;&#x70;&#x6d;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#115;&#46;&#99;&#x6f;&#109;">&#x6e;&#x70;&#x6d;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#115;&#46;&#99;&#x6f;&#109;</a></li>
+<a href="&#x6d;&#97;&#105;&#x6c;&#x74;&#111;&#x3a;&#x6e;&#112;&#109;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#108;&#x65;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#99;&#111;&#x6d;">&#x6e;&#112;&#109;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#108;&#x65;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#99;&#111;&#x6d;</a></li>
 </ul>
 <p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
 as expected.  The <code>npm-debug.log</code> file is also helpful to provide.</p>
@@ -128,7 +128,7 @@ will no doubt tell you to put the output in a gist or email.</p>
 <p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
 <a href="https://github.com/isaacs/">isaacs</a> ::
 <a href="http://twitter.com/izs">@izs</a> ::
-<a href="&#109;&#x61;&#105;&#x6c;&#x74;&#111;&#58;&#105;&#64;&#x69;&#x7a;&#x73;&#46;&#x6d;&#101;">&#105;&#64;&#x69;&#x7a;&#x73;&#46;&#x6d;&#101;</a></p>
+<a href="&#x6d;&#x61;&#x69;&#108;&#x74;&#111;&#58;&#105;&#x40;&#x69;&#x7a;&#x73;&#46;&#109;&#101;">&#105;&#x40;&#x69;&#x7a;&#x73;&#46;&#109;&#101;</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>
@@ -154,5 +154,5 @@ will no doubt tell you to put the output in a gist or email.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm &mdash; npm@2.3.0</p>
+<p id="footer">npm &mdash; npm@2.4.1</p>
 
index 67b03a2b02f16495c0e994224ab8f7b06730233d..42c37dab620b08cd4b7224ba9d1f9f79bb6289a6 100644 (file)
@@ -184,5 +184,5 @@ cannot be found elsewhere.  See <code><a href="../files/package.json.html"><a hr
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-folders &mdash; npm@2.3.0</p>
+<p id="footer">npm-folders &mdash; npm@2.4.1</p>
 
index 2155a83a4808f58a7d6b9c1b9f22a299d9ca4e87..9c4d8467912cb316db36a550b6fa8ecd19216964 100644 (file)
@@ -184,5 +184,5 @@ cannot be found elsewhere.  See <code><a href="../files/package.json.html"><a hr
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-global &mdash; npm@2.3.0</p>
+<p id="footer">npm-global &mdash; npm@2.4.1</p>
 
index aa279fe371bc4aa9bd0218a418304263b9aea180..b22a3add0765cd7e33754b8918f014771a943fb4 100644 (file)
@@ -488,5 +488,5 @@ ignored.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-json &mdash; npm@2.3.0</p>
+<p id="footer">npm-json &mdash; npm@2.4.1</p>
 
index 976a6404f137082f4b1879e599caef969b37d0bd..7ba6dae47b431b4444d6b456a9800424b18f3a56 100644 (file)
@@ -77,5 +77,5 @@ manner.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npmrc &mdash; npm@2.3.0</p>
+<p id="footer">npmrc &mdash; npm@2.4.1</p>
 
index c4c175dd0d5a8aea20a605ef8ea0a6b14fd64959..1d149f195a49d0889097706ee90a2847932a8046 100644 (file)
@@ -488,5 +488,5 @@ ignored.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">package.json &mdash; npm@2.3.0</p>
+<p id="footer">package.json &mdash; npm@2.4.1</p>
 
index e10541d7a4c21c8d59ba878db9a64b27650425c7..8e10418ba3e4c9e7006ab690855e120aa2f8c97e 100644 (file)
@@ -16,6 +16,8 @@
 <p>Using npm on the command line</p>
 <h3 id="npm-1-"><a href="cli/npm.html"><a href="cli/npm.html">npm(1)</a></a></h3>
 <p>javascript package manager</p>
+<h3 id="npm-access-1-"><a href="cli/npm-access.html"><a href="cli/npm-access.html">npm-access(1)</a></a></h3>
+<p>Set access level on published packages</p>
 <h3 id="npm-adduser-1-"><a href="cli/npm-adduser.html"><a href="cli/npm-adduser.html">npm-adduser(1)</a></a></h3>
 <p>Add a registry user account</p>
 <h3 id="npm-bin-1-"><a href="cli/npm-bin.html"><a href="cli/npm-bin.html">npm-bin(1)</a></a></h3>
@@ -36,6 +38,8 @@
 <p>Reduce duplication</p>
 <h3 id="npm-deprecate-1-"><a href="cli/npm-deprecate.html"><a href="cli/npm-deprecate.html">npm-deprecate(1)</a></a></h3>
 <p>Deprecate a version of a package</p>
+<h3 id="npm-dist-tag-1-"><a href="cli/npm-dist-tag.html"><a href="cli/npm-dist-tag.html">npm-dist-tag(1)</a></a></h3>
+<p>Modify package distribution tags</p>
 <h3 id="npm-docs-1-"><a href="cli/npm-docs.html"><a href="cli/npm-docs.html">npm-docs(1)</a></a></h3>
 <p>Docs for a package in a web browser maybe</p>
 <h3 id="npm-edit-1-"><a href="cli/npm-edit.html"><a href="cli/npm-edit.html">npm-edit(1)</a></a></h3>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">index &mdash; npm@2.3.0</p>
+<p id="footer">index &mdash; npm@2.4.1</p>
 
index f792436194dbb3e317e65024cb65c7fda01d728d..0197be845de8e68c78f42122f102c6e55a41d822 100644 (file)
@@ -147,5 +147,5 @@ set to anything.&quot;</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-coding-style &mdash; npm@2.3.0</p>
+<p id="footer">npm-coding-style &mdash; npm@2.4.1</p>
 
index 337d9822939274285646203816c21ee727d459ea..5b8754f7a96d9f5117df22418aa2827adeb1ccb5 100644 (file)
@@ -92,6 +92,15 @@ this:</p>
 <pre><code>npm config set foo:port 80
 </code></pre><p>See <a href="../files/package.json.html"><a href="../files/package.json.html">package.json(5)</a></a> for more information.</p>
 <h2 id="config-settings">Config Settings</h2>
+<h3 id="access">access</h3>
+<ul>
+<li>Default: <code>restricted</code></li>
+<li>Type: Access</li>
+</ul>
+<p>When publishing scoped packages, the access level defaults to <code>restricted</code>.  If
+you want your scoped package to be publicly viewable (and installable) set
+<code>--access=public</code>. The only valid values for <code>access</code> are <code>public</code> and
+<code>restricted</code>. Unscoped packages <em>always</em> have an access level of <code>public</code>.</p>
 <h3 id="always-auth">always-auth</h3>
 <ul>
 <li>Default: false</li>
@@ -767,5 +776,5 @@ exit successfully.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-config &mdash; npm@2.3.0</p>
+<p id="footer">npm-config &mdash; npm@2.4.1</p>
 
index 1ef6966b78587f55f3e5e35ab9b8b208a1e7544e..79cbbad909baa6ea6a3767b54b6dd261378ce126 100644 (file)
@@ -189,5 +189,5 @@ from a fresh checkout.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-developers &mdash; npm@2.3.0</p>
+<p id="footer">npm-developers &mdash; npm@2.4.1</p>
 
index ea48218f53ba0586f40e867bdd9ad45ef88e9514..5aa8fa9f00c1ff55c32a4b5e4d4ba52280b2e62b 100644 (file)
@@ -13,7 +13,7 @@
 <h2 id="synopsis">SYNOPSIS</h2>
 <ol>
 <li>Get the author email with <code>npm owner ls &lt;pkgname&gt;</code></li>
-<li>Email the author, CC <a href="&#109;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#x6f;&#x6d;">&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#x6f;&#x6d;</a></li>
+<li>Email the author, CC <a href="&#109;&#97;&#x69;&#108;&#x74;&#111;&#x3a;&#115;&#117;&#x70;&#x70;&#111;&#x72;&#x74;&#x40;&#x6e;&#x70;&#109;&#106;&#x73;&#46;&#99;&#x6f;&#109;">&#115;&#117;&#x70;&#x70;&#111;&#x72;&#x74;&#x40;&#x6e;&#x70;&#109;&#106;&#x73;&#46;&#99;&#x6f;&#109;</a></li>
 <li>After a few weeks, if there&#39;s no resolution, we&#39;ll sort it out.</li>
 </ol>
 <p>Don&#39;t squat on package names.  Publish code or move out of the way.</p>
@@ -51,12 +51,12 @@ Joe&#39;s appropriate course of action in each case is the same.</p>
 owner (Bob).</li>
 <li>Joe emails Bob, explaining the situation <strong>as respectfully as
 possible</strong>, and what he would like to do with the module name.  He
-adds the npm support staff <a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#x6d;">&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#x6d;</a> to the CC list of
+adds the npm support staff <a href="&#109;&#97;&#105;&#x6c;&#x74;&#111;&#58;&#115;&#x75;&#112;&#112;&#111;&#114;&#116;&#64;&#110;&#112;&#109;&#106;&#x73;&#46;&#99;&#111;&#x6d;">&#115;&#x75;&#112;&#112;&#111;&#114;&#116;&#64;&#110;&#112;&#109;&#106;&#x73;&#46;&#99;&#111;&#x6d;</a> to the CC list of
 the email.  Mention in the email that Bob can run <code>npm owner add
 joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
 <li>After a reasonable amount of time, if Bob has not responded, or if
 Bob and Joe can&#39;t come to any sort of resolution, email support
-<a href="&#109;&#97;&#105;&#108;&#116;&#x6f;&#58;&#115;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#115;&#x2e;&#99;&#111;&#x6d;">&#115;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#115;&#x2e;&#99;&#111;&#x6d;</a> and we&#39;ll sort it out.  (&quot;Reasonable&quot; is
+<a href="&#x6d;&#97;&#x69;&#108;&#116;&#x6f;&#58;&#x73;&#117;&#112;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#x6d;">&#x73;&#117;&#112;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#x6d;</a> and we&#39;ll sort it out.  (&quot;Reasonable&quot; is
 usually at least 4 weeks, but extra time is allowed around common
 holidays.)</li>
 </ol>
@@ -112,5 +112,5 @@ things into it.</li>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-disputes &mdash; npm@2.3.0</p>
+<p id="footer">npm-disputes &mdash; npm@2.4.1</p>
 
index 0372168e1ee1c37718df1902c50c8a066f5bcd76..3d98ec39c20670999f447f28e3cf4f774afb4cbe 100644 (file)
@@ -236,7 +236,7 @@ that has a package.json in its root, or a git url.
 <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="&#x6d;&#97;&#x69;&#x6c;&#116;&#x6f;&#58;&#115;&#x75;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;">&#115;&#x75;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;</a>
+<p>If the registry IS down, let us know by emailing <a href="&#x6d;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x73;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#x73;&#x2e;&#99;&#111;&#x6d;">&#x73;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#x73;&#x2e;&#99;&#111;&#x6d;</a>
 or posting an issue at <a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a>.  If it&#39;s
 down for the world (and not just on your local network) then we&#39;re
 probably already being pinged about it.</p>
@@ -307,5 +307,5 @@ good folks at <a href="http://www.npmjs.com">npm, Inc.</a></p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-faq &mdash; npm@2.3.0</p>
+<p id="footer">npm-faq &mdash; npm@2.4.1</p>
 
index 7faca1768fb5fd358a6d3eb366340e117850a27c..5c05cd27819d89c6001b89f76a9666404601c490 100644 (file)
@@ -16,6 +16,8 @@
 <p>Using npm on the command line</p>
 <h3 id="npm-1-"><a href="../cli/npm.html"><a href="../cli/npm.html">npm(1)</a></a></h3>
 <p>javascript package manager</p>
+<h3 id="npm-access-1-"><a href="../cli/npm-access.html"><a href="../cli/npm-access.html">npm-access(1)</a></a></h3>
+<p>Set access level on published packages</p>
 <h3 id="npm-adduser-1-"><a href="../cli/npm-adduser.html"><a href="../cli/npm-adduser.html">npm-adduser(1)</a></a></h3>
 <p>Add a registry user account</p>
 <h3 id="npm-bin-1-"><a href="../cli/npm-bin.html"><a href="../cli/npm-bin.html">npm-bin(1)</a></a></h3>
@@ -36,6 +38,8 @@
 <p>Reduce duplication</p>
 <h3 id="npm-deprecate-1-"><a href="../cli/npm-deprecate.html"><a href="../cli/npm-deprecate.html">npm-deprecate(1)</a></a></h3>
 <p>Deprecate a version of a package</p>
+<h3 id="npm-dist-tag-1-"><a href="../cli/npm-dist-tag.html"><a href="../cli/npm-dist-tag.html">npm-dist-tag(1)</a></a></h3>
+<p>Modify package distribution tags</p>
 <h3 id="npm-docs-1-"><a href="../cli/npm-docs.html"><a href="../cli/npm-docs.html">npm-docs(1)</a></a></h3>
 <p>Docs for a package in a web browser maybe</p>
 <h3 id="npm-edit-1-"><a href="../cli/npm-edit.html"><a href="../cli/npm-edit.html">npm-edit(1)</a></a></h3>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-index &mdash; npm@2.3.0</p>
+<p id="footer">npm-index &mdash; npm@2.4.1</p>
 
index 84972d7676c73ba7ef8de0910b1d9a0623731810..14fe5242a5a618cf8e1485eb9e86c9f73b465f5c 100644 (file)
@@ -70,5 +70,5 @@ effectively implement the entire CouchDB API anyway.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-registry &mdash; npm@2.3.0</p>
+<p id="footer">npm-registry &mdash; npm@2.4.1</p>
 
index 7acbeabed4872e7ec56213faee3218a1090cdcd8..77362bc4ce4dedfc586fb66aaf48700c546983e9 100644 (file)
@@ -78,5 +78,5 @@ that registry instead.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-scope &mdash; npm@2.3.0</p>
+<p id="footer">npm-scope &mdash; npm@2.4.1</p>
 
index b25a69d36efa2bd4b2d90bd7adacc5a3be07aff0..a40bb907941b0e15db1e7444332e83b5f3c0299d 100644 (file)
@@ -216,5 +216,5 @@ the user will sudo the npm command in question.</li>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">npm-scripts &mdash; npm@2.3.0</p>
+<p id="footer">npm-scripts &mdash; npm@2.4.1</p>
 
index 034c4b639c1ca2b31e13f651e7c0e4f1a11374a6..dedb31f745cc5c57d9837fd6d8a1815d14d88317 100644 (file)
@@ -57,5 +57,5 @@ modules.  To track those down, you can do the following:</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">removing-npm &mdash; npm@2.3.0</p>
+<p id="footer">removing-npm &mdash; npm@2.4.1</p>
 
index a3832b091fcea288de2d4f3de346ff2442de3c77..0d0a226db7e43ca403a21738a213e426c73c967e 100644 (file)
@@ -279,5 +279,5 @@ range, use the <code>satisfies(version, range)</code> function.</p>
 <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6>&nbsp;</td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)">&nbsp;</td></tr>
 <tr><td colspan=5 style="width:50px;height:10px;background:#fff">&nbsp;</td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4>&nbsp;</td><td style="width:90px;height:10px;background:#fff" colspan=9>&nbsp;</td></tr>
 </table>
-<p id="footer">semver &mdash; npm@2.3.0</p>
+<p id="footer">semver &mdash; npm@2.4.1</p>
 
index 3aaea64eb11bae083650bb04a4e9796f8e6ef90a..c8d8291deb20359d720702b5fd6ec611f7d9b4dd 100644 (file)
@@ -115,7 +115,7 @@ specific purpose, or lack of malice in any given npm package.</p>
 <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="&#109;&#x61;&#105;&#x6c;&#x74;&#x6f;&#58;&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;">&#115;&#x75;&#112;&#x70;&#x6f;&#x72;&#x74;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#x2e;&#99;&#111;&#x6d;</a> and explain the situation.</p>
+<a href="&#109;&#x61;&#x69;&#108;&#116;&#111;&#x3a;&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#x40;&#x6e;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#109;">&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#x40;&#x6e;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#109;</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>
index 1ca51d38da37ce83897833456da0ef14b2889a2b..6e50e49b6514796293ec84be61dfa029777601e9 100644 (file)
@@ -12,7 +12,7 @@ npm.load([configObject, ]function (er, npm) {
   npm.commands.install([&quot;package&quot;], cb)
 })
 </code></pre><h2 id="version">VERSION</h2>
-<p>2.3.0</p>
+<p>2.4.1</p>
 <h2 id="description">DESCRIPTION</h2>
 <p>This is the API documentation for npm.
 To find documentation of the command line
diff --git a/deps/npm/html/partial/doc/cli/npm-access.html b/deps/npm/html/partial/doc/cli/npm-access.html
new file mode 100644 (file)
index 0000000..d31d470
--- /dev/null
@@ -0,0 +1,54 @@
+<h1><a href="../cli/npm-access.html">npm-access</a></h1> <p>Set access level on published packages</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm access public [&lt;package&gt;]
+npm access restricted [&lt;package&gt;]
+
+npm access add &lt;read-only|read-write&gt; &lt;entity&gt; [&lt;package&gt;]
+npm access rm &lt;entity&gt; [&lt;package&gt;]
+
+npm access ls [&lt;package&gt;]
+npm access edit [&lt;package&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Used to set access controls on private packages.</p>
+<p>For all of the subcommands, <code>npm access</code> will perform actions on the packages
+in the current working directory if no package name is passed to the
+subcommand.</p>
+<ul>
+<li><p>public / restricted:
+Set a package to be either publicly accessible or restricted.</p>
+</li>
+<li><p>add / rm:
+Add or remove the ability of users and teams to have read-only or read-write
+access to a package.</p>
+</li>
+<li><p>ls:
+Show all of the access privileges for a package. Will only show permissions
+for packages to which you have at least read access.</p>
+</li>
+<li><p>edit:
+Set the access privileges for a package at once using <code>$EDITOR</code>.</p>
+</li>
+</ul>
+<h2 id="details">DETAILS</h2>
+<p><code>npm access</code> always operates directly on the current registry, configurable
+from the command line using <code>--registry=&lt;registry url&gt;</code>.</p>
+<p>Unscoped packages are <em>always public</em>.</p>
+<p>Scoped packages <em>default to restricted</em>, but you can either publish them as
+public using <code>npm publish --access=public</code>, or set their access as public using
+<code>npm access public</code> after the initial publish.</p>
+<p>You must have privileges to set the access of a package:</p>
+<ul>
+<li>You are an owner of an unscoped or scoped package.</li>
+<li>You are a member of the team that owns a scope.</li>
+<li>You have been given read-write privileges for a package, either as a member
+of a team or directly as an owner.</li>
+</ul>
+<p>If your account is not paid, then attempts to publish scoped packages will fail
+with an HTTP 402 status code (logically enough), unless you use
+<code>--access=public</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+</ul>
diff --git a/deps/npm/html/partial/doc/cli/npm-dist-tag.html b/deps/npm/html/partial/doc/cli/npm-dist-tag.html
new file mode 100644 (file)
index 0000000..c4da315
--- /dev/null
@@ -0,0 +1,55 @@
+<h1><a href="../cli/npm-dist-tag.html">npm-dist-tag</a></h1> <p>Modify package distribution tags</p>
+<h2 id="synopsis">SYNOPSIS</h2>
+<pre><code>npm dist-tag add &lt;pkg&gt;@&lt;version&gt; [&lt;tag&gt;]
+npm dist-tag rm &lt;pkg&gt; &lt;tag&gt;
+npm dist-tag ls [&lt;pkg&gt;]
+</code></pre><h2 id="description">DESCRIPTION</h2>
+<p>Add, remove, and enumerate distribution tags on a package:</p>
+<ul>
+<li><p>add:
+Tags the specified version of the package with the specified tag, or the
+<code>--tag</code> config if not specified.</p>
+</li>
+<li><p>rm:
+Clear a tag that is no longer in use from the package.</p>
+</li>
+<li><p>ls:
+Show all of the dist-tags for a package, defaulting to the package in
+the curren prefix.</p>
+</li>
+</ul>
+<p>A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:</p>
+<pre><code>npm install &lt;name&gt;@&lt;tag&gt;
+</code></pre><p>When installing dependencies, a preferred tagged version may be specified:</p>
+<pre><code>npm install --tag &lt;tag&gt;
+</code></pre><p>This also applies to <code>npm dedupe</code>.</p>
+<p>Publishing a package always sets the &quot;latest&quot; tag to the published version.</p>
+<h2 id="purpose">PURPOSE</h2>
+<p>Tags can be used to provide an alias instead of version numbers.  For
+example, <code>npm</code> currently uses the tag &quot;next&quot; to identify the upcoming
+version, and the tag &quot;latest&quot; to identify the current version.</p>
+<p>A project might choose to have multiple streams of development, e.g.,
+&quot;stable&quot;, &quot;canary&quot;.</p>
+<h2 id="caveats">CAVEATS</h2>
+<p>This command used to be known as <code>npm tag</code>, which only created new tags, and so
+had a different syntax.</p>
+<p>Tags must share a namespace with version numbers, because they are specified in
+the same slot: <code>npm install &lt;pkg&gt;@&lt;version&gt;</code> vs <code>npm install &lt;pkg&gt;@&lt;tag&gt;</code>.</p>
+<p>Tags that can be interpreted as valid semver ranges will be rejected. For
+example, <code>v1.4</code> cannot be used as a tag, because it is interpreted by semver as
+<code>&gt;=1.4.0 &lt;1.5.0</code>.  See <a href="https://github.com/npm/npm/issues/6082">https://github.com/npm/npm/issues/6082</a>.</p>
+<p>The simplest way to avoid semver problems with tags is to use tags that do not
+begin with a number or the letter <code>v</code>.</p>
+<h2 id="see-also">SEE ALSO</h2>
+<ul>
+<li><a href="../cli/npm-tag.html">npm-tag(1)</a></li>
+<li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
+<li><a href="../cli/npm-install.html">npm-install(1)</a></li>
+<li><a href="../cli/npm-dedupe.html">npm-dedupe(1)</a></li>
+<li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../cli/npm-config.html">npm-config(1)</a></li>
+<li><a href="../misc/npm-config.html">npm-config(7)</a></li>
+<li><a href="../api/npm-tag.html">npm-tag(3)</a></li>
+<li><a href="../files/npmrc.html">npmrc(5)</a></li>
+</ul>
index 788a0d2adb688a57cb420769c3cf83d6614617d9..39d1668d9a68422532b854ea07b43d01473174d8 100644 (file)
@@ -11,7 +11,7 @@ installed, as well as their dependencies, in a tree-structure.</p>
 limit the results to only the paths to the packages named.  Note that
 nested packages will <em>also</em> show the paths to the specified packages.
 For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
-<pre><code>npm@2.3.0 /path/to/npm
+<pre><code>npm@2.4.1 /path/to/npm
 â””─┬ init-package-json@0.0.4
   â””── promzard@0.1.5
 </code></pre><p>It will print out extraneous, missing, and invalid packages.</p>
index 8df73e3d211db63092f7d3df7962720358e631db..8d9321292a431b8b2f58758217cbeb1a13f4132f 100644 (file)
@@ -1,7 +1,7 @@
 <h1><a href="../cli/npm-publish.html">npm-publish</a></h1> <p>Publish a package</p>
 <h2 id="synopsis">SYNOPSIS</h2>
-<pre><code>npm publish &lt;tarball&gt; [--tag &lt;tag&gt;]
-npm publish &lt;folder&gt; [--tag &lt;tag&gt;]
+<pre><code>npm publish &lt;tarball&gt; [--tag &lt;tag&gt;] [--access &lt;public|restricted&gt;]
+npm publish &lt;folder&gt; [--tag &lt;tag&gt;] [--access &lt;public|restricted&gt;]
 </code></pre><h2 id="description">DESCRIPTION</h2>
 <p>Publishes a package to the registry so that it can be installed by name. See
 <code><a href="../misc/npm-developers.html">npm-developers(7)</a></code> for details on what&#39;s included in the published package, as
@@ -22,6 +22,12 @@ Registers the published package with the given tag, such that <code>npm install
 &lt;name&gt;@&lt;tag&gt;</code> will install this version.  By default, <code>npm publish</code> updates
 and <code>npm install</code> installs the <code>latest</code> tag.</p>
 </li>
+<li><p><code>[--access &lt;public|restricted&gt;]</code>
+Tells the registry whether this package should be published as public or
+restricted. Only applies to scoped packages, which default to <code>restricted</code>.
+If you don&#39;t have a paid account, you must publish with <code>--access public</code>
+to publish scoped packages.</p>
+</li>
 </ul>
 <p>Fails if the package name and version combination already exists in
 the specified registry.</p>
@@ -31,6 +37,7 @@ it is removed with <a href="../cli/npm-unpublish.html">npm-unpublish(1)</a>.</p>
 <h2 id="see-also">SEE ALSO</h2>
 <ul>
 <li><a href="../misc/npm-registry.html">npm-registry(7)</a></li>
+<li><a href="../misc/npm-scope.html">npm-scope(7)</a></li>
 <li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li>
 <li><a href="../cli/npm-owner.html">npm-owner(1)</a></li>
 <li><a href="../cli/npm-deprecate.html">npm-deprecate(1)</a></li>
index 3d0ff71861469609fa589eae0bc247c26ea2238d..b12d5de7a4c62fc99b6508a7aba6552811242f13 100644 (file)
@@ -2,6 +2,7 @@
 <h2 id="synopsis">SYNOPSIS</h2>
 <pre><code>npm tag &lt;name&gt;@&lt;version&gt; [&lt;tag&gt;]
 </code></pre><h2 id="description">DESCRIPTION</h2>
+<p>THIS COMMAND IS DEPRECATED. See <a href="../cli/npm-dist-tag.html">npm-dist-tag(1)</a> for details.</p>
 <p>Tags the specified version of the package with the specified tag, or the
 <code>--tag</code> config if not specified.</p>
 <p>A tag can be used when installing packages as a reference to a version instead
index 9410dfdea1fec28c6457e842d66cf88bb8009804..a3f617a6aa3c12e2c4b895afd723d22afad001c7 100644 (file)
@@ -2,7 +2,7 @@
 <h2 id="synopsis">SYNOPSIS</h2>
 <pre><code>npm &lt;command&gt; [args]
 </code></pre><h2 id="version">VERSION</h2>
-<p>2.3.0</p>
+<p>2.4.1</p>
 <h2 id="description">DESCRIPTION</h2>
 <p>npm is the package manager for the Node JavaScript platform.  It puts
 modules in place so that node can find them, and manages dependency
@@ -99,7 +99,7 @@ easily by doing <code>npm view npm contributors</code>.</p>
 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="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#x3a;&#x6e;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#108;&#101;&#x67;&#x72;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#x6d;">&#x6e;&#112;&#109;&#45;&#64;&#x67;&#x6f;&#x6f;&#x67;&#108;&#101;&#x67;&#x72;&#x6f;&#117;&#x70;&#115;&#x2e;&#99;&#111;&#x6d;</a></li>
+<li><a href="&#109;&#x61;&#105;&#108;&#x74;&#x6f;&#58;&#110;&#x70;&#x6d;&#45;&#64;&#x67;&#111;&#111;&#x67;&#108;&#101;&#x67;&#114;&#x6f;&#117;&#x70;&#115;&#46;&#x63;&#111;&#109;">&#110;&#x70;&#x6d;&#45;&#64;&#x67;&#111;&#111;&#x67;&#108;&#101;&#x67;&#114;&#x6f;&#117;&#x70;&#115;&#46;&#x63;&#111;&#109;</a></li>
 </ul>
 <h2 id="bugs">BUGS</h2>
 <p>When you find issues, please report them:</p>
@@ -107,7 +107,7 @@ the issues list or ask on the mailing list.</p>
 <li>web:
 <a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li>
 <li>email:
-<a href="&#x6d;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#x6e;&#x70;&#x6d;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#115;&#46;&#99;&#x6f;&#109;">&#x6e;&#x70;&#x6d;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#x6c;&#x65;&#x67;&#x72;&#111;&#117;&#112;&#115;&#46;&#99;&#x6f;&#109;</a></li>
+<a href="&#x6d;&#97;&#105;&#x6c;&#x74;&#111;&#x3a;&#x6e;&#112;&#109;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#108;&#x65;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#99;&#111;&#x6d;">&#x6e;&#112;&#109;&#45;&#x40;&#103;&#111;&#x6f;&#x67;&#108;&#x65;&#x67;&#114;&#111;&#x75;&#112;&#115;&#x2e;&#99;&#111;&#x6d;</a></li>
 </ul>
 <p>Be sure to include <em>all</em> of the output from the npm command that didn&#39;t work
 as expected.  The <code>npm-debug.log</code> file is also helpful to provide.</p>
@@ -117,7 +117,7 @@ will no doubt tell you to put the output in a gist or email.</p>
 <p><a href="http://blog.izs.me/">Isaac Z. Schlueter</a> ::
 <a href="https://github.com/isaacs/">isaacs</a> ::
 <a href="http://twitter.com/izs">@izs</a> ::
-<a href="&#109;&#x61;&#105;&#x6c;&#x74;&#111;&#58;&#105;&#64;&#x69;&#x7a;&#x73;&#46;&#x6d;&#101;">&#105;&#64;&#x69;&#x7a;&#x73;&#46;&#x6d;&#101;</a></p>
+<a href="&#x6d;&#x61;&#x69;&#108;&#x74;&#111;&#58;&#105;&#x40;&#x69;&#x7a;&#x73;&#46;&#109;&#101;">&#105;&#x40;&#x69;&#x7a;&#x73;&#46;&#109;&#101;</a></p>
 <h2 id="see-also">SEE ALSO</h2>
 <ul>
 <li><a href="../cli/npm-help.html">npm-help(1)</a></li>
index 4fb98e1bd6d42ca1a241c19c1e00c73faf83b49b..2d23cb50cc81bd2ad73040708294533a7959851a 100644 (file)
@@ -5,6 +5,8 @@
 <p>Using npm on the command line</p>
 <h3 id="npm-1-"><a href="cli/npm.html">npm(1)</a></h3>
 <p>javascript package manager</p>
+<h3 id="npm-access-1-"><a href="cli/npm-access.html">npm-access(1)</a></h3>
+<p>Set access level on published packages</p>
 <h3 id="npm-adduser-1-"><a href="cli/npm-adduser.html">npm-adduser(1)</a></h3>
 <p>Add a registry user account</p>
 <h3 id="npm-bin-1-"><a href="cli/npm-bin.html">npm-bin(1)</a></h3>
@@ -25,6 +27,8 @@
 <p>Reduce duplication</p>
 <h3 id="npm-deprecate-1-"><a href="cli/npm-deprecate.html">npm-deprecate(1)</a></h3>
 <p>Deprecate a version of a package</p>
+<h3 id="npm-dist-tag-1-"><a href="cli/npm-dist-tag.html">npm-dist-tag(1)</a></h3>
+<p>Modify package distribution tags</p>
 <h3 id="npm-docs-1-"><a href="cli/npm-docs.html">npm-docs(1)</a></h3>
 <p>Docs for a package in a web browser maybe</p>
 <h3 id="npm-edit-1-"><a href="cli/npm-edit.html">npm-edit(1)</a></h3>
index 1dcbc237ccf55d8fbf21d920e04f45e4e8030260..919d82ebf66f5bbcbfbab83abf95f3f1e8ca8e58 100644 (file)
@@ -81,6 +81,15 @@ this:</p>
 <pre><code>npm config set foo:port 80
 </code></pre><p>See <a href="../files/package.json.html">package.json(5)</a> for more information.</p>
 <h2 id="config-settings">Config Settings</h2>
+<h3 id="access">access</h3>
+<ul>
+<li>Default: <code>restricted</code></li>
+<li>Type: Access</li>
+</ul>
+<p>When publishing scoped packages, the access level defaults to <code>restricted</code>.  If
+you want your scoped package to be publicly viewable (and installable) set
+<code>--access=public</code>. The only valid values for <code>access</code> are <code>public</code> and
+<code>restricted</code>. Unscoped packages <em>always</em> have an access level of <code>public</code>.</p>
 <h3 id="always-auth">always-auth</h3>
 <ul>
 <li>Default: false</li>
index ab322741a701485d701e5a1209aa1567ccb386fc..d082ec78a67519576f79572b657f4ef0c083cab1 100644 (file)
@@ -2,7 +2,7 @@
 <h2 id="synopsis">SYNOPSIS</h2>
 <ol>
 <li>Get the author email with <code>npm owner ls &lt;pkgname&gt;</code></li>
-<li>Email the author, CC <a href="&#109;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#x6f;&#x6d;">&#115;&#117;&#x70;&#x70;&#x6f;&#x72;&#116;&#64;&#110;&#x70;&#x6d;&#x6a;&#115;&#46;&#99;&#x6f;&#x6d;</a></li>
+<li>Email the author, CC <a href="&#109;&#97;&#x69;&#108;&#x74;&#111;&#x3a;&#115;&#117;&#x70;&#x70;&#111;&#x72;&#x74;&#x40;&#x6e;&#x70;&#109;&#106;&#x73;&#46;&#99;&#x6f;&#109;">&#115;&#117;&#x70;&#x70;&#111;&#x72;&#x74;&#x40;&#x6e;&#x70;&#109;&#106;&#x73;&#46;&#99;&#x6f;&#109;</a></li>
 <li>After a few weeks, if there&#39;s no resolution, we&#39;ll sort it out.</li>
 </ol>
 <p>Don&#39;t squat on package names.  Publish code or move out of the way.</p>
@@ -40,12 +40,12 @@ Joe&#39;s appropriate course of action in each case is the same.</p>
 owner (Bob).</li>
 <li>Joe emails Bob, explaining the situation <strong>as respectfully as
 possible</strong>, and what he would like to do with the module name.  He
-adds the npm support staff <a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#x6d;">&#115;&#117;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#109;&#x6a;&#x73;&#46;&#x63;&#111;&#x6d;</a> to the CC list of
+adds the npm support staff <a href="&#109;&#97;&#105;&#x6c;&#x74;&#111;&#58;&#115;&#x75;&#112;&#112;&#111;&#114;&#116;&#64;&#110;&#112;&#109;&#106;&#x73;&#46;&#99;&#111;&#x6d;">&#115;&#x75;&#112;&#112;&#111;&#114;&#116;&#64;&#110;&#112;&#109;&#106;&#x73;&#46;&#99;&#111;&#x6d;</a> to the CC list of
 the email.  Mention in the email that Bob can run <code>npm owner add
 joe foo</code> to add Joe as an owner of the <code>foo</code> package.</li>
 <li>After a reasonable amount of time, if Bob has not responded, or if
 Bob and Joe can&#39;t come to any sort of resolution, email support
-<a href="&#109;&#97;&#105;&#108;&#116;&#x6f;&#58;&#115;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#115;&#x2e;&#99;&#111;&#x6d;">&#115;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#115;&#x2e;&#99;&#111;&#x6d;</a> and we&#39;ll sort it out.  (&quot;Reasonable&quot; is
+<a href="&#x6d;&#97;&#x69;&#108;&#116;&#x6f;&#58;&#x73;&#117;&#112;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#x6d;">&#x73;&#117;&#112;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#x70;&#109;&#106;&#x73;&#x2e;&#99;&#x6f;&#x6d;</a> and we&#39;ll sort it out.  (&quot;Reasonable&quot; is
 usually at least 4 weeks, but extra time is allowed around common
 holidays.)</li>
 </ol>
index a015b738312037a5e9023d5f24e04162465d8e8a..89d07552961fa5acc94e11332f96021e5d01560a 100644 (file)
@@ -225,7 +225,7 @@ that has a package.json in its root, or a git url.
 <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="&#x6d;&#97;&#x69;&#x6c;&#116;&#x6f;&#58;&#115;&#x75;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;">&#115;&#x75;&#x70;&#112;&#111;&#114;&#x74;&#64;&#110;&#x70;&#x6d;&#106;&#115;&#x2e;&#x63;&#111;&#x6d;</a>
+<p>If the registry IS down, let us know by emailing <a href="&#x6d;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x73;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#x73;&#x2e;&#99;&#111;&#x6d;">&#x73;&#x75;&#x70;&#112;&#x6f;&#114;&#x74;&#64;&#x6e;&#112;&#x6d;&#106;&#x73;&#x2e;&#99;&#111;&#x6d;</a>
 or posting an issue at <a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a>.  If it&#39;s
 down for the world (and not just on your local network) then we&#39;re
 probably already being pinged about it.</p>
index eab0753c9e62da5d9b5528bdfd65d69c54b0eb8b..c42ca682cca4122b4db8beaf987f5244a49032bb 100644 (file)
@@ -5,6 +5,8 @@
 <p>Using npm on the command line</p>
 <h3 id="npm-1-"><a href="../cli/npm.html">npm(1)</a></h3>
 <p>javascript package manager</p>
+<h3 id="npm-access-1-"><a href="../cli/npm-access.html">npm-access(1)</a></h3>
+<p>Set access level on published packages</p>
 <h3 id="npm-adduser-1-"><a href="../cli/npm-adduser.html">npm-adduser(1)</a></h3>
 <p>Add a registry user account</p>
 <h3 id="npm-bin-1-"><a href="../cli/npm-bin.html">npm-bin(1)</a></h3>
@@ -25,6 +27,8 @@
 <p>Reduce duplication</p>
 <h3 id="npm-deprecate-1-"><a href="../cli/npm-deprecate.html">npm-deprecate(1)</a></h3>
 <p>Deprecate a version of a package</p>
+<h3 id="npm-dist-tag-1-"><a href="../cli/npm-dist-tag.html">npm-dist-tag(1)</a></h3>
+<p>Modify package distribution tags</p>
 <h3 id="npm-docs-1-"><a href="../cli/npm-docs.html">npm-docs(1)</a></h3>
 <p>Docs for a package in a web browser maybe</p>
 <h3 id="npm-edit-1-"><a href="../cli/npm-edit.html">npm-edit(1)</a></h3>
diff --git a/deps/npm/lib/access.js b/deps/npm/lib/access.js
new file mode 100644 (file)
index 0000000..a479a97
--- /dev/null
@@ -0,0 +1,123 @@
+var assert = require("assert")
+var resolve = require("path").resolve
+var url = require("url")
+
+var log = require("npmlog")
+var readPackageJson = require("read-package-json")
+
+var mapToRegistry = require("./utils/map-to-registry.js")
+var npa = require("npm-package-arg")
+var npm = require("./npm.js")
+
+module.exports = access
+
+access.usage = "npm access public [<package>]"
+             + "\nnpm access restricted [<package>]"
+             + "\nnpm access add <read-only|read-write> <entity> [<package>]"
+             + "\nnpm access rm <entity> [<package>]"
+             + "\nnpm access ls [<package>]"
+             + "\nnpm access edit [<package>]"
+
+access.completion = function (opts, cb) {
+  var argv = opts.conf.argv.remain
+  if (argv.length === 2) {
+    return cb(null, ["public", "restricted", "add", "rm", "ls", "edit"])
+  }
+
+  switch (argv[2]) {
+    case "public":
+    case "restricted":
+    case "ls":
+    case "edit":
+      return cb(new Error("unimplemented: packages you can change"))
+    case "add":
+      if (argv.length === 3) return cb(null, ["read-only", "read-write"])
+
+      return cb(new Error("unimplemented: entities and packages"))
+    case "rm":
+      return cb(new Error("unimplemented: entities and packages"))
+    default:
+      return cb(new Error(argv[2]+" not recognized"))
+  }
+}
+
+function access (args, cb) {
+  var cmd = args.shift()
+  switch (cmd) {
+    case "public": case "restricted": return changeAccess(args, cmd, cb)
+    case "add": case "set": return add(args, cb)
+    case "rm": case "del": case "clear": return rm(args, cb)
+    case "list": case "sl": case "ls": return ls(args, cb)
+    case "edit": case "ed": return edit(args, cb)
+    default: return cb("Usage:\n"+access.usage)
+  }
+}
+
+function changeAccess (args, level, cb) {
+  assert(Array.isArray(args), "changeAccess requires args be an array")
+  assert(
+    ["public", "restricted"].indexOf(level) !== -1,
+    "access level must be either 'public' or 'restricted'"
+  )
+  assert(typeof cb === "function", "changeAccess requires a callback")
+
+  var p = (args.shift() || "").trim()
+  if (!p) return getCurrentPackage(level, cb)
+  changeAccess_(p, level, cb)
+}
+
+function getCurrentPackage (level, cb) {
+  var here = resolve(npm.prefix, "package.json")
+  log.verbose("setPackageLevel", "here", here)
+
+  readPackageJson(here, function (er, data) {
+    if (er) return cb(er)
+
+    if (!data.name) {
+      return cb(new Error("Package must be named"))
+    }
+
+    changeAccess_(data.name, level, cb)
+  })
+}
+
+function changeAccess_ (name, level, cb) {
+  log.verbose("changeAccess", "name", name, "level", level)
+  mapToRegistry(name, npm.config, function (er, uri, auth, base) {
+    if (er) return cb(er)
+
+    var data = npa(name)
+    if (!data.scope) {
+      var msg = "Sorry, you can't change the access level of unscoped packages."
+      log.error("access", msg)
+      return cb(new Error(msg))
+    }
+
+    // name must be scoped, so escape separator
+    name = name.replace("/", "%2f")
+    // FIXME: mapToRegistry still isn't generic enough SIGH
+    uri = url.resolve(base, "-/package/"+name+"/access")
+    var params = {
+      level : level,
+      auth : auth
+    }
+
+    npm.registry.access(uri, params, cb)
+  })
+}
+
+function add (args, cb) {
+  return cb(new Error("npm access add isn't implemented yet!"))
+}
+
+function rm (args, cb) {
+  return cb(new Error("npm access rm isn't implemented yet!"))
+}
+
+function ls (args, cb) {
+  return cb(new Error("npm access ls isn't implemented yet!"))
+}
+
+function edit (args, cb) {
+  return cb(new Error("npm edit ls isn't implemented yet!"))
+}
index 459a236f55409cab3695b5e9955c9e36e20743c8..ec8eb8e16ce083cdf65e0070276115924f139b57 100644 (file)
@@ -24,6 +24,7 @@ function CachingRegistryClient (config) {
   // swizzle in our custom cache invalidation logic
   this._request = this.request
   this.request  = this._invalidatingRequest
+  this.get      = get
 }
 inherits(CachingRegistryClient, RegistryClient)
 
@@ -42,7 +43,7 @@ CachingRegistryClient.prototype._invalidatingRequest = function (uri, params, cb
       // thinking that it didn't work when it did.
       // Note that failure is an acceptable option here, since the only
       // result will be a stale cache for some helper commands.
-      client.log.verbose("request", "invalidating", invalidated, "on", method)
+      log.verbose("request", "invalidating", invalidated, "on", method)
       return rimraf(invalidated, function () {
         cb.apply(undefined, args)
       })
@@ -52,7 +53,7 @@ CachingRegistryClient.prototype._invalidatingRequest = function (uri, params, cb
   })
 }
 
-CachingRegistryClient.prototype.get = function get (uri, params, cb) {
+function get (uri, params, cb) {
   assert(typeof uri === "string", "must pass registry URI to get")
   assert(params && typeof params === "object", "must pass params to get")
   assert(typeof cb === "function", "must pass callback to get")
@@ -68,7 +69,10 @@ CachingRegistryClient.prototype.get = function get (uri, params, cb) {
 
   // If the GET is part of a write operation (PUT or DELETE), then
   // skip past the cache entirely, but still save the results.
-  if (uri.match(/\?write=true$/)) return get_.call(this, uri, cachePath, params, cb)
+  if (uri.match(/\?write=true$/)) {
+    log.verbose("get", "GET as part of write; not caching result")
+    return get_.call(this, uri, cachePath, params, cb)
+  }
 
   var client = this
   fs.stat(cachePath, function (er, stat) {
@@ -170,6 +174,7 @@ function get_ (uri, cachePath, params, cb) {
     }
 
     function saveToCache (cachePath, data, saved) {
+      log.verbose("get", "saving", data.name, "to", cachePath)
       getCacheStat(function (er, st) {
         mkdirp(path.dirname(cachePath), function (er, made) {
           if (er) return saved()
index 3d99ab86fa6e4e20083a33cb264c957779441a12..b7443a7e036aa80e7a18b7cb8d2f008f18231558 100644 (file)
@@ -24,7 +24,7 @@ try {
 exports.Umask = Umask
 function Umask () {}
 function validateUmask (data, k, val) {
-  return umask.validate (data, k, val)
+  return umask.validate(data, k, val)
 }
 
 function validateSemver (data, k, val) {
@@ -119,7 +119,9 @@ Object.defineProperty(exports, "defaults", {get: function () {
   }
 
   defaults = {
-    "always-auth" : false
+    access : "restricted"
+    , "always-auth" : false
+
     , "bin-links" : true
     , browser : null
 
@@ -228,7 +230,8 @@ Object.defineProperty(exports, "defaults", {get: function () {
 }})
 
 exports.types =
-  { "always-auth" : Boolean
+  { access : ["restricted", "public"]
+  , "always-auth" : Boolean
   , "bin-links": Boolean
   , browser : [null, String]
   , ca: [null, String, Array]
@@ -272,7 +275,7 @@ exports.types =
   // local-address must be listed as an IP for a local network interface
   // must be IPv4 due to node bug
   , "local-address" : getLocalAddresses()
-  , loglevel : ["silent","error","warn","http","info","verbose","silly"]
+  , loglevel : ["silent", "error", "warn", "http", "info", "verbose", "silly"]
   , logstream : Stream
   , long : Boolean
   , message: String
diff --git a/deps/npm/lib/dist-tag.js b/deps/npm/lib/dist-tag.js
new file mode 100644 (file)
index 0000000..48b4020
--- /dev/null
@@ -0,0 +1,151 @@
+module.exports = distTag
+
+var log = require("npmlog")
+var npa = require("npm-package-arg")
+var semver = require("semver")
+
+var npm = require("./npm.js")
+var mapToRegistry = require("./utils/map-to-registry.js")
+var readLocalPkg = require("./utils/read-local-package.js")
+
+distTag.usage = "npm dist-tag add <pkg>@<version> [<tag>]"
+              + "\nnpm dist-tag rm <pkg> <tag>"
+              + "\nnpm dist-tag ls [<pkg>]"
+
+distTag.completion = function (opts, cb) {
+  var argv = opts.conf.argv.remain
+  if (argv.length === 2) {
+    return cb(null, ["add", "rm", "ls"])
+  }
+
+  switch (argv[2]) {
+    default:
+      return cb()
+  }
+}
+
+function distTag (args, cb) {
+  var cmd = args.shift()
+  switch (cmd) {
+    case "add": case "a": case "set": case "s":
+      return add(args[0], args[1], cb)
+    case "rm":  case "r": case "del": case "d": case "remove":
+      return remove(args[1], args[0], cb)
+    case "ls":  case "l": case "sl": case "list":
+      return list(args[0], cb)
+    default:
+      return cb("Usage:\n"+distTag.usage)
+  }
+}
+
+function add (spec, tag, cb) {
+  var thing = npa(spec || "")
+  var pkg = thing.name
+  var version = thing.rawSpec
+  var t = (tag || npm.config.get("tag")).trim()
+
+  log.verbose("dist-tag add", t, "to", pkg+"@"+version)
+
+  if (!pkg || !version || !t) return cb("Usage:\n"+distTag.usage)
+
+  if (semver.validRange(t)) {
+    var er = new Error("Tag name must not be a valid SemVer range: " + t)
+    return cb(er)
+  }
+
+  fetchTags(pkg, function (er, tags) {
+    if (er) return cb(er)
+
+    if (tags[t] === version) {
+      log.warn("dist-tag add", t, "is already set to version", version)
+      return cb()
+    }
+    tags[t] = version
+
+    mapToRegistry(pkg, npm.config, function (er, uri, auth, base) {
+      var params = {
+        package : pkg,
+        distTag : t,
+        version : version,
+        auth : auth
+      }
+
+      npm.registry.distTags.add(base, params, function (er) {
+        if (er) return cb(er)
+
+        console.log("+"+t+": "+pkg+"@"+version)
+        cb()
+      })
+    })
+  })
+}
+
+function remove (tag, pkg, cb) {
+  log.verbose("dist-tag del", tag, "from", pkg)
+
+  fetchTags(pkg, function (er, tags) {
+    if (er) return cb(er)
+
+    if (!tags[tag]) {
+      log.info("dist-tag del", tag, "is not a dist-tag on", pkg)
+      return cb(new Error(tag+" is not a dist-tag on "+pkg))
+    }
+
+    var version = tags[tag]
+    delete tags[tag]
+
+    mapToRegistry(pkg, npm.config, function (er, uri, auth, base) {
+      var params = {
+        package : pkg,
+        distTag : tag,
+        auth : auth
+      }
+
+      npm.registry.distTags.rm(base, params, function (er) {
+        if (er) return cb(er)
+
+        console.log("-"+tag+": "+pkg+"@"+version)
+        cb()
+      })
+    })
+  })
+}
+
+function list (pkg, cb) {
+  if (!pkg) return readLocalPkg(function (er, pkg) {
+    if (er) return cb(er)
+    if (!pkg) return cb(distTag.usage)
+    list(pkg, cb)
+  })
+
+  fetchTags(pkg, function (er, tags) {
+    if (er) {
+      log.error("dist-tag ls", "Couldn't get dist-tag data for", pkg)
+      return cb(er)
+    }
+    var msg = Object.keys(tags).map(function (k) {
+      return k+": "+tags[k]
+    }).sort().join("\n")
+    console.log(msg)
+    cb(er, tags)
+  })
+}
+
+function fetchTags (pkg, cb) {
+  mapToRegistry(pkg, npm.config, function (er, uri, auth, base) {
+    if (er) return cb(er)
+
+    var params = {
+      package : pkg,
+      auth : auth
+    }
+    npm.registry.distTags.fetch(base, params, function (er, tags) {
+      if (er) return cb(er)
+      if (!tags || !Object.keys(tags).length) {
+        return cb(new Error("No dist-tags found for " + pkg))
+      }
+
+      cb(null, tags)
+    })
+  })
+}
index d03ec47b6bbb99b29d923ccdd39459c2a505ec84..8077e8ac99766815e1ba463a6163547561866676 100644 (file)
@@ -67,6 +67,7 @@ var commandCache = {}
               , "isntall" : "install"
               , "up" : "update"
               , "c" : "config"
+              , "dist-tags" : "dist-tag"
               , "info" : "view"
               , "show" : "view"
               , "find" : "search"
@@ -111,6 +112,7 @@ var commandCache = {}
               , "adduser"
               , "unpublish"
               , "owner"
+              , "access"
               , "deprecate"
               , "shrinkwrap"
 
@@ -131,6 +133,7 @@ var commandCache = {}
               , "prefix"
               , "bin"
               , "whoami"
+              , "dist-tag"
 
               , "test"
               , "stop"
index 7b34508337ea488034352e66e8e0f86e161ffe0e..3d33a932a3bfc363eac438120ff62836c30324e1 100644 (file)
@@ -6,8 +6,8 @@ owner.usage = "npm owner add <username> <pkg>"
 
 var npm = require("./npm.js")
   , log = require("npmlog")
-  , readJson = require("read-package-json")
   , mapToRegistry = require("./utils/map-to-registry.js")
+  , readLocalPkg = require("./utils/read-local-package.js")
 
 owner.completion = function (opts, cb) {
   var argv = opts.conf.argv.remain
@@ -252,14 +252,6 @@ function mutate (pkg, user, mutation, cb) {
   }
 }
 
-function readLocalPkg (cb) {
-  if (npm.config.get("global")) return cb()
-  var path = require("path")
-  readJson(path.resolve(npm.prefix, "package.json"), function (er, d) {
-    return cb(er, d && d.name)
-  })
-}
-
 function unknown (action, cb) {
   cb("Usage: \n" + owner.usage)
 }
index f179bd42220e2ff83c096d03793d8dd3754a65bd..18f45b087970436c0d06243855a3cfaad8723b41 100644 (file)
@@ -12,6 +12,7 @@ var npm = require("./npm.js")
   , mapToRegistry = require("./utils/map-to-registry.js")
   , cachedPackageRoot = require("./cache/cached-package-root.js")
   , createReadStream = require("graceful-fs").createReadStream
+  , npa = require("npm-package-arg")
 
 publish.usage = "npm publish <tarball>"
               + "\nnpm publish <folder>"
@@ -121,6 +122,15 @@ function publish_ (arg, data, isRetry, cachedir, cb) {
       auth     : auth
     }
 
+    // registry-frontdoor cares about the access level, which is only
+    // configurable for scoped packages
+    if (npa(data.name).scope) {
+      params.access = config.get("access")
+    }
+    else {
+      params.access = "public"
+    }
+
     registry.publish(registryBase, params, function (er) {
       if (er && er.code === "EPUBLISHCONFLICT" &&
           npm.config.get("force") && !isRetry) {
index bc7ec918796dc30f4c7fc027e30a0a7c0b5d67ef..75da0b2174fff720f8d67b4ccf8bc7d178aaf48d 100644 (file)
@@ -9,6 +9,7 @@ var npm = require("./npm.js")
   , mapToRegistry = require("./utils/map-to-registry.js")
   , npa = require("npm-package-arg")
   , semver = require("semver")
+  , log = require("npmlog")
 
 function tag (args, cb) {
   var thing = npa(args.shift() || "")
@@ -25,6 +26,8 @@ function tag (args, cb) {
     return cb(er)
   }
 
+  log.warn("tag", "This command is deprecated. Use `npm dist-tag` instead.")
+
   mapToRegistry(project, npm.config, function (er, uri, auth) {
     if (er) return cb(er)
 
index df57c5b3463138781c907379e81c531ce5f7b618..ede8482c40c3b030984e9c0eb12af0c4c8b35124 100644 (file)
@@ -5,6 +5,7 @@ var readJson = require("read-package-json")
   , gentlyRm = require("./utils/gently-rm.js")
   , npm = require("./npm.js")
   , path = require("path")
+  , isInside = require("path-is-inside")
   , lifecycle = require("./utils/lifecycle.js")
   , asyncMap = require("slide").asyncMap
   , chain = require("slide").chain
@@ -23,11 +24,12 @@ function unbuild_ (silent) { return function (folder, cb_) {
     cb_(er, path.relative(npm.root, folder))
   }
   folder = path.resolve(folder)
+  var base = isInside(folder, npm.prefix) ? npm.prefix : folder
   delete build._didBuild[folder]
   log.verbose("unbuild", folder.substr(npm.prefix.length + 1))
   readJson(path.resolve(folder, "package.json"), function (er, pkg) {
     // if no json, then just trash it, but no scripts or whatever.
-    if (er) return gentlyRm(folder, false, npm.prefix, cb)
+    if (er) return gentlyRm(folder, false, base, cb)
     readJson.cache.del(folder)
     chain
       ( [ [lifecycle, pkg, "preuninstall", folder, false, true]
@@ -38,7 +40,7 @@ function unbuild_ (silent) { return function (folder, cb_) {
           }
         , [rmStuff, pkg, folder]
         , [lifecycle, pkg, "postuninstall", folder, false, true]
-        , [gentlyRm, folder, false, npm.prefix] ]
+        , [gentlyRm, folder, false, base] ]
       , cb )
   })
 }}
diff --git a/deps/npm/lib/utils/read-local-package.js b/deps/npm/lib/utils/read-local-package.js
new file mode 100644 (file)
index 0000000..ca6d613
--- /dev/null
@@ -0,0 +1,12 @@
+exports = module.exports = readLocalPkg
+
+var npm = require("../npm.js")
+  , readJson = require("read-package-json")
+
+function readLocalPkg (cb) {
+  if (npm.config.get("global")) return cb()
+  var path = require("path")
+  readJson(path.resolve(npm.prefix, "package.json"), function (er, d) {
+    return cb(er, d && d.name)
+  })
+}
diff --git a/deps/npm/man/man1/npm-access.1 b/deps/npm/man/man1/npm-access.1
new file mode 100644 (file)
index 0000000..9b8e9d9
--- /dev/null
@@ -0,0 +1,77 @@
+.TH "NPM\-ACCESS" "1" "January 2015" "" ""
+.SH "NAME"
+\fBnpm-access\fR \- Set access level on published packages
+.SH SYNOPSIS
+.P
+.RS 2
+.nf
+npm access public [<package>]
+npm access restricted [<package>]
+
+npm access add <read\-only|read\-write> <entity> [<package>]
+npm access rm <entity> [<package>]
+
+npm access ls [<package>]
+npm access edit [<package>]
+.fi
+.RE
+.SH DESCRIPTION
+.P
+Used to set access controls on private packages\.
+.P
+For all of the subcommands, \fBnpm access\fR will perform actions on the packages
+in the current working directory if no package name is passed to the
+subcommand\.
+.RS 0
+.IP \(bu 2
+public / restricted:
+Set a package to be either publicly accessible or restricted\.
+.IP \(bu 2
+add / rm:
+Add or remove the ability of users and teams to have read\-only or read\-write
+access to a package\.
+.IP \(bu 2
+ls:
+Show all of the access privileges for a package\. Will only show permissions
+for packages to which you have at least read access\.
+.IP \(bu 2
+edit:
+Set the access privileges for a package at once using \fB$EDITOR\fR\|\.
+
+.RE
+.SH DETAILS
+.P
+\fBnpm access\fR always operates directly on the current registry, configurable
+from the command line using \fB\-\-registry=<registry url>\fR\|\.
+.P
+Unscoped packages are \fIalways public\fR\|\.
+.P
+Scoped packages \fIdefault to restricted\fR, but you can either publish them as
+public using \fBnpm publish \-\-access=public\fR, or set their access as public using
+\fBnpm access public\fR after the initial publish\.
+.P
+You must have privileges to set the access of a package:
+.RS 0
+.IP \(bu 2
+You are an owner of an unscoped or scoped package\.
+.IP \(bu 2
+You are a member of the team that owns a scope\.
+.IP \(bu 2
+You have been given read\-write privileges for a package, either as a member
+of a team or directly as an owner\.
+
+.RE
+.P
+If your account is not paid, then attempts to publish scoped packages will fail
+with an HTTP 402 status code (logically enough), unless you use
+\fB\-\-access=public\fR\|\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
+npm help publish
+.IP \(bu 2
+npm help 7 config
+.IP \(bu 2
+npm help 7 registry
+
+.RE
diff --git a/deps/npm/man/man1/npm-dist-tag.1 b/deps/npm/man/man1/npm-dist-tag.1
new file mode 100644 (file)
index 0000000..1d099f9
--- /dev/null
@@ -0,0 +1,94 @@
+.TH "NPM\-DIST\-TAG" "1" "January 2015" "" ""
+.SH "NAME"
+\fBnpm-dist-tag\fR \- Modify package distribution tags
+.SH SYNOPSIS
+.P
+.RS 2
+.nf
+npm dist\-tag add <pkg>@<version> [<tag>]
+npm dist\-tag rm <pkg> <tag>
+npm dist\-tag ls [<pkg>]
+.fi
+.RE
+.SH DESCRIPTION
+.P
+Add, remove, and enumerate distribution tags on a package:
+.RS 0
+.IP \(bu 2
+add:
+Tags the specified version of the package with the specified tag, or the
+\fB\-\-tag\fR config if not specified\.
+.IP \(bu 2
+rm:
+Clear a tag that is no longer in use from the package\.
+.IP \(bu 2
+ls:
+Show all of the dist\-tags for a package, defaulting to the package in
+the curren prefix\.
+
+.RE
+.P
+A tag can be used when installing packages as a reference to a version instead
+of using a specific version number:
+.P
+.RS 2
+.nf
+npm install <name>@<tag>
+.fi
+.RE
+.P
+When installing dependencies, a preferred tagged version may be specified:
+.P
+.RS 2
+.nf
+npm install \-\-tag <tag>
+.fi
+.RE
+.P
+This also applies to \fBnpm dedupe\fR\|\.
+.P
+Publishing a package always sets the "latest" tag to the published version\.
+.SH PURPOSE
+.P
+Tags can be used to provide an alias instead of version numbers\.  For
+example, \fBnpm\fR currently uses the tag "next" to identify the upcoming
+version, and the tag "latest" to identify the current version\.
+.P
+A project might choose to have multiple streams of development, e\.g\.,
+"stable", "canary"\.
+.SH CAVEATS
+.P
+This command used to be known as \fBnpm tag\fR, which only created new tags, and so
+had a different syntax\.
+.P
+Tags must share a namespace with version numbers, because they are specified in
+the same slot: \fBnpm install <pkg>@<version>\fR vs \fBnpm install <pkg>@<tag>\fR\|\.
+.P
+Tags that can be interpreted as valid semver ranges will be rejected\. For
+example, \fBv1\.4\fR cannot be used as a tag, because it is interpreted by semver as
+\fB>=1\.4\.0 <1\.5\.0\fR\|\.  See https://github\.com/npm/npm/issues/6082\|\.
+.P
+The simplest way to avoid semver problems with tags is to use tags that do not
+begin with a number or the letter \fBv\fR\|\.
+.SH SEE ALSO
+.RS 0
+.IP \(bu 2
+npm help tag
+.IP \(bu 2
+npm help publish
+.IP \(bu 2
+npm help install
+.IP \(bu 2
+npm help dedupe
+.IP \(bu 2
+npm help 7 registry
+.IP \(bu 2
+npm help config
+.IP \(bu 2
+npm help 7 config
+.IP \(bu 2
+npm apihelp tag
+.IP \(bu 2
+npm help 5 npmrc
+
+.RE
index bbdc916666cd5f3a66a6ced4f561b3445660f038..53784cbc3991edd83026cb9a252ac058c73737f1 100644 (file)
@@ -23,7 +23,7 @@ For example, running \fBnpm ls promzard\fR in npm's source tree will show:
 .P
 .RS 2
 .nf
-npm@2.3.0 /path/to/npm
+npm@2.4.1 /path/to/npm
 â””─┬ init\-package\-json@0\.0\.4
   â””── promzard@0\.1\.5
 .fi
index 0df825154b87a1e33949f2e235af2f6695d87b35..d8a6368fc48bbe7f6978141cba0dbb71f751c970 100644 (file)
@@ -5,8 +5,8 @@
 .P
 .RS 2
 .nf
-npm publish <tarball> [\-\-tag <tag>]
-npm publish <folder> [\-\-tag <tag>]
+npm publish <tarball> [\-\-tag <tag>] [\-\-access <public|restricted>]
+npm publish <folder> [\-\-tag <tag>] [\-\-access <public|restricted>]
 .fi
 .RE
 .SH DESCRIPTION
@@ -31,6 +31,12 @@ with a package\.json file inside\.
 Registers the published package with the given tag, such that \fBnpm install
 <name>@<tag>\fR will install this version\.  By default, \fBnpm publish\fR updates
 and \fBnpm install\fR installs the \fBlatest\fR tag\.
+.IP \(bu 2
+\fB[\-\-access <public|restricted>]\fR
+Tells the registry whether this package should be published as public or
+restricted\. Only applies to scoped packages, which default to \fBrestricted\fR\|\.
+If you don't have a paid account, you must publish with \fB\-\-access public\fR
+to publish scoped packages\.
 
 .RE
 .P
@@ -45,6 +51,8 @@ it is removed with npm help unpublish\.
 .IP \(bu 2
 npm help 7 registry
 .IP \(bu 2
+npm help 7 scope
+.IP \(bu 2
 npm help adduser
 .IP \(bu 2
 npm help owner
index 995ad3990726e732648d834e97b6ffbf7de6cce3..ed72fa30defdd5ce10e9a76afb4f607ee0729a9d 100644 (file)
@@ -10,6 +10,8 @@ npm tag <name>@<version> [<tag>]
 .RE
 .SH DESCRIPTION
 .P
+THIS COMMAND IS DEPRECATED\. See npm help dist\-tag for details\.
+.P
 Tags the specified version of the package with the specified tag, or the
 \fB\-\-tag\fR config if not specified\.
 .P
index 7b4465aa29026c726ae4136bd15f825a3509a94b..4fad03714572d68237bb0254a65c6782df3fb451 100644 (file)
@@ -10,7 +10,7 @@ npm <command> [args]
 .RE
 .SH VERSION
 .P
-2.3.0
+2.4.1
 .SH DESCRIPTION
 .P
 npm is the package manager for the Node JavaScript platform\.  It puts
index 1bd3f3890f2e741c5bee68449ca1440d5b6e334a..080c5ac1198576b210ee2ae77d4fdc86dbb1bc21 100644 (file)
@@ -20,7 +20,7 @@ npm\.load([configObject, ]function (er, npm) {
 .RE
 .SH VERSION
 .P
-2.3.0
+2.4.1
 .SH DESCRIPTION
 .P
 This is the API documentation for npm\.
index b76ec439c512c23d4b8caa41f21e0aa265840bd1..a325169983e2ab050d975f0ca4a1b9540aee0c82 100644 (file)
@@ -151,6 +151,19 @@ npm config set foo:port 80
 .P
 See npm help 5 package\.json for more information\.
 .SH Config Settings
+.SS access
+.RS 0
+.IP \(bu 2
+Default: \fBrestricted\fR
+.IP \(bu 2
+Type: Access
+
+.RE
+.P
+When publishing scoped packages, the access level defaults to \fBrestricted\fR\|\.  If
+you want your scoped package to be publicly viewable (and installable) set
+\fB\-\-access=public\fR\|\. The only valid values for \fBaccess\fR are \fBpublic\fR and
+\fBrestricted\fR\|\. Unscoped packages \fIalways\fR have an access level of \fBpublic\fR\|\.
 .SS always\-auth
 .RS 0
 .IP \(bu 2
index b3608b57774d417e6d50eea4a52a3e0684781808..7ca7b25606ae16aa8946f50dfd0a156899cd5fa5 100644 (file)
@@ -10,6 +10,9 @@ Using npm on the command line
 .SS npm help npm
 .P
 javascript package manager
+.SS npm help access
+.P
+Set access level on published packages
 .SS npm help adduser
 .P
 Add a registry user account
@@ -40,6 +43,9 @@ Reduce duplication
 .SS npm help deprecate
 .P
 Deprecate a version of a package
+.SS npm help dist\-tag
+.P
+Modify package distribution tags
 .SS npm help docs
 .P
 Docs for a package in a web browser maybe
index 068bb00a8251ba4f51e370b849a522c450b035e1..1b7d2c0638de7c146ef53be1aeab521d7c213d8e 100644 (file)
@@ -28,7 +28,7 @@ function readDeps (test) { return function (cb) {
         try { p = JSON.parse(p) }
         catch (e) { return next() }
         if (!p.version) return next()
-        deps[d] = config.get('save-prefix') + p.version
+        deps[d] = config.get('save-exact') ? p.version : config.get('save-prefix') + p.version
         return next()
       })
     })
index c15c772241e343a4b14135c98a413ceab9960d46..f66857539f629a46f6534bad3ddb86c9775f1840 100644 (file)
@@ -44,5 +44,6 @@
     "tarball": "http://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz"
   },
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz"
+  "_resolved": "https://registry.npmjs.org/promzard/-/promzard-0.2.2.tgz",
+  "readme": "ERROR: No README data found!"
 }
index de90de6207a581c2c867dc5bccc2cc1a9abb9134..f3cadb45e772cdaab6e6b1e8ddbdfc872d964cd0 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "init-package-json",
-  "version": "1.1.3",
+  "version": "1.2.0",
   "main": "init-package-json.js",
   "scripts": {
     "test": "tap test/*.js"
     "prompt",
     "start"
   ],
-  "readme": "# init-package-json\n\nA node module to get your node module started.\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": "b766900b2d615ddc43c452e251b8c5543538e832",
+  "gitHead": "6c0743199706494a190c0b47d2e2567dc86055a3",
   "bugs": {
     "url": "https://github.com/isaacs/init-package-json/issues"
   },
   "homepage": "https://github.com/isaacs/init-package-json",
-  "_id": "init-package-json@1.1.3",
-  "_shasum": "1d633c151a4909891afc8ee13cace8b336c0c9c2",
-  "_from": "init-package-json@>=1.1.3 <1.2.0"
+  "_id": "init-package-json@1.2.0",
+  "_shasum": "b9f027514403b3b3f582c148592ab75214003348",
+  "_from": "init-package-json@>=1.2.0 <1.3.0",
+  "_npmVersion": "2.3.0",
+  "_nodeVersion": "0.10.35",
+  "_npmUser": {
+    "name": "othiym23",
+    "email": "ogd@aoaioxxysz.net"
+  },
+  "maintainers": [
+    {
+      "name": "isaacs",
+      "email": "i@izs.me"
+    },
+    {
+      "name": "othiym23",
+      "email": "ogd@aoaioxxysz.net"
+    }
+  ],
+  "dist": {
+    "shasum": "b9f027514403b3b3f582c148592ab75214003348",
+    "tarball": "http://registry.npmjs.org/init-package-json/-/init-package-json-1.2.0.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.2.0.tgz"
 }
index f65f6463161f3e81dda389401480801ef8f093e2..666e9a1c49661ce3950972f006e05919acc6b6aa 100644 (file)
@@ -14,7 +14,7 @@ var EXPECTED = {
     test          : 'echo "Error: no test specified" && exit 1'
   },
   keywords        : [],
-  author          : "npmbot <n@p.m> (http://npm.im)",
+  author          : "npmbot <n@p.m> (http://npm.im/)",
   license         : "WTFPL"
 }
 
index 63fefe3d16c80b959782dc0f93d6408afd591326..0b81fab2027ff713837286a6d7b3de031be38368 100644 (file)
@@ -42,7 +42,7 @@
           '-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'
index 3d3c58785f1795dafcfd4d5e8e33433c91ef351a..f3605902e93c10440f4842feee188929a6ccfe97 100644 (file)
@@ -173,7 +173,7 @@ function build (gyp, argv, callback) {
   }
 
   /**
-   * 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.
    */
 
@@ -181,15 +181,15 @@ function build (gyp, argv, callback) {
     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)
index 378fbfae4769b56c76ce13acf54edf643e06554e..6f72e6a93d6cf88410ec7313dfbb64282c32bc4f 100644 (file)
@@ -39,7 +39,7 @@ function install (gyp, argv, 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
@@ -185,7 +185,7 @@ function install (gyp, argv, callback) {
 
       // 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()
@@ -267,7 +267,7 @@ function install (gyp, argv, callback) {
         var async = 0
 
         if (win) {
-          // need to download iojs.lib
+          // need to download node.lib
           async++
           downloadNodeLib(deref)
         }
@@ -295,8 +295,7 @@ function install (gyp, argv, callback) {
             // check content shasums
             for (var k in contentShasums) {
               log.verbose('validating download checksum for ' + k, '(%s == %s)', contentShasums[k], expectShasums[k])
-              // TODO(piscisaureus) re-enable checksum verification when the correct files are in place.
-              if (false || contentShasums[k] !== expectShasums[k]) {
+              if (contentShasums[k] !== expectShasums[k]) {
                 cb(new Error(k + ' local checksum ' + contentShasums[k] + ' not match remote ' + expectShasums[k]))
                 return
               }
@@ -344,36 +343,36 @@ function install (gyp, argv, callback) {
       }
 
       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)
@@ -386,20 +385,20 @@ function install (gyp, argv, callback) {
         })
         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)
index a35c4831176fc34c07f40bd63f66c015563c815b..702ae2ea1d31fda26de1739984cae6eca8831e53 100644 (file)
@@ -55,6 +55,19 @@ for authorization. These credentials always look the same:
 
 ## API
 
+### client.access(uri, params, cb)
+
+* `uri` {String} Registry URL for the package's access API endpoint.
+  Looks like `/-/package/<package name>/access`.
+* `params` {Object} Object containing per-request properties.
+  * `access` {String} New access level for the package. Can be either
+    `public` or `restricted`. Registry will raise an error if trying
+    to change the access level of an unscoped package.
+  * `auth` {Credentials}
+
+Set the access level for scoped packages. For now, there are only two
+access levels: "public" and "restricted".
+
 ### client.adduser(uri, params, cb)
 
 * `uri` {String} Base registry URL.
@@ -79,6 +92,67 @@ Add a user account to the registry, or verify the credentials.
 
 Deprecate a version of a package in the registry.
 
+### client.distTags.fetch(uri, params, cb)
+
+* `uri` {String} Base URL for the registry.
+* `params` {Object} Object containing per-request properties.
+  * `package` {String} Name of the package.
+  * `auth` {Credentials}
+* `cb` {Function}
+
+Fetch all of the `dist-tags` for the named package.
+
+### client.distTags.add(uri, params, cb)
+
+* `uri` {String} Base URL for the registry.
+* `params` {Object} Object containing per-request properties.
+  * `package` {String} Name of the package.
+  * `distTag` {String} Name of the new `dist-tag`.
+  * `version` {String} Exact version to be mapped to the `dist-tag`.
+  * `auth` {Credentials}
+* `cb` {Function}
+
+Add (or replace) a single dist-tag onto the named package.
+
+### client.distTags.set(uri, params, cb)
+
+* `uri` {String} Base URL for the registry.
+* `params` {Object} Object containing per-request properties.
+  * `package` {String} Name of the package.
+  * `distTags` {Object} Object containing a map from tag names to package
+     versions.
+  * `auth` {Credentials}
+* `cb` {Function}
+
+Set all of the `dist-tags` for the named package at once, creating any
+`dist-tags` that do not already exit. Any `dist-tags` not included in the
+`distTags` map will be removed.
+
+### client.distTags.update(uri, params, cb)
+
+* `uri` {String} Base URL for the registry.
+* `params` {Object} Object containing per-request properties.
+  * `package` {String} Name of the package.
+  * `distTags` {Object} Object containing a map from tag names to package
+     versions.
+  * `auth` {Credentials}
+* `cb` {Function}
+
+Update the values of multiple `dist-tags`, creating any `dist-tags` that do
+not already exist. Any pre-existing `dist-tags` not included in the `distTags`
+map will be left alone.
+
+### client.distTags.rm(uri, params, cb)
+
+* `uri` {String} Base URL for the registry.
+* `params` {Object} Object containing per-request properties.
+  * `package` {String} Name of the package.
+  * `distTag` {String} Name of the new `dist-tag`.
+  * `auth` {Credentials}
+* `cb` {Function}
+
+Remove a single `dist-tag` from the named package.
+
 ### client.get(uri, params, cb)
 
 * `uri` {String} The complete registry URI to fetch
@@ -100,6 +174,7 @@ with the ETag or the "Last Modified" timestamp.
 * `uri` {String} The registry URI for the package to publish.
 * `params` {Object} Object containing per-request properties.
   * `metadata` {Object} Package metadata.
+  * `access` {String} Access for the package. Can be `public` or `restricted` (no default).
   * `body` {Stream} Stream of the package body / tarball.
   * `auth` {Credentials}
 * `cb` {Function}
@@ -215,7 +290,7 @@ any):
 * `proxy.https` {URL} The URL to proxy HTTPS requests through. Defaults to be
   the same as `proxy.http` if unset.
 * `proxy.localAddress` {IP} The local address to use on multi-homed systems.
-* `ssl.ca` {String} Cerficate signing authority certificates to trust.
+* `ssl.ca` {String} Certificate signing authority certificates to trust.
 * `ssl.certificate` {String} Client certificate (PEM encoded). Enable access
   to servers that require client certificates.
 * `ssl.key` {String} Private key (PEM encoded) for client certificate.
index 801d00f8e9f949af9c6f8439e63125e21679fe74..6ea288b0a698e01c6261072a706a52329c44d359 100644 (file)
@@ -46,11 +46,34 @@ function RegClient (config) {
 
   this.log = this.config.log || npmlog
   delete this.config.log
+
+  var client = this
+  fs.readdirSync(join(__dirname, "lib")).forEach(function (f) {
+    var entry = join(__dirname, "lib", f)
+
+    // lib/group-name/operation.js -> client.groupName.operation
+    var stat = fs.statSync(entry)
+    if (stat.isDirectory()) {
+      var groupName = f.replace(/-([a-z])/, dashToCamel)
+      fs.readdirSync(entry).forEach(function (f) {
+        if (!f.match(/\.js$/)) return
+
+        if (!client[groupName]) {
+          // keep client.groupName.operation from stomping client.operation
+          client[groupName] = Object.create(client)
+        }
+        var name = f.replace(/\.js$/, "").replace(/-([a-z])/, dashToCamel)
+        client[groupName][name] = require(join(entry, f))
+      })
+      return
+    }
+
+    if (!f.match(/\.js$/)) return
+    var name = f.replace(/\.js$/, "").replace(/-([a-z])/, dashToCamel)
+    client[name] = require(entry)
+  })
 }
 
-fs.readdirSync(join(__dirname, "lib")).forEach(function (f) {
-  if (!f.match(/\.js$/)) return
-  var name = f.replace(/\.js$/, "")
-              .replace(/-([a-z])/, function (_, l) { return l.toUpperCase() })
-  RegClient.prototype[name] = require(join(__dirname, "lib", f))
-})
+function dashToCamel (_, l) {
+  return l.toUpperCase()
+}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/access.js b/deps/npm/node_modules/npm-registry-client/lib/access.js
new file mode 100644 (file)
index 0000000..c642d16
--- /dev/null
@@ -0,0 +1,30 @@
+module.exports = access
+
+var assert = require("assert")
+
+function access (uri, params, cb) {
+  assert(typeof uri === "string", "must pass registry URI to access")
+  assert(params && typeof params === "object", "must pass params to access")
+  assert(typeof cb === "function", "muss pass callback to access")
+
+  assert(typeof params.level === "string", "must pass level to access")
+  assert(
+    ["public", "restricted"].indexOf(params.level) !== -1,
+    "access level must be either 'public' or 'restricted'"
+  )
+  assert(
+    params.auth && typeof params.auth === "object",
+    "must pass auth to access"
+  )
+
+  var body = {
+    access : params.level
+  }
+
+  var options = {
+    method : "POST",
+    body : JSON.stringify(body),
+    auth : params.auth
+  }
+  this.request(uri, options, cb)
+}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/add.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/add.js
new file mode 100644 (file)
index 0000000..7443cbc
--- /dev/null
@@ -0,0 +1,43 @@
+module.exports = add
+
+var assert = require("assert")
+var url = require("url")
+
+var npa = require("npm-package-arg")
+
+function add (uri, params, cb) {
+  assert(typeof uri === "string", "must pass registry URI to distTags.add")
+  assert(
+    params && typeof params === "object",
+    "must pass params to distTags.add"
+  )
+  assert(typeof cb === "function", "muss pass callback to distTags.add")
+
+  assert(
+    typeof params.package === "string",
+    "must pass package name to distTags.add"
+  )
+  assert(
+    typeof params.distTag === "string",
+    "must pass package distTag name to distTags.add"
+  )
+  assert(
+    typeof params.version === "string",
+    "must pass version to be mapped to distTag to distTags.add"
+  )
+  assert(
+    params.auth && typeof params.auth === "object",
+    "must pass auth to distTags.add"
+  )
+
+  var p = npa(params.package)
+  var package = p.scope ? params.package.replace("/", "%2f") : params.package
+  var rest = "-/package/"+package+"/dist-tags/"+params.distTag
+
+  var options = {
+    method : "PUT",
+    body : JSON.stringify(params.version),
+    auth : params.auth
+  }
+  this.request(url.resolve(uri, rest), options, cb)
+}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/fetch.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/fetch.js
new file mode 100644 (file)
index 0000000..46bb33f
--- /dev/null
@@ -0,0 +1,37 @@
+module.exports = fetch
+
+var assert = require("assert")
+var url = require("url")
+
+var npa = require("npm-package-arg")
+
+function fetch (uri, params, cb) {
+  assert(typeof uri === "string", "must pass registry URI to distTags.fetch")
+  assert(
+    params && typeof params === "object",
+    "must pass params to distTags.fetch"
+  )
+  assert(typeof cb === "function", "muss pass callback to distTags.fetch")
+
+  assert(
+    typeof params.package === "string",
+    "must pass package name to distTags.fetch"
+  )
+  assert(
+    params.auth && typeof params.auth === "object",
+    "must pass auth to distTags.fetch"
+  )
+
+  var p = npa(params.package)
+  var package = p.scope ? params.package.replace("/", "%2f") : params.package
+  var rest = "-/package/"+package+"/dist-tags"
+
+  var options = {
+    method : "GET",
+    auth : params.auth
+  }
+  this.request(url.resolve(uri, rest), options, function (er, data) {
+    if (data && typeof data === "object") delete data._etag
+    cb(er, data)
+  })
+}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/rm.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/rm.js
new file mode 100644 (file)
index 0000000..dbae245
--- /dev/null
@@ -0,0 +1,38 @@
+module.exports = rm
+
+var assert = require("assert")
+var url = require("url")
+
+var npa = require("npm-package-arg")
+
+function rm (uri, params, cb) {
+  assert(typeof uri === "string", "must pass registry URI to distTags.rm")
+  assert(
+    params && typeof params === "object",
+    "must pass params to distTags.rm"
+  )
+  assert(typeof cb === "function", "muss pass callback to distTags.rm")
+
+  assert(
+    typeof params.package === "string",
+    "must pass package name to distTags.rm"
+  )
+  assert(
+    typeof params.distTag === "string",
+    "must pass package distTag name to distTags.rm"
+  )
+  assert(
+    params.auth && typeof params.auth === "object",
+    "must pass auth to distTags.rm"
+  )
+
+  var p = npa(params.package)
+  var package = p.scope ? params.package.replace("/", "%2f") : params.package
+  var rest = "-/package/"+package+"/dist-tags/"+params.distTag
+
+  var options = {
+    method : "DELETE",
+    auth : params.auth
+  }
+  this.request(url.resolve(uri, rest), options, cb)
+}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/set.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/set.js
new file mode 100644 (file)
index 0000000..e1e17cd
--- /dev/null
@@ -0,0 +1,39 @@
+module.exports = set
+
+var assert = require("assert")
+var url = require("url")
+
+var npa = require("npm-package-arg")
+
+function set (uri, params, cb) {
+  assert(typeof uri === "string", "must pass registry URI to distTags.set")
+  assert(
+    params && typeof params === "object",
+    "must pass params to distTags.set"
+  )
+  assert(typeof cb === "function", "muss pass callback to distTags.set")
+
+  assert(
+    typeof params.package === "string",
+    "must pass package name to distTags.set"
+  )
+  assert(
+    params.distTags && typeof params.distTags === "object",
+    "must pass distTags map to distTags.set"
+  )
+  assert(
+    params.auth && typeof params.auth === "object",
+    "must pass auth to distTags.set"
+  )
+
+  var p = npa(params.package)
+  var package = p.scope ? params.package.replace("/", "%2f") : params.package
+  var rest = "-/package/"+package+"/dist-tags"
+
+  var options = {
+    method : "PUT",
+    body : JSON.stringify(params.distTags),
+    auth : params.auth
+  }
+  this.request(url.resolve(uri, rest), options, cb)
+}
diff --git a/deps/npm/node_modules/npm-registry-client/lib/dist-tags/update.js b/deps/npm/node_modules/npm-registry-client/lib/dist-tags/update.js
new file mode 100644 (file)
index 0000000..6c46fc5
--- /dev/null
@@ -0,0 +1,39 @@
+module.exports = update
+
+var assert = require("assert")
+var url = require("url")
+
+var npa = require("npm-package-arg")
+
+function update (uri, params, cb) {
+  assert(typeof uri === "string", "must pass registry URI to distTags.update")
+  assert(
+    params && typeof params === "object",
+    "must pass params to distTags.update"
+  )
+  assert(typeof cb === "function", "muss pass callback to distTags.update")
+
+  assert(
+    typeof params.package === "string",
+    "must pass package name to distTags.update"
+  )
+  assert(
+    params.distTags && typeof params.distTags === "object",
+    "must pass distTags map to distTags.update"
+  )
+  assert(
+    params.auth && typeof params.auth === "object",
+    "must pass auth to distTags.update"
+  )
+
+  var p = npa(params.package)
+  var package = p.scope ? params.package.replace("/", "%2f") : params.package
+  var rest = "-/package/"+package+"/dist-tags"
+
+  var options = {
+    method : "POST",
+    body : JSON.stringify(params.distTags),
+    auth : params.auth
+  }
+  this.request(url.resolve(uri, rest), options, cb)
+}
index ea9dcaef7451c6530ff63b29c12225516d2026ae..24034a6b868a307cc3de483f92ad48f4866487e6 100644 (file)
@@ -17,6 +17,13 @@ function publish (uri, params, cb) {
   assert(params && typeof params === "object", "must pass params to publish")
   assert(typeof cb === "function", "must pass callback to publish")
 
+  var access = params.access
+  assert(access && typeof access === "string", "must pass access for package")
+  assert(
+    ["public", "restricted"].indexOf(access) !== -1,
+    "access level must be either 'public' or 'restricted'"
+  )
+
   var auth = params.auth
   assert(auth && typeof auth === "object", "must pass auth to publish")
   if (!(auth.token ||
@@ -46,13 +53,13 @@ function publish (uri, params, cb) {
   assert(body instanceof Stream, "package body passed to publish must be a stream")
   var client = this
   var sink = concat(function (tarbuffer) {
-    putFirst.call(client, uri, metadata, tarbuffer, auth, cb)
+    putFirst.call(client, uri, metadata, tarbuffer, access, auth, cb)
   })
   sink.on("error", cb)
   body.pipe(sink)
 }
 
-function putFirst (registry, data, tarbuffer, auth, cb) {
+function putFirst (registry, data, tarbuffer, access, auth, cb) {
   // optimistically try to PUT all in one single atomic thing.
   // If 409, then GET and merge, try again.
   // If other error, then fail.
@@ -61,6 +68,7 @@ function putFirst (registry, data, tarbuffer, auth, cb) {
     { _id : data.name
     , name : data.name
     , description : data.description
+    , access : access
     , "dist-tags" : {}
     , versions : {}
     , readme: data.readme || ""
index 8b42199075c611f0e331ca781be1905f454a4b8f..cad5154d7f5dd30b730b9a2c5de728193c291e31 100644 (file)
@@ -9,7 +9,10 @@ function tag (uri, params, cb) {
 
   assert(typeof params.version === "string", "must pass version to tag")
   assert(typeof params.tag === "string", "must pass tag name to tag")
-  assert(params.auth && typeof params.auth === "object", "must pass auth to tag")
+  assert(
+    params.auth && typeof params.auth === "object",
+    "must pass auth to tag"
+  )
 
   var options = {
     method : "PUT",
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/LICENSE b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/LICENSE
new file mode 100644 (file)
index 0000000..05eeeb8
--- /dev/null
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+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.
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/README.md b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/README.md
new file mode 100644 (file)
index 0000000..21683f5
--- /dev/null
@@ -0,0 +1,101 @@
+# npm-package-arg
+
+Parse package name and specifier passed to commands like `npm install` or
+`npm cache add`.  This just parses the text given-- it's worth noting that
+`npm` has further logic it applies by looking at your disk to figure out
+what ambiguous specifiers are.  If you want that logic, please see
+[realize-package-specifier].
+
+[realize-package-specifier]: https://www.npmjs.org/package/realize-package-specifier
+
+Arguments look like: `foo@1.2`, `@bar/foo@1.2`, `foo@user/foo`, `http://x.com/foo.tgz`,
+`git+https://github.com/user/foo`, `bitbucket:user/foo`, `foo.tar.gz` or `bar`
+
+## EXAMPLES
+
+```javascript
+var assert = require("assert")
+var npa = require("npm-package-arg")
+
+// Pass in the descriptor, and it'll return an object
+var parsed = npa("@bar/foo@1.2")
+
+// Returns an object like:
+{
+  raw: '@bar/foo@1.2',   // what was passed in
+  name: "foo",           // the name of the package
+  scope: "@bar",         // the private scope of the package, or null
+  type: "range",         // the type of specifier this is
+  spec: ">=1.2.0 <1.3.0" // the expanded specifier
+  rawSpec: "1.2"         // the specifier as passed in
+ }
+
+// Parsing urls pointing at hosted git services produces a variation:
+var parsed = npa("git+https://github.com/user/foo")
+
+// Returns an object like:
+{
+  raw: 'git+https://github.com/user/foo',
+  scope: null,
+  name: null,
+  rawSpec: 'git+https://github.com/user/foo',
+  spec: 'user/foo',
+  type: 'hosted',
+  hosted: {
+    type: 'github',
+    ssh: 'git@github.com:user/foo.git',
+    sshurl: 'git+ssh://git@github.com/user/foo.git',
+    https: 'https://github.com/user/foo.git',
+    directUrl: 'https://raw.githubusercontent.com/user/foo/master/package.json'
+  }
+}
+
+// Completely unreasonable invalid garbage throws an error
+// Make sure you wrap this in a try/catch if you have not
+// already sanitized the inputs!
+assert.throws(function() {
+  npa("this is not \0 a valid package name or url")
+})
+```
+
+## USING
+
+`var npa = require('npm-package-arg')`
+
+* var result = npa(*arg*)
+
+Parses *arg* and returns a result object detailing what *arg* is.
+
+*arg* -- a package descriptor, like: `foo@1.2`, or `foo@user/foo`, or
+`http://x.com/foo.tgz`, or `git+https://github.com/user/foo`
+
+## RESULT OBJECT
+
+The objects that are returned by npm-package-arg contain the following
+keys:
+
+* `name` - If known, the `name` field expected in the resulting pkg.
+* `type` - One of the following strings:
+  * `git` - A git repo
+  * `hosted` - A hosted project, from github, bitbucket or gitlab. Originally
+    either a full url pointing at one of these services or a shorthand like
+    `user/project` or `github:user/project` for github or `bitbucket:user/project`
+    for bitbucket.
+  * `tag` - A tagged version, like `"foo@latest"`
+  * `version` - A specific version number, like `"foo@1.2.3"`
+  * `range` - A version range, like `"foo@2.x"`
+  * `local` - A local file or folder path
+  * `remote` - An http url (presumably to a tgz)
+* `spec` - The "thing".  URL, the range, git repo, etc.
+* `hosted` - If type=hosted this will be an object with the following keys:
+  * `type` - github, bitbucket or gitlab
+  * `ssh` - The ssh path for this git repo
+  * `sshUrl` - The ssh URL for this git repo
+  * `httpsUrl` - The HTTPS URL for this git repo
+  * `directUrl` - The URL for the package.json in this git repo
+* `raw` - The original un-modified string that was provided.
+* `rawSpec` - The part after the `name@...`, as it was originally
+  provided.
+* `scope` - If a name is something like `@org/module` then the `scope`
+  field will be set to `org`.  If it doesn't have a scoped name, then
+  scope is `null`.
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.npmignore b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.npmignore
new file mode 100644 (file)
index 0000000..58e97a7
--- /dev/null
@@ -0,0 +1,3 @@
+*~
+.#
+node_modules
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.travis.yml b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/.travis.yml
new file mode 100644 (file)
index 0000000..7dc6619
--- /dev/null
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+  - "0.11"
+  - "0.10"
+script: "npm test"
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/README.md b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/README.md
new file mode 100644 (file)
index 0000000..f1d799b
--- /dev/null
@@ -0,0 +1,81 @@
+# hosted-git-info
+
+This will let you identify and transform various git hosts URLs between
+protocols.  It also can tell you what the URL is for the raw path for
+particular file for direct access without git.
+
+## Usage
+
+```javascript
+var hostedGitInfo = require("hosted-git-info")
+var info = hostedGitInfo.fromUrl("git@github.com:npm/hosted-git-info.git")
+/* info looks like:
+{
+  type: "github",
+  domain: "github.com",
+  user: "npm",
+  project: "hosted-git-info"
+}
+*/
+```
+
+If the URL can't be matched with a git host, `null` will be returned.  We
+can match git, ssh and https urls.  Additionally, we can match ssh connect
+strings (`git@github.com:npm/hosted-git-info`) and shortcuts (eg,
+`github:npm/hosted-git-info`).  Github specifically, is detected in the case
+of a third, unprefixed, form: `npm/hosted-git-info`.
+
+If it does match, the returned object has properties of:
+
+* info.type -- The short name of the service
+* info.domain -- The domain for git protocol use
+* info.user -- The name of the user/org on the git host
+* info.project -- The name of the project on the git host
+
+And methods of:
+
+* 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
+`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")`
+would return `https://raw.githubusercontent.com/npm/hosted-git-info/v1.0.0/package.json`
+
+* info.shortcut()
+
+eg, `github:npm/hosted-git-info`
+
+* info.browse()
+
+eg, `https://github.com/npm/hosted-git-info/tree/v1.2.0`
+
+* info.bugs()
+
+eg, `https://github.com/npm/hosted-git-info/issues`
+
+* info.docs()
+
+eg, `https://github.com/npm/hosted-git-info/tree/v1.2.0#readme`
+
+* info.https()
+
+eg, `https://github.com/npm/hosted-git-info.git`
+
+* info.sshurl()
+
+eg, `git+ssh://git@github.com/npm/hosted-git-info.git`
+
+* info.ssh()
+
+eg, `git@github.com:npm/hosted-git-info.git`
+
+* info.path()
+
+eg, `npm/hosted-git-info`
+
+## Supported hosts
+
+Currently this supports Github, Bitbucket and Gitlab. Pull requests for
+additional hosts welcome.
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/index.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/index.js
new file mode 100644 (file)
index 0000000..c2ad10a
--- /dev/null
@@ -0,0 +1,208 @@
+"use strict"
+var url = require("url")
+
+var GitHost = exports = module.exports = function (type, user, project, comittish) {
+  this.type           = type
+  this.domain         = gitHosts[type].domain
+  this.filetemplate   = gitHosts[type].filetemplate
+  this.sshtemplate    = gitHosts[type].sshtemplate
+  this.sshurltemplate = gitHosts[type].sshurltemplate
+  this.browsetemplate = gitHosts[type].browsetemplate
+  this.docstemplate   = gitHosts[type].docstemplate
+  this.bugstemplate   = gitHosts[type].bugstemplate
+  this.gittemplate    = gitHosts[type].gittemplate
+  this.httpstemplate  = gitHosts[type].httpstemplate
+  this.treepath       = gitHosts[type].treepath
+  this.user           = user
+  this.project        = project
+  this.comittish      = comittish
+}
+GitHost.prototype = {}
+
+exports.fromUrl = function (giturl) {
+  if (giturl == null || giturl == "") return
+  var parsed = parseGitUrl(maybeGitHubShorthand(giturl) ? "github:" + giturl : giturl)
+  var matches = Object.keys(gitHosts).map(function(V) {
+    var gitHost = gitHosts[V]
+    var comittish = parsed.hash ? decodeURIComponent(parsed.hash.substr(1)) : null
+    if (parsed.protocol == V + ":") {
+      return new GitHost(V,
+        decodeURIComponent(parsed.host), decodeURIComponent(parsed.path.replace(/^[/](.*?)(?:[.]git)?$/, "$1")), comittish)
+    }
+    if (parsed.host != gitHost.domain) return
+    if (! gitHost.protocols_re.test(parsed.protocol)) return
+    var matched = parsed.path.match(gitHost.pathmatch)
+    if (! matched) return
+    return new GitHost(
+      V,
+      matched[1]!=null && decodeURIComponent(matched[1]),
+      matched[2]!=null && decodeURIComponent(matched[2]),
+      comittish)
+  }).filter(function(V){ return V })
+  if (matches.length != 1) return
+  return matches[0]
+}
+
+function maybeGitHubShorthand(arg) {
+  // Note: This does not fully test the git ref format.
+  // See https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html
+  //
+  // The only way to do this properly would be to shell out to
+  // git-check-ref-format, and as this is a fast sync function,
+  // we don't want to do that.  Just let git fail if it turns
+  // out that the commit-ish is invalid.
+  // GH usernames cannot start with . or -
+  return /^[^:@%/\s.-][^:@%/\s]*[/][^:@\s/%]+(?:#.*)?$/.test(arg)
+}
+
+var parseGitUrl = function (giturl) {
+  if (typeof giturl != "string") giturl = "" + giturl
+  var matched = giturl.match(/^([^@]+)@([^:]+):[/]?((?:[^/]+[/])?[^/]+?)(?:[.]git)?(#.*)?$/)
+  if (! matched) return url.parse(giturl)
+  return {
+    protocol: "git+ssh:",
+    slashes: true,
+    auth: matched[1],
+    host: matched[2],
+    port: null,
+    hostname: matched[2],
+    hash: matched[4],
+    search: null,
+    query: null,
+    pathname: "/" + matched[3],
+    path: "/" + matched[3],
+    href: "git+ssh://" + matched[1] + "@" + matched[2] + "/" + matched[3] + (matched[4]||"")
+  }
+}
+
+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": "https://{domain}/{user}/{project}.git{#comittish}",
+  "filetemplate": "https://{domain}/{user}/{project}/raw/{comittish}/{path}"
+}
+var gitHosts = {
+  github: {
+    // First two are insecure and generally shouldn't be used any more, but
+    // they are still supported.
+    "protocols": [ "git", "http", "git+ssh", "git+https", "ssh", "https" ],
+    "domain": "github.com",
+    "pathmatch": /^[/]([^/]+)[/]([^/]+?)(?:[.]git)?$/,
+    "treepath": "tree",
+    "filetemplate": "https://raw.githubusercontent.com/{user}/{project}/{comittish}/{path}",
+    "bugstemplate": "https://{domain}/{user}/{project}/issues",
+    "gittemplate": "git://{domain}/{user}/{project}.git{#comittish}"
+  },
+  bitbucket: {
+    "protocols": [ "git+ssh", "git+https", "ssh", "https" ],
+    "domain": "bitbucket.org",
+    "pathmatch": /^[/]([^/]+)[/]([^/]+?)(?:[.]git)?$/,
+    "treepath": "src"
+  },
+  gitlab: {
+    "protocols": [ "git+ssh", "git+https", "ssh", "https" ],
+    "domain": "gitlab.com",
+    "pathmatch": /^[/]([^/]+)[/]([^/]+?)(?:[.]git)?$/,
+    "treepath": "tree",
+    "docstemplate": "https://{domain}/{user}/{project}{/tree/comittish}#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}",
+    "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": "https://{domain}/{project}.git{#comittish}",
+  },
+}
+
+Object.keys(gitHosts).forEach(function(host) {
+  gitHosts[host].protocols_re = RegExp("^(" +
+    gitHosts[host].protocols.map(function(P){
+      return P.replace(/([\\+*{}()\[\]$^|])/g, "\\$1")
+    }).join("|") + "):$")
+})
+
+GitHost.prototype.shortcut = function () {
+  return this.type + ":" + this.path()
+}
+
+GitHost.prototype.hash = function () {
+  return this.comittish ? "#" + this.comittish : ""
+}
+
+GitHost.prototype.path = function () {
+  return this.user + "/" + this.project + this.hash()
+}
+
+GitHost.prototype._fill = function (template, vars) {
+  if (!template) throw new Error("Tried to fill without template")
+  if (!vars) vars = {}
+  var self = this
+  Object.keys(this).forEach(function(K){ if (self[K]!=null && vars[K]==null) vars[K] = self[K] })
+  var rawComittish = vars.comittish
+  Object.keys(vars).forEach(function(K){ (K[0]!='#') && (vars[K] = encodeURIComponent(vars[K])) })
+  vars["#comittish"] = rawComittish ? "#" + rawComittish : ""
+  vars["/tree/comittish"] = vars.comittish ? "/"+vars.treepath+"/" + vars.comittish : "",
+  vars["/comittish"] = vars.comittish ? "/" + vars.comittish : ""
+  vars.comittish = vars.comittish || "master"
+  var res = template
+  Object.keys(vars).forEach(function(K){
+    res = res.replace(new RegExp("[{]" + K + "[}]", "g"), vars[K])
+  })
+  return res
+}
+
+GitHost.prototype.ssh = function () {
+  var sshtemplate = this.sshtemplate || gitHostDefaults.sshtemplate
+  return this._fill(sshtemplate)
+}
+
+GitHost.prototype.sshurl = function () {
+  var sshurltemplate = this.sshurltemplate || gitHostDefaults.sshurltemplate
+  return this._fill(sshurltemplate)
+}
+
+GitHost.prototype.browse = function () {
+  var browsetemplate = this.browsetemplate || gitHostDefaults.browsetemplate
+  return this._fill(browsetemplate)
+}
+
+GitHost.prototype.docs = function () {
+  var docstemplate = this.docstemplate || gitHostDefaults.docstemplate
+  return this._fill(docstemplate)
+}
+
+GitHost.prototype.bugs = function() {
+  if (! this.bugstemplate) return
+  return this._fill(this.bugstemplate)
+}
+
+GitHost.prototype.https = function () {
+  var httpstemplate = this.httpstemplate || gitHostDefaults.httpstemplate
+  return this._fill(httpstemplate)
+}
+
+GitHost.prototype.git = function () {
+  if (! this.gittemplate) return
+  return this._fill(this.gittemplate)
+}
+
+GitHost.prototype.file = function (P) {
+  var filetemplate = this.filetemplate || gitHostDefaults.filetemplate
+  return this._fill(filetemplate, {
+    path: P.replace(/^[/]+/g, "")
+  })
+}
+
+GitHost.prototype.toString = function () {
+  return this[this.default||"sshurl"]()
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/package.json
new file mode 100644 (file)
index 0000000..6dbc918
--- /dev/null
@@ -0,0 +1,55 @@
+{
+  "name": "hosted-git-info",
+  "version": "1.5.3",
+  "description": "Provides metadata and conversions from repository urls for Github, Bitbucket and Gitlab",
+  "main": "index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/npm/hosted-git-info.git"
+  },
+  "keywords": [
+    "git",
+    "github",
+    "bitbucket",
+    "gitlab"
+  ],
+  "author": {
+    "name": "Rebecca Turner",
+    "email": "me@re-becca.org",
+    "url": "http://re-becca.org"
+  },
+  "license": "ISC",
+  "bugs": {
+    "url": "https://github.com/npm/hosted-git-info/issues"
+  },
+  "homepage": "https://github.com/npm/hosted-git-info",
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "devDependencies": {
+    "tap": "^0.4.13"
+  },
+  "gitHead": "153325f997813ebf8a7ae07b322b4fa89aa25f7d",
+  "_id": "hosted-git-info@1.5.3",
+  "_shasum": "1f46e25e9c0e207852fb7a4b94422ed5f09a03f5",
+  "_from": "hosted-git-info@>=1.4.0 <2.0.0",
+  "_npmVersion": "2.4.0",
+  "_nodeVersion": "0.10.33",
+  "_npmUser": {
+    "name": "iarna",
+    "email": "me@re-becca.org"
+  },
+  "maintainers": [
+    {
+      "name": "iarna",
+      "email": "me@re-becca.org"
+    }
+  ],
+  "dist": {
+    "shasum": "1f46e25e9c0e207852fb7a4b94422ed5f09a03f5",
+    "tarball": "http://registry.npmjs.org/hosted-git-info/-/hosted-git-info-1.5.3.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-1.5.3.tgz",
+  "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/basic.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/basic.js
new file mode 100644 (file)
index 0000000..e56ef9a
--- /dev/null
@@ -0,0 +1,9 @@
+"use strict"
+var HostedGit = require("../index")
+var test = require("tap").test
+
+test("basic", function (t) {
+   t.is(HostedGit.fromUrl("https://google.com"), undefined, "null on failure")
+
+   t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/bitbucket.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/bitbucket.js
new file mode 100644 (file)
index 0000000..8712723
--- /dev/null
@@ -0,0 +1,23 @@
+"use strict"
+var HostedGit = require("../index")
+var test = require("tap").test
+
+test("fromUrl(bitbucket url)", function (t) {
+  function verify(host, label, branch) {
+    var hostinfo = HostedGit.fromUrl(host)
+    var hash = branch ? "#" + branch : ""
+    t.ok(hostinfo, label)
+    if (! hostinfo) return
+    t.is( hostinfo.https(), "https://bitbucket.org/111/222.git" + hash, label + " -> https" )
+    t.is( hostinfo.browse(), "https://bitbucket.org/111/222" + (branch ? "/src/" + branch : ""), label + " -> browse" )
+    t.is( hostinfo.docs(), "https://bitbucket.org/111/222" + (branch ? "/src/" + branch : "") + "#readme", label + " -> docs" )
+    t.is( hostinfo.ssh(), "git@bitbucket.org:111/222.git" + hash, label + " -> ssh" )
+    t.is( hostinfo.sshurl(), "git+ssh://git@bitbucket.org/111/222.git" + hash, label + " -> sshurl" )
+    t.is( (""+hostinfo), "git+ssh://git@bitbucket.org/111/222.git" + hash, label + " -> stringify" )
+    t.is( hostinfo.file("C"), "https://bitbucket.org/111/222/raw/"+(branch||"master")+"/C", label + " -> file" )
+  }
+
+  require('./lib/standard-tests')(verify, "bitbucket.org", "bitbucket")
+
+  t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gist.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gist.js
new file mode 100644 (file)
index 0000000..3081c3d
--- /dev/null
@@ -0,0 +1,39 @@
+"use strict"
+var HostedGit = require("../index")
+var test = require("tap").test
+
+
+test("fromUrl(gist url)", function (t) {
+  function verify(host, label, branch) {
+    var hostinfo = HostedGit.fromUrl(host)
+    var hash = branch ? "#" + branch : ""
+    t.ok(hostinfo, label)
+    if (! hostinfo) return
+    t.is( hostinfo.https(), "https://gist.github.com/222.git" + hash, label + " -> https" )
+    t.is( hostinfo.git(), "git://gist.github.com/222.git" + hash, label + " -> git" )
+    t.is( hostinfo.browse(), "https://gist.github.com/222" + (branch ? "/" + branch : ""), label + " -> browse" )
+    t.is( hostinfo.bugs(), "https://gist.github.com/222", label + " -> bugs" )
+    t.is( hostinfo.docs(), "https://gist.github.com/222" + (branch ? "/" + branch : ""), label + " -> docs" )
+    t.is( hostinfo.ssh(), "git@gist.github.com:/222.git" + hash, label + " -> ssh" )
+    t.is( hostinfo.sshurl(), "git+ssh://git@gist.github.com/222.git" + hash, label + " -> sshurl" )
+    t.is( (""+hostinfo), "git+ssh://git@gist.github.com/222.git" + hash, label + " -> stringify" )
+    if (hostinfo.user) {
+      t.is( hostinfo.file("C"), "https://gist.githubusercontent.com/111/222/raw/"+(branch?branch+"/":"")+"C", label + " -> file" )
+    }
+  }
+
+  verify("git@gist.github.com:222.git", "git@")
+  var hostinfo = HostedGit.fromUrl("git@gist.github.com:/ef860c7z5e0de3179341.git")
+  if (t.ok(hostinfo, "git@hex")) {
+    t.is( hostinfo.https(), "https://gist.github.com/ef860c7z5e0de3179341.git", "git@hex -> https" )
+  }
+  verify("git@gist.github.com:/222.git", "git@/")
+  verify("git://gist.github.com/222", "git")
+  verify("git://gist.github.com/222.git", "git.git")
+  verify("git://gist.github.com/222#branch", "git#branch", "branch")
+  verify("git://gist.github.com/222.git#branch", "git.git#branch", "branch")
+
+  require('./lib/standard-tests')(verify, "gist.github.com", "gist")
+
+  t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/github.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/github.js
new file mode 100644 (file)
index 0000000..1b945d2
--- /dev/null
@@ -0,0 +1,41 @@
+"use strict"
+var HostedGit = require("../index")
+var test = require("tap").test
+
+
+test("fromUrl(github url)", function (t) {
+  function verify(host, label, branch) {
+    var hostinfo = HostedGit.fromUrl(host)
+    var hash = branch ? "#" + branch : ""
+    t.ok(hostinfo, label)
+    if (! hostinfo) return
+    t.is( hostinfo.https(), "https://github.com/111/222.git" + hash, label + " -> https" )
+    t.is( hostinfo.git(), "git://github.com/111/222.git" + hash, label + " -> git" )
+    t.is( hostinfo.browse(), "https://github.com/111/222" + (branch ? "/tree/" + branch : ""), label + " -> browse" )
+    t.is( hostinfo.bugs(), "https://github.com/111/222/issues", label + " -> bugs" )
+    t.is( hostinfo.docs(), "https://github.com/111/222" + (branch ? "/tree/" + branch : "") + "#readme", label + " -> docs" )
+    t.is( hostinfo.ssh(), "git@github.com:111/222.git" + hash, label + " -> ssh" )
+    t.is( hostinfo.sshurl(), "git+ssh://git@github.com/111/222.git" + hash, label + " -> sshurl" )
+    t.is( (""+hostinfo), "git+ssh://git@github.com/111/222.git" + hash, label + " -> stringify" )
+    t.is( hostinfo.file("C"), "https://raw.githubusercontent.com/111/222/"+(branch||"master")+"/C", label + " -> file" )
+  }
+
+  // github shorturls
+  verify("111/222", "github-short")
+  verify("111/222#branch", "github-short#branch", "branch")
+
+  // insecure protocols
+  verify("git://github.com/111/222", "git")
+  verify("git://github.com/111/222.git", "git.git")
+  verify("git://github.com/111/222#branch", "git#branch", "branch")
+  verify("git://github.com/111/222.git#branch", "git.git#branch", "branch")
+
+  verify("http://github.com/111/222", "http")
+  verify("http://github.com/111/222.git", "http.git")
+  verify("http://github.com/111/222#branch", "http#branch", "branch")
+  verify("http://github.com/111/222.git#branch", "http.git#branch", "branch")
+
+  require('./lib/standard-tests')(verify, "github.com", "github")
+
+  t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gitlab.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/gitlab.js
new file mode 100644 (file)
index 0000000..1b25d60
--- /dev/null
@@ -0,0 +1,24 @@
+"use strict"
+var HostedGit = require("../index")
+var test = require("tap").test
+
+
+test("fromUrl(gitlab url)", function (t) {
+  function verify(host, label, branch) {
+    var hostinfo = HostedGit.fromUrl(host)
+    var hash = branch ? "#" + branch : ""
+    t.ok(hostinfo, label)
+    if (! hostinfo) return
+    t.is( hostinfo.https(), "https://gitlab.com/111/222.git" + hash, label + " -> https" )
+    t.is( hostinfo.browse(), "https://gitlab.com/111/222" + (branch ? "/tree/" + branch : ""), label + " -> browse" )
+    t.is( hostinfo.docs(), "https://gitlab.com/111/222" + (branch ? "/tree/" + branch : "") + "#README", label + " -> docs" )
+    t.is( hostinfo.ssh(), "git@gitlab.com:111/222.git" + hash, label + " -> ssh" )
+    t.is( hostinfo.sshurl(), "git+ssh://git@gitlab.com/111/222.git" + hash, label + " -> sshurl" )
+    t.is( (""+hostinfo), "git+ssh://git@gitlab.com/111/222.git" + hash, label + " -> stringify" )
+    t.is( hostinfo.file("C"), "https://gitlab.com/111/222/raw/"+(branch||"master")+"/C", label + " -> file" )
+  }
+
+  require('./lib/standard-tests')(verify, "gitlab.com", "gitlab")
+
+  t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/lib/standard-tests.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/node_modules/hosted-git-info/test/lib/standard-tests.js
new file mode 100644 (file)
index 0000000..c505342
--- /dev/null
@@ -0,0 +1,28 @@
+"use strict"
+module.exports = function (verify, domain, shortname) {
+  verify("https://" + domain + "/111/222", "https")
+  verify("https://" + domain + "/111/222.git", "https.git")
+  verify("https://" + domain + "/111/222#branch", "https#branch", "branch")
+  verify("https://" + domain + "/111/222.git#branch", "https.git#branch", "branch")
+
+  verify("git+https://" + domain + "/111/222", "git+https")
+  verify("git+https://" + domain + "/111/222.git", "git+https.git")
+  verify("git+https://" + domain + "/111/222#branch", "git+https#branch", "branch")
+  verify("git+https://" + domain + "/111/222.git#branch", "git+https.git#branch", "branch")
+
+  verify("git@" + domain + ":111/222", "ssh")
+  verify("git@" + domain + ":111/222.git", "ssh.git")
+  verify("git@" + domain + ":111/222#branch", "ssh", "branch")
+  verify("git@" + domain + ":111/222.git#branch", "ssh.git", "branch")
+
+
+  verify("git+ssh://git@" + domain + "/111/222", "ssh url")
+  verify("git+ssh://git@" + domain + "/111/222.git", "ssh url.git")
+  verify("git+ssh://git@" + domain + "/111/222#branch", "ssh url#branch", "branch")
+  verify("git+ssh://git@" + domain + "/111/222.git#branch", "ssh url.git#branch", "branch")
+
+  verify(shortname + ":111/222", "shortcut")
+  verify(shortname + ":111/222.git", "shortcut.git")
+  verify(shortname + ":111/222#branch", "shortcut#branch", "branch")
+  verify(shortname + ":111/222.git#branch", "shortcut.git#branch", "branch")
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/npa.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/npa.js
new file mode 100644 (file)
index 0000000..883c540
--- /dev/null
@@ -0,0 +1,181 @@
+var url = require("url")
+var assert = require("assert")
+var util = require("util")
+var semver = require("semver")
+var path = require("path")
+var HostedGit = require("hosted-git-info")
+
+module.exports = npa
+
+var isWindows = process.platform === "win32" || global.FAKE_WINDOWS
+var slashRe = isWindows ? /\\|[/]/ : /[/]/
+
+var parseName = /^(?:@([^/]+?)[/])?([^/]+?)$/
+var nameAt = /^(@([^/]+?)[/])?([^/]+?)@/
+var debug = util.debuglog ? util.debuglog("npa")
+  : /\bnpa\b/i.test(process.env.NODE_DEBUG || "")
+  ? function () {
+    console.error("NPA: " + util.format.apply(util, arguments).split("\n").join("\nNPA: "))
+  } : function () {}
+
+function validName (name) {
+  if (!name) {
+    debug("not a name %j", name)
+    return false
+  }
+  var n = name.trim()
+  if (!n || n.charAt(0) === "."
+      || !n.match(/^[a-zA-Z0-9]/)
+      || n.match(/[/()&?#|<>@:%\s\\*'"!~`]/)
+      || n.toLowerCase() === "node_modules"
+      || n !== encodeURIComponent(n)
+      || n.toLowerCase() === "favicon.ico") {
+    debug("not a valid name %j", name)
+    return false
+  }
+  return n
+}
+
+function npa (arg) {
+  assert.equal(typeof arg, "string")
+  arg = arg.trim()
+
+  var res = new Result
+  res.raw = arg
+  res.scope = null
+
+  // See if it's something like foo@...
+  var nameparse = arg.match(nameAt)
+  debug("nameparse", nameparse)
+  if (nameparse && validName(nameparse[3]) &&
+      (!nameparse[2] || validName(nameparse[2]))) {
+    res.name = (nameparse[1] || "") + nameparse[3]
+    if (nameparse[2])
+      res.scope = "@" + nameparse[2]
+    arg = arg.substr(nameparse[0].length)
+  } else {
+    res.name = null
+  }
+
+  res.rawSpec = arg
+  res.spec = arg
+
+  var urlparse = url.parse(arg)
+  debug("urlparse", urlparse)
+
+  // windows paths look like urls
+  // don't be fooled!
+  if (isWindows && urlparse && urlparse.protocol &&
+      urlparse.protocol.match(/^[a-zA-Z]:$/)) {
+    debug("windows url-ish local path", urlparse)
+    urlparse = {}
+  }
+
+  if (urlparse.protocol || HostedGit.fromUrl(arg)) {
+    return parseUrl(res, arg, urlparse)
+  }
+
+  // at this point, it's not a url, and not hosted
+  // If it's a valid name, and doesn't already have a name, then assume
+  // $name@"" range
+  //
+  // if it's got / chars in it, then assume that it's local.
+
+  if (res.name) {
+    var version = semver.valid(arg, true)
+    var range = semver.validRange(arg, true)
+    // foo@...
+    if (version) {
+      res.spec = version
+      res.type = "version"
+    } else if (range) {
+      res.spec = range
+      res.type = "range"
+    } else if (slashRe.test(arg)) {
+      parseLocal(res, arg)
+    } else {
+      res.type = "tag"
+      res.spec = arg
+    }
+  } else {
+    var p = arg.match(parseName)
+    if (p && validName(p[2]) &&
+        (!p[1] || validName(p[1]))) {
+      res.type = "range"
+      res.spec = "*"
+      res.rawSpec = ""
+      res.name = arg
+      if (p[1])
+        res.scope = "@" + p[1]
+    } else {
+      parseLocal(res, arg)
+    }
+  }
+
+  return res
+}
+
+function parseLocal (res, arg) {
+  // turns out nearly every character is allowed in fs paths
+  if (/\0/.test(arg)) {
+    throw new Error("Invalid Path: " + JSON.stringify(arg))
+  }
+  res.type = "local"
+  res.spec = path.resolve(arg)
+}
+
+function parseUrl (res, arg, urlparse) {
+  var gitHost = HostedGit.fromUrl(arg)
+  if (gitHost) {
+    res.type  = "hosted"
+    res.spec  = gitHost.toString(),
+    res.hosted = {
+      type:      gitHost.type,
+      ssh:       gitHost.ssh(),
+      sshUrl:    gitHost.sshurl(),
+      httpsUrl:  gitHost.https(),
+      directUrl: gitHost.file("package.json")
+    }
+    return res
+  }
+  // check the protocol, and then see if it's git or not
+  switch (urlparse.protocol) {
+    case "git:":
+    case "git+http:":
+    case "git+https:":
+    case "git+rsync:":
+    case "git+ftp:":
+    case "git+ssh:":
+    case "git+file:":
+      res.type = "git"
+      res.spec = arg.replace(/^git[+]/, "")
+      break
+
+    case "http:":
+    case "https:":
+      res.type = "remote"
+      res.spec = arg
+      break
+
+    case "file:":
+      res.type = "local"
+      res.spec = urlparse.pathname
+      break
+
+    default:
+      throw new Error("Unsupported URL Type: " + arg)
+      break
+  }
+
+  return res
+}
+
+
+function Result () {
+  if (!(this instanceof Result)) return new Result
+}
+Result.prototype.name   = null
+Result.prototype.type   = null
+Result.prototype.spec   = null
+Result.prototype.raw    = null
+Result.prototype.hosted = null
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/package.json
new file mode 100644 (file)
index 0000000..d5b72e0
--- /dev/null
@@ -0,0 +1,62 @@
+{
+  "name": "npm-package-arg",
+  "version": "3.0.0",
+  "description": "Parse the things that can be arguments to `npm install`",
+  "main": "npa.js",
+  "directories": {
+    "test": "test"
+  },
+  "dependencies": {
+    "hosted-git-info": "^1.4.0",
+    "semver": "4"
+  },
+  "devDependencies": {
+    "tap": "^0.4.9"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/npm/npm-package-arg"
+  },
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me",
+    "url": "http://blog.izs.me/"
+  },
+  "license": "ISC",
+  "bugs": {
+    "url": "https://github.com/npm/npm-package-arg/issues"
+  },
+  "homepage": "https://github.com/npm/npm-package-arg",
+  "gitHead": "263fd43295ac8f6eca046be108782cfbf9a78bfe",
+  "_id": "npm-package-arg@3.0.0",
+  "_shasum": "84e91836fa2e4e35ae26dc984440b1e5b5aee1ee",
+  "_from": "npm-package-arg@>=3.0.0 <4.0.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "iarna",
+    "email": "me@re-becca.org"
+  },
+  "maintainers": [
+    {
+      "name": "isaacs",
+      "email": "i@izs.me"
+    },
+    {
+      "name": "othiym23",
+      "email": "ogd@aoaioxxysz.net"
+    },
+    {
+      "name": "iarna",
+      "email": "me@re-becca.org"
+    }
+  ],
+  "dist": {
+    "shasum": "84e91836fa2e4e35ae26dc984440b1e5b5aee1ee",
+    "tarball": "http://registry.npmjs.org/npm-package-arg/-/npm-package-arg-3.0.0.tgz"
+  },
+  "_resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-3.0.0.tgz",
+  "readme": "ERROR: No README data found!"
+}
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/basic.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/basic.js
new file mode 100644 (file)
index 0000000..4991ffc
--- /dev/null
@@ -0,0 +1,168 @@
+var npa = require("../npa.js")
+var path = require("path")
+
+require("tap").test("basic", function (t) {
+  t.setMaxListeners(999)
+
+  var tests = {
+    "foo@1.2": {
+      name: "foo",
+      type: "range",
+      spec: ">=1.2.0 <1.3.0",
+      raw: "foo@1.2",
+      rawSpec: "1.2"
+    },
+
+    "@foo/bar": {
+      raw: "@foo/bar",
+      name: "@foo/bar",
+      scope: "@foo",
+      rawSpec: "",
+      spec: "*",
+      type: "range"
+    },
+
+    "@foo/bar@": {
+      raw: "@foo/bar@",
+      name: "@foo/bar",
+      scope: "@foo",
+      rawSpec: "",
+      spec: "*",
+      type: "range"
+    },
+
+    "@foo/bar@baz": {
+      raw: "@foo/bar@baz",
+      name: "@foo/bar",
+      scope: "@foo",
+      rawSpec: "baz",
+      spec: "baz",
+      type: "tag"
+    },
+
+    "@f fo o al/ a d s ;f ": {
+      raw: "@f fo o al/ a d s ;f",
+      name: null,
+      rawSpec: "@f fo o al/ a d s ;f",
+      spec: path.resolve("@f fo o al/ a d s ;f"),
+      type: "local"
+    },
+
+    "foo@1.2.3": {
+      name: "foo",
+      type: "version",
+      spec: "1.2.3",
+      raw: "foo@1.2.3"
+    },
+
+    "foo@=v1.2.3": {
+      name: "foo",
+      type: "version",
+      spec: "1.2.3",
+      raw: "foo@=v1.2.3",
+      rawSpec: "=v1.2.3"
+    },
+
+    "git+ssh://git@notgithub.com/user/foo#1.2.3": {
+      name: null,
+      type: "git",
+      spec: "ssh://git@notgithub.com/user/foo#1.2.3",
+      raw: "git+ssh://git@notgithub.com/user/foo#1.2.3"
+    },
+
+    "git+file://path/to/repo#1.2.3": {
+      name: null,
+      type: "git",
+      spec: "file://path/to/repo#1.2.3",
+      raw: "git+file://path/to/repo#1.2.3"
+    },
+
+    "git://notgithub.com/user/foo": {
+      name: null,
+      type: "git",
+      spec: "git://notgithub.com/user/foo",
+      raw: "git://notgithub.com/user/foo"
+    },
+
+    "@foo/bar@git+ssh://notgithub.com/user/foo": {
+      name: "@foo/bar",
+      scope: "@foo",
+      spec: "ssh://notgithub.com/user/foo",
+      rawSpec: "git+ssh://notgithub.com/user/foo",
+      raw: "@foo/bar@git+ssh://notgithub.com/user/foo"
+    },
+
+    "/path/to/foo": {
+      name: null,
+      type: "local",
+      spec: "/path/to/foo",
+      raw: "/path/to/foo"
+    },
+
+    "file:path/to/foo": {
+      name: null,
+      type: "local",
+      spec: "path/to/foo",
+      raw: "file:path/to/foo"
+    },
+
+    "file:~/path/to/foo": {
+      name: null,
+      type: "local",
+      spec: "~/path/to/foo",
+      raw: "file:~/path/to/foo"
+    },
+
+    "file:../path/to/foo": {
+      name: null,
+      type: "local",
+      spec: "../path/to/foo",
+      raw: "file:../path/to/foo"
+    },
+
+    "file:///path/to/foo": {
+      name: null,
+      type: "local",
+      spec: "/path/to/foo",
+      raw: "file:///path/to/foo"
+    },
+
+    "https://server.com/foo.tgz": {
+      name: null,
+      type: "remote",
+      spec: "https://server.com/foo.tgz",
+      raw: "https://server.com/foo.tgz"
+    },
+
+    "foo@latest": {
+      name: "foo",
+      type: "tag",
+      spec: "latest",
+      raw: "foo@latest"
+    },
+
+    "foo": {
+      name: "foo",
+      type: "range",
+      spec: "*",
+      raw: "foo"
+    }
+  }
+
+  Object.keys(tests).forEach(function (arg) {
+    var res = npa(arg)
+    t.type(res, "Result", arg + " is result")
+    t.has(res, tests[arg], arg + " matches expectations")
+  })
+
+  // Completely unreasonable invalid garbage throws an error
+  t.throws(function() {
+    npa("this is not a \0 valid package name or url")
+  })
+
+  t.throws(function() {
+    npa("gopher://yea right")
+  }, "Unsupported URL Type: gopher://yea right")
+
+  t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/bitbucket.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/bitbucket.js
new file mode 100644 (file)
index 0000000..48bbdbc
--- /dev/null
@@ -0,0 +1,82 @@
+var npa = require("../npa.js")
+var path = require("path")
+
+require("tap").test("basic", function (t) {
+  t.setMaxListeners(999)
+
+  var tests = {
+    "bitbucket:user/foo-js": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "bitbucket" },
+      spec: "git+ssh://git@bitbucket.org/user/foo-js.git",
+      raw: "bitbucket:user/foo-js"
+    },
+
+    "bitbucket:user/foo-js#bar/baz": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "bitbucket" },
+      spec: "git+ssh://git@bitbucket.org/user/foo-js.git#bar/baz",
+      raw: "bitbucket:user/foo-js#bar/baz"
+    },
+
+    "bitbucket:user..blerg--/..foo-js# . . . . . some . tags / / /": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "bitbucket" },
+      spec: "git+ssh://git@bitbucket.org/user..blerg--/..foo-js.git# . . . . . some . tags / / /",
+      raw: "bitbucket:user..blerg--/..foo-js# . . . . . some . tags / / /"
+    },
+
+    "bitbucket:user/foo-js#bar/baz/bin": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "bitbucket" },
+      spec: "git+ssh://git@bitbucket.org/user/foo-js.git#bar/baz/bin",
+      raw: "bitbucket:user/foo-js#bar/baz/bin"
+    },
+
+    "foo@bitbucket:user/foo-js": {
+      name: "foo",
+      type: "hosted",
+      hosted: { type: "bitbucket" },
+      spec: "git+ssh://git@bitbucket.org/user/foo-js.git",
+      raw: "foo@bitbucket:user/foo-js"
+    },
+
+    "git+ssh://git@bitbucket.org/user/foo#1.2.3": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "bitbucket" },
+      spec: "git+ssh://git@bitbucket.org/user/foo.git#1.2.3",
+      raw: "git+ssh://git@bitbucket.org/user/foo#1.2.3"
+    },
+
+    "https://bitbucket.org/user/foo.git": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "bitbucket" },
+      spec: "git+ssh://git@bitbucket.org/user/foo.git",
+      raw: "https://bitbucket.org/user/foo.git"
+    },
+
+    "@foo/bar@git+ssh://bitbucket.org/user/foo": {
+      name: "@foo/bar",
+      scope: "@foo",
+      type: "hosted",
+      hosted: { type: "bitbucket" },
+      spec: "git+ssh://git@bitbucket.org/user/foo.git",
+      rawSpec: "git+ssh://bitbucket.org/user/foo",
+      raw: "@foo/bar@git+ssh://bitbucket.org/user/foo"
+    }
+  }
+
+  Object.keys(tests).forEach(function (arg) {
+    var res = npa(arg)
+    t.type(res, "Result", arg + " is a result")
+    t.has(res, tests[arg], arg + " matches expectations")
+  })
+
+  t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/github.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/github.js
new file mode 100644 (file)
index 0000000..63fd26c
--- /dev/null
@@ -0,0 +1,106 @@
+var npa = require("../npa.js")
+var path = require("path")
+
+require("tap").test("basic", function (t) {
+  t.setMaxListeners(999)
+
+  var tests = {
+    "user/foo-js": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user/foo-js.git",
+      raw: "user/foo-js"
+    },
+
+    "user/foo-js#bar/baz": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user/foo-js.git#bar/baz",
+      raw: "user/foo-js#bar/baz"
+    },
+
+    "user..blerg--/..foo-js# . . . . . some . tags / / /": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user..blerg--/..foo-js.git# . . . . . some . tags / / /",
+      raw: "user..blerg--/..foo-js# . . . . . some . tags / / /"
+    },
+
+    "user/foo-js#bar/baz/bin": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user/foo-js.git#bar/baz/bin",
+      raw: "user/foo-js#bar/baz/bin"
+    },
+
+    "foo@user/foo-js": {
+      name: "foo",
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user/foo-js.git",
+      raw: "foo@user/foo-js"
+    },
+
+    "github:user/foo-js": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user/foo-js.git",
+      raw: "github:user/foo-js"
+    },
+
+    "git+ssh://git@github.com/user/foo#1.2.3": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user/foo.git#1.2.3",
+      raw: "git+ssh://git@github.com/user/foo#1.2.3"
+    },
+
+    "git://github.com/user/foo": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user/foo.git",
+      raw: "git://github.com/user/foo"
+    },
+
+    "https://github.com/user/foo.git": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user/foo.git",
+      raw: "https://github.com/user/foo.git"
+    },
+
+    "@foo/bar@git+ssh://github.com/user/foo": {
+      name: "@foo/bar",
+      scope: "@foo",
+      type: "hosted",
+      hosted: { type: "github" },
+      spec: "git+ssh://git@github.com/user/foo.git",
+      rawSpec: "git+ssh://github.com/user/foo",
+      raw: "@foo/bar@git+ssh://github.com/user/foo"
+    },
+
+   "foo@bar/foo": {
+     name: "foo",
+     type: "hosted",
+      hosted: { type: "github" },
+     spec: "git+ssh://git@github.com/bar/foo.git",
+     raw: "foo@bar/foo"
+   }
+  }
+
+  Object.keys(tests).forEach(function (arg) {
+    var res = npa(arg)
+    t.type(res, "Result", arg + " is a result")
+    t.has(res, tests[arg], arg + " matches expectations")
+  })
+
+  t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/gitlab.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/gitlab.js
new file mode 100644 (file)
index 0000000..36ea016
--- /dev/null
@@ -0,0 +1,82 @@
+var npa = require("../npa.js")
+var path = require("path")
+
+require("tap").test("basic", function (t) {
+  t.setMaxListeners(999)
+
+  var tests = {
+    "gitlab:user/foo-js": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "gitlab" },
+      spec: "git+ssh://git@gitlab.com/user/foo-js.git",
+      raw: "gitlab:user/foo-js"
+    },
+
+    "gitlab:user/foo-js#bar/baz": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "gitlab" },
+      spec: "git+ssh://git@gitlab.com/user/foo-js.git#bar/baz",
+      raw: "gitlab:user/foo-js#bar/baz"
+    },
+
+    "gitlab:user..blerg--/..foo-js# . . . . . some . tags / / /": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "gitlab" },
+      spec: "git+ssh://git@gitlab.com/user..blerg--/..foo-js.git# . . . . . some . tags / / /",
+      raw: "gitlab:user..blerg--/..foo-js# . . . . . some . tags / / /"
+    },
+
+    "gitlab:user/foo-js#bar/baz/bin": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "gitlab" },
+      spec: "git+ssh://git@gitlab.com/user/foo-js.git#bar/baz/bin",
+      raw: "gitlab:user/foo-js#bar/baz/bin"
+    },
+
+    "foo@gitlab:user/foo-js": {
+      name: "foo",
+      type: "hosted",
+      hosted: { type: "gitlab" },
+      spec: "git+ssh://git@gitlab.com/user/foo-js.git",
+      raw: "foo@gitlab:user/foo-js"
+    },
+
+    "git+ssh://git@gitlab.com/user/foo#1.2.3": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "gitlab" },
+      spec: "git+ssh://git@gitlab.com/user/foo.git#1.2.3",
+      raw: "git+ssh://git@gitlab.com/user/foo#1.2.3"
+    },
+
+    "https://gitlab.com/user/foo.git": {
+      name: null,
+      type: "hosted",
+      hosted: { type: "gitlab" },
+      spec: "git+ssh://git@gitlab.com/user/foo.git",
+      raw: "https://gitlab.com/user/foo.git"
+    },
+
+    "@foo/bar@git+ssh://gitlab.com/user/foo": {
+      name: "@foo/bar",
+      scope: "@foo",
+      type: "hosted",
+      hosted: { type: "gitlab" },
+      spec: "git+ssh://git@gitlab.com/user/foo.git",
+      rawSpec: "git+ssh://gitlab.com/user/foo",
+      raw: "@foo/bar@git+ssh://gitlab.com/user/foo"
+    }
+  }
+
+  Object.keys(tests).forEach(function (arg) {
+    var res = npa(arg)
+    t.type(res, "Result", arg + " is a result")
+    t.has(res, tests[arg], arg + " matches expectations")
+  })
+
+  t.end()
+})
diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/windows.js b/deps/npm/node_modules/npm-registry-client/node_modules/npm-package-arg/test/windows.js
new file mode 100644 (file)
index 0000000..e3c8ba6
--- /dev/null
@@ -0,0 +1,41 @@
+global.FAKE_WINDOWS = true
+
+var npa = require("../npa.js")
+var test = require("tap").test
+var path = require("path")
+
+var cases = {
+  "C:\\x\\y\\z": {
+    raw: "C:\\x\\y\\z",
+    scope: null,
+    name: null,
+    rawSpec: "C:\\x\\y\\z",
+    spec: path.resolve("C:\\x\\y\\z"),
+    type: "local"
+  },
+  "foo@C:\\x\\y\\z": {
+    raw: "foo@C:\\x\\y\\z",
+    scope: null,
+    name: "foo",
+    rawSpec: "C:\\x\\y\\z",
+    spec: path.resolve("C:\\x\\y\\z"),
+    type: "local"
+  },
+  "foo@/foo/bar/baz": {
+    raw: "foo@/foo/bar/baz",
+    scope: null,
+    name: "foo",
+    rawSpec: "/foo/bar/baz",
+    spec: path.resolve("/foo/bar/baz"),
+    type: "local"
+  }
+}
+
+test("parse a windows path", function (t) {
+  Object.keys(cases).forEach(function (c) {
+    var expect = cases[c]
+    var actual = npa(c)
+    t.same(actual, expect, c)
+  })
+  t.end()
+})
index 9d4178c572f0dbaaed674766f8173ae8d138ce26..4b804454db616627cc49c64ffb42b6bae2e39835 100644 (file)
@@ -6,7 +6,7 @@
   },
   "name": "npm-registry-client",
   "description": "Client for the npm registry",
-  "version": "5.0.0",
+  "version": "6.0.3",
   "repository": {
     "url": "git://github.com/isaacs/npm-registry-client"
   },
@@ -20,6 +20,7 @@
     "graceful-fs": "^3.0.0",
     "mkdirp": "^0.5.0",
     "normalize-package-data": "~1.0.1",
+    "npm-package-arg": "^3.0.0",
     "once": "^1.3.0",
     "request": "^2.47.0",
     "retry": "^0.6.1",
     "npmlog": ""
   },
   "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 = \"npm://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.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.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  * `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} Cerficate 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",
+  "gitHead": "7d3d14eb825aa376c63854a08e67d2c9b3415927",
+  "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 = \"npm://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": "b22f38992087e57f263c269dcd52ff290565d401",
   "bugs": {
     "url": "https://github.com/isaacs/npm-registry-client/issues"
   },
   "homepage": "https://github.com/isaacs/npm-registry-client",
-  "_id": "npm-registry-client@5.0.0",
-  "_shasum": "0425db2fc3dcd322e74fe95029d2c49a41e4b6cf",
-  "_from": "npm-registry-client@>=5.0.0 <5.1.0"
+  "_id": "npm-registry-client@6.0.3",
+  "_shasum": "ae19f33b1cd6b4f5e81b7614bde7b97393c57cdc",
+  "_from": "npm-registry-client@>=6.0.3 <6.1.0"
 }
diff --git a/deps/npm/node_modules/npm-registry-client/test/access.js b/deps/npm/node_modules/npm-registry-client/test/access.js
new file mode 100644 (file)
index 0000000..52ecdda
--- /dev/null
@@ -0,0 +1,96 @@
+var test = require("tap").test
+
+var server = require("./lib/server.js")
+var common = require("./lib/common.js")
+var client = common.freshClient()
+
+function nop() {}
+
+var URI = "http://localhost:1337/-/package/underscore/access"
+var TOKEN = "foo"
+var AUTH = {
+  token : TOKEN
+}
+var LEVEL = "public"
+var PARAMS = {
+  level : LEVEL,
+  auth : AUTH
+}
+
+test("access call contract", function (t) {
+  t.throws(function () {
+    client.access(undefined, AUTH, nop)
+  }, "requires a URI")
+
+  t.throws(function () {
+    client.access([], PARAMS, nop)
+  }, "requires URI to be a string")
+
+  t.throws(function () {
+    client.access(URI, undefined, nop)
+  }, "requires params object")
+
+  t.throws(function () {
+    client.access(URI, "", nop)
+  }, "params must be object")
+
+  t.throws(function () {
+    client.access(URI, PARAMS, undefined)
+  }, "requires callback")
+
+  t.throws(function () {
+    client.access(URI, PARAMS, "callback")
+  }, "callback must be function")
+
+  t.throws(
+    function () {
+      var params = {
+        auth : AUTH
+      }
+      client.access(URI, params, nop)
+    },
+    { name : "AssertionError", message : "must pass level to access" },
+    "access must include level"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        level : LEVEL
+      }
+      client.access(URI, params, nop)
+    },
+    { name : "AssertionError", message : "must pass auth to access" },
+    "access must include auth"
+  )
+
+  t.end()
+})
+
+test("set access level on a package", function (t) {
+  server.expect("POST", "/-/package/underscore/access", function (req, res) {
+    t.equal(req.method, "POST")
+
+    var b = ""
+    req.setEncoding("utf8")
+    req.on("data", function (d) {
+      b += d
+    })
+
+    req.on("end", function () {
+      var updated = JSON.parse(b)
+
+      t.deepEqual(updated, { access : "public" })
+
+      res.statusCode = 201
+      res.json({accessChanged : true})
+    })
+  })
+
+  client.access(URI, PARAMS, function (error, data) {
+    t.ifError(error, "no errors")
+    t.ok(data.accessChanged, "access level set")
+
+    t.end()
+  })
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-add.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-add.js
new file mode 100644 (file)
index 0000000..a215c67
--- /dev/null
@@ -0,0 +1,141 @@
+var test = require("tap").test
+
+var server = require("./lib/server.js")
+var common = require("./lib/common.js")
+var client = common.freshClient()
+
+function nop() {}
+
+var BASE_URL = "http://localhost:1337/"
+var URI = "/-/package/underscore/dist-tags/test"
+var TOKEN = "foo"
+var AUTH = {
+  token : TOKEN
+}
+var PACKAGE = "underscore"
+var DIST_TAG = "test"
+var VERSION = "3.1.3"
+var PARAMS = {
+  package : PACKAGE,
+  distTag : DIST_TAG,
+  version : VERSION,
+  auth : AUTH
+}
+
+test("distTags.add call contract", function (t) {
+  t.throws(function () {
+    client.distTags.add(undefined, AUTH, nop)
+  }, "requires a URI")
+
+  t.throws(function () {
+    client.distTags.add([], PARAMS, nop)
+  }, "requires URI to be a string")
+
+  t.throws(function () {
+    client.distTags.add(BASE_URL, undefined, nop)
+  }, "requires params object")
+
+  t.throws(function () {
+    client.distTags.add(BASE_URL, "", nop)
+  }, "params must be object")
+
+  t.throws(function () {
+    client.distTags.add(BASE_URL, PARAMS, undefined)
+  }, "requires callback")
+
+  t.throws(function () {
+    client.distTags.add(BASE_URL, PARAMS, "callback")
+  }, "callback must be function")
+
+  t.throws(
+    function () {
+      var params = {
+        distTag : DIST_TAG,
+        version : VERSION,
+        auth : AUTH
+      }
+      client.distTags.add(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass package name to distTags.add"
+    },
+    "distTags.add must include package name"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE,
+        version : VERSION,
+        auth : AUTH
+      }
+      client.distTags.add(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass package distTag name to distTags.add"
+    },
+    "distTags.add must include dist-tag"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE,
+        distTag : DIST_TAG,
+        auth : AUTH
+      }
+      client.distTags.add(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass version to be mapped to distTag to distTags.add"
+    },
+    "distTags.add must include version"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE,
+        distTag : DIST_TAG,
+        version : VERSION
+      }
+      client.distTags.add(BASE_URL, params, nop)
+    },
+    { name : "AssertionError", message : "must pass auth to distTags.add" },
+    "distTags.add must include auth"
+  )
+
+  t.end()
+})
+
+test("add a new dist-tag to a package", function (t) {
+  server.expect("PUT", URI, function (req, res) {
+    t.equal(req.method, "PUT")
+
+    var b = ""
+    req.setEncoding("utf8")
+    req.on("data", function (d) {
+      b += d
+    })
+
+    req.on("end", function () {
+      t.doesNotThrow(function () {
+        var parsed = JSON.parse(b)
+        t.deepEqual(parsed, VERSION)
+
+        res.statusCode = 200
+        res.json({ "test" : VERSION })
+      }, "got valid JSON from client")
+    })
+  })
+
+  client.distTags.add(BASE_URL, PARAMS, function (error, data) {
+    t.ifError(error, "no errors")
+    t.ok(data.test, "dist-tag added")
+
+    t.end()
+  })
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-fetch.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-fetch.js
new file mode 100644 (file)
index 0000000..c108b6b
--- /dev/null
@@ -0,0 +1,98 @@
+var test = require("tap").test
+
+var server = require("./lib/server.js")
+var common = require("./lib/common.js")
+var client = common.freshClient()
+
+function nop() {}
+
+var BASE_URL = "http://localhost:1337/"
+var URI = "/-/package/underscore/dist-tags"
+var TOKEN = "foo"
+var AUTH = {
+  token : TOKEN
+}
+var PACKAGE = "underscore"
+var PARAMS = {
+  package : PACKAGE,
+  auth : AUTH
+}
+
+test("distTags.fetch call contract", function (t) {
+  t.throws(function () {
+    client.distTags.fetch(undefined, AUTH, nop)
+  }, "requires a URI")
+
+  t.throws(function () {
+    client.distTags.fetch([], PARAMS, nop)
+  }, "requires URI to be a string")
+
+  t.throws(function () {
+    client.distTags.fetch(BASE_URL, undefined, nop)
+  }, "requires params object")
+
+  t.throws(function () {
+    client.distTags.fetch(BASE_URL, "", nop)
+  }, "params must be object")
+
+  t.throws(function () {
+    client.distTags.fetch(BASE_URL, PARAMS, undefined)
+  }, "requires callback")
+
+  t.throws(function () {
+    client.distTags.fetch(BASE_URL, PARAMS, "callback")
+  }, "callback must be function")
+
+  t.throws(
+    function () {
+      var params = {
+        auth : AUTH
+      }
+      client.distTags.fetch(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass package name to distTags.fetch"
+    },
+    "distTags.fetch must include package name"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE
+      }
+      client.distTags.fetch(BASE_URL, params, nop)
+    },
+    { name : "AssertionError", message : "must pass auth to distTags.fetch" },
+    "distTags.fetch must include auth"
+  )
+
+  t.end()
+})
+
+test("fetch dist-tags for a package", function (t) {
+  server.expect("GET", URI, function (req, res) {
+    t.equal(req.method, "GET")
+
+    var b = ""
+    req.setEncoding("utf8")
+    req.on("data", function (d) {
+      b += d
+    })
+
+    req.on("end", function () {
+      t.notOk(b, "no request body")
+
+      res.statusCode = 200
+      res.json({ a : "1.0.0", b : "2.0.0", _etag : "xxx" })
+    })
+  })
+
+  client.distTags.fetch(BASE_URL, PARAMS, function (error, data) {
+    t.ifError(error, "no errors")
+    t.same(data, { a : "1.0.0", b : "2.0.0" }, "etag filtered from response")
+
+    t.end()
+  })
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-rm.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-rm.js
new file mode 100644 (file)
index 0000000..6268a06
--- /dev/null
@@ -0,0 +1,117 @@
+var test = require("tap").test
+
+var server = require("./lib/server.js")
+var common = require("./lib/common.js")
+var client = common.freshClient()
+
+function nop() {}
+
+var BASE_URL = "http://localhost:1337/"
+var URI = "/-/package/underscore/dist-tags/test"
+var TOKEN = "foo"
+var AUTH = {
+  token : TOKEN
+}
+var PACKAGE = "underscore"
+var DIST_TAG = "test"
+var PARAMS = {
+  package : PACKAGE,
+  distTag : DIST_TAG,
+  auth : AUTH
+}
+
+test("distTags.rm call contract", function (t) {
+  t.throws(function () {
+    client.distTags.rm(undefined, AUTH, nop)
+  }, "requires a URI")
+
+  t.throws(function () {
+    client.distTags.rm([], PARAMS, nop)
+  }, "requires URI to be a string")
+
+  t.throws(function () {
+    client.distTags.rm(BASE_URL, undefined, nop)
+  }, "requires params object")
+
+  t.throws(function () {
+    client.distTags.rm(BASE_URL, "", nop)
+  }, "params must be object")
+
+  t.throws(function () {
+    client.distTags.rm(BASE_URL, PARAMS, undefined)
+  }, "requires callback")
+
+  t.throws(function () {
+    client.distTags.rm(BASE_URL, PARAMS, "callback")
+  }, "callback must be function")
+
+  t.throws(
+    function () {
+      var params = {
+        distTag : DIST_TAG,
+        auth : AUTH
+      }
+      client.distTags.rm(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass package name to distTags.rm"
+    },
+    "distTags.rm must include package name"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE,
+        auth : AUTH
+      }
+      client.distTags.rm(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass package distTag name to distTags.rm"
+    },
+    "distTags.rm must include dist-tag"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE,
+        distTag : DIST_TAG
+      }
+      client.distTags.rm(BASE_URL, params, nop)
+    },
+    { name : "AssertionError", message : "must pass auth to distTags.rm" },
+    "distTags.rm must include auth"
+  )
+
+  t.end()
+})
+
+test("remove a dist-tag from a package", function (t) {
+  server.expect("DELETE", URI, function (req, res) {
+    t.equal(req.method, "DELETE")
+
+    var b = ""
+    req.setEncoding("utf8")
+    req.on("data", function (d) {
+      b += d
+    })
+
+    req.on("end", function () {
+      t.notOk(b, "got no message body")
+
+      res.statusCode = 200
+      res.json({})
+    })
+  })
+
+  client.distTags.rm(BASE_URL, PARAMS, function (error, data) {
+    t.ifError(error, "no errors")
+    t.notOk(data.test, "dist-tag removed")
+
+    t.end()
+  })
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-set.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-set.js
new file mode 100644 (file)
index 0000000..ff5591d
--- /dev/null
@@ -0,0 +1,121 @@
+var test = require("tap").test
+
+var server = require("./lib/server.js")
+var common = require("./lib/common.js")
+var client = common.freshClient()
+
+function nop() {}
+
+var BASE_URL = "http://localhost:1337/"
+var URI = "/-/package/underscore/dist-tags"
+var TOKEN = "foo"
+var AUTH = {
+  token : TOKEN
+}
+var PACKAGE = "underscore"
+var DIST_TAGS = {
+  "a" : "8.0.8",
+  "b" : "3.0.3"
+}
+var PARAMS = {
+  package : PACKAGE,
+  distTags : DIST_TAGS,
+  auth : AUTH
+}
+
+test("distTags.set call contract", function (t) {
+  t.throws(function () {
+    client.distTags.set(undefined, AUTH, nop)
+  }, "requires a URI")
+
+  t.throws(function () {
+    client.distTags.set([], PARAMS, nop)
+  }, "requires URI to be a string")
+
+  t.throws(function () {
+    client.distTags.set(BASE_URL, undefined, nop)
+  }, "requires params object")
+
+  t.throws(function () {
+    client.distTags.set(BASE_URL, "", nop)
+  }, "params must be object")
+
+  t.throws(function () {
+    client.distTags.set(BASE_URL, PARAMS, undefined)
+  }, "requires callback")
+
+  t.throws(function () {
+    client.distTags.set(BASE_URL, PARAMS, "callback")
+  }, "callback must be function")
+
+  t.throws(
+    function () {
+      var params = {
+        distTags : DIST_TAGS,
+        auth : AUTH
+      }
+      client.distTags.set(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass package name to distTags.set"
+    },
+    "distTags.set must include package name"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE,
+        auth : AUTH
+      }
+      client.distTags.set(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass distTags map to distTags.set"
+    },
+    "distTags.set must include dist-tags"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE,
+        distTags : DIST_TAGS
+      }
+      client.distTags.set(BASE_URL, params, nop)
+    },
+    { name : "AssertionError", message : "must pass auth to distTags.set" },
+    "distTags.set must include auth"
+  )
+
+  t.end()
+})
+
+test("set dist-tags for a package", function (t) {
+  server.expect("PUT", URI, 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 d = JSON.parse(b)
+      t.deepEqual(d, DIST_TAGS, "got back tags")
+
+      res.statusCode = 200
+      res.json(DIST_TAGS)
+    })
+  })
+
+  client.distTags.set(BASE_URL, PARAMS, function (error, data) {
+    t.ifError(error, "no errors")
+    t.ok(data.a && data.b, "dist-tags set")
+
+    t.end()
+  })
+})
diff --git a/deps/npm/node_modules/npm-registry-client/test/dist-tags-update.js b/deps/npm/node_modules/npm-registry-client/test/dist-tags-update.js
new file mode 100644 (file)
index 0000000..7c29e11
--- /dev/null
@@ -0,0 +1,121 @@
+var test = require("tap").test
+
+var server = require("./lib/server.js")
+var common = require("./lib/common.js")
+var client = common.freshClient()
+
+function nop() {}
+
+var BASE_URL = "http://localhost:1337/"
+var URI = "/-/package/underscore/dist-tags"
+var TOKEN = "foo"
+var AUTH = {
+  token : TOKEN
+}
+var PACKAGE = "underscore"
+var DIST_TAGS = {
+  "a" : "8.0.8",
+  "b" : "3.0.3"
+}
+var PARAMS = {
+  package : PACKAGE,
+  distTags : DIST_TAGS,
+  auth : AUTH
+}
+
+test("distTags.update call contract", function (t) {
+  t.throws(function () {
+    client.distTags.update(undefined, AUTH, nop)
+  }, "requires a URI")
+
+  t.throws(function () {
+    client.distTags.update([], PARAMS, nop)
+  }, "requires URI to be a string")
+
+  t.throws(function () {
+    client.distTags.update(BASE_URL, undefined, nop)
+  }, "requires params object")
+
+  t.throws(function () {
+    client.distTags.update(BASE_URL, "", nop)
+  }, "params must be object")
+
+  t.throws(function () {
+    client.distTags.update(BASE_URL, PARAMS, undefined)
+  }, "requires callback")
+
+  t.throws(function () {
+    client.distTags.update(BASE_URL, PARAMS, "callback")
+  }, "callback must be function")
+
+  t.throws(
+    function () {
+      var params = {
+        distTags : DIST_TAGS,
+        auth : AUTH
+      }
+      client.distTags.update(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass package name to distTags.update"
+    },
+    "distTags.update must include package name"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE,
+        auth : AUTH
+      }
+      client.distTags.update(BASE_URL, params, nop)
+    },
+    {
+      name : "AssertionError",
+      message : "must pass distTags map to distTags.update"
+    },
+    "distTags.update must include dist-tags"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        package : PACKAGE,
+        distTags : DIST_TAGS
+      }
+      client.distTags.update(BASE_URL, params, nop)
+    },
+    { name : "AssertionError", message : "must pass auth to distTags.update" },
+    "distTags.update must include auth"
+  )
+
+  t.end()
+})
+
+test("update dist-tags for a package", function (t) {
+  server.expect("POST", URI, function (req, res) {
+    t.equal(req.method, "POST")
+
+    var b = ""
+    req.setEncoding("utf8")
+    req.on("data", function (d) {
+      b += d
+    })
+
+    req.on("end", function () {
+      var d = JSON.parse(b)
+      t.deepEqual(d, DIST_TAGS, "got back tags")
+
+      res.statusCode = 200
+      res.json(DIST_TAGS)
+    })
+  })
+
+  client.distTags.update(BASE_URL, PARAMS, function (error, data) {
+    t.ifError(error, "no errors")
+    t.ok(data.a && data.b, "dist-tags set")
+
+    t.end()
+  })
+})
index 10b1275053975d837a5e235f538dbe07caf6b410..b9d9a24d66ef955db9b321c585b4abe4737c2b6b 100644 (file)
@@ -78,6 +78,7 @@ tap.test("publish again", function (t) {
 
   var params = {
     metadata : pkg,
+    access : "restricted",
     body : tarball,
     auth : auth
   }
index 9c547ca010cad50d7d628d8b21a7d54c6c6be0f0..f5da5b2435be38fe357ebfad6406a39793721372 100644 (file)
@@ -76,6 +76,7 @@ tap.test("publish again", function (t) {
 
   var params = {
     metadata : pkg,
+    access : "public",
     body : tarball,
     auth : auth
   }
index cce6fcbc7da70f83ad444e597fa1bcf2dab80558..50b3f93493d321be134c108616fc65be29cdd1de 100644 (file)
@@ -12,6 +12,7 @@ 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      = createReadStream(BODY_PATH, "base64")
@@ -22,6 +23,7 @@ var AUTH      = {
 }
 var PARAMS  = {
   metadata : METADATA,
+  access   : ACCESS,
   body     : BODY,
   auth     : AUTH
 }
index 70ff1e93f1e192758220bcc6238319716c0964d2..203c80004853206ae4471f7b76a88d211a4a3c29 100644 (file)
@@ -44,6 +44,7 @@ tap.test("publish", function (t) {
 
   var params = {
     metadata : pkg,
+    access : "restricted",
     body : tarball,
     auth : auth
   }
index b21e33f417becf7f3678f515f4ffdb875eec0db7..6bb48617df270bb97669d4c0ad06f0d2259a5b26 100644 (file)
@@ -51,6 +51,7 @@ tap.test("publish", function (t) {
 
   var params = {
     metadata : pkg,
+    access : "restricted",
     body : tarball,
     auth : auth
   }
index 9292a94c7a1226a47546354e986088831bbfe12a..40bfdf2bbc15bfcc121dbdce61c8fa4f068ae35a 100644 (file)
@@ -13,6 +13,7 @@ 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, "base64")
@@ -23,6 +24,7 @@ var AUTH      = {
 }
 var PARAMS  = {
   metadata : METADATA,
+  access   : ACCESS,
   body     : BODY,
   auth     : AUTH
 }
@@ -55,6 +57,7 @@ test("publish call contract", function (t) {
   t.throws(
     function () {
       var params = {
+        access : ACCESS,
         body : BODY,
         auth : AUTH
       }
@@ -68,6 +71,20 @@ test("publish call contract", function (t) {
     function () {
       var params = {
         metadata : METADATA,
+        body : BODY,
+        auth : AUTH
+      }
+      client.publish(URI, params, nop)
+    },
+    { name : "AssertionError", message : "must pass access for package" },
+    "params must include access for package"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        metadata : METADATA,
+        access : ACCESS,
         auth : AUTH
       }
       client.publish(URI, params, nop)
@@ -80,6 +97,7 @@ test("publish call contract", function (t) {
     function () {
       var params = {
         metadata : METADATA,
+        access : ACCESS,
         body : BODY
       }
       client.publish(URI, params, nop)
@@ -92,6 +110,7 @@ test("publish call contract", function (t) {
     function () {
       var params = {
         metadata : -1,
+        access : ACCESS,
         body : BODY,
         auth : AUTH
       }
@@ -105,6 +124,24 @@ test("publish call contract", function (t) {
     function () {
       var params = {
         metadata : METADATA,
+        access : "hamchunx",
+        body : BODY,
+        auth : AUTH
+      }
+      client.publish(URI, params, nop)
+    },
+    {
+      name    : "AssertionError",
+      message : "access level must be either 'public' or 'restricted'"
+    },
+    "access level must be 'public' or 'restricted'"
+  )
+
+  t.throws(
+    function () {
+      var params = {
+        metadata : METADATA,
+        access : ACCESS,
         body : -1,
         auth : AUTH
       }
@@ -122,6 +159,7 @@ test("publish call contract", function (t) {
     metadata.version = "%!@#$"
     var params = {
       metadata : metadata,
+      access : ACCESS,
       message : BODY,
       auth : AUTH
     }
@@ -153,6 +191,7 @@ test("publish", function (t) {
       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)
index 687df5d7d52bd11815a69714cbf0d4fb79c67499..4116586ee3a2c6ff131b5e2349bf513ab2ffc463 100644 (file)
@@ -57,7 +57,7 @@ test("tag call contract", function (t) {
       client.tag(URI, params, nop)
     },
     { name : "AssertionError", message : "must pass version to tag" },
-    "auth must include username"
+    "tag must include version"
   )
 
   t.throws(
@@ -69,7 +69,7 @@ test("tag call contract", function (t) {
       client.tag(URI, params, nop)
     },
     { name : "AssertionError", message : "must pass tag name to tag" },
-    "auth must include username"
+    "tag must include name"
   )
 
   t.throws(
@@ -81,7 +81,7 @@ test("tag call contract", function (t) {
       client.tag(URI, params, nop)
     },
     { name : "AssertionError", message : "must pass auth to tag" },
-    "auth must include username"
+    "params must include auth"
   )
 
   t.end()
index ccb173a09c00b26a2f75faed86b22fc974ba7b23..21b70e82fa4fe1a365cdff6e59242e5d428f8f9c 100644 (file)
@@ -49,10 +49,13 @@ test("whoami call contract", function (t) {
 })
 
 test("whoami", function (t) {
-  server.expect("GET", "/whoami", function (req, res) {
+  server.expect("GET", "/-/whoami", function (req, res) {
     t.equal(req.method, "GET")
     // only available for token-based auth for now
-    t.equal(req.headers.authorization, "Bearer not-bad-meaning-bad-but-bad-meaning-wombat")
+    t.equal(
+      req.headers.authorization,
+      "Bearer not-bad-meaning-bad-but-bad-meaning-wombat"
+    )
 
     res.json({username : WHOIAM})
   })
index 9717becdced68f8c31498a6a58248ec26bf81b41..d33c16f6c710114134030125ef06810c8637e97b 100644 (file)
@@ -1,5 +1,5 @@
 {
-  "version": "2.3.0",
+  "version": "2.4.1",
   "name": "npm",
   "description": "A package manager for node",
   "keywords": [
@@ -58,7 +58,7 @@
     "inflight": "~1.0.4",
     "inherits": "~2.0.1",
     "ini": "~1.3.2",
-    "init-package-json": "~1.1.3",
+    "init-package-json": "~1.2.0",
     "lockfile": "~1.0.0",
     "lru-cache": "~2.5.0",
     "minimatch": "~2.0.1",
@@ -70,7 +70,7 @@
     "npm-cache-filename": "~1.0.1",
     "npm-install-checks": "~1.0.5",
     "npm-package-arg": "~2.1.3",
-    "npm-registry-client": "~5.0.0",
+    "npm-registry-client": "~6.0.3",
     "npm-user-validate": "~0.1.1",
     "npmlog": "~0.1.1",
     "once": "~1.3.1",
diff --git a/deps/npm/test/tap/access.js b/deps/npm/test/tap/access.js
new file mode 100644 (file)
index 0000000..909fdf0
--- /dev/null
@@ -0,0 +1,91 @@
+var fs = require("fs")
+var path = require("path")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+
+var test = require("tap").test
+var common = require("../common-tap.js")
+
+var pkg = path.resolve(__dirname, "access")
+var server
+
+var scoped = {
+  name : "@scoped/pkg",
+  version : "1.1.1"
+}
+
+var body = {
+  access : "public"
+}
+
+function mocks (server) {
+  server.post("/-/package/@scoped%2fpkg/access", JSON.stringify(body))
+    .reply(200, { "access" : "public" })
+  server.post("/-/package/@scoped%2fanother/access", JSON.stringify(body))
+    .reply(200, { "access" : "public" })
+}
+
+test("setup", function (t) {
+  mkdirp(pkg, function (er) {
+    t.ifError(er, pkg + " made successfully")
+
+    mr({port : common.port, mocks : mocks}, function (s) {
+      server = s
+
+      fs.writeFile(
+        path.join(pkg, "package.json"),
+        JSON.stringify(scoped),
+        function (er) {
+          t.ifError(er, "wrote package.json")
+          t.end()
+        }
+      )
+    })
+  })
+})
+
+test("npm access on current package", function (t) {
+  common.npm(
+    [
+      "access",
+      "public",
+      "--registry", common.registry,
+      "--loglevel", "silent"
+    ],
+    { cwd : pkg },
+    function (er, code, stdout, stderr) {
+      t.ifError(er, "npm access")
+      t.notOk(code, "exited OK")
+      t.notOk(stderr, "no error output")
+
+      t.end()
+    }
+  )
+})
+
+test("npm access on named package", function (t) {
+  common.npm(
+    [
+      "access",
+      "public", "@scoped/another",
+      "--registry", common.registry,
+      "--loglevel", "silent"
+    ],
+    { cwd : pkg },
+    function (er, code, stdout, stderr) {
+      t.ifError(er, "npm access")
+      t.notOk(code, "exited OK")
+      t.notOk(stderr, "no error output")
+
+      t.end()
+    }
+  )
+})
+
+test("cleanup", function (t) {
+  t.pass("cleaned up")
+  rimraf.sync(pkg)
+  server.close()
+  t.end()
+})
diff --git a/deps/npm/test/tap/dist-tag.js b/deps/npm/test/tap/dist-tag.js
new file mode 100644 (file)
index 0000000..9686f9d
--- /dev/null
@@ -0,0 +1,195 @@
+var fs = require("fs")
+var path = require("path")
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var mr = require("npm-registry-mock")
+
+var test = require("tap").test
+var common = require("../common-tap.js")
+
+var pkg = path.resolve(__dirname, "dist-tag")
+var server
+
+var scoped = {
+  name : "@scoped/pkg",
+  version : "1.1.1"
+}
+
+function mocks (server) {
+  // ls current package
+  server.get("/-/package/@scoped%2fpkg/dist-tags")
+    .reply(200, { latest : "1.0.0", a : "0.0.1", b : "0.5.0" })
+
+  // ls named package
+  server.get("/-/package/@scoped%2fanother/dist-tags")
+    .reply(200, { latest : "2.0.0", a : "0.0.2", b : "0.6.0" })
+
+  // add c
+  server.get("/-/package/@scoped%2fanother/dist-tags")
+    .reply(200, { latest : "2.0.0", a : "0.0.2", b : "0.6.0" })
+  server.put("/-/package/@scoped%2fanother/dist-tags/c", "\"7.7.7\"")
+    .reply(200, { latest : "7.7.7", a : "0.0.2", b : "0.6.0", c : "7.7.7" })
+
+  // set same version
+  server.get("/-/package/@scoped%2fanother/dist-tags")
+    .reply(200, { latest : "2.0.0", b : "0.6.0" })
+
+  // rm
+  server.get("/-/package/@scoped%2fanother/dist-tags")
+    .reply(200, { latest : "2.0.0", a : "0.0.2", b : "0.6.0", c : "7.7.7" })
+  server.delete("/-/package/@scoped%2fanother/dist-tags/c")
+    .reply(200, { c : "7.7.7" })
+
+  // rm
+  server.get("/-/package/@scoped%2fanother/dist-tags")
+    .reply(200, { latest : "4.0.0" })
+}
+
+test("setup", function (t) {
+  mkdirp(pkg, function (er) {
+    t.ifError(er, pkg + " made successfully")
+
+    mr({port : common.port, mocks : mocks}, function (s) {
+      server = s
+
+      fs.writeFile(
+        path.join(pkg, "package.json"),
+        JSON.stringify(scoped),
+        function (er) {
+          t.ifError(er, "wrote package.json")
+          t.end()
+        }
+      )
+    })
+  })
+})
+
+test("npm dist-tags ls in current package", function (t) {
+  common.npm(
+    [
+      "dist-tags", "ls",
+      "--registry", common.registry,
+      "--loglevel", "silent"
+    ],
+    { cwd : pkg },
+    function (er, code, stdout, stderr) {
+      t.ifError(er, "npm access")
+      t.notOk(code, "exited OK")
+      t.notOk(stderr, "no error output")
+      t.equal(stdout, "a: 0.0.1\nb: 0.5.0\nlatest: 1.0.0\n")
+
+      t.end()
+    }
+  )
+})
+
+test("npm dist-tags ls on named package", function (t) {
+  common.npm(
+    [
+      "dist-tags",
+      "ls", "@scoped/another",
+      "--registry", common.registry,
+      "--loglevel", "silent"
+    ],
+    { cwd : pkg },
+    function (er, code, stdout, stderr) {
+      t.ifError(er, "npm access")
+      t.notOk(code, "exited OK")
+      t.notOk(stderr, "no error output")
+      t.equal(stdout, "a: 0.0.2\nb: 0.6.0\nlatest: 2.0.0\n")
+
+      t.end()
+    }
+  )
+})
+
+test("npm dist-tags add @scoped/another@7.7.7 c", function (t) {
+  common.npm(
+    [
+      "dist-tags",
+      "add", "@scoped/another@7.7.7", "c",
+      "--registry", common.registry,
+      "--loglevel", "silent"
+    ],
+    { cwd : pkg },
+    function (er, code, stdout, stderr) {
+      t.ifError(er, "npm access")
+      t.notOk(code, "exited OK")
+      t.notOk(stderr, "no error output")
+      t.equal(stdout, "+c: @scoped/another@7.7.7\n")
+
+      t.end()
+    }
+  )
+})
+
+test("npm dist-tags set same version", function (t) {
+  common.npm(
+    [
+      "dist-tag",
+      "set", "@scoped/another@0.6.0", "b",
+      "--registry", common.registry,
+      "--loglevel", "warn"
+    ],
+    { cwd : pkg },
+    function (er, code, stdout, stderr) {
+      t.ifError(er, "npm access")
+      t.notOk(code, "exited OK")
+      t.equal(
+        stderr,
+        "npm WARN dist-tag add b is already set to version 0.6.0\n",
+        "warned about setting same version"
+      )
+      t.notOk(stdout, "only expecting warning message")
+
+      t.end()
+    }
+  )
+})
+
+test("npm dist-tags rm @scoped/another c", function (t) {
+  common.npm(
+    [
+      "dist-tags",
+      "rm", "@scoped/another", "c",
+      "--registry", common.registry,
+      "--loglevel", "silent"
+    ],
+    { cwd : pkg },
+    function (er, code, stdout, stderr) {
+      t.ifError(er, "npm access")
+      t.notOk(code, "exited OK")
+      t.notOk(stderr, "no error output")
+      t.equal(stdout, "-c: @scoped/another@7.7.7\n")
+
+      t.end()
+    }
+  )
+})
+
+test("npm dist-tags rm @scoped/another nonexistent", function (t) {
+  common.npm(
+    [
+      "dist-tags",
+      "rm", "@scoped/another", "nonexistent",
+      "--registry", common.registry,
+      "--loglevel", "silent"
+    ],
+    { cwd : pkg },
+    function (er, code, stdout, stderr) {
+      t.ifError(er, "npm dist-tag")
+      t.ok(code, "expecting nonzero exit code")
+      t.notOk(stderr, "no error output")
+      t.notOk(stdout, "not expecting output")
+
+      t.end()
+    }
+  )
+})
+
+test("cleanup", function (t) {
+  t.pass("cleaned up")
+  rimraf.sync(pkg)
+  server.close()
+  t.end()
+})
index 47dc255d87577bbfce515d5bb573a941e5f401db..f634aaf717e879cd1605506b216a313cf5182874 100644 (file)
@@ -53,6 +53,8 @@ function mocks (server) {
     .reply(200, {_id:"underscore",_rev:2,maintainers:[jashkenas,othiym23]})
 
   // test 4
+  server.get("/underscore")
+    .reply(200, {_id:"underscore",_rev:2,maintainers:[jashkenas,othiym23]})
   server.put(
     "/underscore/-rev/2",
     {_id:"underscore",_rev:2,maintainers:[jashkenas]},
diff --git a/deps/npm/test/tap/publish-access-scoped.js b/deps/npm/test/tap/publish-access-scoped.js
new file mode 100644 (file)
index 0000000..d4d59c1
--- /dev/null
@@ -0,0 +1,83 @@
+var fs = require("fs")
+var path = require("path")
+
+var test = require("tap").test
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var nock = require("nock")
+
+var npm = require("../../")
+var common = require("../common-tap.js")
+
+var pkg = path.join(__dirname, "publish-access")
+
+// TODO: nock uses setImmediate, breaks 0.8: replace with mockRegistry
+if (!global.setImmediate) {
+  global.setImmediate = function () {
+    var args = [arguments[0], 0].concat([].slice.call(arguments, 1))
+    setTimeout.apply(this, args)
+  }
+}
+
+test("setup", function (t) {
+  mkdirp(path.join(pkg, "cache"), function () {
+    var configuration = {
+      cache    : path.join(pkg, "cache"),
+      loglevel : "silent",
+      registry : common.registry
+    }
+
+    npm.load(configuration, next)
+  })
+
+  function next (er) {
+    t.ifError(er, "npm loaded successfully")
+
+    process.chdir(pkg)
+    fs.writeFile(
+      path.join(pkg, "package.json"),
+      JSON.stringify({
+        name: "@bigco/publish-access",
+        version: "1.2.5"
+      }),
+      "ascii",
+      function (er) {
+        t.ifError(er)
+
+        t.pass("setup done")
+        t.end()
+      }
+    )
+  }
+})
+
+test("scoped packages should default to restricted access", function (t) {
+  var put = nock(common.registry)
+              .put("/@bigco%2fpublish-access")
+              .reply(201, verify)
+
+  npm.commands.publish([], false, function (er) {
+    t.ifError(er, "published without error")
+
+    put.done()
+    t.end()
+  })
+
+  function verify (_, body) {
+    t.doesNotThrow(function () {
+      var parsed = JSON.parse(body)
+      t.equal(parsed.access, "restricted", "access level is correct")
+    }, "converted body back into object")
+
+    return {ok: true}
+  }
+})
+
+test("cleanup", function (t) {
+  process.chdir(__dirname)
+  rimraf(pkg, function (er) {
+    t.ifError(er)
+
+    t.end()
+  })
+})
diff --git a/deps/npm/test/tap/publish-access-unscoped.js b/deps/npm/test/tap/publish-access-unscoped.js
new file mode 100644 (file)
index 0000000..a4cdcc2
--- /dev/null
@@ -0,0 +1,83 @@
+var fs = require("fs")
+var path = require("path")
+
+var test = require("tap").test
+var mkdirp = require("mkdirp")
+var rimraf = require("rimraf")
+var nock = require("nock")
+
+var npm = require("../../")
+var common = require("../common-tap.js")
+
+var pkg = path.join(__dirname, "publish-access-unscoped")
+
+// TODO: nock uses setImmediate, breaks 0.8: replace with mockRegistry
+if (!global.setImmediate) {
+  global.setImmediate = function () {
+    var args = [arguments[0], 0].concat([].slice.call(arguments, 1))
+    setTimeout.apply(this, args)
+  }
+}
+
+test("setup", function (t) {
+  mkdirp(path.join(pkg, "cache"), function () {
+    var configuration = {
+      cache    : path.join(pkg, "cache"),
+      loglevel : "silent",
+      registry : common.registry
+    }
+
+    npm.load(configuration, next)
+  })
+
+  function next (er) {
+    t.ifError(er, "npm loaded successfully")
+
+    process.chdir(pkg)
+    fs.writeFile(
+      path.join(pkg, "package.json"),
+      JSON.stringify({
+        name: "publish-access",
+        version: "1.2.5"
+      }),
+      "ascii",
+      function (er) {
+        t.ifError(er)
+
+        t.pass("setup done")
+        t.end()
+      }
+    )
+  }
+})
+
+test("scoped packages should default to restricted access", function (t) {
+  var put = nock(common.registry)
+              .put("/publish-access")
+              .reply(201, verify)
+
+  npm.commands.publish([], false, function (er) {
+    t.ifError(er, "published without error")
+
+    put.done()
+    t.end()
+  })
+
+  function verify (_, body) {
+    t.doesNotThrow(function () {
+      var parsed = JSON.parse(body)
+      t.equal(parsed.access, "public", "access level is correct")
+    }, "converted body back into object")
+
+    return {ok: true}
+  }
+})
+
+test("cleanup", function (t) {
+  process.chdir(__dirname)
+  rimraf(pkg, function (er) {
+    t.ifError(er)
+
+    t.end()
+  })
+})