url = https://github.com/mikeal/request.git
[submodule "node_modules/tar"]
path = node_modules/tar
- url = git://github.com/isaacs/node-tar.git
+ url = https://github.com/isaacs/node-tar.git
[submodule "node_modules/fstream"]
path = node_modules/fstream
- url = git://github.com/isaacs/fstream.git
+ url = https://github.com/isaacs/fstream.git
[submodule "node_modules/inherits"]
path = node_modules/inherits
- url = git://github.com/isaacs/inherits.git
+ url = https://github.com/isaacs/inherits.git
[submodule "node_modules/block-stream"]
path = node_modules/block-stream
- url = git://github.com/isaacs/block-stream.git
+ url = https://github.com/isaacs/block-stream.git
[submodule "node_modules/mkdirp"]
path = node_modules/mkdirp
- url = git://github.com/isaacs/node-mkdirp.git
+ url = https://github.com/isaacs/node-mkdirp.git
[submodule "node_modules/fast-list"]
path = node_modules/fast-list
- url = git://github.com/isaacs/fast-list.git
+ url = https://github.com/isaacs/fast-list.git
+[submodule "node_modules/read"]
+ path = node_modules/read
+ url = https://github.com/isaacs/read.git
+[submodule "node_modules/lru-cache"]
+ path = node_modules/lru-cache
+ url = https://github.com/isaacs/node-lru-cache.git
--- /dev/null
+language: node_js
+before_install: "make &>out || cat out; rm out"
+node_js:
+ - 0.6
return
}
+
+process.title = "npm"
+
var log = require("../lib/utils/log.js")
log.waitForConfig()
log.info("ok", "it worked if it ends with")
If false, never shows colors. If `"always"` then always shows colors.
If true, then only prints color codes for tty file descriptors.
+### coverage
+
+* Default: false
+* Type: Boolean
+
+A flag to tell test-harness to run with their coverage options enabled,
+if they respond to the `npm_config_coverage` environment variable.
+
### depth
* Default: Infinity
### loglevel
-* Default: "warn"
+* Default: "http"
* Type: String
-* Values: "silent", "win", "error", "warn", "info", "verbose", "silly"
+* Values: "silent", "win", "error", "warn", "http", "info", "verbose", "silly"
What level of logs to report. On failure, *all* logs are written to
`npm-debug.log` in the current working directory.
+Any logs of a higher level than the setting are shown.
+The default is "http", which shows http, warn, and error output.
+
### logprefix
* Default: true on Posix, false on Windows
Space-separated options that limit the results from search.
+### searchsort
+
+* Default: "name"
+* Type: String
+* Values: "name", "-name", "date", "-date", "description",
+ "-description", "keywords", "-keywords"
+
+Indication of which field to sort search results by. Prefix with a `-`
+character to indicate reverse sort.
+
### shell
* Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
or a path to a folder.
Note that pretty much **everything in that folder will be exposed**
-by default. So, if you have secret stuff in there, use a `.npminclude`
-or `.npmignore` file to list out the globs to include/ignore, or publish
+by default. So, if you have secret stuff in there, use a
+`.npmignore` file to list out the globs to ignore, or publish
from a fresh checkout.
## Brag about it
Search the registry for packages matching the search terms.
-## CONFIGURATION
-
-### description
-
-* Default: true
-* Type: Boolean
-
-Show the description in `npm search`
-
-### searchopts
-
-* Default: ""
-* Type: String
-
-Space-separated options that are always passed to search.
-
-### searchexclude
-
-* Default: ""
-* Type: String
-
-Space-separated options that limit the results from search.
+If a term starts with `/`, then it's interpreted as a regular expression.
+A trailing `/` will be ignored in this case. (Note that many regular
+expression characters must be escaped or quoted in most shells.)
## SEE ALSO
<p>This function should not be used programmatically. Instead, just refer
to the <code>npm.bin</code> member.</p>
</div>
-<p id="footer">bin — npm@1.1.0-alpha-6</p>
+<p id="footer">bin — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>This command will launch a browser, so this command may not be the most
friendly for programmatic use.</p>
</div>
-<p id="footer">bugs — npm@1.1.0-alpha-6</p>
+<p id="footer">bugs — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/index.html">index(1)</a></li></ul>
</div>
-<p id="footer">commands — npm@1.1.0-alpha-6</p>
+<p id="footer">commands — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../api/npm.html">npm(3)</a></li></ul>
</div>
-<p id="footer">config — npm@1.1.0-alpha-6</p>
+<p id="footer">config — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../api/unpublish.html">unpublish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
</div>
-<p id="footer">deprecate — npm@1.1.0-alpha-6</p>
+<p id="footer">deprecate — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>This command will launch a browser, so this command may not be the most
friendly for programmatic use.</p>
</div>
-<p id="footer">docs — npm@1.1.0-alpha-6</p>
+<p id="footer">docs — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>Since this command opens an editor in a new process, be careful about where
and how this is used.</p>
</div>
-<p id="footer">edit — npm@1.1.0-alpha-6</p>
+<p id="footer">edit — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>The first element in the 'args' parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p>
</div>
-<p id="footer">explore — npm@1.1.0-alpha-6</p>
+<p id="footer">explore — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>The silent parameter is not neccessary not used, but it may in the future.</p>
</div>
-<p id="footer">help-search — npm@1.1.0-alpha-6</p>
+<p id="footer">help-search — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p><a href="../doc/json.html">json(1)</a></p>
</div>
-<p id="footer">init — npm@1.1.0-alpha-6</p>
+<p id="footer">init — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>Finally, 'callback' is a function that will be called when all packages have been
installed or when an error has been encountered.</p>
</div>
-<p id="footer">install — npm@1.1.0-alpha-6</p>
+<p id="footer">install — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>Now, any changes to the redis package will be reflected in
the package in the current working directory</p>
</div>
-<p id="footer">link — npm@1.1.0-alpha-6</p>
+<p id="footer">link — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>For a list of all the available command-line configs, see <code>npm help config</code></p>
</div>
-<p id="footer">load — npm@1.1.0-alpha-6</p>
+<p id="footer">load — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
This means that if a submodule a same dependency as a parent module, then the
dependency will only be output once.</p>
</div>
-<p id="footer">ls — npm@1.1.0-alpha-6</p>
+<p id="footer">ls — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<h2 id="VERSION">VERSION</h2>
-<p>1.1.0-alpha-6</p>
+<p>1.1.0-beta-2</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<pre><code>var cmd = npm.deref("unp") // cmd === "unpublish"</code></pre>
</div>
-<p id="footer">npm — npm@1.1.0-alpha-6</p>
+<p id="footer">npm — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>If the 'packages' parameter is left out, npm will check all packages.</p>
</div>
-<p id="footer">outdated — npm@1.1.0-alpha-6</p>
+<p id="footer">outdated — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
</div>
-<p id="footer">owner — npm@1.1.0-alpha-6</p>
+<p id="footer">owner — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>If no arguments are supplied, then npm packs the current package folder.</p>
</div>
-<p id="footer">pack — npm@1.1.0-alpha-6</p>
+<p id="footer">pack — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>This function is not useful programmatically</p>
</div>
-<p id="footer">prefix — npm@1.1.0-alpha-6</p>
+<p id="footer">prefix — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>Extraneous packages are packages that are not listed on the parent
package's dependencies list.</p>
</div>
-<p id="footer">prune — npm@1.1.0-alpha-6</p>
+<p id="footer">prune — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../api/owner.html">owner(3)</a></li></ul>
</div>
-<p id="footer">publish — npm@1.1.0-alpha-6</p>
+<p id="footer">publish — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>See <code>npm help build</code></p>
</div>
-<p id="footer">rebuild — npm@1.1.0-alpha-6</p>
+<p id="footer">rebuild — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
</div>
-<p id="footer">restart — npm@1.1.0-alpha-6</p>
+<p id="footer">restart — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>This function is not useful programmatically.</p>
</div>
-<p id="footer">root — npm@1.1.0-alpha-6</p>
+<p id="footer">root — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../api/test.html">test(3)</a></li><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/restart.html">restart(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
</div>
-<p id="footer">run-script — npm@1.1.0-alpha-6</p>
+<p id="footer">run-script — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
and doesn't try to read your mind (it doesn't do any verb tense matching or the
like).</p>
</div>
-<p id="footer">search — npm@1.1.0-alpha-6</p>
+<p id="footer">search — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>npm can run tests on multiple packages. Just specify multiple packages
in the <code>packages</code> parameter.</p>
</div>
-<p id="footer">start — npm@1.1.0-alpha-6</p>
+<p id="footer">start — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>npm can run stop on multiple packages. Just specify multiple packages
in the <code>packages</code> parameter.</p>
</div>
-<p id="footer">stop — npm@1.1.0-alpha-6</p>
+<p id="footer">stop — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li>npm help json</li><li>git help submodule</li></ul>
</div>
-<p id="footer">submodule — npm@1.1.0-alpha-6</p>
+<p id="footer">submodule — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
used. For more information about how to set this config, check
<code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p>
</div>
-<p id="footer">tag — npm@1.1.0-alpha-6</p>
+<p id="footer">tag — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>npm can run tests on multiple packages. Just specify multiple packages
in the <code>packages</code> parameter.</p>
</div>
-<p id="footer">test — npm@1.1.0-alpha-6</p>
+<p id="footer">test — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>Finally, 'callback' is a function that will be called when all packages have been
uninstalled or when an error has been encountered.</p>
</div>
-<p id="footer">uninstall — npm@1.1.0-alpha-6</p>
+<p id="footer">uninstall — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>If no version is specified, or if all versions are removed then
the root package entry is removed from the registry entirely.</p>
</div>
-<p id="footer">unpublish — npm@1.1.0-alpha-6</p>
+<p id="footer">unpublish — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>The 'packages' argument is an array of packages to update. The 'callback' parameter will be called when done or when an error occurs.</p>
</div>
-<p id="footer">update — npm@1.1.0-alpha-6</p>
+<p id="footer">update — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
parameter. The difference, however, is this function will fail if it does
not have exactly one element. The only element should be a version number.</p>
</div>
-<p id="footer">version — npm@1.1.0-alpha-6</p>
+<p id="footer">version — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>corresponding to the list of fields selected.</p>
</div>
-<p id="footer">view — npm@1.1.0-alpha-6</p>
+<p id="footer">view — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>This function is not useful programmatically</p>
</div>
-<p id="footer">whoami — npm@1.1.0-alpha-6</p>
+<p id="footer">whoami — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul>
</div>
-<p id="footer"><a href="../doc/README.html">README</a> — npm@1.1.0-alpha-6</p>
+<p id="footer"><a href="../doc/README.html">README</a> — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li></ul>
</div>
-<p id="footer">adduser — npm@1.1.0-alpha-6</p>
+<p id="footer">adduser — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
-<p id="footer">bin — npm@1.1.0-alpha-6</p>
+<p id="footer">bin — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/docs.html">docs(1)</a></li><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
</div>
-<p id="footer">bugs — npm@1.1.0-alpha-6</p>
+<p id="footer">bugs — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
</div>
-<p id="footer">build — npm@1.1.0-alpha-6</p>
+<p id="footer">build — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/install.html">install(1)</a></li></ul>
</div>
-<p id="footer">bundle — npm@1.1.0-alpha-6</p>
+<p id="footer">bundle — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li></ul>
</div>
-<p id="footer">cache — npm@1.1.0-alpha-6</p>
+<p id="footer">cache — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li></ul>
</div>
-<p id="footer">changelog — npm@1.1.0-alpha-6</p>
+<p id="footer">changelog — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
</div>
-<p id="footer">coding-style — npm@1.1.0-alpha-6</p>
+<p id="footer">coding-style — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
</div>
-<p id="footer">completion — npm@1.1.0-alpha-6</p>
+<p id="footer">completion — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>If false, never shows colors. If <code>"always"</code> then always shows colors.
If true, then only prints color codes for tty file descriptors.</p>
+<h3 id="coverage">coverage</h3>
+
+<ul><li>Default: false</li><li>Type: Boolean</li></ul>
+
+<p>A flag to tell test-harness to run with their coverage options enabled,
+if they respond to the <code>npm_config_coverage</code> environment variable.</p>
+
<h3 id="depth">depth</h3>
<ul><li>Default: Infinity</li><li>Type: Number</li></ul>
<h3 id="loglevel">loglevel</h3>
-<ul><li>Default: "warn"</li><li>Type: String</li><li>Values: "silent", "win", "error", "warn", "info", "verbose", "silly"</li></ul>
+<ul><li>Default: "http"</li><li>Type: String</li><li>Values: "silent", "win", "error", "warn", "http", "info", "verbose", "silly"</li></ul>
<p>What level of logs to report. On failure, <em>all</em> logs are written to
<code>npm-debug.log</code> in the current working directory.</p>
+<p>Any logs of a higher level than the setting are shown.
+The default is "http", which shows http, warn, and error output.</p>
+
<h3 id="logprefix">logprefix</h3>
<ul><li>Default: true on Posix, false on Windows</li><li>Type: Boolean</li></ul>
<p>Space-separated options that limit the results from search.</p>
+<h3 id="searchsort">searchsort</h3>
+
+<ul><li>Default: "name"</li><li>Type: String</li><li>Values: "name", "-name", "date", "-date", "description",
+"-description", "keywords", "-keywords"</li></ul>
+
+<p>Indication of which field to sort search results by. Prefix with a <code>-</code>
+character to indicate reverse sort.</p>
+
<h3 id="shell">shell</h3>
<ul><li>Default: SHELL environment variable, or "bash" on Posix, or "cmd" on
<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul>
</div>
-<p id="footer">config — npm@1.1.0-alpha-6</p>
+<p id="footer">config — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
</div>
-<p id="footer">deprecate — npm@1.1.0-alpha-6</p>
+<p id="footer">deprecate — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
or a path to a folder.</p>
<p>Note that pretty much <strong>everything in that folder will be exposed</strong>
-by default. So, if you have secret stuff in there, use a <code>.npminclude</code>
-or <code>.npmignore</code> file to list out the globs to include/ignore, or publish
+by default. So, if you have secret stuff in there, use a
+<code>.npmignore</code> file to list out the globs to ignore, or publish
from a fresh checkout.</p>
<h2 id="Brag-about-it">Brag about it</h2>
<ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
</div>
-<p id="footer">developers — npm@1.1.0-alpha-6</p>
+<p id="footer">developers — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul>
</div>
-<p id="footer">docs — npm@1.1.0-alpha-6</p>
+<p id="footer">docs — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/explore.html">explore(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
-<p id="footer">edit — npm@1.1.0-alpha-6</p>
+<p id="footer">edit — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/submodule.html">submodule(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/edit.html">edit(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
</div>
-<p id="footer">explore — npm@1.1.0-alpha-6</p>
+<p id="footer">explore — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul>
</div>
-<p id="footer">faq — npm@1.1.0-alpha-6</p>
+<p id="footer">faq — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li></ul>
</div>
-<p id="footer">folders — npm@1.1.0-alpha-6</p>
+<p id="footer">folders — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li></ul>
</div>
-<p id="footer">help-search — npm@1.1.0-alpha-6</p>
+<p id="footer">help-search — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/help-search.html">help-search(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul>
</div>
-<p id="footer">help — npm@1.1.0-alpha-6</p>
+<p id="footer">help — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p> Display npm username</p>
</div>
-<p id="footer">index — npm@1.1.0-alpha-6</p>
+<p id="footer">index — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/version.html">version(1)</a></li></ul>
</div>
-<p id="footer">init — npm@1.1.0-alpha-6</p>
+<p id="footer">init — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li></ul>
</div>
-<p id="footer">install — npm@1.1.0-alpha-6</p>
+<p id="footer">install — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/semver.html">semver(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/version.html">version(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li></ul>
</div>
-<p id="footer">json — npm@1.1.0-alpha-6</p>
+<p id="footer">json — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
-<p id="footer">link — npm@1.1.0-alpha-6</p>
+<p id="footer">link — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/update.html">update(1)</a></li></ul>
</div>
-<p id="footer">list — npm@1.1.0-alpha-6</p>
+<p id="footer">list — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<h2 id="VERSION">VERSION</h2>
-<p>1.1.0-alpha-6</p>
+<p>1.1.0-beta-2</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<ul><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/index.html">index(1)</a></li><li><a href="../api/npm.html">npm(3)</a></li></ul>
</div>
-<p id="footer">npm — npm@1.1.0-alpha-6</p>
+<p id="footer">npm — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul>
</div>
-<p id="footer">outdated — npm@1.1.0-alpha-6</p>
+<p id="footer">outdated — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
</div>
-<p id="footer">owner — npm@1.1.0-alpha-6</p>
+<p id="footer">owner — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
-<p id="footer">pack — npm@1.1.0-alpha-6</p>
+<p id="footer">pack — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
-<p id="footer">prefix — npm@1.1.0-alpha-6</p>
+<p id="footer">prefix — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
</div>
-<p id="footer">prune — npm@1.1.0-alpha-6</p>
+<p id="footer">prune — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li></ul>
</div>
-<p id="footer">publish — npm@1.1.0-alpha-6</p>
+<p id="footer">publish — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
</div>
-<p id="footer">rebuild — npm@1.1.0-alpha-6</p>
+<p id="footer">rebuild — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li></ul>
</div>
-<p id="footer">registry — npm@1.1.0-alpha-6</p>
+<p id="footer">registry — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/README.html">README</a></li><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li></ul>
</div>
-<p id="footer">removing-npm — npm@1.1.0-alpha-6</p>
+<p id="footer">removing-npm — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
</div>
-<p id="footer">restart — npm@1.1.0-alpha-6</p>
+<p id="footer">restart — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
-<p id="footer">root — npm@1.1.0-alpha-6</p>
+<p id="footer">root — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
</div>
-<p id="footer">run-script — npm@1.1.0-alpha-6</p>
+<p id="footer">run-script — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
</div>
-<p id="footer">scripts — npm@1.1.0-alpha-6</p>
+<p id="footer">scripts — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<p>Search the registry for packages matching the search terms.</p>
-<h2 id="CONFIGURATION">CONFIGURATION</h2>
-
-<h3 id="description">description</h3>
-
-<ul><li>Default: true</li><li>Type: Boolean</li></ul>
-
-<p>Show the description in <code>npm search</code></p>
-
-<h3 id="searchopts">searchopts</h3>
-
-<ul><li>Default: ""</li><li>Type: String</li></ul>
-
-<p>Space-separated options that are always passed to search.</p>
-
-<h3 id="searchexclude">searchexclude</h3>
-
-<ul><li>Default: ""</li><li>Type: String</li></ul>
-
-<p>Space-separated options that limit the results from search.</p>
+<p>If a term starts with <code>/</code>, then it's interpreted as a regular expression.
+A trailing <code>/</code> will be ignored in this case. (Note that many regular
+expression characters must be escaped or quoted in most shells.)</p>
<h2 id="SEE-ALSO">SEE ALSO</h2>
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/view.html">view(1)</a></li></ul>
</div>
-<p id="footer">search — npm@1.1.0-alpha-6</p>
+<p id="footer">search — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/json.html">json(1)</a></li></ul>
</div>
-<p id="footer">semver — npm@1.1.0-alpha-6</p>
+<p id="footer">semver — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
</div>
-<p id="footer">star — npm@1.1.0-alpha-6</p>
+<p id="footer">star — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
</div>
-<p id="footer">start — npm@1.1.0-alpha-6</p>
+<p id="footer">start — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li></ul>
</div>
-<p id="footer">stop — npm@1.1.0-alpha-6</p>
+<p id="footer">stop — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/json.html">json(1)</a></li><li>git help submodule</li></ul>
</div>
-<p id="footer">submodule — npm@1.1.0-alpha-6</p>
+<p id="footer">submodule — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
-<p id="footer">tag — npm@1.1.0-alpha-6</p>
+<p id="footer">tag — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul>
</div>
-<p id="footer">test — npm@1.1.0-alpha-6</p>
+<p id="footer">test — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul>
</div>
-<p id="footer">uninstall — npm@1.1.0-alpha-6</p>
+<p id="footer">uninstall — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li></ul>
</div>
-<p id="footer">unpublish — npm@1.1.0-alpha-6</p>
+<p id="footer">unpublish — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul>
</div>
-<p id="footer">update — npm@1.1.0-alpha-6</p>
+<p id="footer">update — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/semver.html">semver(1)</a></li></ul>
</div>
-<p id="footer">version — npm@1.1.0-alpha-6</p>
+<p id="footer">version — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/search.html">search(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/docs.html">docs(1)</a></li></ul>
</div>
-<p id="footer">view — npm@1.1.0-alpha-6</p>
+<p id="footer">view — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
<ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul>
</div>
-<p id="footer">whoami — npm@1.1.0-alpha-6</p>
+<p id="footer">whoami — npm@1.1.0-beta-2</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
, ini = require("./utils/ini.js")
, log = require("./utils/log.js")
, npm = require("./npm.js")
- , prompt = require("./utils/prompt.js")
+ , read = require("read")
, promiseChain = require("./utils/promise-chain.js")
, crypto
, changed = false
promiseChain(cb)
- (prompt, ["Username: ", u.u], function (un) {
+ (read, [{prompt: "Username: ", default: u.u}], function (un) {
changed = u.u !== un
u.u = un
})
(function (cb) {
if (u.p && !changed) return cb(null, u.p)
- prompt("Password: ", u.p, true, cb)
+ read({prompt: "Password: ", default: u.p, silent: true}, cb)
}, [], function (pw) { u.p = pw })
- (prompt, ["Email: ", u.e], function (em) { u.e = em })
+ (read, [{prompt: "Email: ", default: u.e}], function (em) { u.e = em })
(function (cb) {
if (changed) npm.config.del("_auth")
registry.adduser(u.u, u.p, u.e, function (er) {
var bugs = d.bugs
, repo = d.repository || d.repositories
if (bugs) {
- if (typeof bugs === "string") return open(bugs, cb)
- if (bugs.url) return open(bugs.url, cb)
+ if (typeof bugs === "string") return open(bugs, cb)
+ if (bugs.url) return open(bugs.url, cb)
}
if (repo) {
if (Array.isArray(repo)) repo = repo.shift()
return cb(er, data)
}
- if (forceBypass
- && (npm.config.get("force")
- || process.platform === "cygwin")) {
+ if (forceBypass && npm.config.get("force")) {
log.verbose(true, "force found, skipping cache")
return addNamed(name, ver, c)
}
// name@blah thing.
var inFlightNames = {}
function addNamed (name, x, cb_) {
- log.info([name, x], "addNamed")
+ log.verbose([name, x], "addNamed")
var k = name + "@" + x
if (!inFlightNames[k]) inFlightNames[k] = []
var iF = inFlightNames[k]
engineFilter(data)
if (data["dist-tags"] && data["dist-tags"][tag]
&& data.versions[data["dist-tags"][tag]]) {
- return addNameVersion(name, data["dist-tags"][tag], cb)
+ var ver = data["dist-tags"][tag]
+ return addNameVersion(name, ver, data.versions[ver], cb)
}
if (!explicit && Object.keys(data.versions).length) {
- return addNameRange(name, "*", cb)
+ return addNameRange(name, "*", data, cb)
}
return cb(installTargetsError(tag, data))
})
})
}
-function addNameRange (name, range, cb) {
+function addNameRange (name, range, data, cb) {
+ if (typeof cb !== "function") cb = data, data = null
+
range = semver.validRange(range)
if (range === null) return cb(new Error(
"Invalid version range: "+range))
- registry.get(name, function (er, data, json, response) {
+
+ log.silly([name, range, !!data], "name, range, hasData")
+
+ if (data) return next()
+ registry.get(name, function (er, d, json, response) {
if (er) return cb(er)
+ data = d
+ next()
+ })
+
+ function next () {
+ log.silly([name, range, !!data], "name, range, hasData 2")
engineFilter(data)
+
+ if (npm.config.get("registry")) return next_()
+
+ cachedFilter(data, range, function (er) {
+ if (er) return cb(er)
+ if (Object.keys(data.versions).length === 0) {
+ return cb(new Error( "Can't fetch, and not cached: "
+ + data.name + "@" + range))
+ }
+ next_()
+ })
+ }
+
+ function next_ () {
+ log.silly([data.name, Object.keys(data.versions)], "versions")
// if the tagged version satisfies, then use that.
var tagged = data["dist-tags"][npm.config.get("tag")]
if (tagged && data.versions[tagged] && semver.satisfies(tagged, range)) {
- return addNameVersion(name, tagged, cb)
+ return addNameVersion(name, tagged, data.versions[tagged], cb)
}
+
// find the max satisfying version.
var ms = semver.maxSatisfying(Object.keys(data.versions || {}), range)
if (!ms) {
return cb(installTargetsError(range, data))
}
- addNameVersion(name, ms, cb)
+
+ // if we don't have a registry connection, try to see if
+ // there's a cached copy that will be ok.
+ addNameVersion(name, ms, data.versions[ms], cb)
+ }
+}
+
+// filter the versions down based on what's already in cache.
+function cachedFilter (data, range, cb) {
+ log.silly(data.name, "cachedFilter")
+ ls_(data.name, 1, function (er, files) {
+ if (er) return log.er(cb, "Not in cache, can't fetch: "+data.name)(er)
+ files = files.map(function (f) {
+ return path.basename(f.replace(/(\\|\/)$/, ""))
+ }).filter(function (f) {
+ return semver.valid(f) && semver.satisfies(f, range)
+ })
+
+ if (files.length === 0) {
+ return cb(new Error("Not in cache, can't fetch: "+data.name+"@"+range))
+ }
+
+ log.silly([data.name, files], "cached")
+ Object.keys(data.versions).forEach(function (v) {
+ if (files.indexOf(v) === -1) delete data.versions[v]
+ })
+
+ if (Object.keys(data.versions).length === 0) {
+ return log.er(cb, "Not in cache, can't fetch: "+data.name)(er)
+ }
+
+ log.silly([data.name, Object.keys(data.versions)], "filtered")
+ cb(null, data)
})
}
+ requested + "\n" + targets)
}
-function addNameVersion (name, ver, cb) {
+function addNameVersion (name, ver, data, cb) {
+ if (typeof cb !== "function") cb = data, data = null
+
ver = semver.valid(ver)
if (ver === null) return cb(new Error("Invalid version: "+ver))
- registry.get(name, ver, function (er, data, json, response) {
+
+ var response
+
+ if (data) {
+ response = null
+ return next()
+ }
+ registry.get(name, ver, function (er, d, json, resp) {
if (er) return cb(er)
+ data = d
+ response = resp
+ next()
+ })
+
+ function next () {
deprCheck(data)
var dist = data.dist
if (!dist.tarball) return cb(new Error(
"No dist.tarball in " + data._id + " package"))
- if (response.statusCode !== 304 || npm.config.get("force")
- || process.platform === "cygwin") {
+ if ((response && response.statusCode !== 304) || npm.config.get("force")) {
return fetchit()
}
})
function fetchit () {
+ if (!npm.config.get("registry")) {
+ return cb(new Error("Cannot fetch: "+dist.tarball))
+ }
+
// use the same protocol as the registry.
// https registry --> https tarballs.
var tb = url.parse(dist.tarball)
, name+"-"+ver
, cb )
}
- })
+ }
}
function addLocal (p, name, cb_) {
module.exports = init
-var prompt = require("./utils/prompt.js")
+var read = require("read")
, path = require("path")
, readJson = require("./utils/read-json.js")
, fs = require("graceful-fs")
,""
].join("\n"))
promiseChain(cb)
- ( prompt
- , ["Package name: ", defaultName(folder, data)]
+ ( read
+ , [{prompt: "Package name: ", default: defaultName(folder, data)}]
, function (n) { data.name = n }
)
- ( prompt
- , ["Description: ", data.description]
+ ( read
+ , [{prompt: "Description: ", default: data.description}]
, function (d) { data.description = d }
)
( defaultVersion, [folder, data], function (v) { data.version = v } )
(function (cb) {
- prompt("Package version: ", data.version, function (er, v) {
+ read( { prompt: "Package version: ", default: data.version }
+ , function (er, v) {
if (er) return cb(er)
data.version = v
cb()
})
}, [])
- ( prompt
- , ["Project homepage: ", data.homepage || data.url || "none"]
+ ( read
+ , [ { prompt: "Project homepage: "
+ , default: data.homepage || data.url || "none" } ]
, function (u) {
if (u === "none") return
data.homepage = u
)
( defaultRepo, [folder, data], function (r) { data.repository = r } )
(function (cb) {
- prompt( "Project git repository: "
- , data.repository && data.repository.url || "none"
- , function (er, r) {
- if (er) return cb(er)
- if (r !== "none") {
- data.repository = (data.repository || {}).url = r
- }
- cb()
+ read( { prompt: "Project git repository: "
+ , default: data.repository && data.repository.url || "none" }
+ , function (er, r) {
+ if (er) return cb(er)
+ if (r !== "none") {
+ data.repository = (data.repository || {}).url = r
}
- )
+ cb()
+ }
+ )
}, [])
- ( prompt
- , ["Author name: ", data.author && data.author.name]
+ ( read
+ , [{ prompt: "Author name: ", default: data.author && data.author.name }]
, function (n) {
if (!n) return
(data.author = data.author || {}).name = n
}
)
- ( prompt
- , ["Author email: ", data.author && data.author.email || "none"]
+ ( read
+ , [ { prompt: "Author email: "
+ , default: data.author && data.author.email || "none" } ]
, function (n) {
if (n === "none") return
(data.author = data.author || {}).email = n
}
)
- ( prompt
- , ["Author url: ", data.author && data.author.url || "none"]
+ ( read
+ , [ { prompt: "Author url: "
+ , default: data.author && data.author.url || "none" } ]
, function (n) {
if (n === "none") return
(data.author = data.author || {}).url = n
}
)
- ( prompt
- , ["Main module/entry point: ", data.main || "none"]
+ ( read
+ , [ { prompt: "Main module/entry point: ", default: data.main || "none" } ]
, function (m) {
if (m === "none") {
delete data.main
data.main = m
}
)
- ( prompt
- , ["Test command: ", data.scripts && data.scripts.test || "none"]
+ ( read
+ , [ { prompt: "Test command: "
+ , default: data.scripts && data.scripts.test || "none" } ]
, function (t) {
if (t === "none") return
(data.scripts = data.scripts || {}).test = t
}
)
- ( prompt
- , [ "What versions of node does it run on? "
- , data.engines && data.engines.node
- || (eng)
- ]
+ ( read
+ , [ { prompt: "What versions of node does it run on? "
+ , default: data.engines && data.engines.node || (eng) } ]
, function (nodever) {
(data.engines = data.engines || {}).node = nodever
}
output.write(msg, cb)
})
(function (cb) {
- prompt("\nIs this ok? ", "yes", function (er, ok) {
+ read({ prompt: "\nIs this ok? ", default: "yes" }, function (er, ok) {
if (er) return cb(er)
if (ok.toLowerCase().charAt(0) !== "y") {
return cb(new Error("cancelled"))
// cache.unpack returns the data object, and all we care about
// is the list of installed packages from that last thing.
if (!er) return cb_(er, data)
- log.error(er, "error installing "+target._id)
+ log.error(target._id,"error installing")
if (false === npm.config.get("rollback")) return cb_(er)
npm.commands.unbuild([targetFolder], function (er2) {
if (er2) log.error(er2, "error rolling back "+target._id)
}
-process.title = "npm"
-
-
// FIXME there really ought to be a path.split in node core
require("path").SPLIT_CHAR = process.platform === "win32" ? "\\" : "/"
, plumbing = [ "build"
, "unbuild"
, "xmas"
+ , "substack"
]
, fullList = npm.fullList = cmdList.concat(aliasNames).filter(function (c) {
return plumbing.indexOf(c) === -1
, path = require("path")
, npm = require("./npm.js")
, output = require("./utils/output.js")
+ , asyncMap = require("slide").asyncMap
+ , fs = require("graceful-fs")
+ , exec = require("./utils/exec.js")
rebuild.usage = "npm rebuild [<name>[@<version>] [name[@<version>] ...]]"
})
if (!folders.length) return cb()
log.silly(folders, "rebuild set")
+ cleanBuild(folders, set, cb)
+ })
+}
+
+function cleanBuild (folders, set, cb) {
+ // https://github.com/isaacs/npm/issues/1872
+ // If there's a makefile, try 'make clean'
+ // If there's a wscript, try 'node-waf clean'
+ // But don't die on either of those if they fail.
+ // Just a best-effort kind of deal.
+ asyncMap(folders, function (f, cb) {
+ fs.readdir(f, function (er, files) {
+ // everything should be a dir.
+ if (er) return cb(er)
+ if (files.indexOf("wscript") !== -1) {
+ exec("node-waf", ["clean"], null, false, f, thenBuild)
+ } else if (files.indexOf("Makefile") !== -1) {
+ exec("make", ["clean"], null, false, f, thenBuild)
+ } else thenBuild()
+ })
+ function thenBuild (er) {
+ // ignore error, just continue
+ // it could be that it's not configured yet or whatever.
+ cb()
+ }
+ }, function (er) {
+ if (er) return cb(er)
npm.commands.build(folders, function (er) {
if (er) return cb(er)
output.write(folders.map(function (f) {
}
function stripData (data) {
- return { name:data.name
- , description:npm.config.get("description") ? data.description : ""
- , maintainers:(data.maintainers || []).map(function (m) {
+ return { name: data.name
+ , description: npm.config.get("description") ? data.description : ""
+ , maintainers: (data.maintainers || []).map(function (m) {
return "=" + m.name
})
- , url:!Object.keys(data.versions || {}).length ? data.url : null
- , keywords:data.keywords || []
+ , url: !Object.keys(data.versions || {}).length ? data.url : null
+ , keywords: data.keywords || []
+ , time: data.time
+ && data.time.modified
+ && (new Date(data.time.modified).toISOString()
+ .split("T").join(" ")
+ .replace(/:[0-9]{2}\.[0-9]{3}Z$/, ""))
+ || "(prehistoric)"
}
}
function filterWords (data, args, notArgs) {
var words = data.words
for (var i = 0, l = args.length; i < l; i ++) {
- if (words.indexOf(args[i]) === -1) {
- return false
- }
+ if (!match(words, args[i])) return false
}
for (var i = 0, l = notArgs.length; i < l; i ++) {
- if (words.indexOf(notArgs[i]) !== -1) return false
+ if (match(words, notArgs[i])) return false
}
return true
}
+function match (words, arg) {
+ if (arg.charAt(0) === "/") {
+ arg = arg.replace(/\/$/, "")
+ arg = new RegExp(arg.substr(1, arg.length - 1))
+ return words.match(arg)
+ }
+ return words.indexOf(arg) !== -1
+}
+
function prettify (data, args) {
try {
var tty = require("tty")
// name, desc, author, keywords
var longest = []
, spaces
- , maxLen = [20, 60, 20, Infinity]
- , headings = ["NAME", "DESCRIPTION", "AUTHOR", "KEYWORDS"]
+ , maxLen = npm.config.get("description")
+ ? [20, 60, 20, 20, Infinity]
+ : [20, 20, 20, Infinity]
+ , headings = npm.config.get("description")
+ ? ["NAME", "DESCRIPTION", "AUTHOR", "DATE", "KEYWORDS"]
+ : ["NAME", "AUTHOR", "DATE", "KEYWORDS"]
, lines
+ , searchsort = (npm.config.get("searchsort") || "NAME").toLowerCase()
+ , sortFields = { name: 0
+ , description: 1
+ , author: 2
+ , date: 3
+ , keywords: 4 }
+ , searchRev = searchsort.charAt(0) === "-"
+ , sortField = sortFields[searchsort.replace(/^\-+/, "")]
lines = Object.keys(data).map(function (d) {
return data[d]
- }).filter(function (data) {
- return data.name
}).map(function (data) {
// turn a pkg data into a string
// [name,who,desc,targets,keywords] tuple
var l = [ data.name
, data.description || ""
, data.maintainers.join(" ")
+ , data.time
, (data.keywords || []).join(" ")
]
l.forEach(function (s, i) {
l[i] = l[i].replace(/\s+/g, " ")
})
return l
+ }).sort(function (a, b) {
+ // a and b are "line" objects of [name, desc, maint, time, kw]
+ var aa = a[sortField].toLowerCase()
+ , bb = b[sortField].toLowerCase()
+ return aa === bb ? 0
+ : aa < bb ? (searchRev ? 1 : -1)
+ : (searchRev ? -1 : 1)
}).map(function (line) {
return line.map(function (s, i) {
spaces = spaces || longest.map(function (n) {
}
return s + spaces[i].substr(len)
}).join(" ").substr(0, cols).trim()
- }).sort(function (a, b) {
- return a === b ? 0 : a > b ? 1 : -1
}).map(function (line) {
// colorize!
args.forEach(function (arg, i) {
var m = i % cl + 1
, markStart = String.fromCharCode(m)
, markEnd = String.fromCharCode(0)
- , pieces = str.toLowerCase().split(arg.toLowerCase())
+
+ if (arg.charAt(0) === "/") {
+ //arg = arg.replace(/\/$/, "")
+ return str.replace( new RegExp(arg.substr(1, arg.length - 1), "gi")
+ , function (bit) { return markStart + bit + markEnd } )
+
+ }
+
+ // just a normal string, do the split/map thing
+ var pieces = str.toLowerCase().split(arg.toLowerCase())
, p = 0
+
return pieces.map(function (piece, i) {
piece = str.substr(p, piece.length)
var mark = markStart
p += piece.length + arg.length
return piece + mark
}).join("")
- return str.split(arg).join(mark)
}
+
function colorize (line) {
for (var i = 0; i < cl; i ++) {
var m = i + 1
--- /dev/null
+module.exports = substack
+var npm = require("./npm.js")
+ , log = require("./utils/log.js")
+
+function substack (args, cb) {
+ console.log("\033[32mbeep \033[35mboop\033[m")
+ var c = args.shift()
+ if (c) npm.commands[c](args, cb)
+ else cb()
+}
}
function unpublish (args, cb) {
+
+ if (args.length > 1) return cb(unpublish.usage)
+
var thing = args.length ? args.shift().split("@") : []
, project = thing.shift()
, version = thing.join("@")
+ if (!version && !npm.config.get("force")) {
+ return cb("Refusing to delete entire project.\n"
+ +"Run with --force to do this.\n"
+ +unpublish.usage)
+ }
+
if (!project || path.resolve(project) === npm.prefix) {
// if there's a package.json in the current folder, then
// read the package name and version out of that.
: path.resolve( home || temp, ".npm")
, color : process.platform !== "win32" || winColor
+ , coverage: false
, depth: Infinity
, description : true
, dev : false
, "init.author.url" : ""
, link: false
, logfd : 2
- , loglevel : "warn"
+ , loglevel : "http"
, logprefix : process.platform !== "win32" || winColor
, long : false
, message : "%s"
, save : false
, searchopts: ""
, searchexclude: null
+ , searchsort: "name"
, shell : process.platform === "win32"
? process.env.ComSpec || "cmd"
: process.env.SHELL || "bash"
, ca: [null, String]
, cache : path
, color : ["always", Boolean]
+ , coverage: Boolean
, depth : Number
, description : Boolean
, dev : Boolean
, "init.author.url" : ["", url]
, link: Boolean
, logfd : [Number, Stream]
- , loglevel : ["silent","win","error","warn","info","verbose","silly"]
+ , loglevel : ["silent","win","error","warn","http","info","verbose","silly"]
, logprefix : Boolean
, long : Boolean
, message: String
, save : Boolean
, searchopts : String
, searchexclude: [null, String]
+ , searchsort: [ "name", "-name"
+ , "description", "-description"
+ , "author", "-author"
+ , "date", "-date"
+ , "keywords", "-keywords" ]
, shell : String
, "strict-ssl": Boolean
, tag : String
// chop the filename down to be relative to excludeDir
var rf = relativize(file, dir, true)
- rf = rf.replace(/^\.\//, "")
+ rf = rf.replace(/^\.?\//, "")
for (var ii = 0, ll = excludes.length; ii < ll; ii ++) {
//log.warn(JSON.stringify(excludes[ii]), "ex")
function fetch (remote, local, headers, cb) {
if (typeof cb !== "function") cb = headers, headers = {}
- log.info(remote, "fetch")
log.verbose(local, "fetch to")
mkdir(path.dirname(local), function (er) {
if (er) return cb(er)
function makeRequest (remote, fstr, headers) {
remote = url.parse(remote)
+ log.http(remote.href, "GET")
regHost = regHost || url.parse(npm.config.get("registry")).host
if (remote.host === regHost && npm.config.get("always-auth")) {
request({ url: remote
, proxy: proxy
, agent: getAgent(remote)
- , strictSSL: npm.config.get("strict-ssl") }).pipe(fstr)
+ , strictSSL: npm.config.get("strict-ssl")
+ , onResponse: onResponse }).pipe(fstr)
+ function onResponse (er, res) {
+ if (er) return cb(er)
+ log.http(res.statusCode + " " + remote.href)
+ }
}
, url = require("url")
, agents = {}
, isHttp2 = !!require("http").globalAgent
- , registry = url.parse(npm.config.get("registry"))
+ , registry = url.parse(npm.config.get("registry") || "")
, regCA = npm.config.get("ca")
function getAgent (remote) {
Object.keys(env)
.filter(function (k) { return k.match(/^npm_config_[^_]/i) })
.forEach(function (k) {
+ if (!env[k]) return
+
conf[k.replace(/^npm_config_/i, "")
.toLowerCase()
.replace(/_/g, "-")] = parseField(env[k], k)
if (i.charAt(0) === "_" && i.indexOf("_"+namePref) !== 0) {
return
}
- var value = String(ini.get(i))
+ var value = ini.get(i)
+ if (!value) value = ""
+ else if (typeof value !== "string") value = JSON.stringify(value)
+
value = -1 !== value.indexOf("\n")
? JSON.stringify(value)
: value
-/*
-log levels:
-0,1,2,3
-verbose,info,warn,error
-
-Default setting for logs is "info"
-Default setting to show is "info"
-
-Possible values of level/loglevel:
-silly,verbose,info,warn,error,win,silent
-
-silent quiets everything
-
-
-*/
-
-
module.exports = log
var output = require("./output.js")
, LEVEL = { silly : l++
, verbose : l++
, info : l++
+ , "http" : l++
, WARN : l++
, "ERR!" : l++
, ERROR : "ERR!"
COLOR[LEVEL.silly] = 30
COLOR[LEVEL.verbose] = "34;40"
COLOR[LEVEL.info] = 32
+COLOR[LEVEL.http] = "32;40"
COLOR[LEVEL.warn] = "30;41"
COLOR[LEVEL.error] = "31;40"
for (var c in COLOR) COLOR[LEVEL[c]] = COLOR[c]
}
GET(uri, etag, nofollow, function (er, remoteData, raw, response) {
+ // if we get an error talking to the registry, but we have it
+ // from the cache, then just pretend we got it.
+ if (er && cache) {
+ er = null
+ response = {statusCode: 304}
+ }
+
if (response) {
log.silly([response.statusCode, response.headers], "get cb")
if (response.statusCode === 304 && etag) {
}
data = remoteData
+ if (!data) {
+ er = new Error("failed to fetch from registry: " + uri)
+ }
+
if (er) return cb(er, data, raw, response)
// just give the write the old college try. if it fails, whatever.
, url = require("url")
function publish (data, prebuilt, readme, cb) {
- if (typeof readme === "function") cb = readme, readme = null
+ if (typeof readme === "function") cb = readme, readme = ""
if (typeof prebuilt === "function") cb = prebuilt, prebuilt = null
// add the dist-url to the data, pointing at the tarball.
// if the {name} isn't there, then create it.
var registry = reg()
if (registry instanceof Error) return cb(registry)
+ readme = readme ? "" + readme : ""
+
var fullData =
{ _id : data.name
, name : data.name
, description : data.description
, "dist-tags" : {}
, versions : {}
- , readme: readme ? "" + readme : null
+ , readme: readme
, maintainers :
[ { name : npm.config.get("username")
, email : npm.config.get("email")
})
}
+ // this way, it'll also get attached to packages that were previously
+ // published with a version of npm that lacked this feature.
+ if (!fullData.readme) {
+ data.readme = readme
+ }
PUT(dataURI, data, function (er) {
if (er) {
if (er.message.indexOf("conflict Document update conflict.") === 0) {
if (typeof cb_ !== "function") cb_ = etag, etag = null
if (typeof cb_ !== "function") cb_ = what, what = null
- log.verbose(where||"/", method)
-
// Since there are multiple places where an error could occur,
// don't let the cb be called more than once.
var errState = null
opts.followRedirect = false
}
+ log.http(remote.href || "/", method)
+
var req = request(opts, requestDone(method, where, cb))
var r = npm.config.get("registry")
if (!r) {
function requestDone (method, where, cb) { return function (er, response, data) {
if (er) return cb(er)
+ log.http(response.statusCode + " " + url.parse(where).href)
+
var parsed
if (Buffer.isBuffer(data)) {
+++ /dev/null
-
-module.exports = prompt
-
-var log = require("./log.js")
- , buffer = ""
- , tty = require("tty")
-
-function prompt (p, def, silent, cb) {
- if (!cb) cb = silent, silent = false
- if (!cb) cb = def, def = null
- if (def) p += "("+(silent ? "<hidden>" : def)+") "
- var r = (silent ? silentRead : read).bind(null, def, cb)
- if (!process.stdout.write(p)) process.stdout.on("drain", function D () {
- process.stdout.removeListener("drain", D)
- r()
- })
- else r()
-}
-
-function read (def, cb) {
- var stdin = process.openStdin()
- , val = ""
- stdin.resume()
- stdin.setEncoding("utf8")
- stdin.on("error", cb)
- stdin.on("data", function D (chunk) {
- val += buffer + chunk
- buffer = ""
- val = val.replace(/\r/g, '')
- if (val.indexOf("\n") !== -1) {
- if (val !== "\n") val = val.replace(/^\n+/, "")
- buffer = val.substr(val.indexOf("\n"))
- val = val.substr(0, val.indexOf("\n"))
- stdin.pause()
- stdin.removeListener("data", D)
- stdin.removeListener("error", cb)
- val = val.trim() || def
- cb(null, val)
- }
- })
-}
-
-function silentRead (def, cb) {
- var stdin = process.openStdin()
- , val = ""
- tty.setRawMode(true)
- stdin.resume()
- stdin.on("error", cb)
- stdin.on("data", function D (c) {
- c = "" + c
- switch (c) {
- case "\n": case "\r": case "\r\n": case "\u0004":
- tty.setRawMode(false)
- stdin.removeListener("data", D)
- stdin.removeListener("error", cb)
- val = val.trim() || def
- process.stdout.write("\n")
- stdin.pause()
- return cb(null, val)
- case "\u0003": case "\0":
- return cb("cancelled")
- break
- default:
- val += buffer + c
- buffer = ""
- break
- }
- })
-}
function pack (targetTarball, folder, pkg, dfc, cb) {
if (typeof cb !== "function") cb = dfc, dfc = true
- folder = path.resolve(process.cwd(), folder)
+ folder = path.resolve(folder)
+
+ log.verbose(folder, "pack")
+
if (typeof pkg === "function") {
cb = pkg, pkg = null
return readJson(path.resolve(folder, "package.json"), function (er, pkg) {
// being installed from some wackey vm-mounted
// read-only filesystem.
this.props.mode = this.props.mode | 0200
- return -1 !== files.indexOf(this.path)
+ var inc = -1 !== files.indexOf(this.path)
+
+ // WARNING! Hackety hack!
+ // XXX Fix this in a better way.
+ // Rename .gitignore to .npmignore if there is not a
+ // .npmignore file there already, the better to lock
+ // down installed packages with git for deployment.
+ if (this.basename === ".gitignore") {
+ if (this.parent._entries.indexOf(".npmignore") !== -1) {
+ return false
+ }
+ var d = path.dirname(this.path)
+ this.basename = ".npmignore"
+ this.path = path.join(d, ".npmignore")
+ }
+ return inc
}
})
.on("error", log.er(cb, "error reading "+parent))
If false, never shows colors\. If \fB"always"\fR then always shows colors\.
If true, then only prints color codes for tty file descriptors\.
.
+.SS "coverage"
+.
+.IP "\(bu" 4
+Default: false
+.
+.IP "\(bu" 4
+Type: Boolean
+.
+.IP "" 0
+.
+.P
+A flag to tell test\-harness to run with their coverage options enabled,
+if they respond to the \fBnpm_config_coverage\fR environment variable\.
+.
.SS "depth"
.
.IP "\(bu" 4
.SS "loglevel"
.
.IP "\(bu" 4
-Default: "warn"
+Default: "http"
.
.IP "\(bu" 4
Type: String
.
.IP "\(bu" 4
-Values: "silent", "win", "error", "warn", "info", "verbose", "silly"
+Values: "silent", "win", "error", "warn", "http", "info", "verbose", "silly"
.
.IP "" 0
.
.P
What level of logs to report\. On failure, \fIall\fR logs are written to \fBnpm\-debug\.log\fR in the current working directory\.
.
+.P
+Any logs of a higher level than the setting are shown\.
+The default is "http", which shows http, warn, and error output\.
+.
.SS "logprefix"
.
.IP "\(bu" 4
.P
Space\-separated options that limit the results from search\.
.
+.SS "searchsort"
+.
+.IP "\(bu" 4
+Default: "name"
+.
+.IP "\(bu" 4
+Type: String
+.
+.IP "\(bu" 4
+Values: "name", "\-name", "date", "\-date", "description",
+"\-description", "keywords", "\-keywords"
+.
+.IP "" 0
+.
+.P
+Indication of which field to sort search results by\. Prefix with a \fB\-\fR
+character to indicate reverse sort\.
+.
.SS "shell"
.
.IP "\(bu" 4
.
.P
Note that pretty much \fBeverything in that folder will be exposed\fR
-by default\. So, if you have secret stuff in there, use a \fB\|\.npminclude\fR
-or \fB\|\.npmignore\fR file to list out the globs to include/ignore, or publish
+by default\. So, if you have secret stuff in there, use a \fB\|\.npmignore\fR file to list out the globs to ignore, or publish
from a fresh checkout\.
.
.SH "Brag about it"
.fi
.
.SH "VERSION"
-1.1.0-alpha-6
+1.1.0-beta-2
.
.SH "DESCRIPTION"
npm is the package manager for the Node JavaScript platform\. It puts
.SH "DESCRIPTION"
Search the registry for packages matching the search terms\.
.
-.SH "CONFIGURATION"
-.
-.SS "description"
-.
-.IP "\(bu" 4
-Default: true
-.
-.IP "\(bu" 4
-Type: Boolean
-.
-.IP "" 0
-.
-.P
-Show the description in \fBnpm search\fR
-.
-.SS "searchopts"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
-.P
-Space\-separated options that are always passed to search\.
-.
-.SS "searchexclude"
-.
-.IP "\(bu" 4
-Default: ""
-.
-.IP "\(bu" 4
-Type: String
-.
-.IP "" 0
-.
.P
-Space\-separated options that limit the results from search\.
+If a term starts with \fB/\fR, then it\'s interpreted as a regular expression\.
+A trailing \fB/\fR will be ignored in this case\. (Note that many regular
+expression characters must be escaped or quoted in most shells\.)
.
.SH "SEE ALSO"
.
.fi
.
.SH "VERSION"
-1.1.0-alpha-6
+1.1.0-beta-2
.
.SH "DESCRIPTION"
This is the API documentation for npm\.
--- /dev/null
+node_modules/
--- /dev/null
+language: node_js
+node_js:
+ - 0.4
+ - 0.6
+++ /dev/null
-var bench = require("bench")
-
-var l = 1000
- , FastList = require("./fast-list.js")
-
-exports.countPerLap = l * 2
-
-exports.compare =
- { "[]": function () {
- var list = []
- for (var j = 0; j < l; j ++) {
- if (j % 2) list.push(j)
- else list.unshift(j)
- }
- for (var j = 0; j < l; j ++) {
- if (j % 2) list.shift(j)
- else list.pop(j)
- }
- }
- , "new Array()": function () {
- var list = new Array()
- for (var j = 0; j < l; j ++) {
- if (j % 2) list.push(j)
- else list.unshift(j)
- }
- for (var j = 0; j < l; j ++) {
- if (j % 2) list.shift(j)
- else list.pop(j)
- }
- }
- // , "FastList()": function () {
- // var list = FastList()
- // for (var j = 0; j < l; j ++) {
- // if (j % 2) list.push(j)
- // else list.unshift(j)
- // }
- // for (var j = 0; j < l; j ++) {
- // if (j % 2) list.shift(j)
- // else list.pop(j)
- // }
- // }
- , "new FastList()": function () {
- var list = new FastList()
- for (var j = 0; j < l; j ++) {
- if (j % 2) list.push(j)
- else list.unshift(j)
- }
- for (var j = 0; j < l; j ++) {
- if (j % 2) list.shift(j)
- else list.pop(j)
- }
- }
- }
-
-bench.runMain()
--- /dev/null
+.*.swp
+examples/deep-copy
+node_modules/
--- /dev/null
+language: node_js
+node_js:
+ - 0.6
return me.once("resume", EMITCHILD)
}
- me.emit("entry", entry)
- me.emit("child", entry)
+ // skip over sockets. they can't be piped around properly,
+ // so there's really no sense even acknowledging them.
+ // if someone really wants to see them, they can listen to
+ // the "socket" events.
+ if (entry.type === "Socket") {
+ me.emit("socket", entry)
+ } else {
+ me.emit("entry", entry)
+ me.emit("child", entry)
+ }
})
var ended = false
var DirReader = require("./dir-reader.js")
, FileReader = require("./file-reader.js")
, LinkReader = require("./link-reader.js")
+ , SocketReader = require("./socket-reader.js")
, ProxyReader = require("./proxy-reader.js")
function Reader (props, currentStat) {
ClassType = LinkReader
break
+ case "Socket":
+ ClassType = SocketReader
+ break
+
case null:
ClassType = ProxyReader
break
}
Reader.prototype._read = function () {
- me.warn("Cannot read unknown type: "+me.type)
+ this.error("Cannot read unknown type: "+this.type)
}
--- /dev/null
+// Just get the stats, and then don't do anything.
+// You can't really "read" from a socket. You "connect" to it.
+// Mostly, this is here so that reading a dir with a socket in it
+// doesn't blow up.
+
+module.exports = SocketReader
+
+var fs = require("graceful-fs")
+ , fstream = require("../fstream.js")
+ , inherits = require("inherits")
+ , mkdir = require("mkdirp")
+ , Reader = require("./reader.js")
+
+inherits(SocketReader, Reader)
+
+function SocketReader (props) {
+ var me = this
+ if (!(me instanceof SocketReader)) throw new Error(
+ "SocketReader must be called as constructor.")
+
+ if (!(props.type === "Socket" && props.Socket)) {
+ throw new Error("Non-socket type "+ props.type)
+ }
+
+ Reader.call(me, props)
+}
+
+SocketReader.prototype._read = function () {
+ var me = this
+ if (me._paused) return
+ // basically just a no-op, since we got all the info we have
+ // from the _stat method
+ if (!me._ended) {
+ me.emit("end")
+ me.emit("close")
+ me._ended = true
+ }
+}
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
"name": "fstream",
"description": "Advanced file system stream things",
- "version": "0.1.5",
+ "version": "0.1.9",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/fstream.git"
"dependencies": {
"rimraf": "~1.0.8",
"mkdirp": "~0.1.0",
- "graceful-fs": "~1.1.1",
+ "graceful-fs": "~1.1.2",
"inherits": "~1.0.0"
},
"devDependencies": {
--- /dev/null
+node_modules/
// this keeps a queue of opened file descriptors, and will make
// fs operations wait until some have closed before trying to open more.
+
var fs = require("fs")
- , FastList = require("fast-list")
+
+// there is such a thing as TOO graceful.
+if (fs.open === gracefulOpen) return
+
+var FastList = require("fast-list")
, queue = new FastList()
, curOpen = 0
, constants = require("constants")
+
exports = module.exports = fs
+
fs.MIN_MAX_OPEN = 64
fs.MAX_OPEN = 1024
-fs._open = fs.open
-fs._openSync = fs.openSync
-fs._close = fs.close
-fs._closeSync = fs.closeSync
+var originalOpen = fs.open
+ , originalOpenSync = fs.openSync
+ , originalClose = fs.close
+ , originalCloseSync = fs.closeSync
// prevent EMFILE errors
function noop () {}
-fs.open = function (path, flags, mode, cb) {
+fs.open = gracefulOpen
+
+function gracefulOpen (path, flags, mode, cb) {
if (typeof mode === "function") cb = mode, mode = null
if (typeof cb !== "function") cb = noop
function open (path, flags, mode, cb) {
cb = cb || noop
curOpen ++
- fs._open(path, flags, mode, function (er, fd) {
+ originalOpen.call(fs, path, flags, mode, function (er, fd) {
if (er) {
onclose()
}
fs.openSync = function (path, flags, mode) {
curOpen ++
- return fs._openSync(path, flags, mode)
+ return originalOpenSync.call(fs, path, flags, mode)
}
function onclose () {
fs.close = function (fd, cb) {
cb = cb || noop
- fs._close(fd, function (er) {
+ originalClose.call(fs, fd, function (er) {
onclose()
cb(er)
})
fs.closeSync = function (fd) {
onclose()
- return fs._closeSync(fd)
+ return originalCloseSync.call(fs, fd)
}
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
"name": "graceful-fs",
"description": "fs monkey-patching to avoid EMFILE and other problems",
- "version": "1.1.1",
+ "version": "1.1.2",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-graceful-fs.git"
--- /dev/null
+/node_modules
+;(function () { // closure for web browsers
-module.exports = LRUCache
+if (module) {
+ module.exports = LRUCache
+} else {
+ // just set the global for non-node platforms.
+ ;(function () { return this })().LRUCache = LRUCache
+}
function hOP (obj, key) {
return Object.prototype.hasOwnProperty.call(obj, key)
, get : function () { return maxLength }
, enumerable : true
})
+
this.maxLength = maxLength
+
Object.defineProperty(this, "length",
{ get : function () { return length }
, enumerable : true
})
+ this.reset = function () {
+ cache = {}
+ lruList = {}
+ lru = 0
+ mru = 0
+ length = 0
+ }
+
this.set = function (key, value) {
if (hOP(cache, key)) {
this.get(key)
length ++
if (length > maxLength) trim()
}
+
this.get = function (key) {
if (!hOP(cache, key)) return undefined
var hit = cache[key]
lruList[hit.lu] = hit
return hit.value
}
+
this.del = function (key) {
if (!hOP(cache, key)) return undefined
var hit = cache[key]
if (hit.lu === lru) lruWalk()
length --
}
+
function lruWalk () {
// lru has been deleted, hop up to the next hit.
lru = Object.keys(lruList).shift()
}
+
function trim () {
if (length <= maxLength) return undefined
var prune = Object.keys(lruList).slice(0, length - maxLength)
}
}
-if (!process || !module || module !== process.mainModule) return undefined
-
-var l = LRUCache(3)
- , assert = require("assert")
-
-l.set(1, 1)
-l.set(2, 1)
-l.set(3, 1)
-l.set(4, 1)
-l.set(5, 1)
-l.set(6, 1)
-
-assert.equal(l.get(1), undefined)
-assert.equal(l.get(2), undefined)
-assert.equal(l.get(3), undefined)
-assert.equal(l.get(4), 1)
-assert.equal(l.get(5), 1)
-assert.equal(l.get(6), 1)
-
-// now keep re-getting the 6 so it remains the most recently used.
-// in this case, we'll have 6, 7, 8, 9, 10, 11, so the ending length = 5
-l.set(7, 1)
-l.get(6)
-l.set(8, 1)
-l.get(6)
-l.set(9, 1)
-l.get(6)
-l.set(10, 1)
-l.get(6)
-l.set(11, 1)
-assert.equal(l.length, 3)
-assert.equal(l.get(4), undefined)
-assert.equal(l.get(5), undefined)
-assert.equal(l.get(6), 1)
-assert.equal(l.get(7), undefined)
-assert.equal(l.get(8), undefined)
-assert.equal(l.get(9), undefined)
-assert.equal(l.get(10), 1)
-assert.equal(l.get(11), 1)
-
-// test changing the maxLength, verify that the LRU items get dropped.
-l.maxLength = 100
-for (var i = 0; i < 100; i ++) l.set(i, i)
-assert.equal(l.length, 100)
-for (var i = 0; i < 100; i ++) {
- assert.equal(l.get(i), i)
-}
-l.maxLength = 3
-assert.equal(l.length, 3)
-for (var i = 0; i < 97; i ++) {
- assert.equal(l.get(i), undefined)
-}
-for (var i = 98; i < 100; i ++) {
- assert.equal(l.get(i), i)
-}
-
-// now remove the maxLength restriction, and try again.
-l.maxLength = "hello"
-for (var i = 0; i < 100; i ++) l.set(i, i)
-assert.equal(l.length, 100)
-for (var i = 0; i < 100; i ++) {
- assert.equal(l.get(i), i)
-}
-// should trigger an immediate resize
-l.maxLength = 3
-assert.equal(l.length, 3)
-for (var i = 0; i < 97; i ++) {
- assert.equal(l.get(i), undefined)
-}
-for (var i = 98; i < 100; i ++) {
- assert.equal(l.get(i), i)
-}
+})()
--- /dev/null
+{ "name": "lru-cache"
+, "description": "A cache object that deletes the least-recently-used items."
+, "version": "1.0.5"
+, "author": "Isaac Z. Schlueter <i@izs.me>"
+, "scripts": { "test": "tap test" }
+, "main": "lib/lru-cache.js"
+, "repository": "git://github.com/isaacs/node-lru-cache.git"
+, "devDependencies": { "tap": "0.1" }
+, "license":
+ { "type": "MIT"
+ , "url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE"
+ }
+}
+++ /dev/null
-[submodule "node_modules/lru-cache"]
- path = node_modules/lru-cache
- url = https://github.com/isaacs/node-lru-cache.git
--- /dev/null
+language: node_js
+node_js:
+ - 0.4
+ - 0.6
+# minimatch
+
+A minimal matching utility.
+
+[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)
+
+
This is the matching library used internally by npm.
Eventually, it will replace the C binding in node-glob.
minimatch.match = function (list, pattern, options) {
if (!options) options = {}
var ret = list.filter(minimatch.filter(pattern, options))
+ if (options.debug) console.error("\nmatch: %s %j %j", pattern, list, ret)
// set the null flag to allow empty match sets
// Note that minimatch itself, and filter(), do not
if (pattern.trim().charAt(0) === "#") return false
// check the cache
- var re = cache.get(pattern)
+ var re = cache.get(pattern + "\n" + JSON.stringify(options))
if (!re && re !== false) {
cache.set(pattern, re = minimatch.makeRe(pattern, options))
}
function makeRe (pattern, options) {
options = options || {}
+ function clearStateChar () {
+ if (stateChar) {
+ // we had some state-tracking character
+ // that wasn't consumed by this pass.
+ switch (stateChar) {
+ case "*":
+ re += oneStar
+ break
+ case "?":
+ re += "."
+ break
+ default:
+ re += "\\"+stateChar
+ break
+ }
+ stateChar = false
+ }
+ }
+
var braceDepth = 0
, re = ""
, escaping = false
- , oneStar = "[^\\/]*?"
- , twoStar = ".*?"
+ , oneStar = options.dot ? "[^\\/]*?"
+ : "(?:(?!(?:\\\/|^)\\.)[^\\/])*?"
+ , twoStar = options.dot ? ".*?"
+ // not a ^ or / followed by a dot,
+ // followed by anything, any number of times.
+ : "(?:(?!(?:\\\/|^)\\.).)*?"
, reSpecials = "().*{}+?[]^$/\\"
, patternListStack = []
, stateChar
, negate = false
, negating = false
, inClass = false
- , reClassStart = []
+ , reClassStart = -1
+ , classStart = -1
+ , classStartPattern = options.dot ? ""
+ : "(?:(?!(?:\\\/|^)\\.)"
+ , classEndPattern = options.dot ? "" : ")"
for ( var i = 0, len = pattern.length, c
; (i < len) && (c = pattern.charAt(i))
}
continue
+ // the various stateChar values
case "!":
if (i === 0 || negating) {
negate = !negate
// these are mostly the same in regexp and glob :)
case "[":
- if (stateChar) {
- // some state-tracking char was before the [
- switch (stateChar) {
- case "*":
- re += oneStar
- break
- case "?":
- re += "."
- break
- default:
- re += "\\"+stateChar
- break
- }
- stateChar = false
- }
+ // swallow any state-tracking char before the [
+ clearStateChar()
if (escaping || inClass) {
re += "\\" + c
inClass = true
classStart = i
reClassStart = re.length
+ re += classStartPattern
re += c
}
continue
escaping = false
} else {
inClass = false
- re += c
+ re += c + classEndPattern
}
continue
re += "\\}"
escaping = false
} else {
+ // swallow any state char that wasn't consumed
+ clearStateChar()
re += ")"
braceDepth --
}
re += ","
escaping = false
} else {
+ // swallow any state char that wasn't consumed
+ clearStateChar()
re += "|"
}
continue
default:
- if (stateChar) {
- // we had some state-tracking character
- // that wasn't consumed by this pass.
- switch (stateChar) {
- case "*":
- re += oneStar
- break
- case "?":
- re += "."
- break
- default:
- re += "\\"+stateChar
- break
- }
- stateChar = false
- }
+ // swallow any state char that wasn't consumed
+ clearStateChar()
if (escaping) {
// no need
// handle trailing things that only matter at the very end.
if (stateChar) {
- // we had some state-tracking character
- // that wasn't consumed by this pass.
- switch (stateChar) {
- case "*":
- re += oneStar
- break
- case "?":
- re += "."
- break
- default:
- re += "\\"+stateChar
- break
- }
- stateChar = false
+ clearStateChar()
} else if (escaping) {
re += "\\\\"
}
// this is a huge pita. We now have to re-walk
// the contents of the would-be class to re-translate
// any characters that were passed through as-is
- var cs = re.substr(reClassStart + 1)
+ var cs = re.substr(reClassStart + classStartPattern.length + 1)
, csOpts = Object.create(options)
csOpts.partial = true
if (options.partial) return re
- // don't match "." files unless pattern starts with "."
- if (!options.dot && pattern.charAt(0) !== ".") {
- re = "(?!\\.)" + re
- }
-
// must match entire pattern
// ending in a * or ** will make it less strict.
re = "^" + re + "$"
return false
}
}
-
-if (require.main === module) {
- // more tests in test/*.js
- var tests = ["{a,b{c,d}}"
- ,"a.*$?"
- ,"\\{a,b{c,d}}"
- ,"a/{c/,}d/{e/,f/{g,h,i}/}k"
- ,"!*.bak"
- ,"!!*.bak"
- ,"!!!*.bak"
- ,"\\a\\b\\c\\d"
- ]
- tests.forEach(function (t) {
- console.log([t,makeRe(t)])
- })
-}
+++ /dev/null
-{ "name" : "lru-cache"
-, "description" : "A cache object that deletes the least-recently-used items."
-, "version" : "1.0.4"
-, "author" : "Isaac Z. Schlueter <i@izs.me>"
-, "scripts" : { "test" : "node lib/lru-cache.js" }
-, "main" : "lib/lru-cache"
-, "repository" : "git://github.com/isaacs/node-lru-cache.git"
-, "licenses" :
- [ { "type" : "MIT"
- , "url" : "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE"
- }
- ]
-}
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
"name": "minimatch",
"description": "a glob matcher in javascript",
- "version": "0.0.4",
+ "version": "0.0.5",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/minimatch.git"
"engines": {
"node": "*"
},
- "bundleDependencies": [
- "lru-cache"
- ],
"dependencies": {
"lru-cache": "~1.0.2"
},
--- /dev/null
+node_modules
+.DS_Store
--- /dev/null
+For reading user input from stdin.
+
+## USAGE
+
+```javascript
+var read = require("read")
+read(options, callback)
+```
+
+The callback gets called with either the user input, or the default
+specified, or an error, in the traditional `callback(error, result)`
+node style.
+
+## OPTIONS
+
+Every option is optional.
+
+* `prompt` What to write to stdout before reading input.
+* `silent` Don't echo the output as the user types it.
+* `num` Max number of chars to read from terminal.
+* `delim` The char that means we're done. Default: `"\n"`
+* `timeout` Number of ms to wait for user input before giving up.
+* `default` The default value if the user enters nothing.
+
+If silent is true, or num is set, or delim is something other than
+`"\n"`, then read will set raw mode, and read character by character.
+
+At this time, backspace and arrow keys are not supported in raw mode.
+It's probably not too hard to add support for this, perhaps using node's
+built-in readline module.
+
+## CONTRIBUTING
+
+Patches welcome.
+
+## BUGS
+
+In node 0.6.0 through 0.6.5, you must explicitly call
+`process.stdin.destroy()` or `process.exit()` when you know that your
+program is done reading, or else it will keep the event loop running
+forever.
+
+See: <https://github.com/joyent/node/issues/2257>
--- /dev/null
+
+module.exports = read
+
+var buffer = ""
+ , tty = require("tty")
+ , StringDecoder = require("string_decoder").StringDecoder
+
+function read (opts, cb) {
+ if (!cb) cb = opts, opts = {}
+
+ var p = opts.prompt || ""
+ , def = opts.default
+ , silent = opts.silent
+ , timeout = opts.timeout
+ , num = opts.num || null
+ , delim = opts.delim || "\n"
+
+ if (p && def) p += "("+(silent ? "<default hidden>" : def)+") "
+
+ // switching into raw mode is a little bit painful.
+ // avoid if possible.
+ var r = silent || num || delim !== "\n" ? rawRead : normalRead
+
+ if (timeout) {
+ cb = (function (cb) {
+ var called = false
+ var t = setTimeout(function () {
+ tty.setRawMode(false)
+ process.stdout.write("\n")
+ if (def) done(null, def)
+ else done(new Error("timeout"))
+ }, timeout)
+
+ function done (er, data) {
+ clearTimeout(t)
+ if (called) return
+ // stop reading!
+ stdin.pause()
+ called = true
+ cb(er, data)
+ }
+
+ return done
+ })(cb)
+ }
+
+ if (p && !process.stdout.write(p)) {
+ process.stdout.on("drain", function D () {
+ process.stdout.removeListener("drain", D)
+ r(def, timeout, delim, silent, num, cb)
+ })
+ } else {
+ process.nextTick(function () {
+ r(def, timeout, delim, silent, num, cb)
+ })
+ }
+}
+
+function normalRead (def, timeout, delim, silent, num, cb) {
+ var stdin = process.openStdin()
+ , val = ""
+ , decoder = new StringDecoder("utf8")
+
+ stdin.resume()
+ stdin.on("error", cb)
+ stdin.on("data", function D (chunk) {
+ // get the characters that are completed.
+ val += buffer + decoder.write(chunk)
+ buffer = ""
+
+ // \r has no place here.
+ // XXX But what if \r is the delim or something dumb like that?
+ // Meh. If anyone complains about this, deal with it.
+ val = val.replace(/\r/g, "")
+
+ // TODO Make delim configurable
+ if (val.indexOf(delim) !== -1) {
+ // pluck off any delims at the beginning.
+ if (val !== delim) {
+ var i, l
+ for (i = 0, l = val.length; i < l; i ++) {
+ if (val.charAt(i) !== delim) break
+ }
+ if (i !== 0) val = val.substr(i)
+ }
+
+ // buffer whatever might have come *after* the delimter
+ var delimIndex = val.indexOf(delim)
+ if (delimIndex !== -1) {
+ buffer = val.substr(delimIndex)
+ val = val.substr(0, delimIndex)
+ } else {
+ buffer = ""
+ }
+
+ stdin.pause()
+ stdin.removeListener("data", D)
+ stdin.removeListener("error", cb)
+
+ // read(1) trims
+ val = val.trim() || def
+ cb(null, val)
+ }
+ })
+}
+
+function rawRead (def, timeout, delim, silent, num, cb) {
+ var stdin = process.openStdin()
+ , val = ""
+ , decoder = new StringDecoder
+
+ tty.setRawMode(true)
+ stdin.resume()
+ stdin.on("error", cb)
+ stdin.on("data", function D (c) {
+ // \r is my enemy.
+ c = decoder.write(c).replace(/\r/g, "\n")
+
+ switch (c) {
+ case "": // probably just a \r that was ignored.
+ break
+
+ case "\u0004": // EOF
+ case delim:
+ tty.setRawMode(false)
+ stdin.removeListener("data", D)
+ stdin.removeListener("error", cb)
+ val = val.trim() || def
+ process.stdout.write("\n")
+ stdin.pause()
+ return cb(null, val)
+
+ case "\u0003": case "\0": // ^C or other signal abort
+ tty.setRawMode(false)
+ stdin.removeListener("data", D)
+ stdin.removeListener("error", cb)
+ stdin.pause()
+ return cb(new Error("cancelled"))
+ break
+
+ default: // just a normal char
+ val += buffer + c
+ buffer = ""
+ if (!silent) process.stdout.write(c)
+
+ // explicitly process a delim if we have enough chars.
+ if (num && val.length >= num) D(delim)
+ break
+ }
+ })
+}
--- /dev/null
+{
+ "name": "read",
+ "version": "0.0.1",
+ "main": "lib/read.js",
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.6"
+ },
+ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
+ "description": "read(1) for node programs",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/read.git"
+ }
+}
--- /dev/null
+.*.swp
+node_modules
+examples/extract/
+test/tmp/
+test/fixtures/symlink
--- /dev/null
+language: node_js
+node_js:
+ - 0.6
}
switch (wprops.type) {
+ // sockets not supported
+ case "Socket":
+ return
+
case "Directory":
wprops.path += "/"
wprops.size = 0
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
"name": "tar",
"description": "tar for node",
- "version": "0.1.7",
+ "version": "0.1.9",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-tar.git"
"dependencies": {
"inherits": "1.x",
"block-stream": "*",
- "fstream": "~0.1.5"
+ "fstream": "~0.1.8"
},
"devDependencies": {
"tap": "0.x",
, "publishConfig": { "tag": "alpha", "proprietary-attribs": false }
, "description": "A package manager for node"
, "keywords": [ "package manager", "modules", "install", "package.json" ]
-, "version": "1.1.0-alpha-6"
+, "version": "1.1.0-beta-2"
, "preferGlobal": true
, "config": { "publishtest": false }
, "homepage": "http://npmjs.org/"
, "bin": { "npm": "./bin/npm-cli.js"
, "npm_g": "./bin/npm-cli.js"
, "npm-g": "./bin/npm-cli.js" }
+
, "dependencies":
{ "semver": "1"
, "ini": "1"
, "inherits": "1"
, "mkdirp": "0.1"
, "fast-list": "~1.0.1"
+ , "read": "0"
+ , "lru-cache": "1"
}
+
, "bundleDependencies":
[ "slide"
, "ini"
, "inherits"
, "mkdirp"
, "fast-list"
+ , "read"
+ , "lru-cache"
]
+
, "devDependencies":
{ "ronn": "https://github.com/isaacs/ronnjs/tarball/master" }
+
, "engines": { "node": "0.6 || 0.7 || 0.8", "npm": "1" }
, "scripts": { "test": "./test/run"
, "prepublish": "make -j4 doc"