diff options
510 files changed, 1271 insertions, 26490 deletions
@@ -159,36 +159,15 @@ apidoc_sources = $(wildcard doc/api/*.markdown) apidocs = $(addprefix out/,$(apidoc_sources:.markdown=.html)) \ $(addprefix out/,$(apidoc_sources:.markdown=.json)) -apidoc_dirs = out/doc out/doc/api/ out/doc/api/assets out/doc/about out/doc/community out/doc/download out/doc/logos out/doc/images +apidoc_dirs = out/doc out/doc/api/ out/doc/api/assets apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*))) -doc_images = $(addprefix out/,$(wildcard doc/images/* doc/*.jpg doc/*.png)) - website_files = \ - out/doc/index.html \ - out/doc/v0.4_announcement.html \ - out/doc/cla.html \ out/doc/sh_main.js \ - out/doc/sh_javascript.min.js \ - out/doc/sh_vim-dark.css \ - out/doc/sh.css \ - out/doc/favicon.ico \ - out/doc/pipe.css \ - out/doc/about/index.html \ - out/doc/community/index.html \ - out/doc/download/index.html \ - out/doc/logos/index.html \ - out/doc/changelog.html \ - $(doc_images) - -doc: $(apidoc_dirs) $(website_files) $(apiassets) $(apidocs) tools/doc/ blog node - -blogclean: - rm -rf out/blog - -blog: doc/blog out/Release/node tools/blog - out/Release/node tools/blog/generate.js doc/blog/ out/blog/ doc/blog.html doc/rss.xml + out/doc/sh_javascript.min.js + +doc: $(apidoc_dirs) $(website_files) $(apiassets) $(apidocs) tools/doc/ node $(apidoc_dirs): mkdir -p $@ @@ -199,9 +178,6 @@ out/doc/api/assets/%: doc/api_assets/% out/doc/api/assets/ out/doc/changelog.html: ChangeLog doc/changelog-head.html doc/changelog-foot.html tools/build-changelog.sh node bash tools/build-changelog.sh -out/doc/%.html: doc/%.html node - cat $< | sed -e 's|__VERSION__|'$(VERSION)'|g' > $@ - out/doc/%: doc/% cp -r $< $@ @@ -218,9 +194,6 @@ email.md: ChangeLog tools/email-footer.md blog.html: email.md cat $< | ./node tools/doc/node_modules/.bin/marked > $@ -blog-upload: blog - rsync -r out/blog/ node@nodejs.org:~/web/nodejs.org/blog/ - website-upload: doc rsync -r out/doc/ node@nodejs.org:~/web/nodejs.org/ ssh node@nodejs.org '\ diff --git a/deps/npm/CONTRIBUTING.md b/deps/npm/CONTRIBUTING.md new file mode 100644 index 000000000..7a60ed2a2 --- /dev/null +++ b/deps/npm/CONTRIBUTING.md @@ -0,0 +1,5 @@ +## Before you submit a new issue + +* Check if there's a simple solution in the [Troubleshooting](https://github.com/npm/npm/wiki/Troubleshooting) wiki. +* [Search for similar issues](https://github.com/npm/npm/search?q=Similar%20issues&type=Issues). +* Ensure your new issue conforms to the [Contributing Guidelines](https://github.com/npm/npm/wiki/Contributing-Guidelines). diff --git a/deps/npm/LICENSE b/deps/npm/LICENSE index 764bb8718..2c0baba40 100644 --- a/deps/npm/LICENSE +++ b/deps/npm/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) Isaac Z. Schlueter +Copyright (c) npm, Inc. and Contributors All rights reserved. npm is released under the Artistic License 2.0. @@ -214,7 +214,7 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------- -"Node.js" and "node" trademark Joyent, Inc. npm is not officially +"Node.js" and "node" trademark Joyent, Inc. npm is not officially part of the Node.js project, and is neither owned by nor officially affiliated with Joyent, Inc. diff --git a/deps/npm/README.md b/deps/npm/README.md index d01f7a288..e2f0f79b5 100644 --- a/deps/npm/README.md +++ b/deps/npm/README.md @@ -220,7 +220,7 @@ If this concerns you, inspect the source before using packages. When you find issues, please report them: * web: - <https://github.com/isaacs/npm/issues> + <https://github.com/npm/npm/issues> * email: <npm-@googlegroups.com> diff --git a/deps/npm/doc/cli/npm-install.md b/deps/npm/doc/cli/npm-install.md index 618ebab0f..f9d2104cd 100644 --- a/deps/npm/doc/cli/npm-install.md +++ b/deps/npm/doc/cli/npm-install.md @@ -146,9 +146,9 @@ after packing it up into a tarball (b). Examples: - git+ssh://git@github.com:isaacs/npm.git#v1.0.27 - git+https://isaacs@github.com/isaacs/npm.git - git://github.com/isaacs/npm.git#v1.0.27 + git+ssh://git@github.com:npm/npm.git#v1.0.27 + git+https://isaacs@github.com/npm/npm.git + git://github.com/npm/npm.git#v1.0.27 You may combine multiple arguments, and even multiple types of arguments. For example: diff --git a/deps/npm/doc/cli/npm-ls.md b/deps/npm/doc/cli/npm-ls.md index d80a2cc27..21f54264c 100644 --- a/deps/npm/doc/cli/npm-ls.md +++ b/deps/npm/doc/cli/npm-ls.md @@ -61,6 +61,12 @@ Show parseable output instead of tree view. List packages in the global install prefix instead of in the current project. +### depth + +* Type: Int + +Max display depth of the dependency tree. + ## SEE ALSO * npm-config(1) diff --git a/deps/npm/doc/cli/npm-outdated.md b/deps/npm/doc/cli/npm-outdated.md index 4d5835378..aa2a7d5dd 100644 --- a/deps/npm/doc/cli/npm-outdated.md +++ b/deps/npm/doc/cli/npm-outdated.md @@ -14,6 +14,43 @@ The resulting field 'wanted' shows the latest version according to the version specified in the package.json, the field 'latest' the very latest version of the package. +## CONFIGURATION + +### json + +* Default: false +* Type: Boolean + +Show information in JSON format. + +### long + +* Default: false +* Type: Boolean + +Show extended information. + +### parseable + +* Default: false +* Type: Boolean + +Show parseable output instead of tree view. + +### global + +* Default: false +* Type: Boolean + +Check packages in the global install prefix instead of in the current +project. + +### depth + +* Type: Int + +Max depth for checking dependency tree. + ## SEE ALSO * npm-update(1) diff --git a/deps/npm/doc/cli/npm.md b/deps/npm/doc/cli/npm.md index 0f9b30b22..903aa1079 100644 --- a/deps/npm/doc/cli/npm.md +++ b/deps/npm/doc/cli/npm.md @@ -114,7 +114,7 @@ easily by doing `npm view npm contributors`. If you would like to contribute, but don't know what to work on, check the issues list or ask on the mailing list. -* <http://github.com/isaacs/npm/issues> +* <http://github.com/npm/npm/issues> * <npm-@googlegroups.com> ## BUGS @@ -122,7 +122,7 @@ the issues list or ask on the mailing list. When you find issues, please report them: * web: - <http://github.com/isaacs/npm/issues> + <http://github.com/npm/npm/issues> * email: <npm-@googlegroups.com> diff --git a/deps/npm/doc/files/package.json.md b/deps/npm/doc/files/package.json.md index 8e6f97de8..09f0bec70 100644 --- a/deps/npm/doc/files/package.json.md +++ b/deps/npm/doc/files/package.json.md @@ -257,7 +257,7 @@ Do it like this: "repository" : { "type" : "git" - , "url" : "http://github.com/isaacs/npm.git" + , "url" : "http://github.com/npm/npm.git" } "repository" : diff --git a/deps/npm/doc/misc/npm-coding-style.md b/deps/npm/doc/misc/npm-coding-style.md index e9333d0ec..b6a4a620f 100644 --- a/deps/npm/doc/misc/npm-coding-style.md +++ b/deps/npm/doc/misc/npm-coding-style.md @@ -133,7 +133,7 @@ string message to the callback. Stack traces are handy. ## Logging -Logging is done using the [npmlog](https://github.com/isaacs/npmlog) +Logging is done using the [npmlog](https://github.com/npm/npmlog) utility. Please clean up logs when they are no longer helpful. In particular, diff --git a/deps/npm/doc/misc/npm-config.md b/deps/npm/doc/misc/npm-config.md index 485d4ca45..2df31f3a7 100644 --- a/deps/npm/doc/misc/npm-config.md +++ b/deps/npm/doc/misc/npm-config.md @@ -401,7 +401,7 @@ The value `npm init` should use by default for the package author's homepage. ### init.license -* Default: "BSD-2-Clause" +* Default: "ISC" * Type: String The value `npm init` should use by default for the package license. @@ -466,7 +466,7 @@ The default is "http", which shows http, warn, and error output. * Type: Stream This is the stream that is passed to the -[npmlog](https://github.com/isaacs/npmlog) module at run time. +[npmlog](https://github.com/npm/npmlog) module at run time. It cannot be set from the command line, but if you are using npm programmatically, you may wish to send logs to somewhere other than diff --git a/deps/npm/doc/misc/npm-faq.md b/deps/npm/doc/misc/npm-faq.md index d27c7e735..c2288389c 100644 --- a/deps/npm/doc/misc/npm-faq.md +++ b/deps/npm/doc/misc/npm-faq.md @@ -315,12 +315,12 @@ in a web browser. This will also tell you if you are just unable to access the internet for some reason. If the registry IS down, let me know by emailing <i@izs.me> or posting -an issue at <https://github.com/isaacs/npm/issues>. We'll have +an issue at <https://github.com/npm/npm/issues>. We'll have someone kick it or something. ## Why no namespaces? -Please see this discussion: <https://github.com/isaacs/npm/issues/798> +Please see this discussion: <https://github.com/npm/npm/issues/798> tl;dr - It doesn't actually make things better, and can make them worse. @@ -338,7 +338,7 @@ There is not sufficient need to impose namespace rules on everyone. Post an issue on the github project: -* <https://github.com/isaacs/npm/issues> +* <https://github.com/npm/npm/issues> ## Why does npm hate me? diff --git a/deps/npm/doc/misc/npm-registry.md b/deps/npm/doc/misc/npm-registry.md index 514bce2f8..a8c4b0200 100644 --- a/deps/npm/doc/misc/npm-registry.md +++ b/deps/npm/doc/misc/npm-registry.md @@ -14,7 +14,7 @@ account information. The official public npm registry is at <http://registry.npmjs.org/>. It is powered by a CouchDB database at <http://isaacs.iriscouch.com/registry>. The code for the couchapp is -available at <http://github.com/isaacs/npmjs.org>. npm user accounts +available at <http://github.com/npm/npmjs.org>. npm user accounts are CouchDB users, stored in the <http://isaacs.iriscouch.com/_users> database. diff --git a/deps/npm/html/doc/README.html b/deps/npm/html/doc/README.html index 7bfa82592..d457ec95e 100644 --- a/deps/npm/html/doc/README.html +++ b/deps/npm/html/doc/README.html @@ -226,7 +226,7 @@ process for published modules.</p> <p>When you find issues, please report them:</p> <ul><li>web: -<a href="https://github.com/isaacs/npm/issues">https://github.com/isaacs/npm/issues</a></li><li>email: +<a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a></li><li>email: <a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li></ul> <p>Be sure to include <em>all</em> of the output from the npm command that didn't work @@ -239,7 +239,7 @@ will no doubt tell you to put the output in a gist or email.</p> <ul><li><a href="cli/npm.html">npm(1)</a></li><li><a href="misc/npm-faq.html">npm-faq(7)</a></li><li><a href="cli/npm-help.html">npm-help(1)</a></li><li><a href="misc/npm-index.html">npm-index(7)</a></li></ul> </div> -<p id="footer"><a href="../doc/README.html">README</a> — npm@1.3.26</p> +<p id="footer"><a href="../doc/README.html">README</a> — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-bin.html b/deps/npm/html/doc/api/npm-bin.html index 66bc524d7..eb1b17b27 100644 --- a/deps/npm/html/doc/api/npm-bin.html +++ b/deps/npm/html/doc/api/npm-bin.html @@ -19,7 +19,7 @@ <p>This function should not be used programmatically. Instead, just refer to the <code>npm.bin</code> member.</p> </div> -<p id="footer">npm-bin — npm@1.3.26</p> +<p id="footer">npm-bin — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-bugs.html b/deps/npm/html/doc/api/npm-bugs.html index d1e896ab2..8ced30865 100644 --- a/deps/npm/html/doc/api/npm-bugs.html +++ b/deps/npm/html/doc/api/npm-bugs.html @@ -25,7 +25,7 @@ optional version number.</p> <p>This command will launch a browser, so this command may not be the most friendly for programmatic use.</p> </div> -<p id="footer">npm-bugs — npm@1.3.26</p> +<p id="footer">npm-bugs — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-commands.html b/deps/npm/html/doc/api/npm-commands.html index a56ad6f04..dd90b469a 100644 --- a/deps/npm/html/doc/api/npm-commands.html +++ b/deps/npm/html/doc/api/npm-commands.html @@ -28,7 +28,7 @@ usage, or <code>man 3 npm-<command></code> for programmatic usage.</p> <ul><li><a href="../misc/npm-index.html">npm-index(7)</a></li></ul> </div> -<p id="footer">npm-commands — npm@1.3.26</p> +<p id="footer">npm-commands — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-config.html b/deps/npm/html/doc/api/npm-config.html index 00c63b3db..e3768af98 100644 --- a/deps/npm/html/doc/api/npm-config.html +++ b/deps/npm/html/doc/api/npm-config.html @@ -33,7 +33,7 @@ functions instead.</p> <ul><li><a href="../api/npm.html">npm(3)</a></li></ul> </div> -<p id="footer">npm-config — npm@1.3.26</p> +<p id="footer">npm-config — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-deprecate.html b/deps/npm/html/doc/api/npm-deprecate.html index 1e0e93caa..da93046ce 100644 --- a/deps/npm/html/doc/api/npm-deprecate.html +++ b/deps/npm/html/doc/api/npm-deprecate.html @@ -32,7 +32,7 @@ install the package.</p></li></ul> <ul><li><a href="../api/npm-publish.html">npm-publish(3)</a></li><li><a href="../api/npm-unpublish.html">npm-unpublish(3)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li></ul> </div> -<p id="footer">npm-deprecate — npm@1.3.26</p> +<p id="footer">npm-deprecate — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-docs.html b/deps/npm/html/doc/api/npm-docs.html index 60ef63fed..bc9989c41 100644 --- a/deps/npm/html/doc/api/npm-docs.html +++ b/deps/npm/html/doc/api/npm-docs.html @@ -25,7 +25,7 @@ optional version number.</p> <p>This command will launch a browser, so this command may not be the most friendly for programmatic use.</p> </div> -<p id="footer">npm-docs — npm@1.3.26</p> +<p id="footer">npm-docs — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-edit.html b/deps/npm/html/doc/api/npm-edit.html index 0b207da95..87120573d 100644 --- a/deps/npm/html/doc/api/npm-edit.html +++ b/deps/npm/html/doc/api/npm-edit.html @@ -30,7 +30,7 @@ to open. The package can optionally have a version number attached.</p> <p>Since this command opens an editor in a new process, be careful about where and how this is used.</p> </div> -<p id="footer">npm-edit — npm@1.3.26</p> +<p id="footer">npm-edit — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-explore.html b/deps/npm/html/doc/api/npm-explore.html index 19c55ba24..55eb138f0 100644 --- a/deps/npm/html/doc/api/npm-explore.html +++ b/deps/npm/html/doc/api/npm-explore.html @@ -24,7 +24,7 @@ sure to use <code>npm rebuild <pkg></code> if you make any changes.</p> <p>The first element in the 'args' parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p> </div> -<p id="footer">npm-explore — npm@1.3.26</p> +<p id="footer">npm-explore — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-help-search.html b/deps/npm/html/doc/api/npm-help-search.html index 87976bd3c..09e3df55f 100644 --- a/deps/npm/html/doc/api/npm-help-search.html +++ b/deps/npm/html/doc/api/npm-help-search.html @@ -32,7 +32,7 @@ Name of the file that matched</li></ul> <p>The silent parameter is not neccessary not used, but it may in the future.</p> </div> -<p id="footer">npm-help-search — npm@1.3.26</p> +<p id="footer">npm-help-search — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-init.html b/deps/npm/html/doc/api/npm-init.html index 7b912a25f..f42122f00 100644 --- a/deps/npm/html/doc/api/npm-init.html +++ b/deps/npm/html/doc/api/npm-init.html @@ -35,7 +35,7 @@ then go ahead and use this programmatically.</p> <p><a href="../files/package.json.html">package.json(5)</a></p> </div> -<p id="footer">npm-init — npm@1.3.26</p> +<p id="footer">npm-init — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-install.html b/deps/npm/html/doc/api/npm-install.html index 7ac9603f4..9028bad68 100644 --- a/deps/npm/html/doc/api/npm-install.html +++ b/deps/npm/html/doc/api/npm-install.html @@ -25,7 +25,7 @@ the name of a package to be installed.</p> <p>Finally, 'callback' is a function that will be called when all packages have been installed or when an error has been encountered.</p> </div> -<p id="footer">npm-install — npm@1.3.26</p> +<p id="footer">npm-install — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-link.html b/deps/npm/html/doc/api/npm-link.html index 8e228bcac..ef77b19aa 100644 --- a/deps/npm/html/doc/api/npm-link.html +++ b/deps/npm/html/doc/api/npm-link.html @@ -39,7 +39,7 @@ npm.commands.link('redis', cb) # link-install the package</code></pre> <p>Now, any changes to the redis package will be reflected in the package in the current working directory</p> </div> -<p id="footer">npm-link — npm@1.3.26</p> +<p id="footer">npm-link — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-load.html b/deps/npm/html/doc/api/npm-load.html index 483b414a2..7685f003c 100644 --- a/deps/npm/html/doc/api/npm-load.html +++ b/deps/npm/html/doc/api/npm-load.html @@ -32,7 +32,7 @@ config object.</p> <p>For a list of all the available command-line configs, see <code>npm help config</code></p> </div> -<p id="footer">npm-load — npm@1.3.26</p> +<p id="footer">npm-load — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-ls.html b/deps/npm/html/doc/api/npm-ls.html index 3b73dc77b..14df9811f 100644 --- a/deps/npm/html/doc/api/npm-ls.html +++ b/deps/npm/html/doc/api/npm-ls.html @@ -59,7 +59,7 @@ project.</p> This means that if a submodule a same dependency as a parent module, then the dependency will only be output once.</p> </div> -<p id="footer">npm-ls — npm@1.3.26</p> +<p id="footer">npm-ls — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-outdated.html b/deps/npm/html/doc/api/npm-outdated.html index efd1be41f..16b3e69ce 100644 --- a/deps/npm/html/doc/api/npm-outdated.html +++ b/deps/npm/html/doc/api/npm-outdated.html @@ -19,7 +19,7 @@ currently outdated.</p> <p>If the 'packages' parameter is left out, npm will check all packages.</p> </div> -<p id="footer">npm-outdated — npm@1.3.26</p> +<p id="footer">npm-outdated — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-owner.html b/deps/npm/html/doc/api/npm-owner.html index 8d9aed332..9357f6d7f 100644 --- a/deps/npm/html/doc/api/npm-owner.html +++ b/deps/npm/html/doc/api/npm-owner.html @@ -34,7 +34,7 @@ that is not implemented at this time.</p> <ul><li><a href="../api/npm-publish.html">npm-publish(3)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li></ul> </div> -<p id="footer">npm-owner — npm@1.3.26</p> +<p id="footer">npm-owner — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-pack.html b/deps/npm/html/doc/api/npm-pack.html index 187d046d5..70cd37e01 100644 --- a/deps/npm/html/doc/api/npm-pack.html +++ b/deps/npm/html/doc/api/npm-pack.html @@ -25,7 +25,7 @@ overwritten the second time.</p> <p>If no arguments are supplied, then npm packs the current package folder.</p> </div> -<p id="footer">npm-pack — npm@1.3.26</p> +<p id="footer">npm-pack — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-prefix.html b/deps/npm/html/doc/api/npm-prefix.html index 60aec6ecb..3a9028d30 100644 --- a/deps/npm/html/doc/api/npm-prefix.html +++ b/deps/npm/html/doc/api/npm-prefix.html @@ -21,7 +21,7 @@ <p>This function is not useful programmatically</p> </div> -<p id="footer">npm-prefix — npm@1.3.26</p> +<p id="footer">npm-prefix — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-prune.html b/deps/npm/html/doc/api/npm-prune.html index 749a02269..e74d96e07 100644 --- a/deps/npm/html/doc/api/npm-prune.html +++ b/deps/npm/html/doc/api/npm-prune.html @@ -23,7 +23,7 @@ <p>Extraneous packages are packages that are not listed on the parent package's dependencies list.</p> </div> -<p id="footer">npm-prune — npm@1.3.26</p> +<p id="footer">npm-prune — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-publish.html b/deps/npm/html/doc/api/npm-publish.html index 00fc93f9f..96635afe9 100644 --- a/deps/npm/html/doc/api/npm-publish.html +++ b/deps/npm/html/doc/api/npm-publish.html @@ -32,7 +32,7 @@ the registry. Overwrites when the "force" environment variable is set <ul><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li><li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li><li><a href="../api/npm-owner.html">npm-owner(3)</a></li></ul> </div> -<p id="footer">npm-publish — npm@1.3.26</p> +<p id="footer">npm-publish — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-rebuild.html b/deps/npm/html/doc/api/npm-rebuild.html index b0509ae09..32390842e 100644 --- a/deps/npm/html/doc/api/npm-rebuild.html +++ b/deps/npm/html/doc/api/npm-rebuild.html @@ -22,7 +22,7 @@ the new binary. If no 'packages' parameter is specify, every package wil <p>See <code>npm help build</code></p> </div> -<p id="footer">npm-rebuild — npm@1.3.26</p> +<p id="footer">npm-rebuild — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-repo.html b/deps/npm/html/doc/api/npm-repo.html index a9799fb63..828714249 100644 --- a/deps/npm/html/doc/api/npm-repo.html +++ b/deps/npm/html/doc/api/npm-repo.html @@ -25,7 +25,7 @@ optional version number.</p> <p>This command will launch a browser, so this command may not be the most friendly for programmatic use.</p> </div> -<p id="footer">npm-repo — npm@1.3.26</p> +<p id="footer">npm-repo — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-restart.html b/deps/npm/html/doc/api/npm-restart.html index 980d2b543..ff909ade8 100644 --- a/deps/npm/html/doc/api/npm-restart.html +++ b/deps/npm/html/doc/api/npm-restart.html @@ -27,7 +27,7 @@ in the <code>packages</code> parameter.</p> <ul><li><a href="../api/npm-start.html">npm-start(3)</a></li><li><a href="../api/npm-stop.html">npm-stop(3)</a></li></ul> </div> -<p id="footer">npm-restart — npm@1.3.26</p> +<p id="footer">npm-restart — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-root.html b/deps/npm/html/doc/api/npm-root.html index 4c6086d4f..44aac6848 100644 --- a/deps/npm/html/doc/api/npm-root.html +++ b/deps/npm/html/doc/api/npm-root.html @@ -21,7 +21,7 @@ <p>This function is not useful programmatically.</p> </div> -<p id="footer">npm-root — npm@1.3.26</p> +<p id="footer">npm-root — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-run-script.html b/deps/npm/html/doc/api/npm-run-script.html index 077fc4302..2f58aa2fe 100644 --- a/deps/npm/html/doc/api/npm-run-script.html +++ b/deps/npm/html/doc/api/npm-run-script.html @@ -29,7 +29,7 @@ assumed to be the command to run. All other elements are ignored.</p> <ul><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../api/npm-test.html">npm-test(3)</a></li><li><a href="../api/npm-start.html">npm-start(3)</a></li><li><a href="../api/npm-restart.html">npm-restart(3)</a></li><li><a href="../api/npm-stop.html">npm-stop(3)</a></li></ul> </div> -<p id="footer">npm-run-script — npm@1.3.26</p> +<p id="footer">npm-run-script — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-search.html b/deps/npm/html/doc/api/npm-search.html index 511115bf0..5415b5f34 100644 --- a/deps/npm/html/doc/api/npm-search.html +++ b/deps/npm/html/doc/api/npm-search.html @@ -32,7 +32,7 @@ excluded term (the "searchexclude" config). The search is case insensi and doesn't try to read your mind (it doesn't do any verb tense matching or the like).</p> </div> -<p id="footer">npm-search — npm@1.3.26</p> +<p id="footer">npm-search — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-shrinkwrap.html b/deps/npm/html/doc/api/npm-shrinkwrap.html index cede49ded..d007ade65 100644 --- a/deps/npm/html/doc/api/npm-shrinkwrap.html +++ b/deps/npm/html/doc/api/npm-shrinkwrap.html @@ -26,7 +26,7 @@ but the shrinkwrap file will still be written.</p> <p>Finally, 'callback' is a function that will be called when the shrinkwrap has been saved.</p> </div> -<p id="footer">npm-shrinkwrap — npm@1.3.26</p> +<p id="footer">npm-shrinkwrap — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-start.html b/deps/npm/html/doc/api/npm-start.html index 0f70bc8b0..626cbfaf3 100644 --- a/deps/npm/html/doc/api/npm-start.html +++ b/deps/npm/html/doc/api/npm-start.html @@ -19,7 +19,7 @@ <p>npm can run tests on multiple packages. Just specify multiple packages in the <code>packages</code> parameter.</p> </div> -<p id="footer">npm-start — npm@1.3.26</p> +<p id="footer">npm-start — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-stop.html b/deps/npm/html/doc/api/npm-stop.html index ddb7543d4..0bf5d3f65 100644 --- a/deps/npm/html/doc/api/npm-stop.html +++ b/deps/npm/html/doc/api/npm-stop.html @@ -19,7 +19,7 @@ <p>npm can run stop on multiple packages. Just specify multiple packages in the <code>packages</code> parameter.</p> </div> -<p id="footer">npm-stop — npm@1.3.26</p> +<p id="footer">npm-stop — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-submodule.html b/deps/npm/html/doc/api/npm-submodule.html index 7ce108ae6..6665c1c89 100644 --- a/deps/npm/html/doc/api/npm-submodule.html +++ b/deps/npm/html/doc/api/npm-submodule.html @@ -33,7 +33,7 @@ dependencies into the submodule folder.</p> <ul><li>npm help json</li><li>git help submodule</li></ul> </div> -<p id="footer">npm-submodule — npm@1.3.26</p> +<p id="footer">npm-submodule — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-tag.html b/deps/npm/html/doc/api/npm-tag.html index 931c4f358..d2d0d045e 100644 --- a/deps/npm/html/doc/api/npm-tag.html +++ b/deps/npm/html/doc/api/npm-tag.html @@ -29,7 +29,7 @@ parameter is missing or falsey (empty), the default froom the config will be used. For more information about how to set this config, check <code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p> </div> -<p id="footer">npm-tag — npm@1.3.26</p> +<p id="footer">npm-tag — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-test.html b/deps/npm/html/doc/api/npm-test.html index 4cef083d5..a22a071dc 100644 --- a/deps/npm/html/doc/api/npm-test.html +++ b/deps/npm/html/doc/api/npm-test.html @@ -22,7 +22,7 @@ true.</p> <p>npm can run tests on multiple packages. Just specify multiple packages in the <code>packages</code> parameter.</p> </div> -<p id="footer">npm-test — npm@1.3.26</p> +<p id="footer">npm-test — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-uninstall.html b/deps/npm/html/doc/api/npm-uninstall.html index dd44c87cd..b309dd63e 100644 --- a/deps/npm/html/doc/api/npm-uninstall.html +++ b/deps/npm/html/doc/api/npm-uninstall.html @@ -22,7 +22,7 @@ the name of a package to be uninstalled.</p> <p>Finally, 'callback' is a function that will be called when all packages have been uninstalled or when an error has been encountered.</p> </div> -<p id="footer">npm-uninstall — npm@1.3.26</p> +<p id="footer">npm-uninstall — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-unpublish.html b/deps/npm/html/doc/api/npm-unpublish.html index 22ffa9ebc..1bb31b6b6 100644 --- a/deps/npm/html/doc/api/npm-unpublish.html +++ b/deps/npm/html/doc/api/npm-unpublish.html @@ -26,7 +26,7 @@ is what is meant.</p> <p>If no version is specified, or if all versions are removed then the root package entry is removed from the registry entirely.</p> </div> -<p id="footer">npm-unpublish — npm@1.3.26</p> +<p id="footer">npm-unpublish — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-update.html b/deps/npm/html/doc/api/npm-update.html index 86f03d12e..1769afcec 100644 --- a/deps/npm/html/doc/api/npm-update.html +++ b/deps/npm/html/doc/api/npm-update.html @@ -18,7 +18,7 @@ <p>The 'packages' argument is an array of packages to update. The 'callback' parameter will be called when done or when an error occurs.</p> </div> -<p id="footer">npm-update — npm@1.3.26</p> +<p id="footer">npm-update — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-version.html b/deps/npm/html/doc/api/npm-version.html index 2ce68f267..183f78a33 100644 --- a/deps/npm/html/doc/api/npm-version.html +++ b/deps/npm/html/doc/api/npm-version.html @@ -24,7 +24,7 @@ fail if the repo is not clean.</p> parameter. The difference, however, is this function will fail if it does not have exactly one element. The only element should be a version number.</p> </div> -<p id="footer">npm-version — npm@1.3.26</p> +<p id="footer">npm-version — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-view.html b/deps/npm/html/doc/api/npm-view.html index 7e18940d8..5cbb298d7 100644 --- a/deps/npm/html/doc/api/npm-view.html +++ b/deps/npm/html/doc/api/npm-view.html @@ -99,7 +99,7 @@ the field name.</p> <p>corresponding to the list of fields selected.</p> </div> -<p id="footer">npm-view — npm@1.3.26</p> +<p id="footer">npm-view — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm-whoami.html b/deps/npm/html/doc/api/npm-whoami.html index 4fe106df6..6622361b1 100644 --- a/deps/npm/html/doc/api/npm-whoami.html +++ b/deps/npm/html/doc/api/npm-whoami.html @@ -21,7 +21,7 @@ <p>This function is not useful programmatically</p> </div> -<p id="footer">npm-whoami — npm@1.3.26</p> +<p id="footer">npm-whoami — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/api/npm.html b/deps/npm/html/doc/api/npm.html index 3cf15421d..400a03752 100644 --- a/deps/npm/html/doc/api/npm.html +++ b/deps/npm/html/doc/api/npm.html @@ -24,7 +24,7 @@ npm.load([configObject], function (er, npm) { <h2 id="VERSION">VERSION</h2> -<p>1.3.26</p> +<p>1.4.0</p> <h2 id="DESCRIPTION">DESCRIPTION</h2> @@ -92,7 +92,7 @@ method names. Use the <code>npm.deref</code> method to find the real name.</p> <pre><code>var cmd = npm.deref("unp") // cmd === "unpublish"</code></pre> </div> -<p id="footer">npm — npm@1.3.26</p> +<p id="footer">npm — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-adduser.html b/deps/npm/html/doc/cli/npm-adduser.html index 5f3e6369e..09af391be 100644 --- a/deps/npm/html/doc/cli/npm-adduser.html +++ b/deps/npm/html/doc/cli/npm-adduser.html @@ -39,7 +39,7 @@ authorize on a new machine.</p> <ul><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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../cli/npm-owner.html">npm-owner(1)</a></li><li><a href="../cli/npm-whoami.html">npm-whoami(1)</a></li></ul> </div> -<p id="footer">npm-adduser — npm@1.3.26</p> +<p id="footer">npm-adduser — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-bin.html b/deps/npm/html/doc/cli/npm-bin.html index d2924755e..d3d5bc332 100644 --- a/deps/npm/html/doc/cli/npm-bin.html +++ b/deps/npm/html/doc/cli/npm-bin.html @@ -20,7 +20,7 @@ <ul><li><a href="../cli/npm-prefix.html">npm-prefix(1)</a></li><li><a href="../cli/npm-root.html">npm-root(1)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</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="../files/npmrc.html">npmrc(5)</a></li></ul> </div> -<p id="footer">npm-bin — npm@1.3.26</p> +<p id="footer">npm-bin — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-bugs.html b/deps/npm/html/doc/cli/npm-bugs.html index b86051937..2b881c2e0 100644 --- a/deps/npm/html/doc/cli/npm-bugs.html +++ b/deps/npm/html/doc/cli/npm-bugs.html @@ -38,7 +38,7 @@ a <code>package.json</code> in the current folder and use the <code>name</code> <ul><li><a href="../cli/npm-docs.html">npm-docs(1)</a></li><li><a href="../cli/npm-view.html">npm-view(1)</a></li><li><a href="../cli/npm-publish.html">npm-publish(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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li></ul> </div> -<p id="footer">npm-bugs — npm@1.3.26</p> +<p id="footer">npm-bugs — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-build.html b/deps/npm/html/doc/cli/npm-build.html index a0ce72bff..9bf37e2ea 100644 --- a/deps/npm/html/doc/cli/npm-build.html +++ b/deps/npm/html/doc/cli/npm-build.html @@ -25,7 +25,7 @@ A folder containing a <code>package.json</code> file in its root.</li></ul> <ul><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-link.html">npm-link(1)</a></li><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li></ul> </div> -<p id="footer">npm-build — npm@1.3.26</p> +<p id="footer">npm-build — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-bundle.html b/deps/npm/html/doc/cli/npm-bundle.html index 854aa85c2..2ba6db8ce 100644 --- a/deps/npm/html/doc/cli/npm-bundle.html +++ b/deps/npm/html/doc/cli/npm-bundle.html @@ -20,7 +20,7 @@ install packages into the local space.</p> <ul><li><a href="../cli/npm-install.html">npm-install(1)</a></li></ul> </div> -<p id="footer">npm-bundle — npm@1.3.26</p> +<p id="footer">npm-bundle — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-cache.html b/deps/npm/html/doc/cli/npm-cache.html index 5e7535875..86fe20edc 100644 --- a/deps/npm/html/doc/cli/npm-cache.html +++ b/deps/npm/html/doc/cli/npm-cache.html @@ -66,7 +66,7 @@ they do not make an HTTP request to the registry.</p> <ul><li><a href="../files/npm-folders.html">npm-folders(5)</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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li><li><a href="../cli/npm-pack.html">npm-pack(1)</a></li></ul> </div> -<p id="footer">npm-cache — npm@1.3.26</p> +<p id="footer">npm-cache — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-completion.html b/deps/npm/html/doc/cli/npm-completion.html index 7c18defbe..a10118c83 100644 --- a/deps/npm/html/doc/cli/npm-completion.html +++ b/deps/npm/html/doc/cli/npm-completion.html @@ -33,7 +33,7 @@ completions based on the arguments.</p> <ul><li><a href="../misc/npm-developers.html">npm-developers(7)</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../cli/npm.html">npm(1)</a></li></ul> </div> -<p id="footer">npm-completion — npm@1.3.26</p> +<p id="footer">npm-completion — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-config.html b/deps/npm/html/doc/cli/npm-config.html index 71b86165d..525952ed6 100644 --- a/deps/npm/html/doc/cli/npm-config.html +++ b/deps/npm/html/doc/cli/npm-config.html @@ -73,7 +73,7 @@ global config.</p> <ul><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../misc/npm-config.html">npm-config(7)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../files/npmrc.html">npmrc(5)</a></li><li><a href="../cli/npm.html">npm(1)</a></li></ul> </div> -<p id="footer">npm-config — npm@1.3.26</p> +<p id="footer">npm-config — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-dedupe.html b/deps/npm/html/doc/cli/npm-dedupe.html index 67b47edb1..394861819 100644 --- a/deps/npm/html/doc/cli/npm-dedupe.html +++ b/deps/npm/html/doc/cli/npm-dedupe.html @@ -62,7 +62,7 @@ versions.</p> <ul><li><a href="../cli/npm-ls.html">npm-ls(1)</a></li><li><a href="../cli/npm-update.html">npm-update(1)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li></ul> </div> -<p id="footer">npm-dedupe — npm@1.3.26</p> +<p id="footer">npm-dedupe — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-deprecate.html b/deps/npm/html/doc/cli/npm-deprecate.html index df0acec25..bdf5ae380 100644 --- a/deps/npm/html/doc/cli/npm-deprecate.html +++ b/deps/npm/html/doc/cli/npm-deprecate.html @@ -31,7 +31,7 @@ something like this:</p> <ul><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li></ul> </div> -<p id="footer">npm-deprecate — npm@1.3.26</p> +<p id="footer">npm-deprecate — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-docs.html b/deps/npm/html/doc/cli/npm-docs.html index 5a0939fd8..521534788 100644 --- a/deps/npm/html/doc/cli/npm-docs.html +++ b/deps/npm/html/doc/cli/npm-docs.html @@ -41,7 +41,7 @@ the current folder and use the <code>name</code> property.</p> <ul><li><a href="../cli/npm-view.html">npm-view(1)</a></li><li><a href="../cli/npm-publish.html">npm-publish(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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li></ul> </div> -<p id="footer">npm-docs — npm@1.3.26</p> +<p id="footer">npm-docs — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-edit.html b/deps/npm/html/doc/cli/npm-edit.html index 504eeadf6..4b5cacff6 100644 --- a/deps/npm/html/doc/cli/npm-edit.html +++ b/deps/npm/html/doc/cli/npm-edit.html @@ -37,7 +37,7 @@ or <code>"notepad"</code> on Windows.</li><li>Type: path</li></ul> <ul><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../cli/npm-explore.html">npm-explore(1)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</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="../files/npmrc.html">npmrc(5)</a></li></ul> </div> -<p id="footer">npm-edit — npm@1.3.26</p> +<p id="footer">npm-edit — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-explore.html b/deps/npm/html/doc/cli/npm-explore.html index 4b1a24b43..6147f645f 100644 --- a/deps/npm/html/doc/cli/npm-explore.html +++ b/deps/npm/html/doc/cli/npm-explore.html @@ -40,7 +40,7 @@ Windows</li><li>Type: path</li></ul> <ul><li><a href="../cli/npm-submodule.html">npm-submodule(1)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../cli/npm-edit.html">npm-edit(1)</a></li><li><a href="../cli/npm-rebuild.html">npm-rebuild(1)</a></li><li><a href="../cli/npm-build.html">npm-build(1)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li></ul> </div> -<p id="footer">npm-explore — npm@1.3.26</p> +<p id="footer">npm-explore — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-help-search.html b/deps/npm/html/doc/cli/npm-help-search.html index 221b2c9a7..484813c2d 100644 --- a/deps/npm/html/doc/cli/npm-help-search.html +++ b/deps/npm/html/doc/cli/npm-help-search.html @@ -38,7 +38,7 @@ where the terms were found in the documentation.</p> <ul><li><a href="../cli/npm.html">npm(1)</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../cli/npm-help.html">npm-help(1)</a></li></ul> </div> -<p id="footer">npm-help-search — npm@1.3.26</p> +<p id="footer">npm-help-search — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-help.html b/deps/npm/html/doc/cli/npm-help.html index ff1acc705..8075bca51 100644 --- a/deps/npm/html/doc/cli/npm-help.html +++ b/deps/npm/html/doc/cli/npm-help.html @@ -36,7 +36,7 @@ matches are equivalent to specifying a topic name.</p> <ul><li><a href="../cli/npm.html">npm(1)</a></li><li><a href="../../doc/README.html">README</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../cli/npm-help-search.html">npm-help-search(1)</a></li><li><a href="../misc/npm-index.html">npm-index(7)</a></li></ul> </div> -<p id="footer">npm-help — npm@1.3.26</p> +<p id="footer">npm-help — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-init.html b/deps/npm/html/doc/cli/npm-init.html index 0caf433fb..221b9c89b 100644 --- a/deps/npm/html/doc/cli/npm-init.html +++ b/deps/npm/html/doc/cli/npm-init.html @@ -29,7 +29,7 @@ without a really good reason to do so.</p> <ul><li><a href="https://github.com/isaacs/init-package-json">https://github.com/isaacs/init-package-json</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../cli/npm-version.html">npm-version(1)</a></li></ul> </div> -<p id="footer">npm-init — npm@1.3.26</p> +<p id="footer">npm-init — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-install.html b/deps/npm/html/doc/cli/npm-install.html index b3d6de5ca..d31cd1fb9 100644 --- a/deps/npm/html/doc/cli/npm-install.html +++ b/deps/npm/html/doc/cli/npm-install.html @@ -57,9 +57,9 @@ will follow the same rules for resolving dependencies described in <code><a href treat it as a single argument.</p><p>Example:</p><p> npm install sax@">=0.1.0 <0.2.0"</p></li><li><p><code>npm install <git remote url></code>:</p><p>Install a package by cloning a git remote url. The format of the git url is:</p><p> <protocol>://[<user>@]<hostname><separator><path>[#<commit-ish>]</p><p><code><protocol></code> is one of <code>git</code>, <code>git+ssh</code>, <code>git+http</code>, or <code>git+https</code>. If no <code><commit-ish></code> is specified, then <code>master</code> is -used.</p><p>Examples:</p><pre><code> git+ssh://git@github.com:isaacs/npm.git#v1.0.27 - git+https://isaacs@github.com/isaacs/npm.git - git://github.com/isaacs/npm.git#v1.0.27</code></pre></li></ul> +used.</p><p>Examples:</p><pre><code> git+ssh://git@github.com:npm/npm.git#v1.0.27 + git+https://isaacs@github.com/npm/npm.git + git://github.com/npm/npm.git#v1.0.27</code></pre></li></ul> <p>You may combine multiple arguments, and even multiple types of arguments. For example:</p> @@ -149,7 +149,7 @@ affects a real use-case, it will be investigated.</p> <ul><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../cli/npm-update.html">npm-update(1)</a></li><li><a href="../cli/npm-link.html">npm-link(1)</a></li><li><a href="../cli/npm-rebuild.html">npm-rebuild(1)</a></li><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../cli/npm-build.html">npm-build(1)</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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../cli/npm-tag.html">npm-tag(1)</a></li><li><a href="../cli/npm-rm.html">npm-rm(1)</a></li><li><a href="../cli/npm-shrinkwrap.html">npm-shrinkwrap(1)</a></li></ul> </div> -<p id="footer">npm-install — npm@1.3.26</p> +<p id="footer">npm-install — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-link.html b/deps/npm/html/doc/cli/npm-link.html index 657587863..0aed749e2 100644 --- a/deps/npm/html/doc/cli/npm-link.html +++ b/deps/npm/html/doc/cli/npm-link.html @@ -62,7 +62,7 @@ installation target into your project's <code>node_modules</code> folder.</p <ul><li><a href="../misc/npm-developers.html">npm-developers(7)</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</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="../files/npmrc.html">npmrc(5)</a></li></ul> </div> -<p id="footer">npm-link — npm@1.3.26</p> +<p id="footer">npm-link — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-ls.html b/deps/npm/html/doc/cli/npm-ls.html index 21e83912a..969f3fb76 100644 --- a/deps/npm/html/doc/cli/npm-ls.html +++ b/deps/npm/html/doc/cli/npm-ls.html @@ -25,7 +25,7 @@ limit the results to only the paths to the packages named. Note that nested packages will <em>also</em> show the paths to the specified packages. For example, running <code>npm ls promzard</code> in npm's source tree will show:</p> -<pre><code>npm@1.3.26 /path/to/npm +<pre><code>npm@1.4.0 /path/to/npm └─┬ init-package-json@0.0.4 └── promzard@0.1.5</code></pre> @@ -64,11 +64,17 @@ recognize potential forks of a project.</p> <p>List packages in the global install prefix instead of in the current project.</p> +<h3 id="depth">depth</h3> + +<ul><li>Type: Int</li></ul> + +<p>Max display depth of the dependency tree.</p> + <h2 id="SEE-ALSO">SEE ALSO</h2> <ul><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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-link.html">npm-link(1)</a></li><li><a href="../cli/npm-prune.html">npm-prune(1)</a></li><li><a href="../cli/npm-outdated.html">npm-outdated(1)</a></li><li><a href="../cli/npm-update.html">npm-update(1)</a></li></ul> </div> -<p id="footer">npm-ls — npm@1.3.26</p> +<p id="footer">npm-ls — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-outdated.html b/deps/npm/html/doc/cli/npm-outdated.html index e717e1dcc..67947bebf 100644 --- a/deps/npm/html/doc/cli/npm-outdated.html +++ b/deps/npm/html/doc/cli/npm-outdated.html @@ -21,11 +21,44 @@ packages are currently outdated.</p> version specified in the package.json, the field 'latest' the very latest version of the package.</p> +<h2 id="CONFIGURATION">CONFIGURATION</h2> + +<h3 id="json">json</h3> + +<ul><li>Default: false</li><li>Type: Boolean</li></ul> + +<p>Show information in JSON format.</p> + +<h3 id="long">long</h3> + +<ul><li>Default: false</li><li>Type: Boolean</li></ul> + +<p>Show extended information.</p> + +<h3 id="parseable">parseable</h3> + +<ul><li>Default: false</li><li>Type: Boolean</li></ul> + +<p>Show parseable output instead of tree view.</p> + +<h3 id="global">global</h3> + +<ul><li>Default: false</li><li>Type: Boolean</li></ul> + +<p>Check packages in the global install prefix instead of in the current +project.</p> + +<h3 id="depth">depth</h3> + +<ul><li>Type: Int</li></ul> + +<p>Max depth for checking dependency tree.</p> + <h2 id="SEE-ALSO">SEE ALSO</h2> <ul><li><a href="../cli/npm-update.html">npm-update(1)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</a></li></ul> </div> -<p id="footer">npm-outdated — npm@1.3.26</p> +<p id="footer">npm-outdated — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-owner.html b/deps/npm/html/doc/cli/npm-owner.html index 077ba41fe..674cd83b6 100644 --- a/deps/npm/html/doc/cli/npm-owner.html +++ b/deps/npm/html/doc/cli/npm-owner.html @@ -34,7 +34,7 @@ that is not implemented at this time.</p> <ul><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li><li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li><li><a href="../misc/npm-disputes.html">npm-disputes(7)</a></li></ul> </div> -<p id="footer">npm-owner — npm@1.3.26</p> +<p id="footer">npm-owner — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-pack.html b/deps/npm/html/doc/cli/npm-pack.html index 085a68779..1a971aada 100644 --- a/deps/npm/html/doc/cli/npm-pack.html +++ b/deps/npm/html/doc/cli/npm-pack.html @@ -29,7 +29,7 @@ overwritten the second time.</p> <ul><li><a href="../cli/npm-cache.html">npm-cache(1)</a></li><li><a href="../cli/npm-publish.html">npm-publish(1)</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="../files/npmrc.html">npmrc(5)</a></li></ul> </div> -<p id="footer">npm-pack — npm@1.3.26</p> +<p id="footer">npm-pack — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-prefix.html b/deps/npm/html/doc/cli/npm-prefix.html index e7dadbe78..7f3ce2c92 100644 --- a/deps/npm/html/doc/cli/npm-prefix.html +++ b/deps/npm/html/doc/cli/npm-prefix.html @@ -20,7 +20,7 @@ <ul><li><a href="../cli/npm-root.html">npm-root(1)</a></li><li><a href="../cli/npm-bin.html">npm-bin(1)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</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="../files/npmrc.html">npmrc(5)</a></li></ul> </div> -<p id="footer">npm-prefix — npm@1.3.26</p> +<p id="footer">npm-prefix — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-prune.html b/deps/npm/html/doc/cli/npm-prune.html index 9c1adbfe7..a6b2a62dd 100644 --- a/deps/npm/html/doc/cli/npm-prune.html +++ b/deps/npm/html/doc/cli/npm-prune.html @@ -29,7 +29,7 @@ packages specified in your <code>devDependencies</code>.</p> <ul><li><a href="../cli/npm-rm.html">npm-rm(1)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../cli/npm-ls.html">npm-ls(1)</a></li></ul> </div> -<p id="footer">npm-prune — npm@1.3.26</p> +<p id="footer">npm-prune — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-publish.html b/deps/npm/html/doc/cli/npm-publish.html index 51a5d88bf..19aaa984e 100644 --- a/deps/npm/html/doc/cli/npm-publish.html +++ b/deps/npm/html/doc/cli/npm-publish.html @@ -29,7 +29,7 @@ the registry. Overwrites when the "--force" flag is set.</p> <ul><li><a href="../misc/npm-registry.html">npm-registry(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><li><a href="../cli/npm-tag.html">npm-tag(1)</a></li></ul> </div> -<p id="footer">npm-publish — npm@1.3.26</p> +<p id="footer">npm-publish — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-rebuild.html b/deps/npm/html/doc/cli/npm-rebuild.html index 186aacf76..212c68932 100644 --- a/deps/npm/html/doc/cli/npm-rebuild.html +++ b/deps/npm/html/doc/cli/npm-rebuild.html @@ -26,7 +26,7 @@ the new binary.</p> <ul><li><a href="../cli/npm-build.html">npm-build(1)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li></ul> </div> -<p id="footer">npm-rebuild — npm@1.3.26</p> +<p id="footer">npm-rebuild — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-repo.html b/deps/npm/html/doc/cli/npm-repo.html index 8bb21fa79..f898a9285 100644 --- a/deps/npm/html/doc/cli/npm-repo.html +++ b/deps/npm/html/doc/cli/npm-repo.html @@ -32,7 +32,7 @@ a <code>package.json</code> in the current folder and use the <code>name</code> <ul><li><a href="../cli/npm-docs.html">npm-docs(1)</a></li><li><a href="../cli/npm-config.html">npm-config(1)</a></li></ul> </div> -<p id="footer">npm-repo — npm@1.3.26</p> +<p id="footer">npm-repo — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-restart.html b/deps/npm/html/doc/cli/npm-restart.html index 5d8209419..ea609d1ed 100644 --- a/deps/npm/html/doc/cli/npm-restart.html +++ b/deps/npm/html/doc/cli/npm-restart.html @@ -24,7 +24,7 @@ the "start" script.</p> <ul><li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../cli/npm-test.html">npm-test(1)</a></li><li><a href="../cli/npm-start.html">npm-start(1)</a></li><li><a href="../cli/npm-stop.html">npm-stop(1)</a></li></ul> </div> -<p id="footer">npm-restart — npm@1.3.26</p> +<p id="footer">npm-restart — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-rm.html b/deps/npm/html/doc/cli/npm-rm.html index bea9006b9..e20601bee 100644 --- a/deps/npm/html/doc/cli/npm-rm.html +++ b/deps/npm/html/doc/cli/npm-rm.html @@ -24,7 +24,7 @@ on its behalf.</p> <ul><li><a href="../cli/npm-prune.html">npm-prune(1)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</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="../files/npmrc.html">npmrc(5)</a></li></ul> </div> -<p id="footer">npm-rm — npm@1.3.26</p> +<p id="footer">npm-rm — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-root.html b/deps/npm/html/doc/cli/npm-root.html index 01c275337..519b5f0af 100644 --- a/deps/npm/html/doc/cli/npm-root.html +++ b/deps/npm/html/doc/cli/npm-root.html @@ -20,7 +20,7 @@ <ul><li><a href="../cli/npm-prefix.html">npm-prefix(1)</a></li><li><a href="../cli/npm-bin.html">npm-bin(1)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</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="../files/npmrc.html">npmrc(5)</a></li></ul> </div> -<p id="footer">npm-root — npm@1.3.26</p> +<p id="footer">npm-root — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-run-script.html b/deps/npm/html/doc/cli/npm-run-script.html index bcb1d3eea..8882fce7a 100644 --- a/deps/npm/html/doc/cli/npm-run-script.html +++ b/deps/npm/html/doc/cli/npm-run-script.html @@ -23,7 +23,7 @@ called directly, as well.</p> <ul><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../cli/npm-test.html">npm-test(1)</a></li><li><a href="../cli/npm-start.html">npm-start(1)</a></li><li><a href="../cli/npm-restart.html">npm-restart(1)</a></li><li><a href="../cli/npm-stop.html">npm-stop(1)</a></li></ul> </div> -<p id="footer">npm-run-script — npm@1.3.26</p> +<p id="footer">npm-run-script — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-search.html b/deps/npm/html/doc/cli/npm-search.html index 26992fd94..a1d99cef2 100644 --- a/deps/npm/html/doc/cli/npm-search.html +++ b/deps/npm/html/doc/cli/npm-search.html @@ -37,7 +37,7 @@ fall on multiple lines.</p> <ul><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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../cli/npm-view.html">npm-view(1)</a></li></ul> </div> -<p id="footer">npm-search — npm@1.3.26</p> +<p id="footer">npm-search — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-shrinkwrap.html b/deps/npm/html/doc/cli/npm-shrinkwrap.html index 1d7854ffb..f89abdcd2 100644 --- a/deps/npm/html/doc/cli/npm-shrinkwrap.html +++ b/deps/npm/html/doc/cli/npm-shrinkwrap.html @@ -183,7 +183,7 @@ contents rather than versions.</p> <ul><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../cli/npm-ls.html">npm-ls(1)</a></li></ul> </div> -<p id="footer">npm-shrinkwrap — npm@1.3.26</p> +<p id="footer">npm-shrinkwrap — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-star.html b/deps/npm/html/doc/cli/npm-star.html index b16b08728..649b049a1 100644 --- a/deps/npm/html/doc/cli/npm-star.html +++ b/deps/npm/html/doc/cli/npm-star.html @@ -26,7 +26,7 @@ a vaguely positive way to show that you care.</p> <ul><li><a href="../cli/npm-view.html">npm-view(1)</a></li><li><a href="../cli/npm-whoami.html">npm-whoami(1)</a></li><li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li></ul> </div> -<p id="footer">npm-star — npm@1.3.26</p> +<p id="footer">npm-star — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-stars.html b/deps/npm/html/doc/cli/npm-stars.html index a9f26162e..fad0529c6 100644 --- a/deps/npm/html/doc/cli/npm-stars.html +++ b/deps/npm/html/doc/cli/npm-stars.html @@ -25,7 +25,7 @@ you will most certainly enjoy this command.</p> <ul><li><a href="../cli/npm-star.html">npm-star(1)</a></li><li><a href="../cli/npm-view.html">npm-view(1)</a></li><li><a href="../cli/npm-whoami.html">npm-whoami(1)</a></li><li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li></ul> </div> -<p id="footer">npm-stars — npm@1.3.26</p> +<p id="footer">npm-stars — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-start.html b/deps/npm/html/doc/cli/npm-start.html index 894468d84..d7f0c16b6 100644 --- a/deps/npm/html/doc/cli/npm-start.html +++ b/deps/npm/html/doc/cli/npm-start.html @@ -20,7 +20,7 @@ <ul><li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../cli/npm-test.html">npm-test(1)</a></li><li><a href="../cli/npm-restart.html">npm-restart(1)</a></li><li><a href="../cli/npm-stop.html">npm-stop(1)</a></li></ul> </div> -<p id="footer">npm-start — npm@1.3.26</p> +<p id="footer">npm-start — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-stop.html b/deps/npm/html/doc/cli/npm-stop.html index 7bc73f1c6..10dabb023 100644 --- a/deps/npm/html/doc/cli/npm-stop.html +++ b/deps/npm/html/doc/cli/npm-stop.html @@ -20,7 +20,7 @@ <ul><li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../cli/npm-test.html">npm-test(1)</a></li><li><a href="../cli/npm-start.html">npm-start(1)</a></li><li><a href="../cli/npm-restart.html">npm-restart(1)</a></li></ul> </div> -<p id="footer">npm-stop — npm@1.3.26</p> +<p id="footer">npm-stop — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-submodule.html b/deps/npm/html/doc/cli/npm-submodule.html index 9fa58cb01..b99c17100 100644 --- a/deps/npm/html/doc/cli/npm-submodule.html +++ b/deps/npm/html/doc/cli/npm-submodule.html @@ -33,7 +33,7 @@ dependencies into the submodule folder.</p> <ul><li><a href="../files/package.json.html">package.json(5)</a></li><li>git help submodule</li></ul> </div> -<p id="footer">npm-submodule — npm@1.3.26</p> +<p id="footer">npm-submodule — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-tag.html b/deps/npm/html/doc/cli/npm-tag.html index f76a80c41..9e23051ee 100644 --- a/deps/npm/html/doc/cli/npm-tag.html +++ b/deps/npm/html/doc/cli/npm-tag.html @@ -34,7 +34,7 @@ of using a specific version number:</p> <ul><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="../files/npmrc.html">npmrc(5)</a></li></ul> </div> -<p id="footer">npm-tag — npm@1.3.26</p> +<p id="footer">npm-tag — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-test.html b/deps/npm/html/doc/cli/npm-test.html index a7a68eab9..25388938b 100644 --- a/deps/npm/html/doc/cli/npm-test.html +++ b/deps/npm/html/doc/cli/npm-test.html @@ -24,7 +24,7 @@ true.</p> <ul><li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../cli/npm-start.html">npm-start(1)</a></li><li><a href="../cli/npm-restart.html">npm-restart(1)</a></li><li><a href="../cli/npm-stop.html">npm-stop(1)</a></li></ul> </div> -<p id="footer">npm-test — npm@1.3.26</p> +<p id="footer">npm-test — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-uninstall.html b/deps/npm/html/doc/cli/npm-uninstall.html index cd2cba834..487e4ed9a 100644 --- a/deps/npm/html/doc/cli/npm-uninstall.html +++ b/deps/npm/html/doc/cli/npm-uninstall.html @@ -22,7 +22,7 @@ on its behalf.</p> <ul><li><a href="../cli/npm-prune.html">npm-prune(1)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</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="../files/npmrc.html">npmrc(5)</a></li></ul> </div> -<p id="footer">npm-uninstall — npm@1.3.26</p> +<p id="footer">npm-uninstall — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-unpublish.html b/deps/npm/html/doc/cli/npm-unpublish.html index 464509523..556c9c1d0 100644 --- a/deps/npm/html/doc/cli/npm-unpublish.html +++ b/deps/npm/html/doc/cli/npm-unpublish.html @@ -34,7 +34,7 @@ the root package entry is removed from the registry entirely.</p> <ul><li><a href="../cli/npm-deprecate.html">npm-deprecate(1)</a></li><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li><li><a href="../misc/npm-registry.html">npm-registry(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></ul> </div> -<p id="footer">npm-unpublish — npm@1.3.26</p> +<p id="footer">npm-unpublish — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-update.html b/deps/npm/html/doc/cli/npm-update.html index 31b889f7c..9c908bfd1 100644 --- a/deps/npm/html/doc/cli/npm-update.html +++ b/deps/npm/html/doc/cli/npm-update.html @@ -26,7 +26,7 @@ If no package name is specified, all packages in the specified location (global <ul><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-outdated.html">npm-outdated(1)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../cli/npm-ls.html">npm-ls(1)</a></li></ul> </div> -<p id="footer">npm-update — npm@1.3.26</p> +<p id="footer">npm-update — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-version.html b/deps/npm/html/doc/cli/npm-version.html index c1c50f1e4..8b60a0eca 100644 --- a/deps/npm/html/doc/cli/npm-version.html +++ b/deps/npm/html/doc/cli/npm-version.html @@ -49,7 +49,7 @@ Enter passphrase:</code></pre> <ul><li><a href="../cli/npm-init.html">npm-init(1)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../misc/semver.html">semver(7)</a></li></ul> </div> -<p id="footer">npm-version — npm@1.3.26</p> +<p id="footer">npm-version — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-view.html b/deps/npm/html/doc/cli/npm-view.html index abc333a67..7770d4471 100644 --- a/deps/npm/html/doc/cli/npm-view.html +++ b/deps/npm/html/doc/cli/npm-view.html @@ -91,7 +91,7 @@ the field name.</p> <ul><li><a href="../cli/npm-search.html">npm-search(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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../cli/npm-docs.html">npm-docs(1)</a></li></ul> </div> -<p id="footer">npm-view — npm@1.3.26</p> +<p id="footer">npm-view — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm-whoami.html b/deps/npm/html/doc/cli/npm-whoami.html index 45a1cb968..28ef7b122 100644 --- a/deps/npm/html/doc/cli/npm-whoami.html +++ b/deps/npm/html/doc/cli/npm-whoami.html @@ -20,7 +20,7 @@ <ul><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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li></ul> </div> -<p id="footer">npm-whoami — npm@1.3.26</p> +<p id="footer">npm-whoami — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cli/npm.html b/deps/npm/html/doc/cli/npm.html index b458c24d1..b3ac7b300 100644 --- a/deps/npm/html/doc/cli/npm.html +++ b/deps/npm/html/doc/cli/npm.html @@ -14,7 +14,7 @@ <h2 id="VERSION">VERSION</h2> -<p>1.3.26</p> +<p>1.4.0</p> <h2 id="DESCRIPTION">DESCRIPTION</h2> @@ -104,14 +104,14 @@ easily by doing <code>npm view npm contributors</code>.</p> <p>If you would like to contribute, but don't know what to work on, check the issues list or ask on the mailing list.</p> -<ul><li><a href="http://github.com/isaacs/npm/issues">http://github.com/isaacs/npm/issues</a></li><li><a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li></ul> +<ul><li><a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li><li><a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li></ul> <h2 id="BUGS">BUGS</h2> <p>When you find issues, please report them:</p> <ul><li>web: -<a href="http://github.com/isaacs/npm/issues">http://github.com/isaacs/npm/issues</a></li><li>email: +<a href="http://github.com/npm/npm/issues">http://github.com/npm/npm/issues</a></li><li>email: <a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com</a></li></ul> <p>Be sure to include <em>all</em> of the output from the npm command that didn't work @@ -131,7 +131,7 @@ will no doubt tell you to put the output in a gist or email.</p> <ul><li><a href="../cli/npm-help.html">npm-help(1)</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../../doc/README.html">README</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../misc/npm-index.html">npm-index(7)</a></li><li><a href="../api/npm.html">npm(3)</a></li></ul> </div> -<p id="footer">npm — npm@1.3.26</p> +<p id="footer">npm — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/files/npm-folders.html b/deps/npm/html/doc/files/npm-folders.html index 77a56517a..15252c75c 100644 --- a/deps/npm/html/doc/files/npm-folders.html +++ b/deps/npm/html/doc/files/npm-folders.html @@ -205,7 +205,7 @@ cannot be found elsewhere. See <code><a href="../files/package.json.html">packa <ul><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-pack.html">npm-pack(1)</a></li><li><a href="../cli/npm-cache.html">npm-cache(1)</a></li><li><a href="../cli/npm-config.html">npm-config(1)</a></li><li><a href="../files/npmrc.html">npmrc(5)</a></li><li><a href="../misc/npm-config.html">npm-config(7)</a></li><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li></ul> </div> -<p id="footer">npm-folders — npm@1.3.26</p> +<p id="footer">npm-folders — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/files/npm-global.html b/deps/npm/html/doc/files/npm-global.html index 77a56517a..15252c75c 100644 --- a/deps/npm/html/doc/files/npm-global.html +++ b/deps/npm/html/doc/files/npm-global.html @@ -205,7 +205,7 @@ cannot be found elsewhere. See <code><a href="../files/package.json.html">packa <ul><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-pack.html">npm-pack(1)</a></li><li><a href="../cli/npm-cache.html">npm-cache(1)</a></li><li><a href="../cli/npm-config.html">npm-config(1)</a></li><li><a href="../files/npmrc.html">npmrc(5)</a></li><li><a href="../misc/npm-config.html">npm-config(7)</a></li><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li></ul> </div> -<p id="footer">npm-folders — npm@1.3.26</p> +<p id="footer">npm-folders — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/files/npm-json.html b/deps/npm/html/doc/files/npm-json.html index 90454e2fa..9bbda0357 100644 --- a/deps/npm/html/doc/files/npm-json.html +++ b/deps/npm/html/doc/files/npm-json.html @@ -260,7 +260,7 @@ command will be able to find you.</p> <pre><code>"repository" : { "type" : "git" - , "url" : "http://github.com/isaacs/npm.git" + , "url" : "http://github.com/npm/npm.git" } "repository" : @@ -546,7 +546,7 @@ ignored.</p></li></ul> <ul><li><a href="../misc/semver.html">semver(7)</a></li><li><a href="../cli/npm-init.html">npm-init(1)</a></li><li><a href="../cli/npm-version.html">npm-version(1)</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="../cli/npm-help.html">npm-help(1)</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li><li><a href="../cli/npm-rm.html">npm-rm(1)</a></li></ul> </div> -<p id="footer">package.json — npm@1.3.26</p> +<p id="footer">package.json — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/files/npmrc.html b/deps/npm/html/doc/files/npmrc.html index 51765121b..84ce38ed3 100644 --- a/deps/npm/html/doc/files/npmrc.html +++ b/deps/npm/html/doc/files/npmrc.html @@ -59,7 +59,7 @@ manner.</p> <ul><li><a href="../files/npm-folders.html">npm-folders(5)</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="../files/package.json.html">package.json(5)</a></li><li><a href="../cli/npm.html">npm(1)</a></li></ul> </div> -<p id="footer">npmrc — npm@1.3.26</p> +<p id="footer">npmrc — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html index 90454e2fa..9bbda0357 100644 --- a/deps/npm/html/doc/files/package.json.html +++ b/deps/npm/html/doc/files/package.json.html @@ -260,7 +260,7 @@ command will be able to find you.</p> <pre><code>"repository" : { "type" : "git" - , "url" : "http://github.com/isaacs/npm.git" + , "url" : "http://github.com/npm/npm.git" } "repository" : @@ -546,7 +546,7 @@ ignored.</p></li></ul> <ul><li><a href="../misc/semver.html">semver(7)</a></li><li><a href="../cli/npm-init.html">npm-init(1)</a></li><li><a href="../cli/npm-version.html">npm-version(1)</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="../cli/npm-help.html">npm-help(1)</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li><li><a href="../cli/npm-rm.html">npm-rm(1)</a></li></ul> </div> -<p id="footer">package.json — npm@1.3.26</p> +<p id="footer">package.json — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html index 9f1ffc606..9b75e83c4 100644 --- a/deps/npm/html/doc/index.html +++ b/deps/npm/html/doc/index.html @@ -416,7 +416,7 @@ <p>The semantic versioner for npm</p> </div> -<p id="footer">npm-index — npm@1.3.26</p> +<p id="footer">npm-index — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/npm-coding-style.html b/deps/npm/html/doc/misc/npm-coding-style.html index de21456e4..58fef5474 100644 --- a/deps/npm/html/doc/misc/npm-coding-style.html +++ b/deps/npm/html/doc/misc/npm-coding-style.html @@ -137,7 +137,7 @@ string message to the callback. Stack traces are handy.</p> <h2 id="Logging">Logging</h2> -<p>Logging is done using the <a href="https://github.com/isaacs/npmlog">npmlog</a> +<p>Logging is done using the <a href="https://github.com/npm/npmlog">npmlog</a> utility.</p> <p>Please clean up logs when they are no longer helpful. In particular, @@ -182,7 +182,7 @@ set to anything."</p> <ul><li><a href="../misc/npm-developers.html">npm-developers(7)</a></li><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../cli/npm.html">npm(1)</a></li></ul> </div> -<p id="footer">npm-coding-style — npm@1.3.26</p> +<p id="footer">npm-coding-style — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/npm-config.html b/deps/npm/html/doc/misc/npm-config.html index 79db69ac2..f70657860 100644 --- a/deps/npm/html/doc/misc/npm-config.html +++ b/deps/npm/html/doc/misc/npm-config.html @@ -346,7 +346,7 @@ for more information, or <a href="../cli/npm-init.html">npm-init(1)</a>.</p> <h3 id="init-license">init.license</h3> -<ul><li>Default: "BSD-2-Clause"</li><li>Type: String</li></ul> +<ul><li>Default: "ISC"</li><li>Type: String</li></ul> <p>The value <code>npm init</code> should use by default for the package license.</p> @@ -402,7 +402,7 @@ The default is "http", which shows http, warn, and error output.</p> <ul><li>Default: process.stderr</li><li>Type: Stream</li></ul> <p>This is the stream that is passed to the -<a href="https://github.com/isaacs/npmlog">npmlog</a> module at run time.</p> +<a href="https://github.com/npm/npmlog">npmlog</a> module at run time.</p> <p>It cannot be set from the command line, but if you are using npm programmatically, you may wish to send logs to somewhere other than @@ -710,7 +710,7 @@ hash, and exit successfully.</p> <ul><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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</a></li><li><a href="../cli/npm.html">npm(1)</a></li></ul> </div> -<p id="footer">npm-config — npm@1.3.26</p> +<p id="footer">npm-config — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/npm-developers.html b/deps/npm/html/doc/misc/npm-developers.html index c7e5a6e05..91cbaad74 100644 --- a/deps/npm/html/doc/misc/npm-developers.html +++ b/deps/npm/html/doc/misc/npm-developers.html @@ -174,7 +174,7 @@ from a fresh checkout.</p> <ul><li><a href="../misc/npm-faq.html">npm-faq(7)</a></li><li><a href="../cli/npm.html">npm(1)</a></li><li><a href="../cli/npm-init.html">npm-init(1)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../misc/npm-scripts.html">npm-scripts(7)</a></li><li><a href="../cli/npm-publish.html">npm-publish(1)</a></li><li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li></ul> </div> -<p id="footer">npm-developers — npm@1.3.26</p> +<p id="footer">npm-developers — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/npm-disputes.html b/deps/npm/html/doc/misc/npm-disputes.html index 451f3acab..76a0208a9 100644 --- a/deps/npm/html/doc/misc/npm-disputes.html +++ b/deps/npm/html/doc/misc/npm-disputes.html @@ -91,7 +91,7 @@ things into it.</li></ol> <ul><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li><li><a href="../cli/npm-owner.html">npm-owner(1)</a></li></ul> </div> -<p id="footer">npm-disputes — npm@1.3.26</p> +<p id="footer">npm-disputes — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/npm-faq.html b/deps/npm/html/doc/misc/npm-faq.html index b8318920d..956422669 100644 --- a/deps/npm/html/doc/misc/npm-faq.html +++ b/deps/npm/html/doc/misc/npm-faq.html @@ -307,12 +307,12 @@ 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 me know by emailing <a href="mailto:i@izs.me">i@izs.me</a> or posting -an issue at <a href="https://github.com/isaacs/npm/issues">https://github.com/isaacs/npm/issues</a>. We'll have +an issue at <a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a>. We'll have someone kick it or something.</p> <h2 id="Why-no-namespaces">Why no namespaces?</h2> -<p>Please see this discussion: <a href="https://github.com/isaacs/npm/issues/798">https://github.com/isaacs/npm/issues/798</a></p> +<p>Please see this discussion: <a href="https://github.com/npm/npm/issues/798">https://github.com/npm/npm/issues/798</a></p> <p>tl;dr - It doesn't actually make things better, and can make them worse.</p> @@ -330,7 +330,7 @@ There is not sufficient need to impose namespace rules on everyone.</p> <p>Post an issue on the github project:</p> -<ul><li><a href="https://github.com/isaacs/npm/issues">https://github.com/isaacs/npm/issues</a></li></ul> +<ul><li><a href="https://github.com/npm/npm/issues">https://github.com/npm/npm/issues</a></li></ul> <h2 id="Why-does-npm-hate-me">Why does npm hate me?</h2> @@ -340,7 +340,7 @@ There is not sufficient need to impose namespace rules on everyone.</p> <ul><li><a href="../cli/npm.html">npm(1)</a></li><li><a href="../misc/npm-developers.html">npm-developers(7)</a></li><li><a href="../files/package.json.html">package.json(5)</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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../misc/npm-config.html">npm-config(7)</a></li><li><a href="../files/npm-folders.html">npm-folders(5)</a></li></ul> </div> -<p id="footer">npm-faq — npm@1.3.26</p> +<p id="footer">npm-faq — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/npm-index.html b/deps/npm/html/doc/misc/npm-index.html index 0949cdfe3..357691095 100644 --- a/deps/npm/html/doc/misc/npm-index.html +++ b/deps/npm/html/doc/misc/npm-index.html @@ -416,7 +416,7 @@ <p>The semantic versioner for npm</p> </div> -<p id="footer">npm-index — npm@1.3.26</p> +<p id="footer">npm-index — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/npm-registry.html b/deps/npm/html/doc/misc/npm-registry.html index 8463fbc92..d8003e845 100644 --- a/deps/npm/html/doc/misc/npm-registry.html +++ b/deps/npm/html/doc/misc/npm-registry.html @@ -21,7 +21,7 @@ account information.</p> <p>The official public npm registry is at <a href="http://registry.npmjs.org/">http://registry.npmjs.org/</a>. It is powered by a CouchDB database at <a href="http://isaacs.iriscouch.com/registry">http://isaacs.iriscouch.com/registry</a>. The code for the couchapp is -available at <a href="http://github.com/isaacs/npmjs.org">http://github.com/isaacs/npmjs.org</a>. npm user accounts +available at <a href="http://github.com/npm/npmjs.org">http://github.com/npm/npmjs.org</a>. npm user accounts are CouchDB users, stored in the <a href="http://isaacs.iriscouch.com/_users">http://isaacs.iriscouch.com/_users</a> database.</p> @@ -71,7 +71,7 @@ effectively implement the entire CouchDB API anyway.</p> <ul><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="../files/npmrc.html">npmrc(5)</a></li><li><a href="../misc/npm-developers.html">npm-developers(7)</a></li><li><a href="../misc/npm-disputes.html">npm-disputes(7)</a></li></ul> </div> -<p id="footer">npm-registry — npm@1.3.26</p> +<p id="footer">npm-registry — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html index cdca4cd69..6619ae651 100644 --- a/deps/npm/html/doc/misc/npm-scripts.html +++ b/deps/npm/html/doc/misc/npm-scripts.html @@ -223,7 +223,7 @@ the user will sudo the npm command in question.</li></ul> <ul><li><a href="../cli/npm-run-script.html">npm-run-script(1)</a></li><li><a href="../files/package.json.html">package.json(5)</a></li><li><a href="../misc/npm-developers.html">npm-developers(7)</a></li><li><a href="../cli/npm-install.html">npm-install(1)</a></li></ul> </div> -<p id="footer">npm-scripts — npm@1.3.26</p> +<p id="footer">npm-scripts — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/removing-npm.html b/deps/npm/html/doc/misc/removing-npm.html index 4cd4a40c3..7a41f684a 100644 --- a/deps/npm/html/doc/misc/removing-npm.html +++ b/deps/npm/html/doc/misc/removing-npm.html @@ -58,7 +58,7 @@ modules. To track those down, you can do the following:</p> <ul><li><a href="../../doc/README.html">README</a></li><li><a href="../cli/npm-rm.html">npm-rm(1)</a></li><li><a href="../cli/npm-prune.html">npm-prune(1)</a></li></ul> </div> -<p id="footer">removing-npm — npm@1.3.26</p> +<p id="footer">removing-npm — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/misc/semver.html b/deps/npm/html/doc/misc/semver.html index cdcc393ab..ffddd7b3a 100644 --- a/deps/npm/html/doc/misc/semver.html +++ b/deps/npm/html/doc/misc/semver.html @@ -94,7 +94,7 @@ in descending order when passed to Array.sort().</li></ul> range.</li><li>maxSatisfying(versions, range): Return the highest version in the list that satisfies the range, or null if none of them do.</li></ul> </div> -<p id="footer">semver — npm@1.3.26</p> +<p id="footer">semver — npm@1.4.0</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/index.html b/deps/npm/html/index.html index b4a22be23..bf0a3f0b6 100644 --- a/deps/npm/html/index.html +++ b/deps/npm/html/index.html @@ -69,7 +69,7 @@ code { background:#fff ; outline: 1px solid #ccc; padding:0 2px; } <h2>Fancy Install</h2> <ol> - <li><a href="https://github.com/isaacs/npm">Get the code.</a> + <li><a href="https://github.com/npm/npm">Get the code.</a> <li>Do what <a href="https://npmjs.org/doc/README.html">the README</a> says to do. </ol> @@ -88,7 +88,7 @@ program that you run on your computer!</p> <li><a href="doc/faq.html">FAQ</a> <li><a href="https://search.npmjs.org/">Search for Packages</a> <li><a href="https://groups.google.com/group/npm-">Mailing List</a> - <li><a href="https://github.com/isaacs/npm/issues">Bugs</a> + <li><a href="https://github.com/npm/npm/issues">Bugs</a> </ul> </body> diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js index c182817e4..cc4546083 100644 --- a/deps/npm/lib/cache.js +++ b/deps/npm/lib/cache.js @@ -21,8 +21,8 @@ cache folders: 1. urls: http!/server.com/path/to/thing 2. c:\path\to\thing: file!/c!/path/to/thing 3. /path/to/thing: file!/path/to/thing -4. git@ private: git_github.com!isaacs/npm -5. git://public: git!/github.com/isaacs/npm +4. git@ private: git_github.com!npm/npm +5. git://public: git!/github.com/npm/npm 6. git+blah:// git-blah!/server.com/foo/bar adding a folder: @@ -508,9 +508,30 @@ function archiveGitRemote (p, u, co, origUrl, cb) { } log.verbose("git fetch -a origin ("+u+")", stdout) tmp = path.join(npm.tmp, Date.now()+"-"+Math.random(), "tmp.tgz") - resolveHead() + verifyOwnership() }) + function verifyOwnership() { + if (process.platform === "win32") { + log.silly("verifyOwnership", "skipping for windows") + resolveHead() + } else { + getCacheStat(function(er, cs) { + if (er) { + log.error("Could not get cache stat") + return cb(er) + } + chownr(p, cs.uid, cs.gid, function(er) { + if (er) { + log.error("Failed to change folder ownership under npm cache for %s", p) + return cb(er) + } + resolveHead() + }) + }) + } + } + function resolveHead () { exec(git, resolve, {cwd: p, env: env}, function (er, stdout, stderr) { stdout = (stdout + "\n" + stderr).trim() @@ -523,7 +544,7 @@ function archiveGitRemote (p, u, co, origUrl, cb) { parsed.hash = stdout resolved = url.format(parsed) - // https://github.com/isaacs/npm/issues/3224 + // https://github.com/npm/npm/issues/3224 // node incorrectly sticks a / at the start of the path // We know that the host won't change, so split and detect this var spo = origUrl.split(parsed.host) diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js index 9270303a6..f0604a9ce 100644 --- a/deps/npm/lib/install.js +++ b/deps/npm/lib/install.js @@ -73,6 +73,7 @@ var npm = require("./npm.js") , lifecycle = require("./utils/lifecycle.js") , archy = require("archy") , isGitUrl = require("./utils/is-git-url.js") + , npmInstallChecks = require("npm-install-checks") function install (args, cb_) { var hasArguments = !!args.length @@ -842,12 +843,16 @@ function installOne_ (target, where, context, cb) { } installOnesInProgress[target.name].push(where) var indexOfIOIP = installOnesInProgress[target.name].length - 1 + , force = npm.config.get("force") + , nodeVersion = npm.config.get("node-version") + , strict = npm.config.get("engine-strict") + , c = npmInstallChecks chain - ( [ [checkEngine, target] - , [checkPlatform, target] - , [checkCycle, target, context.ancestors] - , [checkGit, targetFolder] + ( [ [c.checkEngine, target, npm.version, nodeVersion, force, strict] + , [c.checkPlatform, target, force] + , [c.checkCycle, target, context.ancestors] + , [c.checkGit, targetFolder] , [write, target, targetFolder, context] ] , function (er, d) { installOnesInProgress[target.name].splice(indexOfIOIP, 1) @@ -860,146 +865,6 @@ function installOne_ (target, where, context, cb) { ) } -function checkEngine (target, cb) { - var npmv = npm.version - , force = npm.config.get("force") - , nodev = force ? null : npm.config.get("node-version") - , strict = npm.config.get("engine-strict") || target.engineStrict - , eng = target.engines - if (!eng) return cb() - if (nodev && eng.node && !semver.satisfies(nodev, eng.node) - || eng.npm && !semver.satisfies(npmv, eng.npm)) { - if (strict) { - var er = new Error("Unsupported") - er.code = "ENOTSUP" - er.required = eng - er.pkgid = target._id - return cb(er) - } else { - log.warn( "engine", "%s: wanted: %j (current: %j)" - , target._id, eng, {node: nodev, npm: npm.version} ) - } - } - return cb() -} - -function checkPlatform (target, cb) { - var platform = process.platform - , arch = process.arch - , osOk = true - , cpuOk = true - , force = npm.config.get("force") - - if (force) { - return cb() - } - - if (target.os) { - osOk = checkList(platform, target.os) - } - if (target.cpu) { - cpuOk = checkList(arch, target.cpu) - } - if (!osOk || !cpuOk) { - var er = new Error("Unsupported") - er.code = "EBADPLATFORM" - er.os = target.os || ['any'] - er.cpu = target.cpu || ['any'] - er.pkgid = target._id - return cb(er) - } - return cb() -} - -function checkList (value, list) { - var tmp - , match = false - , blc = 0 - if (typeof list === "string") { - list = [list] - } - if (list.length === 1 && list[0] === "any") { - return true - } - for (var i = 0; i < list.length; ++i) { - tmp = list[i] - if (tmp[0] === '!') { - tmp = tmp.slice(1) - if (tmp === value) { - return false - } - ++blc - } else { - match = match || tmp === value - } - } - return match || blc === list.length -} - -function checkCycle (target, ancestors, cb) { - // there are some very rare and pathological edge-cases where - // a cycle can cause npm to try to install a never-ending tree - // of stuff. - // Simplest: - // - // A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ... - // - // Solution: Simply flat-out refuse to install any name@version - // that is already in the prototype tree of the ancestors object. - // A more correct, but more complex, solution would be to symlink - // the deeper thing into the new location. - // Will do that if anyone whines about this irl. - // - // Note: `npm install foo` inside of the `foo` package will abort - // earlier if `--force` is not set. However, if it IS set, then - // we need to still fail here, but just skip the first level. Of - // course, it'll still fail eventually if it's a true cycle, and - // leave things in an undefined state, but that's what is to be - // expected when `--force` is used. That is why getPrototypeOf - // is used *twice* here: to skip the first level of repetition. - - var p = Object.getPrototypeOf(Object.getPrototypeOf(ancestors)) - , name = target.name - , version = target.version - while (p && p !== Object.prototype && p[name] !== version) { - p = Object.getPrototypeOf(p) - } - if (p[name] !== version) return cb() - - var er = new Error("Unresolvable cycle detected") - var tree = [target._id, JSON.parse(JSON.stringify(ancestors))] - , t = Object.getPrototypeOf(ancestors) - while (t && t !== Object.prototype) { - if (t === p) t.THIS_IS_P = true - tree.push(JSON.parse(JSON.stringify(t))) - t = Object.getPrototypeOf(t) - } - log.verbose("unresolvable dependency tree", tree) - er.pkgid = target._id - er.code = "ECYCLE" - return cb(er) -} - -function checkGit (folder, cb) { - // if it's a git repo then don't touch it! - fs.lstat(folder, function (er, s) { - if (er || !s.isDirectory()) return cb() - else checkGit_(folder, cb) - }) -} - -function checkGit_ (folder, cb) { - fs.stat(path.resolve(folder, ".git"), function (er, s) { - if (!er && s.isDirectory()) { - var e = new Error("Appears to be a git repo or submodule.") - e.path = folder - e.code = "EISGIT" - return cb(e) - } - cb() - }) -} - function write (target, targetFolder, context, cb_) { var up = npm.config.get("unsafe-perm") , user = up ? null : npm.config.get("user") diff --git a/deps/npm/lib/outdated.js b/deps/npm/lib/outdated.js index b94b0c6a3..5eb49737f 100644 --- a/deps/npm/lib/outdated.js +++ b/deps/npm/lib/outdated.js @@ -199,7 +199,9 @@ function shouldUpdate (args, dir, dep, has, req, depth, cb) { // { version: , from: } var curr = has[dep] - function skip () { + function skip (er) { + // show user that no viable version can be found + if (er) return cb(er) outdated_( args , path.resolve(dir, "node_modules", dep) , has @@ -226,7 +228,13 @@ function shouldUpdate (args, dir, dep, has, req, depth, cb) { cache.add(dep, req, function (er, d) { // if this fails, then it means we can't update this thing. // it's probably a thing that isn't published. - if (er) return skip() + if (er) { + if (er.code && er.code === 'ETARGET') { + // no viable version found + return skip(er) + } + return skip() + } // check that the url origin hasn't changed (#1727) and that // there is no newer version available diff --git a/deps/npm/lib/repo.js b/deps/npm/lib/repo.js index ed1f7e1dc..b95bd7562 100644 --- a/deps/npm/lib/repo.js +++ b/deps/npm/lib/repo.js @@ -37,7 +37,7 @@ function getUrlAndOpen (d, cb) { var r = d.repository; if (!r) return cb(new Error('no repository')); // XXX remove this when npm@v1.3.10 from node 0.10 is deprecated - // from https://github.com/isaacs/npm-www/issues/418 + // from https://github.com/npm/npm-www/issues/418 if (githubUserRepo(r.url)) r.url = githubUserRepo(r.url) var url = github(r.url) diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js index 93d8792e9..4286a1c29 100644 --- a/deps/npm/lib/utils/error-handler.js +++ b/deps/npm/lib/utils/error-handler.js @@ -270,7 +270,7 @@ function errorHandler (er) { log.error("", er.stack || er.message || er) log.error("", ["If you need help, you may report this *entire* log," ,"including the npm and node versions, at:" - ," <http://github.com/isaacs/npm/issues>" + ," <http://github.com/npm/npm/issues>" ].join("\n")) printStack = false break diff --git a/deps/npm/man/man1/npm-README.1 b/deps/npm/man/man1/npm-README.1 index a3b29bcea..e31f025f2 100644 --- a/deps/npm/man/man1/npm-README.1 +++ b/deps/npm/man/man1/npm-README.1 @@ -291,7 +291,7 @@ If this concerns you, inspect the source before using packages\. When you find issues, please report them: . .IP "\(bu" 4 -web: \fIhttps://github\.com/isaacs/npm/issues\fR +web: \fIhttps://github\.com/npm/npm/issues\fR . .IP "\(bu" 4 email: \fInpm\-@googlegroups\.com\fR diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1 index f67bee019..3bf6b9f05 100644 --- a/deps/npm/man/man1/npm-install.1 +++ b/deps/npm/man/man1/npm-install.1 @@ -244,9 +244,9 @@ Examples: .IP "" 4 . .nf - git+ssh://git@github\.com:isaacs/npm\.git#v1\.0\.27 - git+https://isaacs@github\.com/isaacs/npm\.git - git://github\.com/isaacs/npm\.git#v1\.0\.27 + git+ssh://git@github\.com:npm/npm\.git#v1\.0\.27 + git+https://isaacs@github\.com/npm/npm\.git + git://github\.com/npm/npm\.git#v1\.0\.27 . .fi . diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1 index 6c153665d..4c2d0e289 100644 --- a/deps/npm/man/man1/npm-ls.1 +++ b/deps/npm/man/man1/npm-ls.1 @@ -29,7 +29,7 @@ For example, running \fBnpm ls promzard\fR in npm\'s source tree will show: .IP "" 4 . .nf -npm@1.3.26 /path/to/npm +npm@1.4.0 /path/to/npm └─┬ init\-package\-json@0\.0\.4 └── promzard@0\.1\.5 . @@ -103,6 +103,16 @@ Type: Boolean List packages in the global install prefix instead of in the current project\. . +.SS "depth" +. +.IP "\(bu" 4 +Type: Int +. +.IP "" 0 +. +.P +Max display depth of the dependency tree\. +. .SH "SEE ALSO" . .IP "\(bu" 4 diff --git a/deps/npm/man/man1/npm-outdated.1 b/deps/npm/man/man1/npm-outdated.1 index 750c85f6c..2d2ceae2b 100644 --- a/deps/npm/man/man1/npm-outdated.1 +++ b/deps/npm/man/man1/npm-outdated.1 @@ -22,6 +22,71 @@ The resulting field \'wanted\' shows the latest version according to the version specified in the package\.json, the field \'latest\' the very latest version of the package\. . +.SH "CONFIGURATION" +. +.SS "json" +. +.IP "\(bu" 4 +Default: false +. +.IP "\(bu" 4 +Type: Boolean +. +.IP "" 0 +. +.P +Show information in JSON format\. +. +.SS "long" +. +.IP "\(bu" 4 +Default: false +. +.IP "\(bu" 4 +Type: Boolean +. +.IP "" 0 +. +.P +Show extended information\. +. +.SS "parseable" +. +.IP "\(bu" 4 +Default: false +. +.IP "\(bu" 4 +Type: Boolean +. +.IP "" 0 +. +.P +Show parseable output instead of tree view\. +. +.SS "global" +. +.IP "\(bu" 4 +Default: false +. +.IP "\(bu" 4 +Type: Boolean +. +.IP "" 0 +. +.P +Check packages in the global install prefix instead of in the current +project\. +. +.SS "depth" +. +.IP "\(bu" 4 +Type: Int +. +.IP "" 0 +. +.P +Max depth for checking dependency tree\. +. .SH "SEE ALSO" . .IP "\(bu" 4 diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1 index f83db1812..660523dc1 100644 --- a/deps/npm/man/man1/npm.1 +++ b/deps/npm/man/man1/npm.1 @@ -14,7 +14,7 @@ npm <command> [args] .fi . .SH "VERSION" -1.3.26 +1.4.0 . .SH "DESCRIPTION" npm is the package manager for the Node JavaScript platform\. It puts @@ -165,7 +165,7 @@ If you would like to contribute, but don\'t know what to work on, check the issues list or ask on the mailing list\. . .IP "\(bu" 4 -\fIhttp://github\.com/isaacs/npm/issues\fR +\fIhttp://github\.com/npm/npm/issues\fR . .IP "\(bu" 4 \fInpm\-@googlegroups\.com\fR @@ -176,7 +176,7 @@ the issues list or ask on the mailing list\. When you find issues, please report them: . .IP "\(bu" 4 -web: \fIhttp://github\.com/isaacs/npm/issues\fR +web: \fIhttp://github\.com/npm/npm/issues\fR . .IP "\(bu" 4 email: \fInpm\-@googlegroups\.com\fR diff --git a/deps/npm/man/man3/npm.3 b/deps/npm/man/man3/npm.3 index 19143745b..14610359a 100644 --- a/deps/npm/man/man3/npm.3 +++ b/deps/npm/man/man3/npm.3 @@ -21,7 +21,7 @@ npm\.load([configObject], function (er, npm) { .fi . .SH "VERSION" -1.3.26 +1.4.0 . .SH "DESCRIPTION" This is the API documentation for npm\. diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5 index 380254b1d..3e68e318a 100644 --- a/deps/npm/man/man5/npm-json.5 +++ b/deps/npm/man/man5/npm-json.5 @@ -349,7 +349,7 @@ Do it like this: .nf "repository" : { "type" : "git" - , "url" : "http://github\.com/isaacs/npm\.git" + , "url" : "http://github\.com/npm/npm\.git" } "repository" : { "type" : "svn" diff --git a/deps/npm/man/man5/package.json.5 b/deps/npm/man/man5/package.json.5 index 380254b1d..3e68e318a 100644 --- a/deps/npm/man/man5/package.json.5 +++ b/deps/npm/man/man5/package.json.5 @@ -349,7 +349,7 @@ Do it like this: .nf "repository" : { "type" : "git" - , "url" : "http://github\.com/isaacs/npm\.git" + , "url" : "http://github\.com/npm/npm\.git" } "repository" : { "type" : "svn" diff --git a/deps/npm/man/man7/npm-coding-style.7 b/deps/npm/man/man7/npm-coding-style.7 index ab2c7a995..c5d52baa2 100644 --- a/deps/npm/man/man7/npm-coding-style.7 +++ b/deps/npm/man/man7/npm-coding-style.7 @@ -191,7 +191,7 @@ Always create a new Error object with your message\. Don\'t just return a string message to the callback\. Stack traces are handy\. . .SH "Logging" -Logging is done using the npmlog \fIhttps://github\.com/isaacs/npmlog\fR +Logging is done using the npmlog \fIhttps://github\.com/npm/npmlog\fR utility\. . .P diff --git a/deps/npm/man/man7/npm-config.7 b/deps/npm/man/man7/npm-config.7 index dcdb918ab..3a73e6c8a 100644 --- a/deps/npm/man/man7/npm-config.7 +++ b/deps/npm/man/man7/npm-config.7 @@ -712,7 +712,7 @@ The value \fBnpm init\fR should use by default for the package author\'s homepag .SS "init\.license" . .IP "\(bu" 4 -Default: "BSD\-2\-Clause" +Default: "ISC" . .IP "\(bu" 4 Type: String @@ -826,7 +826,7 @@ Type: Stream .IP "" 0 . .P -This is the stream that is passed to the npmlog \fIhttps://github\.com/isaacs/npmlog\fR module at run time\. +This is the stream that is passed to the npmlog \fIhttps://github\.com/npm/npmlog\fR module at run time\. . .P It cannot be set from the command line, but if you are using npm diff --git a/deps/npm/man/man7/npm-faq.7 b/deps/npm/man/man7/npm-faq.7 index 64acb5b3f..dfd165d9a 100644 --- a/deps/npm/man/man7/npm-faq.7 +++ b/deps/npm/man/man7/npm-faq.7 @@ -411,11 +411,11 @@ access the internet for some reason\. . .P If the registry IS down, let me know by emailing \fIi@izs\.me\fR or posting -an issue at \fIhttps://github\.com/isaacs/npm/issues\fR\|\. We\'ll have +an issue at \fIhttps://github\.com/npm/npm/issues\fR\|\. We\'ll have someone kick it or something\. . .SH "Why no namespaces?" -Please see this discussion: \fIhttps://github\.com/isaacs/npm/issues/798\fR +Please see this discussion: \fIhttps://github\.com/npm/npm/issues/798\fR . .P tl;dr \- It doesn\'t actually make things better, and can make them worse\. @@ -434,7 +434,7 @@ There is not sufficient need to impose namespace rules on everyone\. Post an issue on the github project: . .IP "\(bu" 4 -\fIhttps://github\.com/isaacs/npm/issues\fR +\fIhttps://github\.com/npm/npm/issues\fR . .IP "" 0 . diff --git a/deps/npm/man/man7/npm-registry.7 b/deps/npm/man/man7/npm-registry.7 index 6ac19b071..ebdf6fc30 100644 --- a/deps/npm/man/man7/npm-registry.7 +++ b/deps/npm/man/man7/npm-registry.7 @@ -19,7 +19,7 @@ account information\. .P The official public npm registry is at \fIhttp://registry\.npmjs\.org/\fR\|\. It is powered by a CouchDB database at \fIhttp://isaacs\.iriscouch\.com/registry\fR\|\. The code for the couchapp is -available at \fIhttp://github\.com/isaacs/npmjs\.org\fR\|\. npm user accounts +available at \fIhttp://github\.com/npm/npmjs\.org\fR\|\. npm user accounts are CouchDB users, stored in the \fIhttp://isaacs\.iriscouch\.com/_users\fR database\. . diff --git a/deps/npm/node_modules/npm-install-checks/LICENSE b/deps/npm/node_modules/npm-install-checks/LICENSE new file mode 100644 index 000000000..1a8fdb735 --- /dev/null +++ b/deps/npm/node_modules/npm-install-checks/LICENSE @@ -0,0 +1,234 @@ +Copyright (c) Robert Kowalski ("Author") +All rights reserved. + + +The BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +This uses parts of npm, (c) Isaac Z. Schlueter, under the following license: + + +The Artistic License 2.0 + +Copyright (c) 2000-2006, The Perl Foundation. + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +Preamble + +This license establishes the terms under which a given free software +Package may be copied, modified, distributed, and/or redistributed. +The intent is that the Copyright Holder maintains some artistic +control over the development of that Package while still keeping the +Package available as open source and free software. + +You are always permitted to make arrangements wholly outside of this +license directly with the Copyright Holder of a given Package. If the +terms of this license do not permit the full use that you propose to +make of the Package, you should contact the Copyright Holder and seek +a different licensing arrangement. + +Definitions + + "Copyright Holder" means the individual(s) or organization(s) + named in the copyright notice for the entire Package. + + "Contributor" means any party that has contributed code or other + material to the Package, in accordance with the Copyright Holder's + procedures. + + "You" and "your" means any person who would like to copy, + distribute, or modify the Package. + + "Package" means the collection of files distributed by the + Copyright Holder, and derivatives of that collection and/or of + those files. A given Package may consist of either the Standard + Version, or a Modified Version. + + "Distribute" means providing a copy of the Package or making it + accessible to anyone else, or in the case of a company or + organization, to others outside of your company or organization. + + "Distributor Fee" means any fee that you charge for Distributing + this Package or providing support for this Package to another + party. It does not mean licensing fees. + + "Standard Version" refers to the Package if it has not been + modified, or has been modified only in ways explicitly requested + by the Copyright Holder. + + "Modified Version" means the Package, if it has been changed, and + such changes were not explicitly requested by the Copyright + Holder. + + "Original License" means this Artistic License as Distributed with + the Standard Version of the Package, in its current version or as + it may be modified by The Perl Foundation in the future. + + "Source" form means the source code, documentation source, and + configuration files for the Package. + + "Compiled" form means the compiled bytecode, object code, binary, + or any other form resulting from mechanical transformation or + translation of the Source form. + + +Permission for Use and Modification Without Distribution + +(1) You are permitted to use the Standard Version and create and use +Modified Versions for any purpose without restriction, provided that +you do not Distribute the Modified Version. + + +Permissions for Redistribution of the Standard Version + +(2) You may Distribute verbatim copies of the Source form of the +Standard Version of this Package in any medium without restriction, +either gratis or for a Distributor Fee, provided that you duplicate +all of the original copyright notices and associated disclaimers. At +your discretion, such verbatim copies may or may not include a +Compiled form of the Package. + +(3) You may apply any bug fixes, portability changes, and other +modifications made available from the Copyright Holder. The resulting +Package will still be considered the Standard Version, and as such +will be subject to the Original License. + + +Distribution of Modified Versions of the Package as Source + +(4) You may Distribute your Modified Version as Source (either gratis +or for a Distributor Fee, and with or without a Compiled form of the +Modified Version) provided that you clearly document how it differs +from the Standard Version, including, but not limited to, documenting +any non-standard features, executables, or modules, and provided that +you do at least ONE of the following: + + (a) make the Modified Version available to the Copyright Holder + of the Standard Version, under the Original License, so that the + Copyright Holder may include your modifications in the Standard + Version. + + (b) ensure that installation of your Modified Version does not + prevent the user installing or running the Standard Version. In + addition, the Modified Version must bear a name that is different + from the name of the Standard Version. + + (c) allow anyone who receives a copy of the Modified Version to + make the Source form of the Modified Version available to others + under + + (i) the Original License or + + (ii) a license that permits the licensee to freely copy, + modify and redistribute the Modified Version using the same + licensing terms that apply to the copy that the licensee + received, and requires that the Source form of the Modified + Version, and of any works derived from it, be made freely + available in that license fees are prohibited but Distributor + Fees are allowed. + + +Distribution of Compiled Forms of the Standard Version +or Modified Versions without the Source + +(5) You may Distribute Compiled forms of the Standard Version without +the Source, provided that you include complete instructions on how to +get the Source of the Standard Version. Such instructions must be +valid at the time of your distribution. If these instructions, at any +time while you are carrying out such distribution, become invalid, you +must provide new instructions on demand or cease further distribution. +If you provide valid instructions or cease distribution within thirty +days after you become aware that the instructions are invalid, then +you do not forfeit any of your rights under this license. + +(6) You may Distribute a Modified Version in Compiled form without +the Source, provided that you comply with Section 4 with respect to +the Source of the Modified Version. + + +Aggregating or Linking the Package + +(7) You may aggregate the Package (either the Standard Version or +Modified Version) with other packages and Distribute the resulting +aggregation provided that you do not charge a licensing fee for the +Package. Distributor Fees are permitted, and licensing fees for other +components in the aggregation are permitted. The terms of this license +apply to the use and Distribution of the Standard or Modified Versions +as included in the aggregation. + +(8) You are permitted to link Modified and Standard Versions with +other works, to embed the Package in a larger work of your own, or to +build stand-alone binary or bytecode versions of applications that +include the Package, and Distribute the result without restriction, +provided the result does not expose a direct interface to the Package. + + +Items That are Not Considered Part of a Modified Version + +(9) Works (including, but not limited to, modules and scripts) that +merely extend or make use of the Package, do not, by themselves, cause +the Package to be a Modified Version. In addition, such works are not +considered parts of the Package itself, and are not subject to the +terms of this license. + + +General Provisions + +(10) Any use, modification, and distribution of the Standard or +Modified Versions is governed by this Artistic License. By using, +modifying or distributing the Package, you accept this license. Do not +use, modify, or distribute the Package, if you do not accept this +license. + +(11) If your Modified Version has been derived from a Modified +Version made by someone other than you, you are nevertheless required +to ensure that your Modified Version complies with the requirements of +this license. + +(12) This license does not grant you the right to use any trademark, +service mark, tradename, or logo of the Copyright Holder. + +(13) This license includes the non-exclusive, worldwide, +free-of-charge patent license to make, have made, use, offer to sell, +sell, import and otherwise transfer the Package with respect to any +patent claims licensable by the Copyright Holder that are necessarily +infringed by the Package. If you institute patent litigation +(including a cross-claim or counterclaim) against any party alleging +that the Package constitutes direct or contributory patent +infringement, then this Artistic License to you shall terminate on the +date that such litigation is filed. + +(14) Disclaimer of Warranty: +THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS +IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR +NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL +LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/deps/npm/node_modules/npm-install-checks/README.md b/deps/npm/node_modules/npm-install-checks/README.md new file mode 100644 index 000000000..7da4af148 --- /dev/null +++ b/deps/npm/node_modules/npm-install-checks/README.md @@ -0,0 +1,25 @@ +# npm-install-checks + +A package that contains checks that npm runs during the installation. + +## API + +### .checkEngine(target, npmVer, nodeVer, force, strict, cb) +Check if node/npm version is supported by the package. + +Error type: `ENOTSUP` + +### .checkPlatform(target, force, cb) +Check if OS/Arch is supported by the package. + +Error type: `EBADPLATFORM` + +### .checkCycle(target, ancestors, cb) +Check for cyclic dependencies. + +Error type: `ECYCLE` + +### .checkGit(folder, cb) +Check if a folder is a .git folder. + +Error type: `EISGIT` diff --git a/deps/npm/node_modules/npm-install-checks/index.js b/deps/npm/node_modules/npm-install-checks/index.js new file mode 100644 index 000000000..10f214fa9 --- /dev/null +++ b/deps/npm/node_modules/npm-install-checks/index.js @@ -0,0 +1,146 @@ +var fs = require("fs") +var path = require("path") +var log = require("npmlog") +var semver = require("semver") + +exports.checkEngine = checkEngine +function checkEngine (target, npmVer, nodeVer, force, strict, cb) { + var nodev = force ? null : nodeVer + , strict = strict || target.engineStrict + , eng = target.engines + if (!eng) return cb() + if (nodev && eng.node && !semver.satisfies(nodev, eng.node) + || eng.npm && !semver.satisfies(npmVer, eng.npm)) { + + if (strict) { + var er = new Error("Unsupported") + er.code = "ENOTSUP" + er.required = eng + er.pkgid = target._id + return cb(er) + } else { + log.warn( "engine", "%s: wanted: %j (current: %j)" + , target._id, eng, {node: nodev, npm: npmVer} ) + } + } + return cb() +} + +exports.checkPlatform = checkPlatform +function checkPlatform (target, force, cb) { + var platform = process.platform + , arch = process.arch + , osOk = true + , cpuOk = true + + if (force) { + return cb() + } + + if (target.os) { + osOk = checkList(platform, target.os) + } + if (target.cpu) { + cpuOk = checkList(arch, target.cpu) + } + if (!osOk || !cpuOk) { + var er = new Error("Unsupported") + er.code = "EBADPLATFORM" + er.os = target.os || ['any'] + er.cpu = target.cpu || ['any'] + er.pkgid = target._id + return cb(er) + } + return cb() +} + +function checkList (value, list) { + var tmp + , match = false + , blc = 0 + if (typeof list === "string") { + list = [list] + } + if (list.length === 1 && list[0] === "any") { + return true + } + for (var i = 0; i < list.length; ++i) { + tmp = list[i] + if (tmp[0] === '!') { + tmp = tmp.slice(1) + if (tmp === value) { + return false + } + ++blc + } else { + match = match || tmp === value + } + } + return match || blc === list.length +} + +exports.checkCycle = checkCycle +function checkCycle (target, ancestors, cb) { + // there are some very rare and pathological edge-cases where + // a cycle can cause npm to try to install a never-ending tree + // of stuff. + // Simplest: + // + // A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ... + // + // Solution: Simply flat-out refuse to install any name@version + // that is already in the prototype tree of the ancestors object. + // A more correct, but more complex, solution would be to symlink + // the deeper thing into the new location. + // Will do that if anyone whines about this irl. + // + // Note: `npm install foo` inside of the `foo` package will abort + // earlier if `--force` is not set. However, if it IS set, then + // we need to still fail here, but just skip the first level. Of + // course, it'll still fail eventually if it's a true cycle, and + // leave things in an undefined state, but that's what is to be + // expected when `--force` is used. That is why getPrototypeOf + // is used *twice* here: to skip the first level of repetition. + + var p = Object.getPrototypeOf(Object.getPrototypeOf(ancestors)) + , name = target.name + , version = target.version + while (p && p !== Object.prototype && p[name] !== version) { + p = Object.getPrototypeOf(p) + } + if (p[name] !== version) return cb() + + var er = new Error("Unresolvable cycle detected") + var tree = [target._id, JSON.parse(JSON.stringify(ancestors))] + , t = Object.getPrototypeOf(ancestors) + while (t && t !== Object.prototype) { + if (t === p) t.THIS_IS_P = true + tree.push(JSON.parse(JSON.stringify(t))) + t = Object.getPrototypeOf(t) + } + log.verbose("unresolvable dependency tree", tree) + er.pkgid = target._id + er.code = "ECYCLE" + return cb(er) +} + +exports.checkGit = checkGit +function checkGit (folder, cb) { + // if it's a git repo then don't touch it! + fs.lstat(folder, function (er, s) { + if (er || !s.isDirectory()) return cb() + else checkGit_(folder, cb) + }) +} + +function checkGit_ (folder, cb) { + fs.stat(path.resolve(folder, ".git"), function (er, s) { + if (!er && s.isDirectory()) { + var e = new Error("Appears to be a git repo or submodule.") + e.path = folder + e.code = "EISGIT" + return cb(e) + } + cb() + }) +} diff --git a/deps/npm/node_modules/npm-install-checks/package.json b/deps/npm/node_modules/npm-install-checks/package.json new file mode 100644 index 000000000..39b7adf99 --- /dev/null +++ b/deps/npm/node_modules/npm-install-checks/package.json @@ -0,0 +1,43 @@ +{ + "name": "npm-install-checks", + "version": "1.0.0", + "description": "checks that npm runs during the installation of a module", + "main": "index.js", + "dependencies": { + "npmlog": "0.0.6", + "semver": "~2.2.1" + }, + "devDependencies": { + "tap": "~0.4.8", + "rimraf": "~2.2.5", + "mkdirp": "~0.3.5" + }, + "scripts": { + "test": "tap test/*.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/robertkowalski/npm-install-checks.git" + }, + "homepage": "https://github.com/robertkowalski/npm-install-checks", + "keywords": [ + "npm,", + "install" + ], + "author": { + "name": "Robert Kowalski", + "email": "rok@kowalski.gd" + }, + "license": "BSD-2-Clause", + "bugs": { + "url": "https://github.com/robertkowalski/npm-install-checks/issues" + }, + "readme": "# npm-install-checks\n\nA package that contains checks that npm runs during the installation.\n\n## API\n\n### .checkEngine(target, npmVer, nodeVer, force, strict, cb)\nCheck if node/npm version is supported by the package.\n\nError type: `ENOTSUP`\n\n### .checkPlatform(target, force, cb)\nCheck if OS/Arch is supported by the package.\n\nError type: `EBADPLATFORM`\n\n### .checkCycle(target, ancestors, cb)\nCheck for cyclic dependencies.\n\nError type: `ECYCLE`\n\n### .checkGit(folder, cb)\nCheck if a folder is a .git folder.\n\nError type: `EISGIT`\n", + "readmeFilename": "README.md", + "_id": "npm-install-checks@1.0.0", + "dist": { + "shasum": "7e1469b5e0c693b2ae2a8830b5fc4e7bf76c88fd" + }, + "_from": "npm-install-checks@1.0.0", + "_resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-1.0.0.tgz" +} diff --git a/deps/npm/node_modules/npm-install-checks/test/check-engine.js b/deps/npm/node_modules/npm-install-checks/test/check-engine.js new file mode 100644 index 000000000..a16b13d7d --- /dev/null +++ b/deps/npm/node_modules/npm-install-checks/test/check-engine.js @@ -0,0 +1,35 @@ +var test = require("tap").test +var c = require("../index.js").checkEngine + +test("no engine defined", function (t) { + c({ engines: {}}, "1.1.2", "0.2.1", false, true, function (err) { + t.notOk(err, "no error present") + t.end() + }) +}) + +test("node version too old", function (t) { + var target = { engines: { node: "0.10.24" }} + c(target, "1.1.2", "0.10.18", false, true, function (err) { + t.ok(err, "returns an error") + t.equals(err.required.node, "0.10.24") + t.end() + }) +}) + +test("npm version too old", function (t) { + var target = { engines: { npm: "1.3.6" }} + c(target, "1.4.2", "0.2.1", false, true, function (err) { + t.ok(err, "returns an error") + t.equals(err.required.npm, "1.3.6") + t.end() + }) +}) + +test("strict=false does not return an error", function (t) { + var target = { engines: { npm: "1.3.6" }} + c(target, "1.4.2", "0.2.1", false, false, function (err) { + t.notOk(err, "returns no error") + t.end() + }) +}) diff --git a/deps/npm/node_modules/npm-install-checks/test/check-git.js b/deps/npm/node_modules/npm-install-checks/test/check-git.js new file mode 100644 index 000000000..d09d0b518 --- /dev/null +++ b/deps/npm/node_modules/npm-install-checks/test/check-git.js @@ -0,0 +1,31 @@ +var test = require("tap").test +var c = require("../index.js").checkGit +var fs = require("fs") +var rimraf = require("rimraf") +var mkdirp = require("mkdirp") +var path = require("path") +var gitFixturePath = path.resolve(__dirname, "out") + +test("is .git repo", function (t) { + mkdirp(gitFixturePath + "/.git", function () { + c(gitFixturePath, function (err) { + t.ok(err, "error present") + t.equal(err.code, "EISGIT") + t.end() + }) + }) +}) + +test("is not a .git repo", function (t) { + c(__dirname, function (err) { + t.notOk(err, "error not present") + t.end() + }) +}) + +test("cleanup", function (t) { + rimraf(gitFixturePath, function () { + t.pass("cleanup") + t.end() + }) +}) diff --git a/deps/npm/node_modules/npm-install-checks/test/check-platform.js b/deps/npm/node_modules/npm-install-checks/test/check-platform.js new file mode 100644 index 000000000..eeeb1bcef --- /dev/null +++ b/deps/npm/node_modules/npm-install-checks/test/check-platform.js @@ -0,0 +1,44 @@ +var test = require("tap").test +var c = require("../index.js").checkPlatform + +test("target cpu wrong", function (t) { + var target = {} + target.cpu = "enten-cpu" + target.os = "any" + c(target, false, function (err) { + t.ok(err, "error present") + t.equal(err.code, "EBADPLATFORM") + t.end() + }) +}) + +test("os wrong", function (t) { + var target = {} + target.cpu = "any" + target.os = "enten-os" + c(target, false, function (err) { + t.ok(err, "error present") + t.equal(err.code, "EBADPLATFORM") + t.end() + }) +}) + +test("nothing wrong", function (t) { + var target = {} + target.cpu = "any" + target.os = "any" + c(target, false, function (err) { + t.notOk(err, "no error present") + t.end() + }) +}) + +test("force", function (t) { + var target = {} + target.cpu = "enten-cpu" + target.os = "any" + c(target, true, function (err) { + t.notOk(err, "no error present") + t.end() + }) +}) diff --git a/deps/npm/node_modules/npm-registry-client/index.js b/deps/npm/node_modules/npm-registry-client/index.js index 2a28bd5e7..24c33ae44 100644 --- a/deps/npm/node_modules/npm-registry-client/index.js +++ b/deps/npm/node_modules/npm-registry-client/index.js @@ -5,7 +5,6 @@ module.exports = RegClient var fs = require('fs') , url = require('url') , path = require('path') -, CouchLogin = require('couch-login') , npmlog try { @@ -47,22 +46,6 @@ function RegClient (conf) { } if (!conf.get('cache')) throw new Error("Cache dir is required") - - var auth = this.conf.get('_auth') - var alwaysAuth = this.conf.get('always-auth') - if (auth && !alwaysAuth && registry) { - // if we're always authing, then we just send the - // user/pass on every thing. otherwise, create a - // session, and use that. - var token = this.conf.get('_token') - this.couchLogin = new CouchLogin(registry, token) - this.couchLogin.proxy = this.conf.get('proxy') - this.couchLogin.strictSSL = this.conf.get('strict-ssl') - this.couchLogin.ca = this.conf.get('ca') - this.couchLogin.cert = this.conf.get('cert') - this.couchLogin.key = this.conf.get('key') - } - this.log = conf.log || conf.get('log') || npmlog } diff --git a/deps/npm/node_modules/npm-registry-client/lib/publish.js b/deps/npm/node_modules/npm-registry-client/lib/publish.js index 46c6ba3a7..acc0ca81c 100644 --- a/deps/npm/node_modules/npm-registry-client/lib/publish.js +++ b/deps/npm/node_modules/npm-registry-client/lib/publish.js @@ -106,14 +106,17 @@ function putFirst (data, tardata, stat, username, email, cb) { function putNext(newVersion, root, current, cb) { // already have the tardata on the root object // just merge in existing stuff - // if the version already exists, and not a --force, then raise error - var force = this.conf.get('force') var curVers = Object.keys(current.versions || {}).map(function (v) { return semver.clean(v, true) - }) - - if (!force && curVers.indexOf(newVersion) !== -1) { - return cb(conflictError(root.name)) + }).concat(Object.keys(current.time || {}).map(function(v) { + if (semver.valid(v, true)) + return semver.clean(v, true) + }).filter(function(v) { + return v + })) + + if (curVers.indexOf(newVersion) !== -1) { + return cb(conflictError(root.name, newVersion)) } current.versions[newVersion] = root.versions[newVersion] @@ -143,9 +146,10 @@ function putNext(newVersion, root, current, cb) { this.request("PUT", root.name, current, cb) } -function conflictError (pkgid) { - var e = new Error("cannot modify existing version") +function conflictError (pkgid, version) { + var e = new Error("cannot modify pre-existing version") e.code = "EPUBLISHCONFLICT" e.pkgid = pkgid + e.version = version return e } diff --git a/deps/npm/node_modules/npm-registry-client/lib/request.js b/deps/npm/node_modules/npm-registry-client/lib/request.js index 240c873b5..b2cff11a7 100644 --- a/deps/npm/node_modules/npm-registry-client/lib/request.js +++ b/deps/npm/node_modules/npm-registry-client/lib/request.js @@ -8,8 +8,7 @@ var url = require("url") , request = require("request") , retry = require("retry") -function regRequest (method, where, what, etag, nofollow, reauthed, cb_) { - if (typeof cb_ !== "function") cb_ = reauthed, reauthed = false +function regRequest (method, where, what, etag, nofollow, cb_) { if (typeof cb_ !== "function") cb_ = nofollow, nofollow = false if (typeof cb_ !== "function") cb_ = etag, etag = null if (typeof cb_ !== "function") cb_ = what, what = null @@ -35,9 +34,10 @@ function regRequest (method, where, what, etag, nofollow, reauthed, cb_) { , adduserNew = /^\/?-\/user\/org\.couchdb\.user:([^\/]+)/ , nu = where.match(adduserNew) , uc = where.match(adduserChange) - , isUpload = what || this.conf.get('always-auth') + , alwaysAuth = this.conf.get('always-auth') , isDel = method === "DELETE" - , authRequired = isUpload && !nu || uc || isDel + , isWrite = what || isDel + , authRequired = (alwaysAuth || isWrite) && !nu || uc || isDel // resolve to a full url on the registry if (!where.match(/^https?:\/\//)) { @@ -64,41 +64,19 @@ function regRequest (method, where, what, etag, nofollow, reauthed, cb_) { var remote = url.parse(where) , auth = this.conf.get('_auth') - if (authRequired && !this.conf.get('always-auth')) { - var couch = this.couchLogin - , token = couch && (this.conf.get('_token') || couch.token) - , validToken = token && couch.valid(token) - - if (!validToken) token = null - else this.conf.set('_token', token) - - if (couch && !token) { - // login to get a valid token - var a = { name: this.conf.get('username'), - password: this.conf.get('_password') } - var args = arguments - return this.couchLogin.login(a, function (er, cr, data) { - if (er || !couch.valid(couch.token)) { - er = er || new Error('login error') - return cb(er, cr, data) - } - this.conf.set('_token', this.couchLogin.token) - if (this.conf.save) this.conf.save('user') - return regRequest.call(this, - method, where, what, - etag, nofollow, reauthed, cb_) - }.bind(this)) - } + if (authRequired && !auth) { + var un = this.conf.get('username') + var pw = this.conf.get('_password') + if (un && pw) + auth = new Buffer(un + ':' + pw).toString('base64') } - // now we either have a valid token, or an auth. - - if (authRequired && !auth && !token) { + if (authRequired && !auth) { return cb(new Error( "Cannot insert data into the registry without auth")) } - if (auth && !token && authRequired) { + if (auth && authRequired) { remote.auth = new Buffer(auth, "base64").toString("utf8") } @@ -115,7 +93,7 @@ function regRequest (method, where, what, etag, nofollow, reauthed, cb_) { operation.attempt(function (currentAttempt) { self.log.info("trying", "registry request attempt " + currentAttempt + " at " + (new Date()).toLocaleTimeString()) - makeRequest.call(self, method, remote, where, what, etag, nofollow, token + makeRequest.call(self, method, remote, where, what, etag, nofollow , function (er, parsed, raw, response) { if (!er || er.message.match(/^SSL Error/)) { if (er) @@ -126,22 +104,9 @@ function regRequest (method, where, what, etag, nofollow, reauthed, cb_) { // Only retry on 408, 5xx or no `response`. var statusCode = response && response.statusCode - var reauth = !reauthed && - ( statusCode === 401 || - statusCode === 400 || - statusCode === 403 ) - if (reauth) - reauthed = true - var timeout = statusCode === 408 var serverError = statusCode >= 500 var statusRetry = !statusCode || timeout || serverError - if (reauth && this.conf.get('_auth') && this.conf.get('_token')) { - this.conf.del('_token') - this.couchLogin.token = null - return regRequest.call(this, method, where, what, - etag, nofollow, reauthed, cb_) - } if (er && statusRetry && operation.retry(er)) { self.log.info("retry", "will retry, error on last attempt: " + er) return @@ -151,7 +116,7 @@ function regRequest (method, where, what, etag, nofollow, reauthed, cb_) { }.bind(this)) } -function makeRequest (method, remote, where, what, etag, nofollow, tok, cb_) { +function makeRequest (method, remote, where, what, etag, nofollow, cb_) { var cbCalled = false function cb () { if (cbCalled) return @@ -174,10 +139,6 @@ function makeRequest (method, remote, where, what, etag, nofollow, tok, cb_) { headers[method === "GET" ? "if-none-match" : "if-match"] = etag } - if (tok) { - headers.cookie = 'AuthSession=' + tok.AuthSession - } - headers.accept = "application/json" headers["user-agent"] = this.conf.get('user-agent') || diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/.npmignore b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/.npmignore deleted file mode 100644 index 9ed56e7a5..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -test/fixtures/couch.log -test/fixtures/.delete -test/fixtures/pid -test/fixtures/_users.couch diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/LICENSE b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/LICENSE deleted file mode 100644 index 05eeeb88c..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -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/couch-login/README.md b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/README.md deleted file mode 100644 index 4b7578c0a..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/README.md +++ /dev/null @@ -1,278 +0,0 @@ -# couch-login - -This module lets you log into couchdb to get a session token, then make -requests using that session. It is basically just a thin wrapper around -[@mikeal's request module](https://github.com/mikeal/request). - -This is handy if you want a user to take actions in a couchdb database -on behalf of a user, without having to store their couchdb username and -password anywhere. (You do need to store the AuthSession token -somewhere, though.) - -## Usage - -```javascript -var CouchLogin = require('couch-login') - -// Nothing about this module is http-server specific of course. -// You could also use it to do authenticated requests against -// a couchdb using sessions and storing the token somewhere else. - -http.createServer(function (req, res) { - var couch = new CouchLogin('http://my-couch.iriscouch.com:5984/') - - // .. look up the token in the user's session or whatever .. - // Look at couch.decorate(req, res) for more on doing that - // automatically, below. - - if (sessionToken) { - // this user already logged in. - couch.token = sessionToken - - // now we can do things on their behalf, like: - // 1. View their session info. - // like doing request.get({ uri: couch + '/_session', ... }) - // but with the cookie and whatnot - - couch.get('/_session', function (er, resp, data) { - // er = some kind of communication error. - // resp = response object from the couchdb request. - // data = parsed JSON response body. - if (er || resp.statusCode !== 200) { - res.statusCode = resp.statusCode || 403 - return res.end('Invalid login or something') - } - - // now we have the session info, we know who this user is. - // hitting couchdb for this on every request is kinda costly, - // so maybe you should store the username wherever you're storing - // the sessionToken. RedSess is a good util for this, if you're - // into redis. And if you're not into redis, you're crazy, - // because it is awesome. - - // now let's get the user record. - // note that this will 404 for anyone other than the user, - // unless they're a server admin. - couch.get('/_users/org.couchdb.user:' + data.userCtx.name, etc) - - // PUTs and DELETEs will also use their session, of course, so - // your validate_doc_update's will see their info in userCtx - }) - - } else { - // don't have a sessionToken. - // get a username and password from the post body or something. - // maybe redirect to a /login page or something to ask for that. - var login = { name: name, password: password } - couch.login(login, function (er, resp, data) { - // again, er is an error, resp is the response obj, data is the json - if (er || resp.statusCode !== 200) { - res.statusCode = resp.statusCode || 403 - return res.end('Invalid login or something') - } - - // the data is something like - // {"ok":true,"name":"testuser","roles":[]} - // and couch.token is the token you'll need to save somewhere. - - // at this point, you can start making authenticated requests to - // couchdb, or save data in their session, or do whatever it is - // that you need to do. - - res.statusCode = 200 - res.write("Who's got two thumbs and just logged you into couch?\n") - setTimeout(function () { - res.end("THIS GUY!") - }, 500) - }) - } -}) -``` - -## Class: CouchLogin -### new CouchLogin(couchdbUrl, token) - -Create a new CouchLogin object bound to the couchdb url. - -In addition to these, the `get`, `post`, `put`, and `del` methods all -proxy to the associated method on [request](https://github.com/mikeal/request). - -However, as you'll note in the example above, only the pathname portion -of the url is required. Urls will be appended to the couchdb url passed -into the constructor. - -If you have to talk to more than one couchdb, then you'll need more than -one CouchLogin object, for somewhat obvious reasons. - -All callbacks get called with the following arguments, which are exactly -identical to the arguments passed to a `request` callback. - -* `er` {Error | null} Set if a communication error happens. -* `resp` {HTTP Response} The response from the request to couchdb -* `data` {Object} The parsed JSON data from couch - -If the token is the string "anonymous", then it will not attempt to log -in before making requests. If the token is not "anonymous", then it -must be an object with the appropriate fields. - -### couch.token - -* {Object} - -An object representing the couchdb session token. (Basically just a -cookie and a timeout.) - -If the token has already timed out, then setting it will have no effect. - -### couch.tokenSet - -If set, this method is called whenever the token is saved. - -For example, you could assign a function to this method to save the -token into a redis session, a cookie, or in some other database. - -Takes a callback which should be called when the token is saved. - -### couch.tokenGet - -If set, this method is called to look up the token on demand. - -The inverse of couch.tokenSet. Takes a callback which is called with -the `cb(er || null, token)`. - -### couch.tokenDel - -If set, this method is called to delete the token when it should be -discarded. - -Related to tokenGet and tokenSet. Takes a callback which should be -called when the token is deleted. - -### couch.ca - -* {String | Array | null} - -A certificate authority string (PEM encoded), or an array of CA strings. Only -relevant for HTTPS couches, of course. - -Leave as `null` to use the default ca settings built into node. - -### couch.cert - -* {String | null} - -A client certificate (PEM encoded) used to support secure access to servers that require client certificate. Only -relevant for HTTPS couches, of course. - -Leave as `null` when not supporting client certificates. - -### couch.key - -* {String | null} - -A private key string (PEM encoded) used to validate a client certificate. Only -relevant for HTTPS couches, of course. - -Leave as `null` when not supporting client certificates. - -### couch.strictSSL - -* {Boolean | null} - -Whether or not to be strict about SSL connections. If left as null, -then use the default setting in node, which is true in node versions -0.9.x and above, and false prior to 0.8.x. - -Only relevant for HTTPS couches, of course. - -### couch.anonymous() - -Return a new CouchLogin object that points at the same couchdb server, -but doesn't try to log in before making requests. - -This is handy for situations where the user is not logged in at the -moment, but a request needs to be made anyway, and does not require -authorization. - -### couch.login(auth, callback) - -* `auth` {Object} The login details - * `name` {String} - * `password` {String} -* `callback` {Function} - -When the callback is called, the `couch.token` will already have been -set (assuming it worked!), so subsequent requests will be done as that -user. - -### couch.get(path, callback) - -GET the supplied path from the couchdb using the credentials on the -token. - -Fails if the token is invalid or expired. - -### couch.del(path, callback) - -DELETE the supplied path from the couchdb using the credentials on the -token. - -Fails if the token is invalid or expired. - -### couch.post(path, data, callback) - -POST the data to the supplied path in the couchdb, using the credentials -on the token. - -Fails if the token is invalid or expired. - -### couch.put(path, data, callback) - -PUT the data to the supplied path in the couchdb, using the credentials -on the token. - -Fails if the token is invalid or expired. - -### couch.changePass(newAuth, callback) - -Must already be logged in. Updates the `_users` document with new salt -and hash, and re-logs in with the new credentials. Callback is called -with the same arguments as login, or the first step of the process that -failed. - -### couch.signup(userData, callback) - -Create a new user account. The userData must contain at least a `name` -and `password` field. Any additional data will be copied to the user -record. The `_id`, `name`, `roles`, `type`, `password_sha`, `salt`, and -`date` fields are generated. - -Also signs in as the newly created user, on successful account creation. - -### couch.deleteAccount(name, callback) - -Deletes a user account. If not logged in as the user, or a server -admin, then the request will fail. - -Note that this immediately invalidates any session tokens for the -deleted user account. If you are deleting the user's record, then you -ought to follow this with `couch.logout(callback)` so that it won't try -to re-use the invalid session. - -### couch.logout(callback) - -Delete the session out of couchdb. This makes the token permanently -invalid, and deletes it. - -### couch.decorate(req, res) - -Set up `req.couch` and `res.couch` as references to this couch login -instance. - -Additionall, if `req.session` or `res.session` is set, then it'll call -`session.get('couch_token', cb)` as the tokenGet method, -`session.set('couch_token', token, cb)` as the tokenSet method, and -`session.del('couch_token', cb)` as the tokenDel method. - -This works really nice with -[RedSess](https://github.com/isaacs/redsess). diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/couch-login.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/couch-login.js deleted file mode 100644 index 52939c6a1..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/couch-login.js +++ /dev/null @@ -1,399 +0,0 @@ -var request = require('request') -, url = require('url') -, crypto = require('crypto') -, YEAR = (1000 * 60 * 60 * 24 * 365) -, BASIC = {} -, assert = require('assert') - -module.exports = CouchLogin - -function CouchLogin (couch, tok) { - if (!(this instanceof CouchLogin)) { - return new CouchLogin(couch) - } - - if (!couch) throw new Error( - "Need to pass a couch url to CouchLogin constructor") - - if (couch instanceof CouchLogin) - couch = couch.couch - - couch = url.parse(couch) - if (couch.auth) { - var a = couch.auth.split(':') - var name = a.shift() - var password = a.join(':') - this.name = name - if (password) - this.auth = new Buffer(name + ':' + password).toString('base64') - } else { - this.auth = null - this.name = null - } - delete couch.auth - - if (tok === 'anonymous') - tok = NaN - else if (tok === 'basic') - tok = BASIC - - // ensure that couch url ends with a slash - couch.pathname = couch.pathname.replace(/\/?$/, '/'); - - this.token = tok - this.couch = url.format(couch) - this.proxy = null - - this.maxAge = YEAR - - // replace with a CA cert string, or an array, or leave as null - // to use the defaults included in node. Only relevant for HTTPS - // couches, of course. - this.ca = null - - // replace these with client certificate and private key if required by - // the server. Only relevant for HTTPS couches. These are passed to - // the request and then on to https and tls as-is. - this.cert = null - this.key = null - - // set to boolean true or false to specify the strictSSL behavior. - // if left as null, then it'll use whatever node defaults to, which - // is false <=0.8.x, and true >=0.9.x - // - // Again, only relevant for https couches, of course. - this.strictSSL = null -} - -CouchLogin.prototype = -{ get: makeReq('GET') -, del: makeReq('DELETE') -, put: makeReq('PUT', true) -, post: makeReq('POST', true) -, login: login -, logout: logout -, decorate: decorate -, changePass: changePass -, signup: signup -, deleteAccount: deleteAccount -, anon: anon -, anonymous: anon -, valid: valid -} - -Object.defineProperty(CouchLogin.prototype, 'constructor', - { value: CouchLogin, enumerable: false }) - -function decorate (req, res) { - assert(this instanceof CouchLogin) - req.couch = res.couch = this - - // backed by some sort of set(k,v,cb), get(k,cb) session storage. - var session = req.session || res.session || null - if (session) { - this.tokenGet = function (cb) { - session.get('couch_token', cb) - } - - // don't worry about it failing. it'll just mean a login next time. - this.tokenSet = function (tok, cb) { - session.set('couch_token', tok, cb || function () {}) - } - - this.tokenDel = function (cb) { - session.del('couch_token', cb || function () {}) - } - } - - return this -} - -function anon () { - assert(this instanceof CouchLogin) - return new CouchLogin(this.couch, NaN) -} - -function makeReq (meth, body, f) { return function madeReq (p, d, cb) { - assert(this instanceof CouchLogin) - f = f || (this.token !== this.token) - if (!f && !valid(this.token)) { - // lazily get the token. - if (this.tokenGet) return this.tokenGet(function (er, tok) { - if (er || !valid(tok)) { - if (!body) cb = d, d = null - return cb(new Error('auth token expired or invalid')) - } - this.token = tok - return madeReq.call(this, p, d, cb) - }.bind(this)) - - // no getter, no token, no business. - return process.nextTick(function () { - if (!body) cb = d, d = null - cb(new Error('auth token expired or invalid')) - }) - } - - if (!body) cb = d, d = null - - var h = {} - , u = url.resolve(this.couch, p.replace(/^\//, '')) - , req = { uri: u, headers: h, json: true, body: d, method: meth } - - if (this.token === BASIC) { - if (!this.auth) - return process.nextTick(cb.bind(this, new Error( - 'Using basic auth and no auth provided'))) - else - h.authorization = 'Basic ' + this.auth - } else if (this.token) { - h.cookie = 'AuthSession=' + this.token.AuthSession - } - - if (this.proxy) { - req.proxy = this.proxy - } - - // we're handling cookies, don't do it for us. - req.jar = false - - if (this.ca) - req.ca = this.ca - - if (this.cert) - req.cert = this.cert - if (this.key) - req.key = this.key - - if (typeof this.strictSSL === 'boolean') - req.strictSSL = req.rejectUnauthorized = this.strictSSL - - request(req, function (er, res, data) { - // update cookie. - if (er || res.statusCode !== 200) return cb(er, res, data) - addToken.call(this, res) - return cb.call(this, er, res, data) - }.bind(this)) -}} - -function login (auth, cb) { - assert(this instanceof CouchLogin) - if (this.token === BASIC) { - this.auth = new Buffer(auth.name + ':' + auth.password).toString('base64') - this.name = auth.name - cb = cb.bind(this, null, { statusCode: 200 }, { ok: true }) - return process.nextTick(cb) - } - var a = { name: auth.name, password: auth.password } - var req = makeReq('post', true, true) - req.call(this, '/_session', a, function (er, cr, data) { - if (er || (cr && cr.statusCode >= 400)) - return cb(er, cr, data) - this.name = auth.name - cb(er, cr, data) - }.bind(this)) -} - -function changePass (auth, cb) { - assert(this instanceof CouchLogin) - if (!auth.name || !auth.password) return cb(new Error('invalid auth')) - - var u = '/_users/org.couchdb.user:' + auth.name - this.get(u, function (er, res, data) { - if (er || res.statusCode !== 200) return cb(er, res, data) - - // copy any other keys we're setting here. - // note that name, password_sha, salt, and date - // are all set explicitly below. - Object.keys(auth).filter(function (k) { - return k.charAt(0) !== '_' - && k !== 'password' - && k !== 'password_sha' - && k !== 'salt' - }).forEach(function (k) { - data[k] = auth[k] - }) - - var newSalt = crypto.randomBytes(30).toString('hex') - , newPass = auth.password - , newSha = sha(newPass + newSalt) - - data.password_sha = newSha - data.salt = newSalt - data.date = new Date().toISOString() - - this.put(u + '?rev=' + data._rev, data, function (er, res, data) { - if (er || res.statusCode >= 400) - return cb(er, res, data) - if (this.name && this.name !== auth.name) - return cb(er, res, data) - return this.login(auth, cb) - }.bind(this)) - }.bind(this)) -} - -// They said that there should probably be a warning before -// deleting the user's whole account, so here it is: -// -// WATCH OUT! -function deleteAccount (name, cb) { - assert(this instanceof CouchLogin) - var u = '/_users/org.couchdb.user:' + name - this.get(u, thenPut.bind(this)) - - function thenPut (er, res, data) { - if (er || res.statusCode !== 200) { - return cb(er, res, data) - } - - // user accts can't be just DELETE'd by non-admins - // so we take the existing doc and just slap a _deleted - // flag on it to fake it. Works the same either way - // in couch. - data._deleted = true - this.put(u + '?rev=' + data._rev, data, cb) - } -} - - - -function signup (auth, cb) { - assert(this instanceof CouchLogin) - if (this.token && this.token !== BASIC) { - - return this.logout(function (er, res, data) { - if (er || res && res.statusCode !== 200) { - return cb(er, res, data) - } - - if (this.token) { - return cb(new Error('failed to delete token'), res, data) - } - - this.signup(auth, cb) - }.bind(this)) - } - - // make a new user record. - var newSalt = crypto.randomBytes(30).toString('hex') - , newSha = sha(auth.password + newSalt) - , user = { _id: 'org.couchdb.user:' + auth.name - , name: auth.name - , roles: [] - , type: 'user' - , password_sha: newSha - , salt: newSalt - , date: new Date().toISOString() } - - Object.keys(auth).forEach(function (k) { - if (k === 'name' || k === 'password') return - user[k] = auth[k] - }) - - var u = '/_users/' + user._id - makeReq('put', true, true).call(this, u, user, function (er, res, data) { - if (er || res.statusCode >= 400) { - return cb(er, res, data) - } - - // it worked! log in as that user and get their record - this.login(auth, function (er, res, data) { - if (er || (res && res.statusCode >= 400) || data && data.error) { - return cb(er, res, data) - } - this.get(u, cb) - }.bind(this)) - }.bind(this)) -} - -function addToken (res) { - assert(this instanceof CouchLogin) - // not doing the whole login session cookie thing. - if (this.token === BASIC) - return - - // attach the token, if a new one was provided. - var sc = res.headers['set-cookie'] - if (!sc) return - if (!Array.isArray(sc)) sc = [sc] - - sc = sc.filter(function (c) { - return c.match(/^AuthSession=/) - })[0] - - if (!sc.length) return - - sc = sc.split(/\s*;\s*/).map(function (p) { - return p.split('=') - }).reduce(function (set, p) { - var k = p[0] === 'AuthSession' ? p[0] : p[0].toLowerCase() - , v = k === 'expires' ? Date.parse(p[1]) - : p[1] === '' || p[1] === undefined ? true // HttpOnly - : p[1] - set[k] = v - return set - }, {}) - - if (sc.hasOwnProperty('max-age')) { - var ma = sc['max-age'] - sc.expires = (ma <= 0) ? 0 : Date.now() + (ma * 1000) - delete sc['max-age'] - } - - // expire the session after 1 year, even if couch won't. - if (!sc.hasOwnProperty('expires')) { - sc.expires = Date.now() + YEAR - } - - if (!isNaN(this.maxAge)) { - sc.expires = Math.min(sc.expires, Date.now() + this.maxAge) - } - - this.token = sc - if (this.tokenSet) this.tokenSet(this.token) -} - - -function logout (cb) { - assert(this instanceof CouchLogin) - if (!this.token && this.tokenGet) { - return this.tokenGet(function (er, tok) { - if (er || !tok) - return cb(null, { statusCode: 200 }, {}) - this.token = tok - this.logout(cb) - }.bind(this)) - } - - if (!valid(this.token)) { - this.token = null - if (this.tokenDel) this.tokenDel() - return process.nextTick(cb.bind(this, null, { statusCode: 200 }, {})) - } - - var h = { cookie: 'AuthSession=' + this.token.AuthSession } - , u = url.resolve(this.couch, '_session') - , req = { uri: u, headers: h, json: true } - - request.del(req, function (er, res, data) { - if (er || (res.statusCode !== 200 && res.statusCode !== 404)) { - return cb(er, res, data) - } - - this.token = null - if (this.tokenDel) - this.tokenDel() - cb(er, res, data) - }.bind(this)) -} - -function valid (token) { - if (token === BASIC) return true - if (!token) return false - if (!token.hasOwnProperty('expires')) return true - return token.expires > Date.now() -} - -function sha (s) { - return crypto.createHash("sha1").update(s).digest("hex") -} diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/package.json b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/package.json deleted file mode 100644 index 8afcd152b..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "couch-login", - "description": "A module for doing logged-in requests to a couchdb server", - "version": "0.1.20", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/couch-login.git" - }, - "main": "couch-login.js", - "scripts": { - "test": "tap test/*.js" - }, - "dependencies": { - "request": "2 >=2.25.0" - }, - "devDependencies": { - "tap": "~0.2.4" - }, - "license": "ISC", - "readme": "# couch-login\n\nThis module lets you log into couchdb to get a session token, then make\nrequests using that session. It is basically just a thin wrapper around\n[@mikeal's request module](https://github.com/mikeal/request).\n\nThis is handy if you want a user to take actions in a couchdb database\non behalf of a user, without having to store their couchdb username and\npassword anywhere. (You do need to store the AuthSession token\nsomewhere, though.)\n\n## Usage\n\n```javascript\nvar CouchLogin = require('couch-login')\n\n// Nothing about this module is http-server specific of course.\n// You could also use it to do authenticated requests against\n// a couchdb using sessions and storing the token somewhere else.\n\nhttp.createServer(function (req, res) {\n var couch = new CouchLogin('http://my-couch.iriscouch.com:5984/')\n\n // .. look up the token in the user's session or whatever ..\n // Look at couch.decorate(req, res) for more on doing that\n // automatically, below.\n\n if (sessionToken) {\n // this user already logged in.\n couch.token = sessionToken\n\n // now we can do things on their behalf, like:\n // 1. View their session info.\n // like doing request.get({ uri: couch + '/_session', ... })\n // but with the cookie and whatnot\n\n couch.get('/_session', function (er, resp, data) {\n // er = some kind of communication error.\n // resp = response object from the couchdb request.\n // data = parsed JSON response body.\n if (er || resp.statusCode !== 200) {\n res.statusCode = resp.statusCode || 403\n return res.end('Invalid login or something')\n }\n\n // now we have the session info, we know who this user is.\n // hitting couchdb for this on every request is kinda costly,\n // so maybe you should store the username wherever you're storing\n // the sessionToken. RedSess is a good util for this, if you're\n // into redis. And if you're not into redis, you're crazy,\n // because it is awesome.\n\n // now let's get the user record.\n // note that this will 404 for anyone other than the user,\n // unless they're a server admin.\n couch.get('/_users/org.couchdb.user:' + data.userCtx.name, etc)\n\n // PUTs and DELETEs will also use their session, of course, so\n // your validate_doc_update's will see their info in userCtx\n })\n\n } else {\n // don't have a sessionToken.\n // get a username and password from the post body or something.\n // maybe redirect to a /login page or something to ask for that.\n var login = { name: name, password: password }\n couch.login(login, function (er, resp, data) {\n // again, er is an error, resp is the response obj, data is the json\n if (er || resp.statusCode !== 200) {\n res.statusCode = resp.statusCode || 403\n return res.end('Invalid login or something')\n }\n\n // the data is something like\n // {\"ok\":true,\"name\":\"testuser\",\"roles\":[]}\n // and couch.token is the token you'll need to save somewhere.\n\n // at this point, you can start making authenticated requests to\n // couchdb, or save data in their session, or do whatever it is\n // that you need to do.\n\n res.statusCode = 200\n res.write(\"Who's got two thumbs and just logged you into couch?\\n\")\n setTimeout(function () {\n res.end(\"THIS GUY!\")\n }, 500)\n })\n }\n})\n```\n\n## Class: CouchLogin\n### new CouchLogin(couchdbUrl, token)\n\nCreate a new CouchLogin object bound to the couchdb url.\n\nIn addition to these, the `get`, `post`, `put`, and `del` methods all\nproxy to the associated method on [request](https://github.com/mikeal/request).\n\nHowever, as you'll note in the example above, only the pathname portion\nof the url is required. Urls will be appended to the couchdb url passed\ninto the constructor.\n\nIf you have to talk to more than one couchdb, then you'll need more than\none CouchLogin object, for somewhat obvious reasons.\n\nAll callbacks get called with the following arguments, which are exactly\nidentical to the arguments passed to a `request` callback.\n\n* `er` {Error | null} Set if a communication error happens.\n* `resp` {HTTP Response} The response from the request to couchdb\n* `data` {Object} The parsed JSON data from couch\n\nIf the token is the string \"anonymous\", then it will not attempt to log\nin before making requests. If the token is not \"anonymous\", then it\nmust be an object with the appropriate fields.\n\n### couch.token\n\n* {Object}\n\nAn object representing the couchdb session token. (Basically just a\ncookie and a timeout.)\n\nIf the token has already timed out, then setting it will have no effect.\n\n### couch.tokenSet\n\nIf set, this method is called whenever the token is saved.\n\nFor example, you could assign a function to this method to save the\ntoken into a redis session, a cookie, or in some other database.\n\nTakes a callback which should be called when the token is saved.\n\n### couch.tokenGet\n\nIf set, this method is called to look up the token on demand.\n\nThe inverse of couch.tokenSet. Takes a callback which is called with\nthe `cb(er || null, token)`.\n\n### couch.tokenDel\n\nIf set, this method is called to delete the token when it should be\ndiscarded.\n\nRelated to tokenGet and tokenSet. Takes a callback which should be\ncalled when the token is deleted.\n\n### couch.ca\n\n* {String | Array | null}\n\nA certificate authority string (PEM encoded), or an array of CA strings. Only\nrelevant for HTTPS couches, of course.\n\nLeave as `null` to use the default ca settings built into node.\n\n### couch.cert\n\n* {String | null}\n\nA client certificate (PEM encoded) used to support secure access to servers that require client certificate. Only\nrelevant for HTTPS couches, of course.\n\nLeave as `null` when not supporting client certificates.\n\n### couch.key\n\n* {String | null}\n\nA private key string (PEM encoded) used to validate a client certificate. Only\nrelevant for HTTPS couches, of course.\n\nLeave as `null` when not supporting client certificates.\n\n### couch.strictSSL\n\n* {Boolean | null}\n\nWhether or not to be strict about SSL connections. If left as null,\nthen use the default setting in node, which is true in node versions\n0.9.x and above, and false prior to 0.8.x.\n\nOnly relevant for HTTPS couches, of course.\n\n### couch.anonymous()\n\nReturn a new CouchLogin object that points at the same couchdb server,\nbut doesn't try to log in before making requests.\n\nThis is handy for situations where the user is not logged in at the\nmoment, but a request needs to be made anyway, and does not require\nauthorization.\n\n### couch.login(auth, callback)\n\n* `auth` {Object} The login details\n * `name` {String}\n * `password` {String}\n* `callback` {Function}\n\nWhen the callback is called, the `couch.token` will already have been\nset (assuming it worked!), so subsequent requests will be done as that\nuser.\n\n### couch.get(path, callback)\n\nGET the supplied path from the couchdb using the credentials on the\ntoken.\n\nFails if the token is invalid or expired.\n\n### couch.del(path, callback)\n\nDELETE the supplied path from the couchdb using the credentials on the\ntoken.\n\nFails if the token is invalid or expired.\n\n### couch.post(path, data, callback)\n\nPOST the data to the supplied path in the couchdb, using the credentials\non the token.\n\nFails if the token is invalid or expired.\n\n### couch.put(path, data, callback)\n\nPUT the data to the supplied path in the couchdb, using the credentials\non the token.\n\nFails if the token is invalid or expired.\n\n### couch.changePass(newAuth, callback)\n\nMust already be logged in. Updates the `_users` document with new salt\nand hash, and re-logs in with the new credentials. Callback is called\nwith the same arguments as login, or the first step of the process that\nfailed.\n\n### couch.signup(userData, callback)\n\nCreate a new user account. The userData must contain at least a `name`\nand `password` field. Any additional data will be copied to the user\nrecord. The `_id`, `name`, `roles`, `type`, `password_sha`, `salt`, and\n`date` fields are generated.\n\nAlso signs in as the newly created user, on successful account creation.\n\n### couch.deleteAccount(name, callback)\n\nDeletes a user account. If not logged in as the user, or a server\nadmin, then the request will fail.\n\nNote that this immediately invalidates any session tokens for the\ndeleted user account. If you are deleting the user's record, then you\nought to follow this with `couch.logout(callback)` so that it won't try\nto re-use the invalid session.\n\n### couch.logout(callback)\n\nDelete the session out of couchdb. This makes the token permanently\ninvalid, and deletes it.\n\n### couch.decorate(req, res)\n\nSet up `req.couch` and `res.couch` as references to this couch login\ninstance.\n\nAdditionall, if `req.session` or `res.session` is set, then it'll call\n`session.get('couch_token', cb)` as the tokenGet method,\n`session.set('couch_token', token, cb)` as the tokenSet method, and\n`session.del('couch_token', cb)` as the tokenDel method.\n\nThis works really nice with\n[RedSess](https://github.com/isaacs/redsess).\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/isaacs/couch-login/issues" - }, - "homepage": "https://github.com/isaacs/couch-login", - "_id": "couch-login@0.1.20", - "_from": "couch-login@~0.1.18" -} diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/00-setup.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/00-setup.js deleted file mode 100644 index d5dcc190d..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/00-setup.js +++ /dev/null @@ -1,100 +0,0 @@ -// start the couchdb spinning as a detached child process. -// the zz-teardown.js test kills it. -// -// localhost:15985 ==> couchdb -// 127.0.0.1:15985 ==> npm registry - -var spawn = require('child_process').spawn -var test = require('tap').test -var path = require('path') -var fs = require('fs') -var request = require('request') - -// run with the cwd of the main program. -var cwd = path.dirname(__dirname) - -var conf = path.resolve(__dirname, 'fixtures', 'couch.ini') -var pidfile = path.resolve(__dirname, 'fixtures', 'pid') -var logfile = path.resolve(__dirname, 'fixtures', 'couch.log') -var started = /Apache CouchDB has started on http:\/\/127\.0\.0\.1:15985\/\n$/ - -test('start couch as a zombie child', function (t) { - var fd = fs.openSync(pidfile, 'wx') - - try { fs.unlinkSync(logfile) } catch (er) {} - - var child = spawn('couchdb', ['-a', conf], { - detached: true, - stdio: 'ignore', - cwd: cwd - }) - child.unref() - t.ok(child.pid) - fs.writeSync(fd, child.pid + '\n') - fs.closeSync(fd) - - // wait for it to create a log, give it 5 seconds - var start = Date.now() - fs.readFile(logfile, function R (er, log) { - log = log ? log.toString() : '' - if (!er && !log.match(started)) - er = new Error('not started yet') - if (er) { - if (Date.now() - start < 5000) - return setTimeout(function () { - fs.readFile(logfile, R) - }, 100) - else - throw er - } - t.pass('relax') - t.end() - }) -}) - -// set up the testuser account that we'll be using everywhere. -// first delete any existing one, so that we don't end up with -// some newer copy taking over. -test('create testuser', function (t) { - var u = 'http://admin:admin@localhost:15985/_users/org.couchdb.user:testuser' - var rev - - request.get({ url: u, json: true }, function (er, res, data) { - if (er) - throw er - rev = data._rev - if (res.statusCode === 404) - put() - else - del() - }) - - function del () { - request.del(u + '?rev=' + rev, function (er, res, data) { - if (er) - throw er - put() - }) - } - - function put () { - request.put({ - url: u, - body: { - _id: 'org.couchdb.user:testuser', - name: 'testuser', - roles: [], - type: 'user', - password_sha: 'e23952b517695e6bb72ecf060e10bf1b35bf7e0b', - salt: '83695c9b64d3b48b94c9dda0cd691e72', - date: '2012-09-26T16:49:30.175Z' - }, - json: true - }, function (er, res, data) { - if (er) - throw er - t.ok(data.ok, 'user created') - t.end() - }) - } -}) diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/basic.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/basic.js deleted file mode 100644 index 4dea12b3f..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/basic.js +++ /dev/null @@ -1,298 +0,0 @@ -var tap = require('tap') -, CouchLogin = require('../couch-login.js') - -var auth = { name: 'testuser', password: 'test' } -, newAuth = { name: 'testuser', password: 'asdfasdf' } -, couch = new CouchLogin('http://localhost:15985/') -, u = '/_users/org.couchdb.user:' + auth.name -, userRecordMarker - -// simulate the 'must change password on next login' thing -newAuth.mustChangePass = true -auth.mustChangePass = false - - -function okStatus (t, res) { - var x = { found: res.statusCode, wanted: 'around 200' } - var r = res.statusCode - x.ok = (r >= 200 && r < 300) - return t.ok(x.ok, 'Status code should be 200-ish', x) -} - -tap.test('login', function (t) { - couch.login(auth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.deepEqual(data, { ok: true, name: 'testuser', roles: [] }) - t.ok(couch.token) - t.deepEqual(couch.token, - { AuthSession: couch.token && couch.token.AuthSession, - version: '1', - expires: couch.token && couch.token.expires, - path: '/', - httponly: true }) - t.ok(couch.token, 'has token') - t.end() - }) -}) - -var userRecord -tap.test('get', function (t) { - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - t.ok(data, 'data') - t.ok(couch.token, 'token') - userRecord = data - okStatus(t, res) - t.end() - }) -}) - -var userRecordMarker = require('crypto').randomBytes(30).toString('base64') -tap.test('add key to user record', function (t) { - userRecord.testingCouchLogin = userRecordMarker - var revved = u + '?rev=' + userRecord._rev - couch.put(revved, userRecord, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - // get again so we have the current rev - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data) - t.ok(userRecord) - t.equal(data.testingCouchLogin, userRecord.testingCouchLogin) - userRecord = data - t.end() - }) - }) -}) - -tap.test('remove key', function (t) { - var revved = u + '?rev=' + userRecord._rev - delete userRecord.testingCouchLogin - couch.put(revved, userRecord, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(couch.token, 'token') - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - t.equal(data.testingCouchLogin, undefined) - userRecord = data - t.end() - }) - }) -}) - -var crypto = require('crypto') -function sha (s) { - return crypto.createHash("sha1").update(s).digest("hex") -} - -tap.test('change password manually', function (t) { - var revved = u + '?rev=' + userRecord._rev - , newPass = newAuth.password - , newSalt = 'test-salt-two' - , newSha = sha(newPass + newSalt) - - userRecord.salt = newSalt - userRecord.password_sha = newSha - couch.put(revved, userRecord, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - // changing password invalidates session. - // need to re-login - couch.login(newAuth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - t.equal(data.testingCouchLogin, undefined) - userRecord = data - t.end() - }) - }) - }) -}) - -tap.test('change password back manually', function (t) { - var revved = u + '?rev=' + userRecord._rev - , newPass = auth.password - , newSalt = 'test-salt' - , newSha = sha(newPass + newSalt) - - userRecord.salt = newSalt - userRecord.password_sha = newSha - couch.put(revved, userRecord, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - - couch.login(auth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - userRecord = data - t.end() - }) - }) - }) -}) - -tap.test('change password easy', function (t) { - couch.changePass(newAuth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - t.equal(data.testingCouchLogin, undefined) - t.equal(data.mustChangePass, true) - userRecord = data - t.end() - }) - }) -}) - -tap.test('change password back easy', function (t) { - couch.changePass(auth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - t.equal(data.testingCouchLogin, undefined) - t.equal(data.mustChangePass, false) - userRecord = data - t.end() - }) - }) -}) - - -tap.test('logout', function (t) { - couch.logout(function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.notOk(couch.token, 'token') - t.end() - }) -}) - -// now try some logged out monkey business! -tap.test('logged out post', function (t) { - couch.post('/yeah-right', {foo: 100}, function (er, res, data) { - t.ok(er, 'should get an error') - t.notOk(couch.token, 'token') - t.end() - }) -}) - -tap.test('anonymous put', function (t) { - var guy = couch.anonymous() - guy.put('/remember', {november:5}, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - t.equal(res.statusCode, 401) - t.deepEqual(data, { error: 'unauthorized' - , reason: 'You are not a server admin.' }) - t.end() - }) -}) - -tap.test('anonymous get', function (t) { - var guy = couch.anonymous() - guy.get('/', function (er, res, data) { - t.ifError(er) - if (er) return t.end() - t.equal(res.statusCode, 200) - t.has(data, { couchdb: 'Welcome' }) - t.ok(data.version) - t.end() - }) -}) - - - -var signupUser = { name: 'test-user-signup', password: 'signup-test' } - -tap.test('sign up as new user', function (t) { - couch.signup(signupUser, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.has(data, - { _id: 'org.couchdb.user:test-user-signup', - name: 'test-user-signup', - roles: [], - type: 'user' }) - t.ok(data._rev, 'rev') - t.ok(data.date, 'date') - t.ok(data.password_sha, 'hash') - t.ok(data.salt, 'salt') - t.ok(couch.token, 'token') - // now delete account - var name = signupUser.name - couch.deleteAccount(name, function (er, res, data) { - t.ifError(er, 'should be no error deleting account') - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.end() - }) - }) -}) - -tap.test('using basic auth', function (t) { - var c = new CouchLogin(couch.couch, 'basic') - c.login(auth, function () { - c.get('/_users/org.couchdb.user:testuser', function (er, res, data) { - if (er) - throw er - okStatus(t, res) - t.ok(data, 'data') - t.end() - }) - }) -}) diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/_replicator.couch b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/_replicator.couch Binary files differdeleted file mode 100644 index b8dbbebd0..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/_replicator.couch +++ /dev/null diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/couch.ini b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/couch.ini deleted file mode 100644 index 5f3579713..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/couch.ini +++ /dev/null @@ -1,25 +0,0 @@ -[couchdb] -database_dir = test/fixtures -view_index_dir = test/fixtures -uuid = 3ec49bc6c314484cb21d684dc3fc778e - -[httpd] -port = 15985 -bind_address = 127.0.0.1 -secure_rewrites = false -allow_jsonp = true -config_whitelist = [{uuids,algorithm},{vhosts,"*"},{admins,"*"},{log,level},{httpd,allow_jsonp},{httpd,secure_rewrites},{httpd,mobile_futon},{httpd,sammy_futon},{httpd,cors},{httpd,x_forwarded_host},{httpd,'WWW-Authenticate'},{cors,"*"},{compactions,"*"},{replicator,db},{attachments,compression_level},{attachments,compressible_types},{couch_httpd_auth,authentication_db},{couch_httpd_auth,allow_persistent_cookies},{couch_httpd_auth,authentication_redirect},{couch_httpd_auth,require_valid_user},{couch_httpd_auth,timeout},{couch_httpd_auth,secret},{couchdb,os_process_timeout},{query_server_config,reduce_limit},{couch_httpd_oauth,"*"},{oauth_token_users,"*"},{oauth_token_secrets,"*"},{oauth_consumer_secrets,"*"},{browserid,enabled},{browserid,hash_secret},{fb,"*"}] - -[log] -file = test/fixtures/couch.log - -[admins] -admin = -hashed-b933598b0ade0e4c2a258d53c95990d5939461dd,a44895e5740b79d14b392ada8021d31d - -[couch_httpd_auth] -secret = cafebad000deadbeef00000019790701 -timeout = 36000 -allow_persistent_cookies = true - -[vhosts] -127.0.0.1:15985 = /registry/_design/ghost/_rewrite diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/registry.couch b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/registry.couch Binary files differdeleted file mode 100644 index 5806317db..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/fixtures/registry.couch +++ /dev/null diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/registry.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/registry.js deleted file mode 100644 index d99d9f4f6..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/registry.js +++ /dev/null @@ -1,252 +0,0 @@ -// Should be able to use this module to log into the registry, as well. - -var tap = require('tap') -, CouchLogin = require('../couch-login.js') - -var auth = { name: 'testuser', password: 'test' } -, newAuth = { name: 'testuser', password: 'asdfasdf' } -, couch = new CouchLogin('http://127.0.0.1:15985/') -, u = '/_users/org.couchdb.user:' + auth.name -, userRecordMarker - -// simulate the 'must change password on next login' thing -newAuth.mustChangePass = true -auth.mustChangePass = false - - -function okStatus (t, res) { - var x = { found: res.statusCode, wanted: 'around 200' } - var r = res.statusCode - x.ok = (r >= 200 && r < 300) - return t.ok(x.ok, 'Status code should be 200-ish', x) -} - -tap.test('login', function (t) { - couch.login(auth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.deepEqual(data, { ok: true, name: 'testuser', roles: [] }) - t.ok(couch.token) - t.deepEqual(couch.token, - { AuthSession: couch.token && couch.token.AuthSession, - version: '1', - expires: couch.token && couch.token.expires, - path: '/', - httponly: true }) - t.ok(couch.token, 'has token') - t.end() - }) -}) - -var userRecord -tap.test('get', function (t) { - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - t.ok(data, 'data') - t.ok(couch.token, 'token') - userRecord = data - okStatus(t, res) - t.end() - }) -}) - -var userRecordMarker = require('crypto').randomBytes(30).toString('base64') -tap.test('add key to user record', function (t) { - userRecord.testingCouchLogin = userRecordMarker - var revved = u + '?rev=' + userRecord._rev - couch.put(revved, userRecord, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - // get again so we have the current rev - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data) - t.ok(userRecord) - t.equal(data.testingCouchLogin, userRecord.testingCouchLogin) - userRecord = data - t.end() - }) - }) -}) - -tap.test('remove key', function (t) { - var revved = u + '?rev=' + userRecord._rev - delete userRecord.testingCouchLogin - couch.put(revved, userRecord, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(couch.token, 'token') - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - t.equal(data.testingCouchLogin, undefined) - userRecord = data - t.end() - }) - }) -}) - -var crypto = require('crypto') -function sha (s) { - return crypto.createHash("sha1").update(s).digest("hex") -} - -tap.test('change password manually', function (t) { - var revved = u + '?rev=' + userRecord._rev - , newPass = newAuth.password - , newSalt = 'test-salt-two' - , newSha = sha(newPass + newSalt) - - userRecord.salt = newSalt - userRecord.password_sha = newSha - couch.put(revved, userRecord, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - // changing password invalidates session. - // need to re-login - couch.login(newAuth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - t.equal(data.testingCouchLogin, undefined) - userRecord = data - t.end() - }) - }) - }) -}) - -tap.test('change password back manually', function (t) { - var revved = u + '?rev=' + userRecord._rev - , newPass = auth.password - , newSalt = 'test-salt' - , newSha = sha(newPass + newSalt) - - userRecord.salt = newSalt - userRecord.password_sha = newSha - couch.put(revved, userRecord, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - - couch.login(auth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - userRecord = data - t.end() - }) - }) - }) -}) - -tap.test('change password easy', function (t) { - couch.changePass(newAuth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - t.equal(data.testingCouchLogin, undefined) - t.equal(data.mustChangePass, true) - userRecord = data - t.end() - }) - }) -}) - -tap.test('change password back easy', function (t) { - couch.changePass(auth, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - - couch.get(u, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.ok(couch.token, 'token') - t.equal(data.testingCouchLogin, undefined) - t.notOk(data.mustChangePass) - userRecord = data - t.end() - }) - }) -}) - - -tap.test('logout', function (t) { - couch.logout(function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.notOk(couch.token, 'token') - t.end() - }) -}) - -var signupUser = { name: 'test-user-signup', password: 'signup-test' } - -tap.test('sign up as new user', function (t) { - couch.signup(signupUser, function (er, res, data) { - t.ifError(er) - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.has(data, - { _id: 'org.couchdb.user:test-user-signup', - name: 'test-user-signup', - roles: [], - type: 'user' }) - t.ok(data._rev, 'rev') - t.ok(data.date, 'date') - t.ok(data.password_sha, 'hash') - t.ok(data.salt, 'salt') - t.ok(couch.token, 'token') - // now delete account - var name = signupUser.name - couch.deleteAccount(name, function (er, res, data) { - t.ifError(er, 'should be no error deleting account') - if (er) return t.end() - okStatus(t, res) - t.ok(data, 'data') - t.end() - }) - }) -}) diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/reset-then-signup.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/reset-then-signup.js deleted file mode 100644 index 77a5ceda9..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/reset-then-signup.js +++ /dev/null @@ -1,112 +0,0 @@ -var test = require('tap').test -var CouchLogin = require('../couch-login.js') - -var auth = { name: 'testuser', password: 'test' } -, newAuth = { name: 'testuser', password: 'asdf', mustChangePass: true } -, db = 'http://localhost:15985/' -, couch = new CouchLogin(db) -, u = '/_users/org.couchdb.user:' + auth.name -, admin = { name: 'admin', password: 'admin' } -, newUser = { name: 'testuser', password: 'test' } -, newUserCouch = null -, authToken = null - -newUser.name += Math.floor(Math.random() * 1E9) - -var okGlobal = Object.keys(global) - -var adminCouch = new CouchLogin(db, 'basic') - -function okStatus (t, res) { - var x = { found: res.statusCode, wanted: 'around 200' } - var r = res.statusCode - x.ok = (r >= 200 && r < 300) - return t.ok(x.ok, 'Status code should be 200-ish', x) -} - -test('adminCouch login', function (t) { - t.deepEqual(Object.keys(global), okGlobal) - console.error('adminCouch login') - adminCouch.login(admin, function (er, res, data) { - if (er) - throw er - okStatus(t, res) - t.ok(data) - t.end() - }) -}) - -test('get the user data as admin', function (t) { - t.deepEqual(Object.keys(global), okGlobal) - console.error('2') - adminCouch.get(u, function (er, res, data) { - if (er) - throw er - okStatus(t, res) - t.ok(data) - t.end() - }) -}) - -test('admin user changes the password for non-admin user', function (t) { - console.error(3) - t.deepEqual(Object.keys(global), okGlobal) - adminCouch.changePass(newAuth, function (er, res, data) { - if (er) - throw er - okStatus(t, res) - t.ok(data) - t.end() - }) -}) - -test('testuser logs in', function (t) { - console.error(4) - t.deepEqual(Object.keys(global), okGlobal) - couch.login(newAuth, function (er, res, data) { - if (er) - throw er - okStatus(t, res) - t.deepEqual(data, { ok: true, name: 'testuser', roles: [] }) - authToken = couch.token - t.end() - }) -}) - -// test('testuser changes password', function (t) { -// couch = new CouchLogin(db) -// couch.token = authToken -// couch.changePass(auth, function (er, res, data) { -// if (er) -// throw er -// okStatus(t, res) -// console.error(data) -// t.ok(data) -// t.end() -// }) -// }) - -test('new user signup', function (t) { - t.deepEqual(Object.keys(global), okGlobal) - newUserCouch = new CouchLogin(db) - newUserCouch.signup(newUser, function (er, res, data) { - if (er) - throw er - okStatus(t, res) - console.error(data) - t.ok(data) - t.end() - }) -}) - -test('delete newUser account', function (t) { - t.deepEqual(Object.keys(global), okGlobal) - newUserCouch.deleteAccount(newUser.name, function (er, res, data) { - if (er) - throw er - okStatus(t, res) - console.error(data) - t.ok(data) - t.end() - }) -}) diff --git a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/zz-teardown.js b/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/zz-teardown.js deleted file mode 100644 index a66e24a10..000000000 --- a/deps/npm/node_modules/npm-registry-client/node_modules/couch-login/test/zz-teardown.js +++ /dev/null @@ -1,23 +0,0 @@ -// kill the couchdb process that's running as a detached child process -// started by the 00-setup.js test - -var fs = require('fs') -var test = require('tap').test -var path = require('path') -var pidfile = path.resolve(__dirname, 'fixtures', 'pid') -var _users = path.resolve(__dirname, 'fixtures', '_users.couch') - -test('kill all the users', function (t) { - fs.unlinkSync(_users) - t.pass('_users db deleted') - t.end() -}) - -test('craigslist (well, how do you get rid of YOUR couches?)', function (t) { - var pid = fs.readFileSync(pidfile) - fs.unlinkSync(pidfile) - process.kill(pid) - t.pass('couch is no more') - t.end() -}) - diff --git a/deps/npm/node_modules/npm-registry-client/package.json b/deps/npm/node_modules/npm-registry-client/package.json index e09464889..d9e22e289 100644 --- a/deps/npm/node_modules/npm-registry-client/package.json +++ b/deps/npm/node_modules/npm-registry-client/package.json @@ -6,7 +6,7 @@ }, "name": "npm-registry-client", "description": "Client for the npm registry", - "version": "0.3.5", + "version": "0.4.0", "repository": { "url": "git://github.com/isaacs/npm-registry-client" }, @@ -23,7 +23,6 @@ "mkdirp": "~0.3.3", "rimraf": "~2", "retry": "0.6.0", - "couch-login": "~0.1.18", "npmlog": "" }, "devDependencies": { @@ -39,10 +38,10 @@ "url": "https://github.com/isaacs/npm-registry-client/issues" }, "homepage": "https://github.com/isaacs/npm-registry-client", - "_id": "npm-registry-client@0.3.5", + "_id": "npm-registry-client@0.4.0", "dist": { - "shasum": "98ba1ac851a3939a3fb9917c28fa8da522dc635f" + "shasum": "30d0c178b7f2e54183a6a3fc9fe4071eb10290bf" }, - "_from": "npm-registry-client@0.3.5", - "_resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-0.3.5.tgz" + "_from": "npm-registry-client@0.4.0", + "_resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-0.4.0.tgz" } diff --git a/deps/npm/node_modules/read-package-json/.npmignore b/deps/npm/node_modules/read-package-json/.npmignore new file mode 100644 index 000000000..8c23deeb3 --- /dev/null +++ b/deps/npm/node_modules/read-package-json/.npmignore @@ -0,0 +1,13 @@ +*.swp +.*.swp + +.DS_Store +*~ +.project +.settings +npm-debug.log +coverage.html +.idea +lib-cov + +node_modules diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js index af2bf55ae..9d832ee17 100644 --- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js @@ -6,6 +6,8 @@ var url = require("url") var typos = require("./typos") var coreModuleNames = require("./core_module_names") var githubUserRepo = require("github-url-from-username-repo") +var warningMessages = require('./warning_messages.json') +var format = require('util').format var fixer = module.exports = { // default warning function @@ -13,11 +15,10 @@ var fixer = module.exports = { fixRepositoryField: function(data) { if (data.repositories) { - this.warn("'repositories' (plural) Not supported.\n" + - "Please pick one as the 'repository' field"); + this.warn(warningMessages.repositories); data.repository = data.repositories[0] } - if (!data.repository) return this.warn('No repository field.') + if (!data.repository) return this.warn(warningMessages.missingRepository) if (typeof data.repository === "string") { data.repository = { type: "git", @@ -36,7 +37,7 @@ var fixer = module.exports = { } if (r.match(/github.com\/[^\/]+\/[^\/]+\.git\.git$/)) { - this.warn("Probably broken git url: " + r) + this.warn(format(warningMessages.brokenGitUrl, r)) } } @@ -51,12 +52,12 @@ var fixer = module.exports = { , fixScriptsField: function(data) { if (!data.scripts) return if (typeof data.scripts !== "object") { - this.warn("scripts must be an object") + this.warn(warningMessages.nonObjectScripts) delete data.scripts } Object.keys(data.scripts).forEach(function (k) { if (typeof data.scripts[k] !== "string") { - this.warn("script values must be string commands") + this.warn(warningMessages.nonStringScript) delete data.scripts[k] } else if (typos.script[k]) { this.warn(makeTypoWarning(k, typos.script[k], "scripts")) @@ -67,12 +68,12 @@ var fixer = module.exports = { , fixFilesField: function(data) { var files = data.files if (files && !Array.isArray(files)) { - this.warn("Invalid 'files' member") + this.warn(warningMessages.nonArrayFiles) delete data.files } else if (data.files) { data.files = data.files.filter(function(file) { if (!file || typeof file !== "string") { - this.warn("Invalid filename in 'files' list: " + file) + this.warn(format(warningMessages.invalidFilename, file)) return false } else { return true @@ -104,13 +105,12 @@ var fixer = module.exports = { delete data[bdd] } if (data[bd] && !Array.isArray(data[bd])) { - this.warn("Invalid 'bundleDependencies' list. " + - "Must be array of package names") + this.warn(warningMessages.nonArrayBundleDependencies) delete data[bd] } else if (data[bd]) { data[bd] = data[bd].filter(function(bd) { if (!bd || typeof bd !== 'string') { - this.warn("Invalid bundleDependencies member: " + bd) + this.warn(format(nonStringBundleDependency, bd)) return false } else { return true @@ -128,23 +128,28 @@ var fixer = module.exports = { ;['dependencies','devDependencies'].forEach(function(deps) { if (!(deps in data)) return if (!data[deps] || typeof data[deps] !== "object") { - this.warn(deps + " field must be an object") + this.warn(format(warningMessages.nonObjectDependencies, deps)) delete data[deps] return } Object.keys(data[deps]).forEach(function (d) { var r = data[deps][d] if (typeof r !== 'string') { - this.warn('Invalid dependency: ' + d + ' ' + JSON.stringify(r)) + this.warn(format(nonStringDependency, d, JSON.stringify(r))) delete data[deps][d] } + // "/" is not allowed as packagename for publishing, but for git-urls + // normalize shorthand-urls + if (githubUserRepo(data[deps][d])) { + data[deps][d] = githubUserRepo(data[deps][d]) + } }, this) }, this) } , fixModulesField: function (data) { if (data.modules) { - this.warn("modules field is deprecated") + this.warn(warningMessages.deprecatedModules) delete data.modules } } @@ -155,11 +160,11 @@ var fixer = module.exports = { } if (data.keywords && !Array.isArray(data.keywords)) { delete data.keywords - this.warn("keywords should be an array of strings") + this.warn(warningMessages.nonArrayKeywords) } else if (data.keywords) { data.keywords = data.keywords.filter(function(kw) { if (typeof kw !== "string" || !kw) { - this.warn("keywords should be an array of strings"); + this.warn(warningMessages.nonStringKeyword); return false } else { return true @@ -200,24 +205,24 @@ var fixer = module.exports = { data.name = data.name.trim() ensureValidName(data.name, strict) if (coreModuleNames.indexOf(data.name) !== -1) - this.warn(data.name + " is also the name of a node core module.") + this.warn(format(warningMessages.conflictingName, data.name)) } , fixDescriptionField: function (data) { if (data.description && typeof data.description !== 'string') { - this.warn("'description' field should be a string") + this.warn(warningMessages.nonStringDescription) delete data.description } if (data.readme && !data.description) data.description = extractDescription(data.readme) if(data.description === undefined) delete data.description; - if (!data.description) this.warn('No description') + if (!data.description) this.warn(warningMessages.missingDescription) } , fixReadmeField: function (data) { if (!data.readme) { - this.warn("No README data") + this.warn(warningMessages.missingReadme) data.readme = "ERROR: No README data found!" } } @@ -240,7 +245,7 @@ var fixer = module.exports = { else if(url.parse(data.bugs).protocol) data.bugs = {url: data.bugs} else - this.warn("Bug string field must be url, email, or {email,url}") + this.warn(warningMessages.nonEmailUrlBugsString) } else { bugsTypos(data.bugs, this.warn) @@ -250,18 +255,18 @@ var fixer = module.exports = { if(typeof(oldBugs.url) == "string" && url.parse(oldBugs.url).protocol) data.bugs.url = oldBugs.url else - this.warn("bugs.url field must be a string url. Deleted.") + this.warn(warningMessages.nonUrlBugsUrlField) } if(oldBugs.email) { if(typeof(oldBugs.email) == "string" && emailRe.test(oldBugs.email)) data.bugs.email = oldBugs.email else - this.warn("bugs.email field must be a string email. Deleted.") + this.warn(warningMessages.nonEmailBugsEmailField) } } if(!data.bugs.email && !data.bugs.url) { delete data.bugs - this.warn("Normalized value of bugs field is an empty object. Deleted.") + this.warn(warningMessages.emptyNormalizedBugs) } } } @@ -277,11 +282,11 @@ var fixer = module.exports = { return true if(typeof data.homepage !== "string") { - this.warn("homepage field must be a string url. Deleted.") + this.warn(warningMessages.nonUrlHomepage) return delete data.homepage } if(!url.parse(data.homepage).protocol) { - this.warn("homepage field must start with a protocol.") + this.warn(warningMessages.missingProtocolHomepage) data.homepage = "http://" + data.homepage } } @@ -345,7 +350,7 @@ function depObjectify (deps, type, warn) { deps = deps.trim().split(/[\n\r\s\t ,]+/) } if (!Array.isArray(deps)) return deps - warn("specifying " + type + " as array is deprecated") + warn(format(warningMessages.deprecatedArrayDependencies, type)) var o = {} deps.filter(function (d) { return typeof d === "string" @@ -383,5 +388,5 @@ function makeTypoWarning (providedName, probableName, field) { providedName = field + "['" + providedName + "']" probableName = field + "['" + probableName + "']" } - return providedName + " should probably be " + probableName + "." -} + return format(warningMessages.typo, providedName, probableName) +}
\ No newline at end of file diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js new file mode 100644 index 000000000..08517f142 --- /dev/null +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/safe_format.js @@ -0,0 +1,9 @@ +var util = require('util') + +module.exports = function() { + var args = Array.prototype.slice.call(arguments, 0) + args.forEach(function(arg) { + if (!arg) throw new TypeError('Bad arguments.') + }) + return util.format.apply(null, arguments) +}
\ No newline at end of file diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json new file mode 100644 index 000000000..9605f5cc6 --- /dev/null +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/warning_messages.json @@ -0,0 +1,28 @@ +{ + "repositories": "'repositories' (plural) Not supported. Please pick one as the 'repository' field" + ,"missingRepository": "No repository field." + ,"brokenGitUrl": "Probably broken git url: %s" + ,"nonObjectScripts": "scripts must be an object" + ,"nonStringScript": "script values must be string commands" + ,"nonArrayFiles": "Invalid 'files' member" + ,"invalidFilename": "Invalid filename in 'files' list: %s" + ,"nonArrayBundleDependencies": "Invalid 'bundleDependencies' list. Must be array of package names" + ,"nonStringBundleDependency": "Invalid bundleDependencies member: %s" + ,"nonObjectDependencies": "%s field must be an object" + ,"nonStringDependency": "Invalid dependency: %s %s" + ,"deprecatedArrayDependencies": "specifying %s as array is deprecated" + ,"deprecatedModules": "modules field is deprecated" + ,"nonArrayKeywords": "keywords should be an array of strings" + ,"nonStringKeyword": "keywords should be an array of strings" + ,"conflictingName": "%s is also the name of a node core module." + ,"nonStringDescription": "'description' field should be a string" + ,"missingDescription": "No description" + ,"missingReadme": "No README data" + ,"nonEmailUrlBugsString": "Bug string field must be url, email, or {email,url}" + ,"nonUrlBugsUrlField": "bugs.url field must be a string url. Deleted." + ,"nonEmailBugsEmailField": "bugs.email field must be a string email. Deleted." + ,"emptyNormalizedBugs": "Normalized value of bugs field is an empty object. Deleted." + ,"nonUrlHomepage": "homepage field must be a string url. Deleted." + ,"missingProtocolHomepage": "homepage field must start with a protocol." + ,"typo": "%s should probably be %s." +}
\ No newline at end of file diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json index 1ea36836a..05037bf92 100644 --- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/package.json @@ -1,6 +1,6 @@ { "name": "normalize-package-data", - "version": "0.2.8", + "version": "0.2.9", "author": { "name": "Meryn Stol", "email": "merynstol@gmail.com" @@ -44,6 +44,10 @@ "url": "https://github.com/meryn/normalize-package-data/issues" }, "homepage": "https://github.com/meryn/normalize-package-data", - "_id": "normalize-package-data@0.2.8", - "_from": "normalize-package-data@~0.2.7" + "_id": "normalize-package-data@0.2.9", + "dist": { + "shasum": "73fff1f896ce6f95bd089c57037a96389ad5789e" + }, + "_from": "normalize-package-data@~0.2.9", + "_resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-0.2.9.tgz" } diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js index 6e96e6dc9..dd26c5d01 100644 --- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/normalize.js @@ -5,6 +5,8 @@ var path = require("path") var globals = Object.keys(global) var normalize = require("../lib/normalize") +var warningMessages = require("../lib/warning_messages.json") +var safeFormat = require("../lib/safe_format") var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json") tap.test("normalize some package data", function(t) { @@ -48,9 +50,9 @@ tap.test("empty object", function(t) { normalize(packageData, warn) t.same(packageData, expect) t.same(warnings, [ - "No description", - "No repository field.", - "No README data" + warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme ]) t.end() }) @@ -70,10 +72,10 @@ tap.test("core module name", function(t) { }, warn) var expect = [ - "http is also the name of a node core module.", - "Bug string field must be url, email, or {email,url}", - "Normalized value of bugs field is an empty object. Deleted.", - "homepage field must be a string url. Deleted." + safeFormat(warningMessages.conflictingName, 'http'), + warningMessages.nonEmailUrlBugsString, + warningMessages.emptyNormalizedBugs, + warningMessages.nonUrlHomepage ] t.same(warnings, expect) t.end() @@ -101,15 +103,15 @@ tap.test("urls required", function(t) { console.error(a) var expect = - [ "No description", - "No repository field.", - "bugs.url field must be a string url. Deleted.", - "bugs.email field must be a string email. Deleted.", - "Normalized value of bugs field is an empty object. Deleted.", - "No README data", - "Bug string field must be url, email, or {email,url}", - "Normalized value of bugs field is an empty object. Deleted.", - "homepage field must be a string url. Deleted." ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.nonUrlBugsUrlField, + warningMessages.nonEmailBugsEmailField, + warningMessages.emptyNormalizedBugs, + warningMessages.missingReadme, + warningMessages.nonEmailUrlBugsString, + warningMessages.emptyNormalizedBugs, + warningMessages.nonUrlHomepage ] t.same(warnings, expect) t.end() }) @@ -127,10 +129,10 @@ tap.test("homepage field must start with a protocol.", function(t) { console.error(a) var expect = - [ "No description", - "No repository field.", - "No README data", - "homepage field must start with a protocol." ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme, + warningMessages.missingProtocolHomepage ] t.same(warnings, expect) t.same(a.homepage, 'http://example.org') t.end() @@ -194,6 +196,13 @@ tap.test("homepage field will set to github gist url if repository is a shorthan t.end() }) +tap.test("treat isaacs/node-graceful-fs as github repo in dependencies", function(t) { + var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}} + normalize(d) + t.same(d.dependencies, {"node-graceful-fs": "git://github.com/isaacs/node-graceful-fs" }) + t.end() +}); + tap.test("deprecation warning for array in dependencies fields", function(t) { var a var warnings = [] @@ -205,9 +214,9 @@ tap.test("deprecation warning for array in dependencies fields", function(t) { devDependencies: [], optionalDependencies: [] }, warn) - t.ok(~warnings.indexOf("specifying dependencies as array is deprecated"), "deprecation warning") - t.ok(~warnings.indexOf("specifying devDependencies as array is deprecated"), "deprecation warning") - t.ok(~warnings.indexOf("specifying optionalDependencies as array is deprecated"), "deprecation warning") + t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning") + t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning") + t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning") t.end() }) diff --git a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js index 3eef829fd..eda75545e 100644 --- a/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js +++ b/deps/npm/node_modules/read-package-json/node_modules/normalize-package-data/test/typo.js @@ -1,33 +1,38 @@ var test = require('tap').test + var normalize = require('../') var typos = require('../lib/typos.json') +var warningMessages = require("../lib/warning_messages.json") +var safeFormat = require("../lib/safe_format") test('typos', function(t) { var warnings = [] function warn(m) { warnings.push(m) } + + var typoMessage = safeFormat.bind(undefined, warningMessages.typo) var expect = - [ 'No repository field.', - 'dependancies should probably be dependencies.', - 'dependecies should probably be dependencies.', - 'depdenencies should probably be dependencies.', - 'devEependencies should probably be devDependencies.', - 'depends should probably be dependencies.', - 'dev-dependencies should probably be devDependencies.', - 'devDependences should probably be devDependencies.', - 'devDepenencies should probably be devDependencies.', - 'devdependencies should probably be devDependencies.', - 'repostitory should probably be repository.', - 'repo should probably be repository.', - 'prefereGlobal should probably be preferGlobal.', - 'hompage should probably be homepage.', - 'hampage should probably be homepage.', - 'autohr should probably be author.', - 'autor should probably be author.', - 'contributers should probably be contributors.', - 'publicationConfig should probably be publishConfig.' ] + [ warningMessages.missingRepository, + typoMessage('dependancies', 'dependencies'), + typoMessage('dependecies', 'dependencies'), + typoMessage('depdenencies', 'dependencies'), + typoMessage('devEependencies', 'devDependencies'), + typoMessage('depends', 'dependencies'), + typoMessage('dev-dependencies', 'devDependencies'), + typoMessage('devDependences', 'devDependencies'), + typoMessage('devDepenencies', 'devDependencies'), + typoMessage('devdependencies', 'devDependencies'), + typoMessage('repostitory', 'repository'), + typoMessage('repo', 'repository'), + typoMessage('prefereGlobal', 'preferGlobal'), + typoMessage('hompage', 'homepage'), + typoMessage('hampage', 'homepage'), + typoMessage('autohr', 'author'), + typoMessage('autor', 'author'), + typoMessage('contributers', 'contributors'), + typoMessage('publicationConfig', 'publishConfig') ] normalize({"dependancies": "dependencies" ,"dependecies": "dependencies" @@ -55,13 +60,13 @@ test('typos', function(t) { warnings.length = 0 var expect = - [ 'No description', - 'No repository field.', - 'bugs[\'web\'] should probably be bugs[\'url\'].', - 'bugs[\'name\'] should probably be bugs[\'url\'].', - 'bugs.url field must be a string url. Deleted.', - 'Normalized value of bugs field is an empty object. Deleted.', - "No README data" ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + typoMessage("bugs['web']", "bugs['url']"), + typoMessage("bugs['name']", "bugs['url']"), + warningMessages.nonUrlBugsUrlField, + warningMessages.emptyNormalizedBugs, + warningMessages.missingReadme ] normalize({name:"name" ,version:"1.2.5" @@ -71,10 +76,10 @@ test('typos', function(t) { warnings.length = 0 var expect = - [ 'No description', - 'No repository field.', - "No README data", - 'script should probably be scripts.' ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + warningMessages.missingReadme, + typoMessage('script', 'scripts') ] normalize({name:"name" ,version:"1.2.5" @@ -84,11 +89,11 @@ test('typos', function(t) { warnings.length = 0 expect = - [ 'No description', - 'No repository field.', - 'scripts[\'server\'] should probably be scripts[\'start\'].', - 'scripts[\'tests\'] should probably be scripts[\'test\'].', - "No README data" ] + [ warningMessages.missingDescription, + warningMessages.missingRepository, + typoMessage("scripts['server']", "scripts['start']"), + typoMessage("scripts['tests']", "scripts['test']"), + warningMessages.missingReadme ] normalize({name:"name" ,version:"1.2.5" diff --git a/deps/npm/node_modules/read-package-json/package.json b/deps/npm/node_modules/read-package-json/package.json index f1e40ddc1..794aedb8e 100644 --- a/deps/npm/node_modules/read-package-json/package.json +++ b/deps/npm/node_modules/read-package-json/package.json @@ -1,6 +1,6 @@ { "name": "read-package-json", - "version": "1.1.6", + "version": "1.1.7", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me", @@ -18,7 +18,7 @@ "dependencies": { "glob": "~3.2.1", "lru-cache": "2", - "normalize-package-data": "~0.2.7", + "normalize-package-data": "~0.2.9", "graceful-fs": "2" }, "devDependencies": { @@ -34,10 +34,6 @@ "url": "https://github.com/isaacs/read-package-json/issues" }, "homepage": "https://github.com/isaacs/read-package-json", - "_id": "read-package-json@1.1.6", - "dist": { - "shasum": "a851dbbaca48ff78a87f890f0a9fdf43b1759d5a" - }, - "_from": "read-package-json@1.1.6", - "_resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-1.1.6.tgz" + "_id": "read-package-json@1.1.7", + "_from": "read-package-json@~1.1.6" } diff --git a/deps/npm/package.json b/deps/npm/package.json index b205b301a..e1d2eea9b 100644 --- a/deps/npm/package.json +++ b/deps/npm/package.json @@ -1,5 +1,5 @@ { - "version": "1.3.26", + "version": "1.4.0", "name": "npm", "publishConfig": { "proprietary-attribs": false @@ -19,11 +19,11 @@ "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)", "repository": { "type": "git", - "url": "https://github.com/isaacs/npm" + "url": "https://github.com/npm/npm" }, "bugs": { "email": "npm-@googlegroups.com", - "url": "http://github.com/isaacs/npm/issues" + "url": "http://github.com/npm/npm/issues" }, "directories": { "doc": "./doc", @@ -57,8 +57,8 @@ "chownr": "0", "npmlog": "0.0.6", "ansi": "~0.2.1", - "npm-registry-client": "~0.3.5", - "read-package-json": "~1.1.6", + "npm-registry-client": "~0.4.0", + "read-package-json": "~1.1.7", "read-installed": "~0.2.2", "glob": "~3.2.6", "init-package-json": "0.0.14", @@ -80,7 +80,8 @@ "ansicolors": "~0.3.2", "ansistyles": "~0.1.3", "path-is-inside": "~1.0.0", - "columnify": "0.1.2" + "columnify": "0.1.2", + "npm-install-checks": "~1.0.0" }, "bundleDependencies": [ "semver", @@ -131,15 +132,16 @@ "ansicolors", "ansistyles", "path-is-inside", - "columnify" + "columnify", + "npm-install-checks" ], "devDependencies": { "ronn": "~0.3.6", "tap": "~0.4.0", - "npm-registry-mock": "~0.5.5" + "npm-registry-mock": "~0.5.8" }, "engines": { - "node": ">=0.6", + "node": ">=0.8", "npm": "1" }, "scripts": { diff --git a/deps/npm/test/packages/npm-test-blerg3/package.json b/deps/npm/test/packages/npm-test-blerg3/package.json index c88b5a957..87b5bbb96 100644 --- a/deps/npm/test/packages/npm-test-blerg3/package.json +++ b/deps/npm/test/packages/npm-test-blerg3/package.json @@ -1,5 +1,5 @@ { "name":"npm-test-blerg3" -, "homepage": "https://github.com/isaacs/npm/issues/2658" +, "homepage": "https://github.com/npm/npm/issues/2658" , "version" : "0.0.0" , "scripts" : { "test" : "node test.js" } } diff --git a/deps/npm/test/packages/npm-test-peer-deps/README b/deps/npm/test/packages/npm-test-peer-deps/README deleted file mode 100644 index 8848f0786..000000000 --- a/deps/npm/test/packages/npm-test-peer-deps/README +++ /dev/null @@ -1 +0,0 @@ -just an npm test diff --git a/deps/npm/test/packages/npm-test-peer-deps/npm-ls.json b/deps/npm/test/packages/npm-test-peer-deps/npm-ls.json deleted file mode 100644 index 79bf5ac6c..000000000 --- a/deps/npm/test/packages/npm-test-peer-deps/npm-ls.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "npm-test-peer-deps-file": { - "version": "1.2.3", - "from": "https://gist.github.com/domenic/3971128/raw/7472b26a013ceb174c2d726314e9fa97465729bb/index.js", - "resolved": "https://gist.github.com/domenic/3971128/raw/7472b26a013ceb174c2d726314e9fa97465729bb/index.js", - "dependencies": { - "opener": { - "version": "1.3.0", - "from": "opener@1.3.0" - } - } - }, - "dict": { - "version": "1.1.0", - "from": "dict@1.1.0" - } -} diff --git a/deps/npm/test/packages/npm-test-peer-deps/package.json b/deps/npm/test/packages/npm-test-peer-deps/package.json deleted file mode 100644 index d98f53bd0..000000000 --- a/deps/npm/test/packages/npm-test-peer-deps/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "author": "Domenic Denicola <domenic@domenicdenicola.com> (http://domenicdenicola.com/)", - "name": "npm-test-peer-deps", - "version": "0.0.0", - "dependencies": { - "npm-test-peer-deps-file": "https://gist.github.com/domenic/3971128/raw/7472b26a013ceb174c2d726314e9fa97465729bb/index.js" - }, - "scripts": { - "test": "node test.js" - } -} diff --git a/deps/npm/test/packages/npm-test-peer-deps/test.js b/deps/npm/test/packages/npm-test-peer-deps/test.js deleted file mode 100644 index 2cf9b9701..000000000 --- a/deps/npm/test/packages/npm-test-peer-deps/test.js +++ /dev/null @@ -1,36 +0,0 @@ -var path = require("path") -var assert = require("assert") - -process.env.npm_config_prefix = process.cwd() -delete process.env.npm_config_global -delete process.env.npm_config_depth - -var npm = process.env.npm_execpath - -require("child_process").execFile(process.execPath, [npm, "ls", "--json"], { - env: process.env, cwd: process.cwd() }, - function (err, stdout, stderr) { - - if (err) throw err - - var actual = JSON.parse(stdout).dependencies - var expected = require("./npm-ls.json") - - // resolved url doesn't matter - clean(actual) - clean(expected) - - console.error(JSON.stringify(actual, null, 2)) - console.error(JSON.stringify(expected, null, 2)) - - assert.deepEqual(actual, expected) -}) - -function clean (obj) { - for (var i in obj) { - if (i === "from" || i === "resolved") - delete obj[i] - else if (typeof obj[i] === "object" && obj[i]) - clean(obj[i]) - } -} diff --git a/deps/npm/test/run.js b/deps/npm/test/run.js index 697d33980..008cfbac4 100644 --- a/deps/npm/test/run.js +++ b/deps/npm/test/run.js @@ -181,44 +181,9 @@ function main (cb) { // Windows can't handle npm rm npm due to file-in-use issues. thingsToChain.push([exec, "npm rm npm"]) } - thingsToChain.push(publishTest) chain(thingsToChain, cb) } - - function publishTest (cb) { - if (process.env.npm_package_config_publishtest !== "true") { - console.error("To test publishing: "+ - "npm config set npm:publishtest true") - return cb() - } - - chain - ( [ setup - , [ execChain, packages.filter(function (p) { - return !p.match(/private/) - }).map(function (p) { - return [ "npm publish packages/"+p - , "npm install "+p - , "npm unpublish "+p+" --force" - ] - }) ] - , publishPrivateTest - ], cb ) - - } - - function publishPrivateTest (cb) { - exec("npm publish packages/npm-test-private -s", true, function (er) { - if (er) { - exec( "npm unpublish npm-test-private --force" - , function (e2) { - cb(er || e2) - }) - } - cleanup(cb) - }) - } } main(function (er) { diff --git a/deps/npm/test/tap/outdated-notarget.js b/deps/npm/test/tap/outdated-notarget.js new file mode 100644 index 000000000..79fb88c67 --- /dev/null +++ b/deps/npm/test/tap/outdated-notarget.js @@ -0,0 +1,47 @@ +// Fixes Issue #1770 +var common = require('../common-tap.js') +var test = require('tap').test +var npm = require('../../') +var osenv = require('osenv') +var path = require('path') +var fs = require('fs') +var rimraf = require('rimraf') +var mkdirp = require('mkdirp') +var pkg = path.resolve(__dirname, 'outdated-notarget') +var cache = path.resolve(pkg, 'cache') +var mr = require('npm-registry-mock') + +test('outdated-target: if no viable version is found, show error', function(t) { + t.plan(1) + setup() + mr({port: common.port}, function(s) { + npm.load({ cache: cache, registry: common.registry}, function() { + npm.commands.update(function(er, d) { + t.equal(er.code, 'ETARGET') + s.close() + t.end() + }) + }) + }) +}) + +test('cleanup', function(t) { + process.chdir(osenv.tmpdir()) + rimraf.sync(pkg) + t.end() +}) + +function setup() { + mkdirp.sync(pkg) + mkdirp.sync(cache) + fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({ + author: 'Evan Lucas', + name: 'outdated-notarget', + version: '0.0.0', + description: 'Test for outdated-target', + dependencies: { + underscore: '~199.7.1' + } + }), 'utf8') + process.chdir(pkg) +} diff --git a/deps/npm/test/tap/peer-deps.js b/deps/npm/test/tap/peer-deps.js new file mode 100644 index 000000000..097a92179 --- /dev/null +++ b/deps/npm/test/tap/peer-deps.js @@ -0,0 +1,57 @@ +var npm = npm = require("../../") +var test = require("tap").test +var path = require("path") +var fs = require("fs") +var osenv = require("osenv") +var rimraf = require("rimraf") +var mr = require("npm-registry-mock") +var common = require("../common-tap.js") + +var pkg = path.resolve(__dirname, "peer-deps") +var desiredResultsPath = path.resolve(pkg, "desired-ls-results.json") + +test("installs the peer dependency directory structure", function (t) { + t.plan(1) + + mr(common.port, function (s) { + setup(function (err) { + if (err) return t.fail(err) + + npm.install(".", function (err) { + if (err) return t.fail(err) + + npm.commands.ls([], true, function (err, _, results) { + if (err) return t.fail(err) + + fs.readFile(desiredResultsPath, function (err, desired) { + if (err) return t.fail(err) + + t.deepEqual(results, JSON.parse(desired)) + s.close() + t.end() + }) + }) + }) + }) + }) +}) + +test("cleanup", function (t) { + cleanup() + t.end() +}) + + +function setup (cb) { + cleanup() + process.chdir(pkg) + + var opts = { cache: path.resolve(pkg, "cache"), registry: common.registry}; + npm.load(opts, cb) +} + +function cleanup () { + process.chdir(osenv.tmpdir()) + rimraf.sync(path.resolve(pkg, "node_modules")) + rimraf.sync(path.resolve(pkg, "cache")) +} diff --git a/deps/npm/test/tap/peer-deps/desired-ls-results.json b/deps/npm/test/tap/peer-deps/desired-ls-results.json new file mode 100644 index 000000000..9c1033af0 --- /dev/null +++ b/deps/npm/test/tap/peer-deps/desired-ls-results.json @@ -0,0 +1,17 @@ +{ + "name": "npm-test-peer-deps-installer", + "version": "0.0.0", + "dependencies": { + "npm-test-peer-deps": { + "version": "0.0.0", + "dependencies": { + "underscore": { + "version": "1.3.1" + } + } + }, + "request": { + "version": "0.9.5" + } + } +} diff --git a/deps/npm/test/tap/peer-deps/package.json b/deps/npm/test/tap/peer-deps/package.json new file mode 100644 index 000000000..e78a1a7e1 --- /dev/null +++ b/deps/npm/test/tap/peer-deps/package.json @@ -0,0 +1,8 @@ +{ + "author": "Domenic Denicola", + "name": "npm-test-peer-deps-installer", + "version": "0.0.0", + "dependencies": { + "npm-test-peer-deps": "*" + } +} diff --git a/doc/about/index.html b/doc/about/index.html deleted file mode 100644 index f1dea6b24..000000000 --- a/doc/about/index.html +++ /dev/null @@ -1,147 +0,0 @@ -<!doctype html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <link type="image/x-icon" rel="icon" href="../favicon.ico"> - <link type="image/x-icon" rel="shortcut icon" href="../favicon.ico"> - <link rel="stylesheet" href="../pipe.css"> - <link rel="stylesheet" href="../sh.css"> - <link rel="alternate" - type="application/rss+xml" - title="node blog" - href="http://feeds.feedburner.com/nodejs/123123123"> - <title>node.js</title> - </head> - <body class="alt int" id="about"> - <div id="intro" class="interior"> - <a href="/" title="Go back to the home page"> - <img id="logo" src="http://nodejs.org/images/logo-light.png" alt="node.js"> - </a> - </div> - <div id="content" class="clearfix"> - <div id="column2" class="interior"> - <ul> - <li><a href="/" class="home">Home</a></li> - <li><a href="/download/" class="download">Download</a></li> - <li><a href="/about/" class="about current">About</a></li> - <li><a href="http://npmjs.org/" class="npm">npm Registry</a></li> - <li><a href="http://nodejs.org/api/" class="docs">Docs</a></li> - <li><a href="http://blog.nodejs.org" class="blog">Blog</a></li> - <li><a href="/community/" class="community">Community</a></li> - <li><a href="/logos/" class="logos">Logos</a></li> - <li><a href="http://jobs.nodejs.org/" class="jobs">Jobs</a></li> - </ul> - <p class="twitter"><a href="http://twitter.com/nodejs">@nodejs</a></p> - </div> - - <div id="column1" class="interior"> - <h1>Node's goal is to provide an easy way to build scalable - network programs</h1> - - - <p>In the "hello world" web server example - below, many client connections can be handled concurrently. - Node tells the operating system (through <code>epoll</code>, - <code>kqueue</code>, <code>/dev/poll</code>, or - <code>select</code>) that it should be notified when a new - connection is made, and then it goes to sleep. If someone new - connects, then it executes the callback. Each connection is - only a small heap allocation.</p> - - <pre> -var http = require('http'); -http.createServer(function (req, res) { - res.writeHead(200, {'Content-Type': 'text/plain'}); - res.end('Hello World\n'); -}).listen(1337, "127.0.0.1"); -console.log('Server running at http://127.0.0.1:1337/');</pre> - <p>This is in contrast to today's more common concurrency - model where OS threads are employed. Thread-based networking - is relatively inefficient and very difficult to use. See: <a - href="http://www.kegel.com/c10k.html">this</a> and <a - href="http://bulk.fefe.de/scalable-networking.pdf">this</a>. - Node will show much better memory efficiency under high-loads - than systems which allocate 2mb thread stacks for each - connection. Furthermore, users of Node are free from worries - of dead-locking the process—there are no locks. Almost no - function in Node directly performs I/O, so the process never - blocks. Because nothing blocks, less-than-expert programmers - are able to develop fast systems.</p> - - <p>Node is similar in design to and influenced by systems like - Ruby's <a href="http://rubyeventmachine.com/">Event - Machine</a> or Python's <a - href="http://twistedmatrix.com/">Twisted</a>. Node takes the - event model a bit further—it presents the event loop as a - language construct instead of as a library. In other systems - there is always a blocking call to start the event-loop. - Typically one defines behavior through callbacks at the - beginning of a script and at the end starts a server through a - blocking call like <code>EventMachine::run()</code>. In Node - there is no such start-the-event-loop call. Node simply enters - the event loop after executing the input script. Node exits - the event loop when there are no more callbacks to perform. - This behavior is like browser javascript—the event loop is - hidden from the user.</p> - - <p>HTTP is a first class protocol in Node. Node's HTTP library - has grown out of the author's experiences developing and - working with web servers. For example, streaming data through - most web frameworks is impossible. Node attempts to correct - these problems in its HTTP <a - href="https://github.com/joyent/http-parser/tree/master">parser</a> - and API. Coupled with Node's purely evented infrastructure, it - makes a good foundation for web libraries or frameworks.</p> - - <p>But what about multiple-processor concurrency? Aren't - threads necessary to scale programs to multi-core computers? - You can start new processes via <code><a - href="http://nodejs.org/api/child_process.html#child_process.fork">child_process.fork()</a></code> - these other processes will be scheduled in parallel. For load - balancing incoming connections across multiple processes use - <a href="http://nodejs.org/api/cluster.html">the - cluster module</a>.</p> - - <p>See also:</p> - <ul> - <li><a href="http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf">Slides from JSConf 2009</a></li> - <li><a href="http://nodejs.org/jsconf2010.pdf">Slides from JSConf 2010</a></li> - <li><a href="http://www.yuiblog.com/blog/2010/05/20/video-dahl/">Video from a talk at Yahoo in May 2010</a></li> - </ul> - </div> -</div> - <div id="footer"> - <a href="http://joyent.com" class="joyent-logo">Joyent</a> - <ul class="clearfix"> - <li><a href="/">Node.js</a></li> - <li><a href="/#download">Download</a></li> - <li><a href="/about/">About</a></li> - <li><a href="http://npmjs.org/">npm Registry</a></li> - <li><a href="http://nodejs.org/api/">Docs</a></li> - <li><a href="http://blog.nodejs.org">Blog</a></li> - <li><a href="/community/">Community</a></li> - <li><a href="/logos/">Logos</a></li> - <li><a href="http://jobs.nodejs.org/">Jobs</a></li> - <li><a href="http://twitter.com/nodejs" class="twitter">@nodejs</a></li> - </ul> - - <p>Copyright <a href="http://joyent.com/">Joyent, Inc</a>, Node.js is a <a href="/trademark-policy.pdf">trademark</a> of Joyent, Inc. View <a href="https://raw.github.com/joyent/node/__VERSION__/LICENSE">license</a>.</p> - </div> - - - <script src="../sh_main.js"></script> - <script src="../sh_javascript.min.js"></script> - <script>highlight(undefined, undefined, 'pre');</script> - - <script> - window._gaq = [['_setAccount', 'UA-10874194-2'], ['_trackPageview']]; - (function(d, t) { - var g = d.createElement(t), - s = d.getElementsByTagName(t)[0]; - g.src = '//www.google-analytics.com/ga.js'; - s.parentNode.insertBefore(g, s); - }(document, 'script')); - </script> - - </body> -</html> diff --git a/doc/api/timers.markdown b/doc/api/timers.markdown index 8395ac677..7ba209e5e 100644 --- a/doc/api/timers.markdown +++ b/doc/api/timers.markdown @@ -8,7 +8,7 @@ this module in order to use them. ## setTimeout(callback, delay, [arg], [...]) To schedule execution of a one-time `callback` after `delay` milliseconds. Returns a -`timeoutId` for possible use with `clearTimeout()`. Optionally you can +`timeoutObject` for possible use with `clearTimeout()`. Optionally you can also pass arguments to the callback. It is important to note that your callback will probably not be called in exactly @@ -16,17 +16,17 @@ It is important to note that your callback will probably not be called in exactl the callback will fire, nor of the ordering things will fire in. The callback will be called as close as possible to the time specified. -## clearTimeout(timeoutId) +## clearTimeout(timeoutObject) Prevents a timeout from triggering. ## setInterval(callback, delay, [arg], [...]) To schedule the repeated execution of `callback` every `delay` milliseconds. -Returns a `intervalId` for possible use with `clearInterval()`. Optionally +Returns a `intervalObject` for possible use with `clearInterval()`. Optionally you can also pass arguments to the callback. -## clearInterval(intervalId) +## clearInterval(intervalObject) Stops a interval from triggering. @@ -51,7 +51,7 @@ request the timer hold the program open. If the timer is already `ref`d calling To schedule the "immediate" execution of `callback` after I/O events callbacks and before `setTimeout` and `setInterval` . Returns an -`immediateId` for possible use with `clearImmediate()`. Optionally you +`immediateObject` for possible use with `clearImmediate()`. Optionally you can also pass arguments to the callback. Callbacks for immediates are queued in the order in which they were created. @@ -59,6 +59,6 @@ The entire callback queue is processed every event loop iteration. If you queue an immediate from a inside an executing callback that immediate won't fire until the next event loop iteration. -## clearImmediate(immediateId) +## clearImmediate(immediateObject) Stops an immediate from triggering. diff --git a/doc/blog.html b/doc/blog.html deleted file mode 100644 index f6d9cf805..000000000 --- a/doc/blog.html +++ /dev/null @@ -1,241 +0,0 @@ -<!DOCTYPE html> - -<html lang="en"> -<head> - <meta charset="utf-8"> - <link rel="stylesheet" href="http://nodejs.org/pipe.css"> - <link rel="stylesheet" href="http://nodejs.org/sh_vim-dark.css"> - <style> - #column1 h1 { - clear:both; - } - #column1 { - font-size: 14px; - } - #column1 li, #content h1 + p { - color:inherit; - font-family: inherit; - font-size: 14px; - line-height:24px; - } - #column1 li p + ul { - margin-top:-1em; - } - #column1 ul li ul { - font-size:12px; - line-height:24px; - padding-left: 0; - } - #column1 ul li ul li { - list-style:none; - margin-left:0; - } - #column1 ul li ul li:before { - content: "- "; - } - #content #column1 p.meta, #content #column1 p.respond { - font-size: 14px; - line-height: 24px; - color:#690; - font-family: inherit; - } - #content #column1 p.respond { - font-style:italic; - padding:2em 0; - } - #column1 a { - color: #8c0; - } - #column2 ul { - padding:0; - } - #column2 { - margin-top:-66px!important; - } - div.post-in-feed { - padding-bottom:1em; - } - - p.next { float:right; width: 40%; text-align:right; } - p.prev { float:left; width:40%; text-align:left; } - - pre { overflow: auto; } - </style> - - <title><%= title || "Node.js Blog" %></title> - <link rel="alternate" type="application/rss+xml" - title="Node.js Blog RSS" - href="http://blog.nodejs.org/feed<%= - (typeof posts !== 'undefined') ? uri : '/' - %>"> -</head> - -<body class="int blog" id="<%= pageid %>"> - <div id="intro" class="interior"> - <a href="/" title="Go back to the home page"><img id="logo" src= - "http://nodejs.org/logo.png" alt="node.js"></a> - </div> - - <div id="content" class="clearfix"> - <div id="column2" class="interior"> - <ul> - <li><a href="http://nodejs.org/" class="home">Home</a></li> - - <li><a href="http://nodejs.org/download/" class= - "download">Download</a></li> - - <li><a href="http://nodejs.org/about/" class="about">About</a></li> - - <li><a href="http://npmjs.org/" class="npm">npm - Registry</a></li> - - <li><a href="http://nodejs.org/api/" class="docs">Docs</a></li> - - <li><a href="http://blog.nodejs.org/" class="blog current">Blog</a></li> - - <li><a href="http://nodejs.org/community/" class= - "community">Community</a></li> - - <li><a href="http://nodejs.org/logos/" class= - "logos">Logos</a></li> - - <li><a href="http://jobs.nodejs.org/" class="jobs">Jobs</a></li> - </ul> - - <p class="twitter"><a href="http://twitter.com/nodejs">@nodejs</a></p> - </div> - - <div id="column1" class="interior"> - <h1><%- title %></h1> - <% if (typeof post !== 'undefined') { - // just one post on this page - %> - <p class="meta"><%- - post.date.toUTCString().replace(/ GMT$/, '') + ' UTC' + - (post.author ? ' - ' + post.author : '') + - (post.category ? ' - <a href="/' + post.category + '/">' + - post.category + '</a>' : '') - %></p> - - <%- post.content %> - - <p class="respond">Please post feedback and comments on - <a href="https://groups.google.com/group/nodejs">the Node.JS - user mailing list</a>.<br> - Please post bugs and feature requests on - <a href="https://github.com/joyent/node/issues">the Node.JS - github repository</a>.</p> - - <% - if (post.next || post.prev) { - if (post.prev) { - %><p class="prev"><a href="<%= - post.prev.permalink - %>">← <%= - post.prev.title - %></a></p> - <% - } - if (post.next) { - %><p class="next"><a href="<%= - post.next.permalink - %>"><%= - post.next.title - %> →</a></p> - <% - } - } - } else { // not single post page - if (paginated && total > 1 ) { - if (page > 0) { - // add 1 to all of the displayed numbers, because - // humans are not zero-indexed like they ought to be. - %> - <p class="prev"><a href="<%= uri + (page - 1) %>"> - ← Page <%- page %> - </a></p> - <% - } - if (page < total - 1) { %> - <p class="next"><a href="<%= uri + (page + 1) %>"> - Page <%- page + 2 %> → - </a></p> - <% - } - } - - posts.forEach(function(post) { - %> - <div class="post-in-feed"> - <h1><a href="<%= - post.permalink - %>" class="permalink"><%- - post.title - %></a></h1> - - <p class="meta"><%- - post.date.toUTCString().replace(/ GMT$/, '') + ' UTC' + - (post.author ? ' - ' + post.author : '') + - (post.category ? ' - <a href="/' + post.category + '/">' + - post.category + '</a>' : '') - %></p> - - <%- post.content %> - </div> - <% - }); - - if (paginated && total > 1 ) { - if (page > 0) { - // add 1 to all of the displayed numbers, because - // humans are not zero-indexed like they ought to be. - %> - <p class="prev"><a href="<%= uri + (page - 1) %>"> - ← Page <%- page %> - </a></p> - <% - } - if (page < total - 1) { %> - <p class="next"><a href="<%= uri + (page + 1) %>"> - Page <%- page + 2 %> → - </a></p> - <% - } - } // pagination - } // not a single post - %> - </div> - </div> - - <div id="footer"> - <a href="http://joyent.com" class="joyent-logo">Joyent</a> - <ul class="clearfix"> - <li><a href="http://nodejs.org/">Node.js</a></li> - <li><a href="http://nodejs.org/download/">Download</a></li> - <li><a href="http://nodejs.org/about/">About</a></li> - <li><a href="http://npmjs.org/">npm Registry</a></li> - <li><a href="http://nodejs.org/api/">Docs</a></li> - <li><a href="http://blog.nodejs.org">Blog</a></li> - <li><a href="http://nodejs.org/community/">Community</a></li> - <li><a href="https://nodejs.org/logos/">Logos</a></li> - <li><a href="http://jobs.nodejs.org/">Jobs</a></li> - <li><a href="http://twitter.com/nodejs" class="twitter">@nodejs</a></li> - </ul> - - <p>Copyright <a href="http://joyent.com/">Joyent, Inc</a>, Node.js is a <a href="/trademark-policy.pdf">trademark</a> of Joyent, Inc. View <a href="https://raw.github.com/joyent/node/master/LICENSE">license</a>.</p> - </div> - - <script src="../sh_main.js"></script> - <script src="../sh_javascript.min.js"></script> - <script>highlight(undefined, undefined, 'pre');</script> - <script> - window._gaq = [['_setAccount', 'UA-10874194-2'], ['_trackPageview']]; - (function(d, t) { - var g = d.createElement(t), - s = d.getElementsByTagName(t)[0]; - g.src = '//www.google-analytics.com/ga.js'; - s.parentNode.insertBefore(g, s); - }(document, 'script')); - </script> -</body> -</html> diff --git a/doc/blog/README.md b/doc/blog/README.md deleted file mode 100644 index 24fba4934..000000000 --- a/doc/blog/README.md +++ /dev/null @@ -1,28 +0,0 @@ -title: README.md -status: private - -# How This Blog Works - -Each `.md` file in this folder structure is a blog post. It has a -few headers and a markdown body. (HTML is allowed in the body as well.) - -The relevant headers are: - -1. title -2. author -3. status: Only posts with a status of "publish" are published. -4. category: The "release" category is treated a bit specially. -5. version: Only relevant for "release" category. -6. date -7. slug: The bit that goes on the url. Must be unique, will be - generated from the title and date if missing. - -Posts in the "release" category are only shown in the main lists when -they are the most recent release for that version family. The stable -branch supersedes its unstable counterpart, so the presence of a `0.8.2` -release notice will cause `0.7.10` to be hidden, but `0.6.19` would -be unaffected. - -The folder structure in the blog source does not matter. Organize files -here however makes sense. The metadata will be sorted out in the build -later. diff --git a/doc/blog/Uncategorized/an-easy-way-to-build-scalable-network-programs.md b/doc/blog/Uncategorized/an-easy-way-to-build-scalable-network-programs.md deleted file mode 100644 index dc0980b4b..000000000 --- a/doc/blog/Uncategorized/an-easy-way-to-build-scalable-network-programs.md +++ /dev/null @@ -1,16 +0,0 @@ -title: An Easy Way to Build Scalable Network Programs -author: ryandahl -date: Tue Oct 04 2011 15:39:56 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: an-easy-way-to-build-scalable-network-programs - -Suppose you're writing a web server which does video encoding on each file upload. Video encoding is very much compute bound. Some recent blog posts suggest that Node.js would fail miserably at this. - -Using Node does not mean that you have to write a video encoding algorithm in JavaScript (a language without even 64 bit integers) and crunch away in the main server event loop. The suggested approach is to separate the I/O bound task of receiving uploads and serving downloads from the compute bound task of video encoding. In the case of video encoding this is accomplished by forking out to ffmpeg. Node provides advanced means of asynchronously controlling subprocesses for work like this. - -It has also been suggested that Node does not take advantage of multicore machines. Node has long supported load-balancing connections over multiple processes in just a few lines of code - in this way a Node server will use the available cores. In coming releases we'll make it even easier: just pass <code>--balance</code> on the command line and Node will manage the cluster of processes. - -Node has a clear purpose: provide an easy way to build scalable network programs. It is not a tool for every problem. Do not write a ray tracer with Node. Do not write a web browser with Node. Do however reach for Node if tasked with writing a DNS server, DHCP server, or even a video encoding server. - -By relying on the kernel to schedule and preempt computationally expensive tasks and to load balance incoming connections, Node appears less magical than server platforms that employ userland scheduling. So far, our focus on simplicity and transparency has paid off: <a href="http://www.joyent.com/blog/node-js-meetup-distributed-web-architectures/">the</a> <a href="http://venturebeat.com/2011/08/16/linkedin-node/">number</a> <a href="http://corp.klout.com/blog/2011/10/the-tech-behind-klout-com/">of</a> <a href="http://www.joelonsoftware.com/items/2011/09/13.html">success</a> <a href="http://pow.cx/">stories</a> from developers and corporations who are adopting the technology continues to grow. diff --git a/doc/blog/Uncategorized/bnoordhuis-departure.md b/doc/blog/Uncategorized/bnoordhuis-departure.md deleted file mode 100644 index e49baf7a6..000000000 --- a/doc/blog/Uncategorized/bnoordhuis-departure.md +++ /dev/null @@ -1,17 +0,0 @@ -title: Ben Noordhuis's Departure -date: Tue Dec 3 14:13:57 PST 2013 -slug: bnoordhuis-departure - -As of this past weekend, Ben Noordhuis has decided to step away from -Node.js and libuv, and is no longer acting as a core committer. - -Ben has done a tremendous amount of great work in the past. We're sad -to lose the benefit of his continued hard work and expertise, and -extremely grateful for what he has added to Node.js and libuv over the -years. - -Many of you already have expressed your opinion regarding recent -drama, and I'd like to ask that you please respect our wishes to let -this issue rest, so that we can all focus on the road forward. - -Thanks. diff --git a/doc/blog/Uncategorized/development-environment.md b/doc/blog/Uncategorized/development-environment.md deleted file mode 100644 index e6015e04c..000000000 --- a/doc/blog/Uncategorized/development-environment.md +++ /dev/null @@ -1,25 +0,0 @@ -title: Development Environment -author: ryandahl -date: Mon Apr 04 2011 20:16:27 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: development-environment - -If you're compiling a software package because you need a particular version (e.g. the latest), then it requires a little bit more maintenance than using a package manager like <code>dpkg</code>. Software that you compile yourself should *not* go into <code>/usr</code>, it should go into your home directory. This is part of being a software developer. - -One way of doing this is to install everything into <code>$HOME/local/$PACKAGE</code>. Here is how I install node on my machine:<pre>./configure --prefix=$HOME/local/node-v0.4.5 && make install</pre> - -To have my paths automatically set I put this inside my <code>$HOME/.zshrc</code>:<pre>PATH="$HOME/local/bin:/opt/local/bin:/usr/bin:/sbin:/bin" -LD_LIBRARY_PATH="/opt/local/lib:/usr/local/lib:/usr/lib" -for i in $HOME/local/*; do - [ -d $i/bin ] && PATH="${i}/bin:${PATH}" - [ -d $i/sbin ] && PATH="${i}/sbin:${PATH}" - [ -d $i/include ] && CPATH="${i}/include:${CPATH}" - [ -d $i/lib ] && LD_LIBRARY_PATH="${i}/lib:${LD_LIBRARY_PATH}" - [ -d $i/lib/pkgconfig ] && PKG_CONFIG_PATH="${i}/lib/pkgconfig:${PKG_CONFIG_PATH}" - [ -d $i/share/man ] && MANPATH="${i}/share/man:${MANPATH}" -done</pre> - -Node is under sufficiently rapid development that <i>everyone</i> should be compiling it themselves. A corollary of this is that <code>npm</code> (which should be installed alongside Node) does not require root to install packages. - -CPAN and RubyGems have blurred the lines between development tools and system package managers. With <code>npm</code> we wish to draw a clear line: it is not a system package manager. It is not for installing firefox or ffmpeg or OpenSSL; it is for rapidly downloading, building, and setting up Node packages. <code>npm</code> is a <i>development</i> tool. When a program written in Node becomes sufficiently mature it should be distributed as a tarball, <code>.deb</code>, <code>.rpm</code>, or other package system. It should not be distributed to end users with <code>npm</code>. diff --git a/doc/blog/Uncategorized/evolving-the-node-js-brand.md b/doc/blog/Uncategorized/evolving-the-node-js-brand.md deleted file mode 100644 index e631a2270..000000000 --- a/doc/blog/Uncategorized/evolving-the-node-js-brand.md +++ /dev/null @@ -1,34 +0,0 @@ -title: Evolving the Node.js Brand -author: Emily Tanaka-Delgado -date: Mon Jul 11 2011 12:02:45 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: evolving-the-node-js-brand - -To echo <a href="http://nodejs.org/">Node</a>’s evolutionary nature, we have refreshed the identity to help mark an exciting time for developers, businesses and users who benefit from the pioneering technology. - -<strong>Building a brand</strong> - -We began exploring elements to express Node.js and jettisoned preconceived notions about what we thought Node should look like, and focused on what Node is: <strong>kinetic</strong>,<ins cite="mailto:EMILY%20TANAKA-DELGADO" datetime="2011-07-09T18:32"></ins><strong>connected</strong>, <strong>scalable</strong>, <strong>modular</strong>, <strong>mechanical</strong> and <strong>organic</strong>. Working with designer <a href="http://www.chrisglass.com">Chris Glass</a>, our explorations emphasized Node's dynamism and formed a visual language based on structure, relationships and interconnectedness. - -<img class="alignnone size-full wp-image-184" title="grid" src="http://nodeblog.files.wordpress.com/2011/07/grid.png" alt="" width="520" height="178" /> - -Inspired by <strong>process visualization, </strong>we discovered pattern, form, and by relief, the hex shape. The angled infrastructure encourages energy to move through the letterforms. - -<img class="alignnone size-full wp-image-185" title="nodejs" src="http://nodeblog.files.wordpress.com/2011/07/nodejs.png" alt="" width="520" height="178" /> - -This language can expand into the organic network topography of Node or distill down into a single hex connection point. - -This scaling represents the dynamic nature of Node in a simple, distinct manner. - -<img title="Node.js network" src="http://joyeur.files.wordpress.com/2011/07/network.png" alt="" width="560" height="270" /> - -We look forward to exploring<ins cite="mailto:EMILY%20TANAKA-DELGADO" datetime="2011-07-09T18:30"> </ins>this visual language as the technology charges into a very promising future. - -<img title="Node.js nebula" src="http://joyeur.files.wordpress.com/2011/07/node.png" alt="" width="560" height="460" /> - -We hope you'll have fun using it. - -To download the new logo, visit <a href="http://nodejs.org/logos/">nodejs.org/logos</a>. - -<ins cite="mailto:EMILY%20TANAKA-DELGADO" datetime="2011-07-09T18:32"><img title="Tri-color Node" src="http://joyeur.files.wordpress.com/2011/07/tri-color-node.png" alt="" width="560" height="180" /></ins> diff --git a/doc/blog/Uncategorized/growing-up.md b/doc/blog/Uncategorized/growing-up.md deleted file mode 100644 index 10e1d58d0..000000000 --- a/doc/blog/Uncategorized/growing-up.md +++ /dev/null @@ -1,12 +0,0 @@ -title: Growing up -author: ryandahl -date: Thu Dec 15 2011 11:59:15 GMT-0800 (PST) -status: publish -category: Uncategorized -slug: growing-up - -This week Microsoft announced <a href="https://www.windowsazure.com/en-us/develop/nodejs/">support for Node in Windows Azure</a>, their cloud computing platform. For the Node core team and the community, this is an important milestone. We've worked hard over the past six months reworking Node's machinery to support IO completion ports and Visual Studio to provide a good native port to Windows. The overarching goal of the port was to expand our user base to the largest number of developers. Happily, this has paid off in the form of being a first class citizen on Azure. Many users who would have never used Node as a pure unix tool are now up and running on the Windows platform. More users translates into a deeper and better ecosystem of modules, which makes for a better experience for everyone. - -We also redesigned <a href="http://nodejs.org">our website</a> - something that we've put off for a long time because we felt that Node was too nascent to dedicate marketing to it. But now that we have binary distributions for Macintosh and Windows, have bundled npm, and are <a href="https://twitter.com/#!/mranney/status/145778414165569536">serving millions of users</a> at various companies, we felt ready to indulge in a new website and share of a few of our success stories on the home page. - -Work is on-going. We continue to improve the software, making performance improvements and adding isolate support, but Node is growing up. diff --git a/doc/blog/Uncategorized/jobs-nodejs-org.md b/doc/blog/Uncategorized/jobs-nodejs-org.md deleted file mode 100644 index fe20efe91..000000000 --- a/doc/blog/Uncategorized/jobs-nodejs-org.md +++ /dev/null @@ -1,14 +0,0 @@ -title: jobs.nodejs.org -author: ryandahl -date: Thu Mar 24 2011 23:05:22 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: jobs-nodejs-org - -We are starting an official jobs board for Node. There are two goals for this - -1. Promote the small emerging economy around this platform by having a central space for employers to find Node programmers. - -2. Make some money. We work hard to build this platform and taking a small tax for job posts seems a like reasonable "tip jar". - -<a href="http://jobs.nodejs.org">jobs.nodejs.org</a> diff --git a/doc/blog/Uncategorized/ldapjs-a-reprise-of-ldap.md b/doc/blog/Uncategorized/ldapjs-a-reprise-of-ldap.md deleted file mode 100644 index 7174e2b7c..000000000 --- a/doc/blog/Uncategorized/ldapjs-a-reprise-of-ldap.md +++ /dev/null @@ -1,84 +0,0 @@ -title: ldapjs: A reprise of LDAP -author: mcavage -date: Thu Sep 08 2011 14:25:43 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: ldapjs-a-reprise-of-ldap - -This post has been about 10 years in the making. My first job out of college was at IBM working on the <a title="Tivoli Directory Server" href="http://www-01.ibm.com/software/tivoli/products/directory-server/">Tivoli Directory Server</a>, and at the time I had a preconceived notion that working on anything related to Internet RFCs was about as hot as you could get. I spent a lot of time back then getting "down and dirty" with everything about LDAP: the protocol, performance, storage engines, indexing and querying, caching, customer use cases and patterns, general network server patterns, etc. Basically, I soaked up as much as I possibly could while I was there. On top of that, I listened to all the "gray beards" tell me about the history of LDAP, which was a bizarre marriage of telecommunications conglomerates and graduate students. The point of this blog post is to give you a crash course in LDAP, and explain what makes <a title="ldapjs" href="http://ldapjs.org">ldapjs</a> different. Allow me to be the gray beard for a bit... -<h2>What is LDAP and where did it come from?</h2> - -Directory services were largely pioneered by the telecommunications companies (e.g., AT&T) to allow fast information retrieval of all the crap you'd expect would be in a telephone book and directory. That is, given a name, or an address, or an area code, or a number, or a foo support looking up customer records, billing information, routing information, etc. The efforts of several telcos came to exist in the <a title="X.500" href="http://en.wikipedia.org/wiki/X.500">X.500</a> standard(s). An X.500 directory is one of the most complicated beasts you can possibly imagine, but on a high note, there's -probably not a thing you can imagine in a directory service that wasn't thought of in there. It is literally the kitchen sink. Oh, and it doesn't run over IP (it's <em>actually</em> on the <a title="OSI Model" href="http://en.wikipedia.org/wiki/OSI_model">OSI</a> model). - -Several years after X.500 had been deployed (at telcos, academic institutions, etc.), it became clear that the Internet was "for real." <a title="LDAP" href="http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol">LDAP</a>, the "Lightweight Directory Access Protocol," was invented to act purely as an IP-accessible gateway to an X.500 directory. - -At some point in the early 90's, a <a title="Tim Howes" href="http://en.wikipedia.org/wiki/Tim_Howes">graduate student</a> at the University of Michigan (with some help) cooked up the "grandfather" implementation of the LDAP protocol, which wasn't actually a "gateway," but rather a stand-alone implementation of LDAP. Said implementation, like many things at the time, was a process-per-connection concurrency model, and had "backends" (aka storage engine) for the file system and the Unix DB API. At some point the <a title="Berkeley Database" href="http://www.oracle.com/technetwork/database/berkeleydb/index.html">Berkeley Database </a>(BDB) was put in, and still remains the de facto storage engine for most LDAP directories. - -Ok, so some a graduate student at UM wrote an LDAP server that wasn't a gateway. So what? Well, that UM code base turns out to be the thing that pretty much every vendor did a source license for. Those graduate students went off to Netscape later in the 90's, and largely dominated the market of LDAP middleware until <a title="Active Directory" href="http://en.wikipedia.org/wiki/Active_Directory">Active Directory</a> came along many years later (as far as I know, Active Directory is "from scratch", since while it's "almost" LDAP, it's different in a lot of ways). That Netscape code base was further bought and sold over the years to iPlanet, Sun Microsystems, and Red Hat (I'm probably missing somebody in that chain). It now lives in the Fedora umbrella as '<a title="389 Directory Server" href="http://directory.fedoraproject.org/">389 Directory Server</a>.' Probably the most popular fork of that code base now is <a title="OpenLDAP" href="http://www.openldap.org/">OpenLDAP</a>. - -IBM did the same thing, and the Directory Server I worked on was a fork of the UM code too, but it heavily diverged from the Netscape branches. The divergence was primarily due to: (1) backing to DB2 as opposed to BDB, and (2) needing to run on IBM's big iron like OS/400 and Z series mainframes. - -Macro point is that there have actually been very few "fresh" implementations of LDAP, and it gets a pretty bad reputation because at the end of the day you've got 20 years of "bolt-ons" to grad student code. Oh, and it was born out of ginormous telcos, so of course the protocol is overly complex. - -That said, while there certainly is some wacky stuff in the LDAP protocol itself, it really suffered from poor and buggy implementations more than the fact that LDAP itself was fundamentally flawed. As <a title="Engine Yard LDAP" href="http://www.engineyard.com/blog/2009/ldap-directories-the-forgotten-nosql/">engine yard pointed out a few years back</a>, you can think of LDAP as the original NoSQL store. -<h2>LDAP: The Good Parts</h2> - -So what's awesome about LDAP? Since it's a directory system it maintains a hierarchy of your data, which as an information management pattern aligns -with _a lot_ of use case (the quintessential example is white pages for people in your company, but subscriptions to SaaS applications, "host groups" -for tracking machines/instances, physical goods tracking, etc., all have use cases that fit that organization scheme). For example, presumably at your job -you have a "reporting chain." Let's say a given record in LDAP (I'll use myself as a guinea pig here) looks like: -<pre> firstName: Mark - lastName: Cavage - city: Seattle - uid: markc - state: Washington - mail: mcavagegmailcom - phone: (206) 555-1212 - title: Software Engineer - department: 123456 - objectclass: joyentPerson</pre> -The record for me would live under the tree of engineers I report to (and as an example some other popular engineers under said vice president) would look like: -<pre> uid=david - / - uid=bryan - / | \ - uid=markc uid=ryah uid=isaacs</pre> -Ok, so we've got a tree. It's not tremendously different from your filesystem, but how do we find people? LDAP has a rich search filter syntax that makes a lot of sense for key/value data (far more than tacking Map Reduce jobs on does, imo), and all search queries take a "start point" in the tree. Here's an example: let's say I wanted to find all "Software Engineers" in the entire company, a filter would look like: -<pre> (title="Software Engineer")</pre> -And I'd just start my search from 'uid=david' in the example above. Let's say I wanted to find all software engineers who worked in Seattle: -<pre> (&(title="Software Engineer")(city=Seattle))</pre> -I could keep going, but the gist is that LDAP has "full" boolean predicate logic, wildcard filters, etc. It's really rich. - -Oh, and on top of the technical merits, better or worse, it's an established standard for both administrators and applications (i.e., most "shipped" intranet software has either a local user repository or the ability to leverage an LDAP server somewhere). So there's a lot of compelling reasons to look at leveraging LDAP. -<h2>ldapjs: Why do I care?</h2> - -As I said earlier, I spent a lot of time at IBM observing how customers used LDAP, and the real items I took away from that experience were: -<ul> - <li>LDAP implementations have suffered a lot from never having been designed from the ground up for a large number of concurrent connections with asynchronous operations.</li> - <li>There are use cases for LDAP that just don't always fit the traditional "here's my server and storage engine" model. A lot of simple customer use cases wanted an LDAP access point, but not be forced into taking the heavy backends that came with it (they wanted the original gateway model!). There was an entire "sub" industry for this known as "<a title="Metadirectory" href="http://en.wikipedia.org/wiki/Metadirectory">meta directories</a>" back in the late 90's and early 2000's.</li> - <li>Replication was always a sticking point. LDAP vendors all tried to offer a big multi-master, multi-site replication model. It was a lot of "bolt-on" complexity, done before the <a title="CAP Theorem" href="http://en.wikipedia.org/wiki/CAP_theorem">CAP theorem</a> was written, and certainly before it was accepted as "truth."</li> - <li>Nobody uses all of the protocol. In fact, 20% of the features solve 80% of the use cases (I'm making that number up, but you get the idea).</li> -</ul> - -For all the good parts of LDAP, those are really damned big failing points, and even I eventually abandoned LDAP for the greener pastures of NoSQL somewhere -along the way. But it always nagged at me that LDAP didn't get it's due because of a lot of implementation problems (to be clear, if I could, I'd change some -aspects of the protocol itself too, but that's a lot harder). - -Well, in the last year, I went to work for <a title="Joyent" href="http://www.joyent.com/">Joyent</a>, and like everyone else, we have several use problems that are classic directory service problems. If you break down the list I outlined above: -<ul> - <li><strong>Connection-oriented and asynchronous:</strong> Holy smokes batman, <a title="node.js" href="http://nodejs.org/">node.js</a> is a completely kick-ass event-driven asynchronous server platform that manages connections like a boss. Check!</li> - <li><strong>Lots of use cases:</strong> Yeah, we've got some. Man, the <a title="sinatra" href="http://www.sinatrarb.com/">sinatra</a>/<a title="express" href="http://expressjs.com/">express</a> paradigm is so easy to slap over anything. How about we just do that and leave as many use cases open as we can. Check!</li> - <li><strong>Replication is hard. CAP is right:</strong> There are a lot of distributed databases out vying to solve exactly this problem. At Joyent we went with <a title="Riak" href="http://www.basho.com/">Riak</a>. Check!</li> - <li><strong>Don't need all of the protocol:</strong> I'm lazy. Let's just skip the stupid things most people don't need. Check!</li> -</ul> - -So that's the crux of ldapjs right there. Giving you the ability to put LDAP back into your application while nailing those 4 fundamental problems that plague most existing LDAP deployments. - -The obvious question is how it turned out, and the answer is, honestly, better than I thought it would. When I set out to do this, I actually assumed I'd be shipping a much smaller percentage of the RFC than is there. There's actually about 95% of the core RFC implemented. I wasn't sure if the marriage of this protocol to node/JavaScript would work out, but if you've used express ever, this should be _really_ familiar. And I tried to make it as natural as possible to use "pure" JavaScript objects, rather than requiring the developer to understand <a title="ASN.1" href="http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One">ASN.1</a> (the binary wire protocol) or the<a title="RFC 4510" href="http://tools.ietf.org/html/rfc4510"> LDAP RFC</a> in detail (this one mostly worked out; ldap_modify is still kind of a PITA). - -Within 24 hours of releasing ldapjs on <a title="twitter" href="http://twitter.com/#!/mcavage/status/106767571012952064">Twitter</a>, there was an <a title="github ldapjs address book" href="https://gist.github.com/1173999">implementation of an address book</a> that works with Thunderbird/Evolution, by the end of that weekend there was some <a href="http://i.imgur.com/uR16U.png">slick integration with CouchDB</a>, and ldapjs even got used in one of the <a href="http://twitter.com/#!/jheusala/status/108977708649811970">node knockout apps</a>. Off to a pretty good start! - -<h2>The Road Ahead</h2> - -Hopefully you've been motivated to learn a little bit more about LDAP and try out <a href="http://ldapjs.org">ldapjs</a>. The best place to start is probably the <a title="ldapjs guide" href="http://ldapjs.org/guide.html">guide</a>. After that you'll probably need to pick up a book from <a href="http://www.amazon.com/Understanding-Deploying-LDAP-Directory-Services/dp/0672323168">back in the day</a>. ldapjs itself is still in its infancy; there's quite a bit of room to add some slick client-side logic (e.g., connection pools, automatic reconnects), easy to use schema validation, backends, etc. By the time this post is live, there will be experimental <a href="http://en.wikipedia.org/wiki/DTrace">dtrace</a> support if you're running on Mac OS X or preferably Joyent's <a href="http://smartos.org/">SmartOS</a> (shameless plug). And that nagging percentage of the protocol I didn't do will get filled in over time I suspect. If you've got an interest in any of this, send me some pull requests, but most importantly, I just want to see LDAP not just be a skeleton in the closet and get used in places where you should be using it. So get out there and write you some LDAP. diff --git a/doc/blog/Uncategorized/libuv-status-report.md b/doc/blog/Uncategorized/libuv-status-report.md deleted file mode 100644 index 37c8227fe..000000000 --- a/doc/blog/Uncategorized/libuv-status-report.md +++ /dev/null @@ -1,45 +0,0 @@ -title: libuv status report -author: ryandahl -date: Fri Sep 23 2011 12:45:50 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: libuv-status-report - -We <a href="http://blog.nodejs.org/2011/06/23/porting-node-to-windows-with-microsoft%E2%80%99s-help/">announced</a> back in July that with Microsoft's support Joyent would be porting Node to Windows. This effort is ongoing but I thought it would be nice to make a status report post about the new platform library <code><a href="https://github.com/joyent/libuv">libuv</a></code> which has resulted from porting Node to Windows. - -<code>libuv</code>'s purpose is to abstract platform-dependent code in Node into one place where it can be tested for correctness and performance before bindings to V8 are added. Since Node is totally non-blocking, <code>libuv</code> turns out to be a rather useful library itself: a BSD-licensed, minimal, high-performance, cross-platform networking library. - -We attempt to not reinvent the wheel where possible. The entire Unix backend sits heavily on Marc Lehmann's beautiful libraries <a href="http://software.schmorp.de/pkg/libev.html">libev</a> and <a href="http://software.schmorp.de/pkg/libeio.html">libeio</a>. For DNS we integrated with Daniel Stenberg's <a href="http://c-ares.haxx.se/">C-Ares</a>. For cross-platform build-system support we're relying on Chrome's <a href="http://code.google.com/p/gyp/">GYP</a> meta-build system. - -The current implemented features are: -<ul> - <li>Non-blocking TCP sockets (using IOCP on Windows)</li> - <li>Non-blocking named pipes</li> - <li>UDP</li> - <li>Timers</li> - <li>Child process spawning</li> - <li>Asynchronous DNS via <a href="http://c-ares.haxx.se/">c-ares</a> or <code>uv_getaddrinfo</code>.</li> - <li>Asynchronous file system APIs <code>uv_fs_*</code></li> - <li>High resolution time <code>uv_hrtime</code></li> - <li>Current executable path look up <code>uv_exepath</code></li> - <li>Thread pool scheduling <code>uv_queue_work</code></li> -</ul> -The features we are working on still are -<ul> - <li>File system events (Currently supports inotify, <code>ReadDirectoryChangesW</code> and will support kqueue and event ports in the near future.) <code>uv_fs_event_t</code></li> - <li>VT100 TTY <code>uv_tty_t</code></li> - <li>Socket sharing between processes <code>uv_ipc_t (<a href="https://gist.github.com/1233593">planned API</a>)</code></li> -</ul> -For complete documentation see the header file: <a href="https://github.com/joyent/libuv/blob/03d0c57ea216abd611286ff1e58d4e344a459f76/include/uv.h">include/uv.h</a>. There are a number of tests in <a href="https://github.com/joyent/libuv/tree/3ca382be741ec6ce6a001f0db04d6375af8cd642/test">the test directory</a> which demonstrate the API. - -<code>libuv</code> supports Microsoft Windows operating systems since Windows XP SP2. It can be built with either Visual Studio or MinGW. Solaris 121 and later using GCC toolchain. Linux 2.6 or better using the GCC toolchain. Macinotsh Darwin using the GCC or XCode toolchain. It is known to work on the BSDs but we do not check the build regularly. - -In addition to Node v0.5, a number of projects have begun to use <code>libuv</code>: -<ul> - <li>Mozilla's <a href="https://github.com/graydon/rust">Rust</a></li> - <li>Tim Caswell's <a href="https://github.com/creationix/luanode">LuaNode</a></li> - <li>Ben Noordhuis and Bert Belder's <a href="https://github.com/bnoordhuis/phode">Phode</a> async PHP project</li> - <li>Kerry Snyder's <a href="https://github.com/kersny/libuv-csharp">libuv-csharp</a></li> - <li>Andrea Lattuada's <a href="https://gist.github.com/1195428">web server</a></li> -</ul> -We hope to see more people contributing and using <code>libuv</code> in the future! diff --git a/doc/blog/Uncategorized/node-meetup-this-thursday.md b/doc/blog/Uncategorized/node-meetup-this-thursday.md deleted file mode 100644 index 6f38e9998..000000000 --- a/doc/blog/Uncategorized/node-meetup-this-thursday.md +++ /dev/null @@ -1,11 +0,0 @@ -title: Node Meetup this Thursday -author: ryandahl -date: Tue Aug 02 2011 21:37:02 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: node-meetup-this-thursday - -<a href="http://nodejs.org/meetup/" title="http://nodejs.org/meetup/ ">http://nodejs.org/meetup/</a> -<a href="http://nodemeetup.eventbrite.com/">http://nodemeetup.eventbrite.com/</a> - -Three companies will describe their distributed Node applications. Sign up soon, space is limited! diff --git a/doc/blog/Uncategorized/node-office-hours-cut-short.md b/doc/blog/Uncategorized/node-office-hours-cut-short.md deleted file mode 100644 index 743394460..000000000 --- a/doc/blog/Uncategorized/node-office-hours-cut-short.md +++ /dev/null @@ -1,12 +0,0 @@ -title: Node Office Hours Cut Short -author: ryandahl -date: Thu Apr 28 2011 09:04:35 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: node-office-hours-cut-short - -This week office hours are only from 4pm to 6pm. Isaac will be in the Joyent office in SF - everyone else is out of town. Sign up at http://nodeworkup.eventbrite.com/ if you would like to come. - -The week after, Thursday May 5th, we will all be at NodeConf in Portland. - -Normal office hours resume Thursday May 12th. diff --git a/doc/blog/Uncategorized/office-hours.md b/doc/blog/Uncategorized/office-hours.md deleted file mode 100644 index fc2769095..000000000 --- a/doc/blog/Uncategorized/office-hours.md +++ /dev/null @@ -1,12 +0,0 @@ -title: Office Hours -author: ryandahl -date: Wed Mar 23 2011 21:42:47 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: office-hours - -Starting next Thursday Isaac, Tom, and I will be holding weekly office hours at <a href="http://maps.google.com/maps?q=345+California+St,+San+Francisco,+CA+94104&layer=c&sll=37.793040,-122.400491&cbp=13,178.31,,0,-60.77&cbll=37.793131,-122.400484&hl=en&sspn=0.006295,0.006295&ie=UTF8&hq=&hnear=345+California+St,+San+Francisco,+California+94104&ll=37.793131,-122.400484&spn=0.001295,0.003428&z=19&panoid=h0dlz3VG-hMKlzOu0LxMIg">Joyent HQ</a> in San Francisco. Office hours are meant to be subdued working time - there are no talks and no alcohol. Bring your bugs or just come and hack with us. - -Our building requires that everyone attending be on a list so you must sign up at <a href="http://nodeworkup01.eventbrite.com/">Event Brite</a>. - -We start at 4p and end promptly at 8p. diff --git a/doc/blog/Uncategorized/porting-node-to-windows-with-microsoft%e2%80%99s-help.md b/doc/blog/Uncategorized/porting-node-to-windows-with-microsoft%e2%80%99s-help.md deleted file mode 100644 index cea3e8802..000000000 --- a/doc/blog/Uncategorized/porting-node-to-windows-with-microsoft%e2%80%99s-help.md +++ /dev/null @@ -1,12 +0,0 @@ -title: Porting Node to Windows With Microsoft’s Help -author: ryandahl -date: Thu Jun 23 2011 15:22:58 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: porting-node-to-windows-with-microsoft%e2%80%99s-help - -I'm pleased to announce that Microsoft is partnering with Joyent in formally contributing resources towards porting Node to Windows. As you may have heard in <a href="http://nodejs.org/nodeconf.pdf" title="a talk">a talk</a> we gave earlier this year, we have started the undertaking of a native port to Windows - targeting the high-performance IOCP API. - -This requires a rather large modification of the core structure, and we're very happy to have official guidance and engineering resources from Microsoft. <a href="https://www.cloudkick.com/">Rackspace</a> is also contributing <a href="https://github.com/piscisaureus">Bert Belder</a>'s time to this undertaking. - -The result will be an official binary node.exe releases on nodejs.org, which will work on Windows Azure and other Windows versions as far back as Server 2003. diff --git a/doc/blog/Uncategorized/profiling-node-js.md b/doc/blog/Uncategorized/profiling-node-js.md deleted file mode 100644 index 6f041af3b..000000000 --- a/doc/blog/Uncategorized/profiling-node-js.md +++ /dev/null @@ -1,60 +0,0 @@ -title: Profiling Node.js -author: Dave Pacheco -date: Wed Apr 25 2012 13:48:58 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: profiling-node-js - -It's incredibly easy to visualize where your Node program spends its time using DTrace and <a href="http://github.com/davepacheco/node-stackvis">node-stackvis</a> (a Node port of Brendan Gregg's <a href="http://github.com/brendangregg/FlameGraph/">FlameGraph</a> tool): - -<ol> - <li>Run your Node.js program as usual.</li> - <li>In another terminal, run: - <pre> -$ dtrace -n 'profile-97/execname == "node" && arg1/{ - @[jstack(150, 8000)] = count(); } tick-60s { exit(0); }' > stacks.out</pre> - This will sample about 100 times per second for 60 seconds and emit results to stacks.out. <strong>Note that this will sample all running programs called "node". If you want a specific process, replace <code>execname == "node"</code> with <code>pid == 12345</code> (the process id).</strong> - </li> - <li>Use the "stackvis" tool to transform this directly into a flame graph. First, install it: - <pre>$ npm install -g stackvis</pre> - then use <code>stackvis</code> to convert the DTrace output to a flamegraph: - <pre>$ stackvis dtrace flamegraph-svg < stacks.out > stacks.svg</pre> - </li> - <li>Open stacks.svg in your favorite browser.</li> -</ol> - -You'll be looking at something like this: - -<a href="http://www.cs.brown.edu/~dap/helloworld.svg"><img src="http://dtrace.org/blogs/dap/files/2012/04/helloworld-flamegraph-550x366.png" alt="" title="helloworld-flamegraph" width="550" height="366" class="aligncenter size-large wp-image-1047" /></a> - -This is a visualization of all of the profiled call stacks. This example is from the "hello world" HTTP server on the <a href="http://nodejs.org">Node.js</a> home page under load. Start at the bottom, where you have "main", which is present in most Node stacks because Node spends most on-CPU time in the main thread. Above each row, you have the functions called by the frame beneath it. As you move up, you'll see actual JavaScript function names. The boxes in each row are not in chronological order, but their width indicates how much time was spent there. When you hover over each box, you can see exactly what percentage of time is spent in each function. This lets you see at a glance where your program spends its time. - -That's the summary. There are a few prerequisites: - -<ul> - <li>You must gather data on a system that supports DTrace with the Node.js ustack helper. For now, this pretty much means <a href="http://illumos.org/">illumos</a>-based systems like <a href="http://smartos.org/">SmartOS</a>, including the Joyent Cloud. <strong>MacOS users:</strong> OS X supports DTrace, but not ustack helpers. The way to get this changed is to contact your Apple developer liaison (if you're lucky enough to have one) or <strong>file a bug report at bugreport.apple.com</strong>. I'd suggest referencing existing bugs 5273057 and 11206497. More bugs filed (even if closed as dups) show more interest and make it more likely Apple will choose to fix this.</li> - <li>You must be on 32-bit Node.js 0.6.7 or later, built <code>--with-dtrace</code>. The helper doesn't work with 64-bit Node yet. On illumos (including SmartOS), development releases (the 0.7.x train) include DTrace support by default.</li> -</ul> - -There are a few other notes: - -<ul> - <li>You can absolutely profile apps <strong>in production</strong>, not just development, since compiling with DTrace support has very minimal overhead. You can start and stop profiling without restarting your program.</li> - <li>You may want to run the stacks.out output through <code>c++filt</code> to demangle C++ symbols. Be sure to use the <code>c++filt</code> that came with the compiler you used to build Node. For example: - <pre>c++filt < stacks.out > demangled.out</pre> - then you can use demangled.out to create the flamegraph. - </li> - <li>If you want, you can filter stacks containing a particular function. The best way to do this is to first collapse the original DTrace output, then grep out what you want: - <pre> -$ stackvis dtrace collapsed < stacks.out | grep SomeFunction > collapsed.out -$ stackvis collapsed flamegraph-svg < collapsed.out > stacks.svg</pre> - </li> - <li>If you've used Brendan's FlameGraph tools, you'll notice the coloring is a little different in the above flamegraph. I ported his tools to Node first so I could incorporate it more easily into other Node programs, but I've also been playing with different coloring options. The current default uses hue to denote stack depth and saturation to indicate time spent. (These are also indicated by position and size.) Other ideas include coloring by module (so V8, JavaScript, libc, etc. show up as different colors.) - </li> -</ul> - -For more on the underlying pieces, see my <a href="http://dtrace.org/blogs/dap/2012/01/05/where-does-your-node-program-spend-its-time/">previous post on Node.js profiling</a> and <a href="http://dtrace.org/blogs/brendan/2011/12/16/flame-graphs/">Brendan's post on Flame Graphs</a>. - -<hr /> - -Dave Pacheco blogs at <a href="http://dtrace.org/blogs/dap">dtrace.org</a> diff --git a/doc/blog/Uncategorized/some-new-node-projects.md b/doc/blog/Uncategorized/some-new-node-projects.md deleted file mode 100644 index 2590f547a..000000000 --- a/doc/blog/Uncategorized/some-new-node-projects.md +++ /dev/null @@ -1,13 +0,0 @@ -title: Some New Node Projects -author: ryandahl -date: Mon Aug 29 2011 08:30:41 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: some-new-node-projects - -<ul> -<li>Superfeedr released <a href="http://blog.superfeedr.com/node-xmpp-server/">a Node XMPP Server</a>. "<i>Since <a href="http://spaceboyz.net/~astro/">astro</a> had been doing an <strong>amazing work</strong> with his <a href="https://github.com/astro/node-xmpp">node-xmpp</a> library to build <em>Client</em>, <em>Components</em> and even <em>Server to server</em> modules, the logical next step was to try to build a <em>Client to Server</em> module so that we could have a full blown server. That’s what we worked on the past couple days, and <a href="https://github.com/superfeedr/node-xmpp">it’s now on Github</a>!</i></li> - -<li>Joyent's Mark Cavage released <a href="http://ldapjs.org/">LDAP.js</a>. "<i>ldapjs is a pure JavaScript, from-scratch framework for implementing <a href="http://tools.ietf.org/html/rfc4510">LDAP</a> clients and servers in <a href="http://nodejs.org">Node.js</a>. It is intended for developers used to interacting with HTTP services in node and <a href="http://expressjs.com">express</a>.</i></li> - -<li>Microsoft's Tomasz Janczuk released <a href="http://tomasz.janczuk.org/2011/08/hosting-nodejs-applications-in-iis-on.html">iisnode</a> "<i>The <a href="https://github.com/tjanczuk/iisnode">iisnode</a> project provides a native IIS 7.x module that allows hosting of node.js applications in IIS.</i><br /><br />Scott Hanselman posted <a href="http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx">a detailed walkthrough</a> of how to get started with iisnode diff --git a/doc/blog/Uncategorized/the-videos-from-node-meetup.md b/doc/blog/Uncategorized/the-videos-from-node-meetup.md deleted file mode 100644 index 7ca7ac758..000000000 --- a/doc/blog/Uncategorized/the-videos-from-node-meetup.md +++ /dev/null @@ -1,10 +0,0 @@ -title: The Videos from the Meetup -author: ryandahl -date: Fri Aug 12 2011 00:14:34 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: the-videos-from-node-meetup - -Uber, Voxer, and Joyent described how they use Node in production - -<a href="http://www.joyent.com/blog/node-js-meetup-distributed-web-architectures/">http://www.joyent.com/blog/node-js-meetup-distributed-web-architectures/</a> diff --git a/doc/blog/Uncategorized/tj-fontaine-new-node-lead.md b/doc/blog/Uncategorized/tj-fontaine-new-node-lead.md deleted file mode 100644 index 88c80bec6..000000000 --- a/doc/blog/Uncategorized/tj-fontaine-new-node-lead.md +++ /dev/null @@ -1,54 +0,0 @@ -title: The Next Phase of Node.js -date: Wed Jan 15 09:00:00 PST 2014 -author: Isaac Z. Schlueter -slug: the-next-phase-of-node-js - -Node's growth has continued and accelerated immensely over the last -few years. More people are developing and sharing more code with Node -and npm than I would have ever imagined. Countless companies are -using Node, and npm along with it. - -Over the last year, [TJ Fontaine](https://twitter.com/tjfontaine) has become absolutely essential to the -Node.js project. He's been building releases, managing the test bots, -[fixing nasty -bugs](http://www.joyent.com/blog/walmart-node-js-memory-leak) and -making decisions for the project with constant focus on the needs of -our users. He was responsible for an update to MDB to [support -running ::findjsobjects on Linux core -dumps](http://www.slideshare.net/bcantrill/node-summit2013), and is -working on a shim layer that will provide a stable C interface for -Node binary addons. In partnership with Joyent and The Node Firm, -he's helped to create a path forward for scalable issue triaging. -He's become the primary point of contact keeping us all driving the -project forward together. - -Anyone who's been close to the core project knows that he's been -effectively leading the project for a while now, so we're making it -official. Effective immediately, TJ Fontaine is the Node.js project -lead. I will remain a Node core committer, and expect to continue to -contribute to the project in that role. My primary focus, however, -will be npm. - -At this point, npm needs work, and I am eager to deliver what the Node -community needs from its package manager. I am starting a company, -npm, Inc., to deliver new products and services related to npm. I'll -be sharing many more details soon about exactly how this is going to -work, and what we'll be offering. For now, suffice it to say that -everything currently free will remain free, and everything currently -flaky will get less flaky. Pursuing new revenue is how we can keep -providing the npm registry service in a long-term sustainable way, and -it has to be done very carefully so that we don't damage what we've -all built together. - -npm is what I'm most passionate about, and I am now in a position to -give it my full attention. I've done more than I could have hoped to -accomplish in running Node core, and it's well past time to hand the -control of the project off to its next gatekeeper. - -TJ is exactly the leader who can help us take Node.js to 1.0 and -beyond. He brings professionalism, rigor, and a continued focus on -inclusive community values and culture. In the coming days, TJ will -spell out his plans in greater detail. I look forward to the places -that Node will go with his guidance. - -Please join me in welcoming him to this new role :) diff --git a/doc/blog/Uncategorized/trademark.md b/doc/blog/Uncategorized/trademark.md deleted file mode 100644 index 7494915be..000000000 --- a/doc/blog/Uncategorized/trademark.md +++ /dev/null @@ -1,17 +0,0 @@ -title: Trademark -author: ryandahl -date: Fri Apr 29 2011 01:54:18 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: trademark - -One of the things Joyent accepted when we took on the Node project was to provide resources to help the community grow. The Node project is amazing because of the expertise, dedication and hard work of the community. However in all communities there is the possibility of people acting inappropriately. We decided to introduce trademarks on the “Node.js” and the “Node logo” in order to ensure that people or organisations who are not investing in the Node community misrepresent, or create confusion about the role of themselves or their products with Node. - -We are big fans of the people who have contributed to Node and we have worked hard to make sure that existing members of the community will be unaffected by this change. For most people they don’t have to do anything they are free to use the Node.js marks in their free open source projects (see guidelines). For others we’ve already granted them licenses to use Node.js marks in their domain names and their businesses. We value all of these contributions to the Node community and hope that we can continue to protect their good names and hard work. - -Where does our trademark policy come from? We started by looking at popular open source foundations like the Apache Software Foundation and Linux. By strongly basing our policy on the one used by the Apache Software Foundation we feel that we’ve created a policy which is liberal enough to allow the open source community to easily make use of the mark in the context of free open source software, but secure enough to protect the community’s work from being misrepresented by other organisations. - -While we realize that any changes involving lawyers can be intimidating to the community we want to make this transition as smoothly as possible and welcome your questions and feedback on the policy and how we are implementing it. - -<a href="http://nodejs.org/trademark-policy.pdf">http://nodejs.org/trademark-policy.pdf</a> -trademark@joyent.com diff --git a/doc/blog/Uncategorized/version-0-6.md b/doc/blog/Uncategorized/version-0-6.md deleted file mode 100644 index 5cde4c61e..000000000 --- a/doc/blog/Uncategorized/version-0-6.md +++ /dev/null @@ -1,23 +0,0 @@ -title: Version 0.6 Coming Soon -author: ryandahl -date: Tue Oct 25 2011 15:26:23 GMT-0700 (PDT) -status: publish -category: Uncategorized -slug: version-0-6 - -Version 0.6.0 will be released next week. Please spend some time this -week upgrading your code to v0.5.10. Report any API differences at <a -href="https://github.com/joyent/node/wiki/API-changes-between-v0.4-and-v0.6">https://github.com/joyent/node/wiki/API-changes-between-v0.4-and-v0.6</a> -or report a bug to us at <a -href="http://github.com/joyent/node/issues">http://github.com/joyent/node/issues</a> -if you hit problems. - -The API changes between v0.4.12 and v0.5.10 are 99% cosmetic, minor, -and easy to fix. Most people are able to migrate their code in 10 -minutes. Don't fear. - -Once you've ported your code to v0.5.10 please help out by testing -third party modules. Make bug reports. Encourage authors to publish -new versions of their modules. Go through the list of modules at <a -href="http://npmjs.org/">http://npmjs.org/</a> and try out random -ones. This is especially encouraged of Windows users! diff --git a/doc/blog/favicon.ico b/doc/blog/favicon.ico Binary files differdeleted file mode 100644 index 03eaff0b5..000000000 --- a/doc/blog/favicon.ico +++ /dev/null diff --git a/doc/blog/feature/streams2.md b/doc/blog/feature/streams2.md deleted file mode 100644 index 10e81fd92..000000000 --- a/doc/blog/feature/streams2.md +++ /dev/null @@ -1,851 +0,0 @@ -title: A New Streaming API for Node v0.10 -author: Isaac Z. Schlueter -date: Fri Dec 21 00:45:13 UTC 2012 -slug: streams2 -category: feature - -**tl;dr** - -* Node streams are great, except for all the ways in which they're - terrible. -* A new Stream implementation is coming in 0.10, that has gotten the - nickname "streams2". -* Readable streams have a `read()` method that returns a buffer or - null. (More documentation included below.) -* `'data'` events, `pause()`, and `resume()` will still work as before - (except that they'll actually work how you'd expect). -* Old programs will **almost always** work without modification, but - streams start out in a paused state, and need to be read from to be - consumed. -* **WARNING**: If you never add a `'data'` event handler, or call - `resume()`, then it'll sit in a paused state forever and never - emit `'end'`. - -------- - -Throughout the life of Node, we've been gradually iterating on the -ideal event-based API for handling data. Over time, this developed -into the "Stream" interface that you see throughout Node's core -modules and many of the modules in npm. - -Consistent interfaces increase the portability and reliability of our -programs and libraries. Overall, the move from domain-specific events -and methods towards a unified stream interface was a huge win. -However, there are still several problems with Node's streams as of -v0.8. In a nutshell: - -1. The `pause()` method doesn't pause. It is advisory-only. In - Node's implementation, this makes things much simpler, but it's - confusing to users, and doesn't do what it looks like it does. -2. `'data'` events come right away (whether you're ready or not). - This makes it unreasonably difficult to do common tasks like load a - user's session before deciding how to handle their request. -3. There is no way to consume a specific number of bytes, and then - leave the rest for some other part of the program to deal with. -4. It's unreasonably difficult to implement streams and get all the - intricacies of pause, resume, write-buffering, and data events - correct. The lack of shared classes mean that we all have to solve - the same problems repeatedly, making similar mistakes and similar - bugs. - -Common simple tasks should be easy, or we aren't doing our job. -People often say that Node is better than most other platforms at this -stuff, but in my opinion, that is less of a compliment and more of an -indictment of the current state of software. Being better than the -next guy isn't enough; we have to be the best imaginable. While they -were a big step in the right direction, the Streams in Node up until -now leave a lot wanting. - -So, just fix it, right? - -Well, we are sitting on the results of several years of explosive -growth in the Node community, so any changes have to be made very -carefully. If we break all the Node programs in 0.10, then no one -will ever want to upgrade to 0.10, and it's all pointless. We had -this conversation around 0.4, then again around 0.6, then again around -0.8. Every time, the conclusion has been "Too much work, too hard to -make backwards-compatible", and we always had more pressing problems -to solve. - -In 0.10, we cannot put it off any longer. We've bitten the bullet and -are making a significant change to the Stream implementation. You may -have seen conversations on twitter or IRC or the mailing list about -"streams2". I also gave [a talk in -November](https://dl.dropbox.com/u/3685/presentations/streams2/streams2-ko.pdf) -about this subject. A lot of node module authors have been involved -with the development of streams2 (and of course the node core team). - -## streams2 - -The feature is described pretty thoroughly in the documentation, so -I'm including it below. Please read it, especially the section on -"compatibility". There's a caveat there that is unfortunately -unavoidable, but hopefully enough of an edge case that it's easily -worked around. - -The first preview release with this change will be 0.9.4. I highly -recommend trying this release and providing feedback before it lands -in a stable version. - -As of writing this post, there are some known performance regressions, -especially in the http module. We are fanatical about maintaining -performance in Node.js, so of course this will have to be fixed before -the v0.10 stable release. (Watch for a future blog post on the tools -and techniques that have been useful in tracking down these issues.) - -There may be minor changes as necessary to fix bugs and improve -performance, but the API at this point should be considered feature -complete. It correctly does all the things we need it to do, it just -doesn't do them quite well enough yet. As always, be wary of running -unstable releases in production, of course, but I encourage you to try -it out and see what you think. Especially, if you have tests that you -can run on your modules and libraries, that would be extremely useful -feedback. - --------- - -# Stream - - Stability: 2 - Unstable - -A stream is an abstract interface implemented by various objects in -Node. For example a request to an HTTP server is a stream, as is -stdout. Streams are readable, writable, or both. All streams are -instances of [EventEmitter][] - -You can load the Stream base classes by doing `require('stream')`. -There are base classes provided for Readable streams, Writable -streams, Duplex streams, and Transform streams. - -## Compatibility - -In earlier versions of Node, the Readable stream interface was -simpler, but also less powerful and less useful. - -* Rather than waiting for you to call the `read()` method, `'data'` - events would start emitting immediately. If you needed to do some - I/O to decide how to handle data, then you had to store the chunks - in some kind of buffer so that they would not be lost. -* The `pause()` method was advisory, rather than guaranteed. This - meant that you still had to be prepared to receive `'data'` events - even when the stream was in a paused state. - -In Node v0.10, the Readable class described below was added. For -backwards compatibility with older Node programs, Readable streams -switch into "old mode" when a `'data'` event handler is added, or when -the `pause()` or `resume()` methods are called. The effect is that, -even if you are not using the new `read()` method and `'readable'` -event, you no longer have to worry about losing `'data'` chunks. - -Most programs will continue to function normally. However, this -introduces an edge case in the following conditions: - -* No `'data'` event handler is added. -* The `pause()` and `resume()` methods are never called. - -For example, consider the following code: - -```javascript -// WARNING! BROKEN! -net.createServer(function(socket) { - - // we add an 'end' method, but never consume the data - socket.on('end', function() { - // It will never get here. - socket.end('I got your message (but didnt read it)\n'); - }); - -}).listen(1337); -``` - -In versions of node prior to v0.10, the incoming message data would be -simply discarded. However, in Node v0.10 and beyond, the socket will -remain paused forever. - -The workaround in this situation is to call the `resume()` method to -trigger "old mode" behavior: - -```javascript -// Workaround -net.createServer(function(socket) { - - socket.on('end', function() { - socket.end('I got your message (but didnt read it)\n'); - }); - - // start the flow of data, discarding it. - socket.resume(); - -}).listen(1337); -``` - -In addition to new Readable streams switching into old-mode, pre-v0.10 -style streams can be wrapped in a Readable class using the `wrap()` -method. - -## Class: stream.Readable - -<!--type=class--> - -A `Readable Stream` has the following methods, members, and events. - -Note that `stream.Readable` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -method. (See below.) - -### new stream.Readable([options]) - -* `options` {Object} - * `highWaterMark` {Number} The maximum number of bytes to store in - the internal buffer before ceasing to read from the underlying - resource. Default=16kb - * `encoding` {String} If specified, then buffers will be decoded to - strings using the specified encoding. Default=null - * `objectMode` {Boolean} Whether this stream should behave - as a stream of objects. Meaning that stream.read(n) returns - a single value instead of a Buffer of size n - -In classes that extend the Readable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### readable.\_read(size) - -* `size` {Number} Number of bytes to read asynchronously - -Note: **This function should NOT be called directly.** It should be -implemented by child classes, and called by the internal Readable -class methods only. - -All Readable stream implementations must provide a `_read` method -to fetch data from the underlying resource. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -When data is available, put it into the read queue by calling -`readable.push(chunk)`. If `push` returns false, then you should stop -reading. When `_read` is called again, you should start pushing more -data. - -The `size` argument is advisory. Implementations where a "read" is a -single call that returns data can use this to know how much data to -fetch. Implementations where that is not relevant, such as TCP or -TLS, may ignore this argument, and simply provide data whenever it -becomes available. There is no need, for example to "wait" until -`size` bytes are available before calling `stream.push(chunk)`. - -### readable.push(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to push into the read queue -* return {Boolean} Whether or not more pushes should be performed - -Note: **This function should be called by Readable implementors, NOT -by consumers of Readable subclasses.** The `_read()` function will not -be called again until at least one `push(chunk)` call is made. If no -data is available, then you MAY call `push('')` (an empty string) to -allow a future `_read` call, without adding any data to the queue. - -The `Readable` class works by putting data into a read queue to be -pulled out later by calling the `read()` method when the `'readable'` -event fires. - -The `push()` method will explicitly insert some data into the read -queue. If it is called with `null` then it will signal the end of the -data. - -In some cases, you may be wrapping a lower-level source which has some -sort of pause/resume mechanism, and a data callback. In those cases, -you could wrap the low-level source object by doing something like -this: - -```javascript -// source is an object with readStop() and readStart() methods, -// and an `ondata` member that gets called when it has data, and -// an `onend` member that gets called when the data is over. - -var stream = new Readable(); - -source.ondata = function(chunk) { - // if push() returns false, then we need to stop reading from source - if (!stream.push(chunk)) - source.readStop(); -}; - -source.onend = function() { - stream.push(null); -}; - -// _read will be called when the stream wants to pull more data in -// the advisory size argument is ignored in this case. -stream._read = function(n) { - source.readStart(); -}; -``` - -### readable.unshift(chunk) - -* `chunk` {Buffer | null | String} Chunk of data to unshift onto the read queue -* return {Boolean} Whether or not more pushes should be performed - -This is the corollary of `readable.push(chunk)`. Rather than putting -the data at the *end* of the read queue, it puts it at the *front* of -the read queue. - -This is useful in certain use-cases where a stream is being consumed -by a parser, which needs to "un-consume" some data that it has -optimistically pulled out of the source. - -```javascript -// A parser for a simple data protocol. -// The "header" is a JSON object, followed by 2 \n characters, and -// then a message body. -// -// Note: This can be done more simply as a Transform stream. See below. - -function SimpleProtocol(source, options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Readable.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - - // source is a readable stream, such as a socket or file - this._source = source; - - var self = this; - source.on('end', function() { - self.push(null); - }); - - // give it a kick whenever the source is readable - // read(0) will not consume any bytes - source.on('readable', function() { - self.read(0); - }); - - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Readable.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._read = function(n) { - if (!this._inBody) { - var chunk = this._source.read(); - - // if the source doesn't have data, we don't have data yet. - if (chunk === null) - return this.push(''); - - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - this.push(''); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // now, because we got some extra data, unshift the rest - // back into the read queue so that our consumer will see it. - var b = chunk.slice(split); - this.unshift(b); - - // and let them know that we are done parsing the header. - this.emit('header', this.header); - } - } else { - // from there on, just provide the data to our consumer. - // careful not to push(null), since that would indicate EOF. - var chunk = this._source.read(); - if (chunk) this.push(chunk); - } -}; - -// Usage: -var parser = new SimpleProtocol(source); -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - -### readable.wrap(stream) - -* `stream` {Stream} An "old style" readable stream - -If you are using an older Node library that emits `'data'` events and -has a `pause()` method that is advisory only, then you can use the -`wrap()` method to create a Readable stream that uses the old stream -as its data source. - -For example: - -```javascript -var OldReader = require('./old-api-module.js').OldReader; -var oreader = new OldReader; -var Readable = require('stream').Readable; -var myReader = new Readable().wrap(oreader); - -myReader.on('readable', function() { - myReader.read(); // etc. -}); -``` - -### Event: 'readable' - -When there is data ready to be consumed, this event will fire. - -When this event emits, call the `read()` method to consume the data. - -### Event: 'end' - -Emitted when the stream has received an EOF (FIN in TCP terminology). -Indicates that no more `'data'` events will happen. If the stream is -also writable, it may be possible to continue writing. - -### Event: 'data' - -The `'data'` event emits either a `Buffer` (by default) or a string if -`setEncoding()` was used. - -Note that adding a `'data'` event listener will switch the Readable -stream into "old mode", where data is emitted as soon as it is -available, rather than waiting for you to call `read()` to consume it. - -### Event: 'error' - -Emitted if there was an error receiving data. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### readable.setEncoding(encoding) - -Makes the `'data'` event emit a string instead of a `Buffer`. `encoding` -can be `'utf8'`, `'utf16le'` (`'ucs2'`), `'ascii'`, or `'hex'`. - -The encoding can also be set by specifying an `encoding` field to the -constructor. - -### readable.read([size]) - -* `size` {Number | null} Optional number of bytes to read. -* Return: {Buffer | String | null} - -Note: **This function SHOULD be called by Readable stream users.** - -Call this method to consume data once the `'readable'` event is -emitted. - -The `size` argument will set a minimum number of bytes that you are -interested in. If not set, then the entire content of the internal -buffer is returned. - -If there is no data to consume, or if there are fewer bytes in the -internal buffer than the `size` argument, then `null` is returned, and -a future `'readable'` event will be emitted when more is available. - -Calling `stream.read(0)` will always return `null`, and will trigger a -refresh of the internal buffer, but otherwise be a no-op. - -### readable.pipe(destination, [options]) - -* `destination` {Writable Stream} -* `options` {Object} Optional - * `end` {Boolean} Default=true - -Connects this readable stream to `destination` WriteStream. Incoming -data on this stream gets written to `destination`. Properly manages -back-pressure so that a slow destination will not be overwhelmed by a -fast readable stream. - -This function returns the `destination` stream. - -For example, emulating the Unix `cat` command: - - process.stdin.pipe(process.stdout); - -By default `end()` is called on the destination when the source stream -emits `end`, so that `destination` is no longer writable. Pass `{ end: -false }` as `options` to keep the destination stream open. - -This keeps `writer` open so that "Goodbye" can be written at the -end. - - reader.pipe(writer, { end: false }); - reader.on("end", function() { - writer.end("Goodbye\n"); - }); - -Note that `process.stderr` and `process.stdout` are never closed until -the process exits, regardless of the specified options. - -### readable.unpipe([destination]) - -* `destination` {Writable Stream} Optional - -Undo a previously established `pipe()`. If no destination is -provided, then all previously established pipes are removed. - -### readable.pause() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Ceases the flow of data. No `'data'` events are emitted while the -stream is in a paused state. - -### readable.resume() - -Switches the readable stream into "old mode", where data is emitted -using a `'data'` event rather than being buffered for consumption via -the `read()` method. - -Resumes the incoming `'data'` events after a `pause()`. - - -## Class: stream.Writable - -<!--type=class--> - -A `Writable` Stream has the following methods, members, and events. - -Note that `stream.Writable` is an abstract class designed to be -extended with an underlying implementation of the -`_write(chunk, encoding, cb)` method. (See below.) - -### new stream.Writable([options]) - -* `options` {Object} - * `highWaterMark` {Number} Buffer level when `write()` starts - returning false. Default=16kb - * `decodeStrings` {Boolean} Whether or not to decode strings into - Buffers before passing them to `_write()`. Default=true - -In classes that extend the Writable class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### writable.\_write(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be written. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. Ignore chunk is a buffer. Note that chunk will - **always** be a buffer unless the `decodeStrings` option is - explicitly set to `false`. -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -All Writable stream implementations must provide a `_write` method to -send data to the underlying resource. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Writable -class methods only. - -Call the callback using the standard `callback(error)` pattern to -signal that the write completed successfully or with an error. - -If the `decodeStrings` flag is set in the constructor options, then -`chunk` may be a string rather than a Buffer, and `encoding` will -indicate the sort of string that it is. This is to support -implementations that have an optimized handling for certain string -data encodings. If you do not explicitly set the `decodeStrings` -option to `false`, then you can safely ignore the `encoding` argument, -and assume that `chunk` will always be a Buffer. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - - -### writable.write(chunk, [encoding], [callback]) - -* `chunk` {Buffer | String} Data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when this chunk is - successfully written. -* Returns {Boolean} - -Writes `chunk` to the stream. Returns `true` if the data has been -flushed to the underlying resource. Returns `false` to indicate that -the buffer is full, and the data will be sent out in the future. The -`'drain'` event will indicate when the buffer is empty again. - -The specifics of when `write()` will return false, is determined by -the `highWaterMark` option provided to the constructor. - -### writable.end([chunk], [encoding], [callback]) - -* `chunk` {Buffer | String} Optional final data to be written -* `encoding` {String} Optional. If `chunk` is a string, then encoding - defaults to `'utf8'` -* `callback` {Function} Optional. Called when the final chunk is - successfully written. - -Call this method to signal the end of the data being written to the -stream. - -### Event: 'drain' - -Emitted when the stream's write queue empties and it's safe to write -without buffering again. Listen for it when `stream.write()` returns -`false`. - -### Event: 'close' - -Emitted when the underlying resource (for example, the backing file -descriptor) has been closed. Not all streams will emit this. - -### Event: 'finish' - -When `end()` is called and there are no more chunks to write, this -event is emitted. - -### Event: 'pipe' - -* `source` {Readable Stream} - -Emitted when the stream is passed to a readable stream's pipe method. - -### Event 'unpipe' - -* `source` {Readable Stream} - -Emitted when a previously established `pipe()` is removed using the -source Readable stream's `unpipe()` method. - -## Class: stream.Duplex - -<!--type=class--> - -A "duplex" stream is one that is both Readable and Writable, such as a -TCP socket connection. - -Note that `stream.Duplex` is an abstract class designed to be -extended with an underlying implementation of the `_read(size)` -and `_write(chunk, encoding, callback)` methods as you would with a Readable or -Writable stream class. - -Since JavaScript doesn't have multiple prototypal inheritance, this -class prototypally inherits from Readable, and then parasitically from -Writable. It is thus up to the user to implement both the lowlevel -`_read(n)` method as well as the lowlevel `_write(chunk, encoding, cb)` method -on extension duplex classes. - -### new stream.Duplex(options) - -* `options` {Object} Passed to both Writable and Readable - constructors. Also has the following fields: - * `allowHalfOpen` {Boolean} Default=true. If set to `false`, then - the stream will automatically end the readable side when the - writable side ends and vice versa. - -In classes that extend the Duplex class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -## Class: stream.Transform - -A "transform" stream is a duplex stream where the output is causally -connected in some way to the input, such as a zlib stream or a crypto -stream. - -There is no requirement that the output be the same size as the input, -the same number of chunks, or arrive at the same time. For example, a -Hash stream will only ever have a single chunk of output which is -provided when the input is ended. A zlib stream will either produce -much smaller or much larger than its input. - -Rather than implement the `_read()` and `_write()` methods, Transform -classes must implement the `_transform()` method, and may optionally -also implement the `_flush()` method. (See below.) - -### new stream.Transform([options]) - -* `options` {Object} Passed to both Writable and Readable - constructors. - -In classes that extend the Transform class, make sure to call the -constructor so that the buffering settings can be properly -initialized. - -### transform.\_transform(chunk, encoding, callback) - -* `chunk` {Buffer | String} The chunk to be transformed. Will always - be a buffer unless the `decodeStrings` option was set to `false`. -* `encoding` {String} If the chunk is a string, then this is the - encoding type. (Ignore if `decodeStrings` chunk is a buffer.) -* `callback` {Function} Call this function (optionally with an error - argument) when you are done processing the supplied chunk. - -Note: **This function MUST NOT be called directly.** It should be -implemented by child classes, and called by the internal Transform -class methods only. - -All Transform stream implementations must provide a `_transform` -method to accept input and produce output. - -`_transform` should do whatever has to be done in this specific -Transform class, to handle the bytes being written, and pass them off -to the readable portion of the interface. Do asynchronous I/O, -process things, and so on. - -Call `transform.push(outputChunk)` 0 or more times to generate output -from this input chunk, depending on how much data you want to output -as a result of this chunk. - -Call the callback function only when the current chunk is completely -consumed. Note that there may or may not be output as a result of any -particular input chunk. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### transform.\_flush(callback) - -* `callback` {Function} Call this function (optionally with an error - argument) when you are done flushing any remaining data. - -Note: **This function MUST NOT be called directly.** It MAY be implemented -by child classes, and if so, will be called by the internal Transform -class methods only. - -In some cases, your transform operation may need to emit a bit more -data at the end of the stream. For example, a `Zlib` compression -stream will store up some internal state so that it can optimally -compress the output. At the end, however, it needs to do the best it -can with what is left, so that the data will be complete. - -In those cases, you can implement a `_flush` method, which will be -called at the very end, after all the written data is consumed, but -before emitting `end` to signal the end of the readable side. Just -like with `_transform`, call `transform.push(chunk)` zero or more -times, as appropriate, and call `callback` when the flush operation is -complete. - -This method is prefixed with an underscore because it is internal to -the class that defines it, and should not be called directly by user -programs. However, you **are** expected to override this method in -your own extension classes. - -### Example: `SimpleProtocol` parser - -The example above of a simple protocol parser can be implemented much -more simply by using the higher level `Transform` stream class. - -In this example, rather than providing the input as an argument, it -would be piped into the parser, which is a more idiomatic Node stream -approach. - -```javascript -function SimpleProtocol(options) { - if (!(this instanceof SimpleProtocol)) - return new SimpleProtocol(options); - - Transform.call(this, options); - this._inBody = false; - this._sawFirstCr = false; - this._rawHeader = []; - this.header = null; -} - -SimpleProtocol.prototype = Object.create( - Transform.prototype, { constructor: { value: SimpleProtocol }}); - -SimpleProtocol.prototype._transform = function(chunk, encoding, done) { - if (!this._inBody) { - // check if the chunk has a \n\n - var split = -1; - for (var i = 0; i < chunk.length; i++) { - if (chunk[i] === 10) { // '\n' - if (this._sawFirstCr) { - split = i; - break; - } else { - this._sawFirstCr = true; - } - } else { - this._sawFirstCr = false; - } - } - - if (split === -1) { - // still waiting for the \n\n - // stash the chunk, and try again. - this._rawHeader.push(chunk); - } else { - this._inBody = true; - var h = chunk.slice(0, split); - this._rawHeader.push(h); - var header = Buffer.concat(this._rawHeader).toString(); - try { - this.header = JSON.parse(header); - } catch (er) { - this.emit('error', new Error('invalid simple protocol data')); - return; - } - // and let them know that we are done parsing the header. - this.emit('header', this.header); - - // now, because we got some extra data, emit this first. - this.push(b); - } - } else { - // from there on, just provide the data to our consumer as-is. - this.push(b); - } - done(); -}; - -var parser = new SimpleProtocol(); -source.pipe(parser) - -// Now parser is a readable stream that will emit 'header' -// with the parsed header data. -``` - - -## Class: stream.PassThrough - -This is a trivial implementation of a `Transform` stream that simply -passes the input bytes across to the output. Its purpose is mainly -for examples and testing, but there are occasionally use cases where -it can come in handy. - - -[EventEmitter]: http://nodejs.org/api/events.html#events_class_events_eventemitter diff --git a/doc/blog/module/multi-server-continuous-deployment-with-fleet.md b/doc/blog/module/multi-server-continuous-deployment-with-fleet.md deleted file mode 100644 index 7849ee410..000000000 --- a/doc/blog/module/multi-server-continuous-deployment-with-fleet.md +++ /dev/null @@ -1,89 +0,0 @@ -title: multi-server continuous deployment with fleet -author: Isaac Schlueter -date: Wed May 02 2012 11:00:00 GMT-0700 (PDT) -status: publish -category: module -slug: multi-server-continuous-deployment-with-fleet - -<p><img style="float:right;margin-left:1.2em;" alt="substack" src="http://substack.net/images/substackistan.png"><i>This is a guest post by James "SubStack" Halliday, originally posted <a href="http://substack.net/posts/16a9d8/multi-server-continuous-deployment-with-fleet">on his blog</a>, and reposted here with permission.</i></p> - -<p>Writing applications as a sequence of tiny services that all talk to each other over the network has many upsides, but it can be annoyingly tedious to get all the subsystems up and running. </p> - -<p>Running a <a href="http://substack.net/posts/7a1c42">seaport</a> can help with getting all the services to talk to each other, but running the processes is another matter, especially when you have new code to push into production. </p> - -<p><a href="http://github.com/substack/fleet">fleet</a> aims to make it really easy for anyone on your team to push new code from git to an armada of servers and manage all the processes in your stack. </p> - -<p>To start using fleet, just install the fleet command with <a href="http://npmjs.org">npm</a>: </p> - -<pre style="">npm install -g fleet </pre> - -<p>Then on one of your servers, start a fleet hub. From a fresh directory, give it a passphrase and a port to listen on: </p> - -<pre style="">fleet hub --port=7000 --secret=beepboop </pre> - -<p>Now fleet is listening on :7000 for commands and has started a git server on :7001 over http. There's no ssh keys or post commit hooks to configure, just run that command and you're ready to go! </p> - -<p>Next set up some worker drones to run your processes. You can have as many workers as you like on a single server but each worker should be run from a separate directory. Just do: </p> - -<pre style="">fleet drone --hub=x.x.x.x:7000 --secret=beepboop </pre> - -<p>where <span class="code">x.x.x.x</span> is the address where the fleet hub is running. Spin up a few of these drones. </p> - -<p>Now navigate to the directory of the app you want to deploy. First set a remote so you don't need to type <span class="code">--hub</span> and <span class="code">--secret</span> all the time. </p> - -<pre style="">fleet remote add default --hub=x.x.x.x:7000 --secret=beepboop </pre> - -<p>Fleet just created a <span class="code">fleet.json</span> file for you to save your settings. </p> - -<p>From the same app directory, to deploy your code just do: </p> - -<pre style="">fleet deploy </pre> - -<p>The deploy command does a <span class="code">git push</span> to the fleet hub's git http server and then the hub instructs all the drones to pull from it. Your code gets checked out into a new directory on all the fleet drones every time you deploy. </p> - -<p>Because fleet is designed specifically for managing applications with lots of tiny services, the deploy command isn't tied to running any processes. Starting processes is up to the programmer but it's super simple. Just use the <span class="code">fleet spawn</span> command: </p> - -<pre style="">fleet spawn -- node server.js 8080 </pre> - -<p>By default fleet picks a drone at random to run the process on. You can specify which drone you want to run a particular process on with the <span class="code">--drone</span> switch if it matters. </p> - -<p>Start a few processes across all your worker drones and then show what is running with the <span class="code">fleet ps</span> command: </p> - -<pre style="">fleet ps -drone#3dfe17b8 -├─┬ pid#1e99f4 -│ ├── status: running -│ ├── commit: webapp/1b8050fcaf8f1b02b9175fcb422644cb67dc8cc5 -│ └── command: node server.js 8888 -└─┬ pid#d7048a - ├── status: running - ├── commit: webapp/1b8050fcaf8f1b02b9175fcb422644cb67dc8cc5 - └── command: node server.js 8889</pre> - -<p>Now suppose that you have new code to push out into production. By default, fleet lets you spin up new services without disturbing your existing services. If you <span class="code">fleet deploy</span> again after checking in some new changes to git, the next time you <span class="code">fleet spawn</span> a new process, that process will be spun up in a completely new directory based on the git commit hash. To stop a process, just use <span class="code">fleet stop</span>. </p> - -<p>This approach lets you verify that the new services work before bringing down the old services. You can even start experimenting with heterogeneous and incremental deployment by hooking into a custom <a href="http://substack.net/posts/5bd18d">http proxy</a>! </p> - -<p>Even better, if you use a service registry like <a href="http://substack.net/posts/7a1c42">seaport</a> for managing the host/port tables, you can spin up new ad-hoc staging clusters all the time without disrupting the normal operation of your site before rolling out new code to users. </p> - -<p>Fleet has many more commands that you can learn about with its git-style manpage-based help system! Just do <span class="code">fleet help</span> to get a list of all the commands you can run. </p> - -<pre style="">fleet help -Usage: fleet <command> [<args>] - -The commands are: - deploy Push code to drones. - drone Connect to a hub as a worker. - exec Run commands on drones. - hub Create a hub for drones to connect. - monitor Show service events system-wide. - ps List the running processes on the drones. - remote Manage the set of remote hubs. - spawn Run services on drones. - stop Stop processes running on drones. - -For help about a command, try `fleet help `.</pre> - -<p><span class="code">npm install -g fleet</span> and <a href="https://github.com/substack/fleet">check out the code on github</a>! </p> - -<img src="http://substack.net/images/fleet.png" width="849" height="568"> diff --git a/doc/blog/module/service-logging-in-json-with-bunyan.md b/doc/blog/module/service-logging-in-json-with-bunyan.md deleted file mode 100644 index 8a323c4ae..000000000 --- a/doc/blog/module/service-logging-in-json-with-bunyan.md +++ /dev/null @@ -1,337 +0,0 @@ -title: Service logging in JSON with Bunyan -author: trentmick -date: Wed Mar 28 2012 12:25:26 GMT-0700 (PDT) -status: publish -category: module -slug: service-logging-in-json-with-bunyan - -<div style="float:right;margin:0 0 15px 15px;"> -<img class="alignnone size-full wp-image-469" title="Bunyan" src="http://nodeblog.files.wordpress.com/2012/03/bunyan.png" alt="Paul Bunyan and Babe the Blue Ox" width="240" height="320" /><br /> -<a href="http://www.flickr.com/photos/stublag/2876034487">Photo by Paul Carroll</a> -</div> - -<p>Service logs are gold, if you can mine them. We scan them for occasional debugging. Perhaps we grep them looking for errors or warnings, or setup an occasional nagios log regex monitor. If that. This is a waste of the best channel for data about a service.</p> - -<p><a href="http://www.youtube.com/watch?v=01-2pNCZiNk">"Log. (Huh) What is it good for. Absolutely ..."</a></p> - -<ul> -<li>debugging</li> -<li>monitors tools that alert operators</li> -<li>non real-time analysis (business or operational analysis)</li> -<li>historical analysis</li> -</ul> - -<p>These are what logs are good for. The current state of logging is barely adequate for the first of these. Doing reliable analysis, and even monitoring, of varied <a href="http://journal.paul.querna.org/articles/2011/12/26/log-for-machines-in-json/">"printf-style" logs</a> is a grueling or hacky task that most either don't bother with, fallback to paying someone else to do (viz. Splunk's great successes), or, for web sites, punt and use the plethora of JavaScript-based web analytics tools.</p> - -<p>Let's log in JSON. Let's format log records with a filter <em>outside</em> the app. Let's put more info in log records by not shoehorning into a printf-message. Debuggability can be improved. Monitoring and analysis can <em>definitely</em> be improved. Let's <em>not</em> write another regex-based parser, and use the time we've saved writing tools to collate logs from multiple nodes and services, to query structured logs (from all services, not just web servers), etc.</p> - -<p>At <a href="http://joyent.com">Joyent</a> we use node.js for running many core services -- loosely coupled through HTTP REST APIs and/or AMQP. In this post I'll draw on experiences from my work on Joyent's <a href="http://www.joyent.com/products/smartdatacenter/">SmartDataCenter product</a> and observations of <a href="http://www.joyentcloud.com/">Joyent Cloud</a> operations to suggest some improvements to service logging. I'll show the (open source) <strong>Bunyan logging library and tool</strong> that we're developing to improve the logging toolchain.</p> - -<h1 style="margin:48px 0 24px;" id="current-state-of-log-formatting">Current State of Log Formatting</h1> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code># apache access log -10.0.1.22 - - [15/Oct/2010:11:46:46 -0700] "GET /favicon.ico HTTP/1.1" 404 209 -fe80::6233:4bff:fe29:3173 - - [15/Oct/2010:11:46:58 -0700] "GET / HTTP/1.1" 200 44 - -# apache error log -[Fri Oct 15 11:46:46 2010] [error] [client 10.0.1.22] File does not exist: /Library/WebServer/Documents/favicon.ico -[Fri Oct 15 11:46:58 2010] [error] [client fe80::6233:4bff:fe29:3173] File does not exist: /Library/WebServer/Documents/favicon.ico - -# Mac /var/log/secure.log -Oct 14 09:20:56 banana loginwindow[41]: in pam_sm_authenticate(): Failed to determine Kerberos principal name. -Oct 14 12:32:20 banana com.apple.SecurityServer[25]: UID 501 authenticated as user trentm (UID 501) for right 'system.privilege.admin' - -# an internal joyent agent log -[2012-02-07 00:37:11.898] [INFO] AMQPAgent - Publishing success. -[2012-02-07 00:37:11.910] [DEBUG] AMQPAgent - { req_id: '8afb8d99-df8e-4724-8535-3d52adaebf25', - timestamp: '2012-02-07T00:37:11.898Z', - -# typical expressjs log output -[Mon, 21 Nov 2011 20:52:11 GMT] 200 GET /foo (1ms) -Blah, some other unstructured output to from a console.log call. -</code></pre> - -<p>What're we doing here? Five logs at random. Five different date formats. As <a href="http://journal.paul.querna.org/articles/2011/12/26/log-for-machines-in-json/">Paul Querna points out</a> we haven't improved log parsability in 20 years. Parsability is enemy number one. You can't use your logs until you can parse the records, and faced with the above the inevitable solution is a one-off regular expression.</p> - -<p>The current state of the art is various <a href="http://search.cpan.org/~akira/Apache-ParseLog-1.02/ParseLog.pm">parsing libs</a>, <a href="http://www.webalizer.org/">analysis</a> <a href="http://awstats.sourceforge.net/">tools</a> and homebrew scripts ranging from grep to Perl, whose scope is limited to a few niches log formats.</p> - -<h1 style="margin:48px 0 24px;" id="json-for-logs">JSON for Logs</h1> - -<p><code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">JSON.parse()</code> solves all that. Let's log in JSON. But it means a change in thinking: <strong>The first-level audience for log files shouldn't be a person, but a machine.</strong></p> - -<p>That is not said lightly. The "Unix Way" of small focused tools lightly coupled with text output is important. JSON is less "text-y" than, e.g., Apache common log format. JSON makes <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">grep</code> and <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">awk</code> awkward. Using <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">less</code> directly on a log is handy.</p> - -<p>But not handy enough. That <a href="http://bit.ly/wTPlN3">80's pastel jumpsuit awkwardness</a> you're feeling isn't the JSON, it's your tools. Time to find a <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">json</code> tool -- <a href="https://github.com/trentm/json">json</a> is one, <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">bunyan</code> described below is another one. Time to learn your JSON library instead of your regex library: <a href="https://developer.mozilla.org/en/JSON">JavaScript</a>, <a href="http://docs.python.org/library/json.html">Python</a>, <a href="http://flori.github.com/json/">Ruby</a>, <a href="http://json.org/java/">Java</a>, <a href="http://search.cpan.org/~makamaka/JSON-2.53/lib/JSON.pm">Perl</a>.</p> - -<p>Time to burn your log4j Layout classes and move formatting to the tools side. Creating a log message with semantic information and throwing that away to make a string is silly. The win at being able to trivially parse log records is huge. The possibilities at being able to add ad hoc structured information to individual log records is interesting: think program state metrics, think feeding to Splunk, or loggly, think easy audit logs.</p> - -<h1 style="margin:48px 0 24px;" id="introducing-bunyan">Introducing Bunyan</h1> - -<p><a href="https://github.com/trentm/node-bunyan">Bunyan</a> is <strong>a node.js module for logging in JSON</strong> and <strong>a <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">bunyan</code> CLI tool</strong> to view those logs.</p> - -<p>Logging with Bunyan basically looks like this:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>$ cat hi.js -var Logger = require('bunyan'); -var log = new Logger({name: 'hello' /*, ... */}); -log.info("hi %s", "paul"); -</code></pre> - -<p>And you'll get a log record like this:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>$ node hi.js -{"name":"hello","hostname":"banana.local","pid":40026,"level":30,"msg":"hi paul","time":"2012-03-28T17:25:37.050Z","v":0} -</code></pre> - -<p>Pipe that through the <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">bunyan</code> tool that is part of the "node-bunyan" install to get more readable output:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>$ node hi.js | ./node_modules/.bin/bunyan # formatted text output -[2012-02-07T18:50:18.003Z] INFO: hello/40026 on banana.local: hi paul - -$ node hi.js | ./node_modules/.bin/bunyan -j # indented JSON output -{ - "name": "hello", - "hostname": "banana.local", - "pid": 40087, - "level": 30, - "msg": "hi paul", - "time": "2012-03-28T17:26:38.431Z", - "v": 0 -} -</code></pre> - -<p>Bunyan is log4j-like: create a Logger with a name, call <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">log.info(...)</code>, etc. However it has no intention of reproducing much of the functionality of log4j. IMO, much of that is overkill for the types of services you'll tend to be writing with node.js.</p> - -<h1 style="margin:48px 0 24px;" id="longer-bunyan-example">Longer Bunyan Example</h1> - -<p>Let's walk through a bigger example to show some interesting things in Bunyan. We'll create a very small "Hello API" server using the excellent <a href="https://github.com/mcavage/node-restify">restify</a> library -- which we used heavily here at <a href="http://joyent.com">Joyent</a>. (Bunyan doesn't require restify at all, you can easily use Bunyan with <a href="http://expressjs.com/">Express</a> or whatever.)</p> - -<p><em>You can follow along in <a href="https://github.com/trentm/hello-json-logging">https://github.com/trentm/hello-json-logging</a> if you like. Note that I'm using the current HEAD of the bunyan and restify trees here, so details might change a bit. Prerequisite: a node 0.6.x installation.</em></p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>git clone https://github.com/trentm/hello-json-logging.git -cd hello-json-logging -make -</code></pre> - -<h2 id="bunyan-logger">Bunyan Logger</h2> - -<p>Our <a href="https://github.com/trentm/hello-json-logging/blob/master/server.js">server</a> first creates a Bunyan logger:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>var Logger = require('bunyan'); -var log = new Logger({ - name: 'helloapi', - streams: [ - { - stream: process.stdout, - level: 'debug' - }, - { - path: 'hello.log', - level: 'trace' - } - ], - serializers: { - req: Logger.stdSerializers.req, - res: restify.bunyan.serializers.response, - }, -}); -</code></pre> - -<p>Every Bunyan logger must have a <strong>name</strong>. Unlike log4j, this is not a hierarchical dotted namespace. It is just a name field for the log records.</p> - -<p>Every Bunyan logger has one or more <strong>streams</strong>, to which log records are written. Here we've defined two: logging at DEBUG level and above is written to stdout, and logging at TRACE and above is appended to 'hello.log'.</p> - -<p>Bunyan has the concept of <strong>serializers</strong>: a registry of functions that know how to convert a JavaScript object for a certain log record field to a nice JSON representation for logging. For example, here we register the <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">Logger.stdSerializers.req</code> function to convert HTTP Request objects (using the field name "req") to JSON. More on serializers later.</p> - -<h2 id="restify-server">Restify Server</h2> - -<p>Restify 1.x and above has bunyan support baked in. You pass in your Bunyan logger like this:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>var server = restify.createServer({ - name: 'Hello API', - log: log // Pass our logger to restify. -}); -</code></pre> - -<p>Our simple API will have a single <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">GET /hello?name=NAME</code> endpoint:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>server.get({path: '/hello', name: 'SayHello'}, function(req, res, next) { - var caller = req.params.name || 'caller'; - req.log.debug('caller is "%s"', caller); - res.send({"hello": caller}); - return next(); -}); -</code></pre> - -<p>If we run that, <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">node server.js</code>, and call the endpoint, we get the expected restify response:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>$ curl -iSs http://0.0.0.0:8080/hello?name=paul -HTTP/1.1 200 OK -Access-Control-Allow-Origin: * -Access-Control-Allow-Headers: Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version -Access-Control-Expose-Headers: X-Api-Version, X-Request-Id, X-Response-Time -Server: Hello API -X-Request-Id: f6aaf942-c60d-4c72-8ddd-bada459db5e3 -Access-Control-Allow-Methods: GET -Connection: close -Content-Length: 16 -Content-MD5: Xmn3QcFXaIaKw9RPUARGBA== -Content-Type: application/json -Date: Tue, 07 Feb 2012 19:12:35 GMT -X-Response-Time: 4 - -{"hello":"paul"} -</code></pre> - -<h2 id="setup-server-logging">Setup Server Logging</h2> - -<p>Let's add two things to our server. First, we'll use the <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">server.pre</code> to hook into restify's request handling before routing where we'll <strong>log the request</strong>.</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>server.pre(function (request, response, next) { - request.log.info({req: request}, 'start'); // (1) - return next(); -}); -</code></pre> - -<p>This is the first time we've seen this <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">log.info</code> style with an object as the first argument. Bunyan logging methods (<code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">log.trace</code>, <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">log.debug</code>, ...) all support an optional <strong>first object argument with extra log record fields</strong>:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>log.info(<object> fields, <string> msg, ...) -</code></pre> - -<p>Here we pass in the restify Request object, <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">req</code>. The "req" serializer we registered above will come into play here, but bear with me.</p> - -<p>Remember that we already had this debug log statement in our endpoint handler:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>req.log.debug('caller is "%s"', caller); // (2) -</code></pre> - -<p>Second, use the restify server <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">after</code> event to <strong>log the response</strong>:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>server.on('after', function (req, res, route) { - req.log.info({res: res}, "finished"); // (3) -}); -</code></pre> - -<h2 id="log-output">Log Output</h2> - -<p>Now lets see what log output we get when somebody hits our API's endpoint:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>$ curl -iSs http://0.0.0.0:8080/hello?name=paul -HTTP/1.1 200 OK -... -X-Request-Id: 9496dfdd-4ec7-4b59-aae7-3fed57aed5ba -... - -{"hello":"paul"} -</code></pre> - -<p>Here is the server log:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>[trentm@banana:~/tm/hello-json-logging]$ node server.js -... intro "listening at" log message elided ... -{"name":"helloapi","hostname":"banana.local","pid":40341,"level":30,"req":{"method":"GET","url":"/hello?name=paul","headers":{"user-agent":"curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3","host":"0.0.0.0:8080","accept":"*/*"},"remoteAddress":"127.0.0.1","remotePort":59831},"msg":"start","time":"2012-03-28T17:37:29.506Z","v":0} -{"name":"helloapi","hostname":"banana.local","pid":40341,"route":"SayHello","req_id":"9496dfdd-4ec7-4b59-aae7-3fed57aed5ba","level":20,"msg":"caller is \"paul\"","time":"2012-03-28T17:37:29.507Z","v":0} -{"name":"helloapi","hostname":"banana.local","pid":40341,"route":"SayHello","req_id":"9496dfdd-4ec7-4b59-aae7-3fed57aed5ba","level":30,"res":{"statusCode":200,"headers":{"access-control-allow-origin":"*","access-control-allow-headers":"Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version","access-control-expose-headers":"X-Api-Version, X-Request-Id, X-Response-Time","server":"Hello API","x-request-id":"9496dfdd-4ec7-4b59-aae7-3fed57aed5ba","access-control-allow-methods":"GET","connection":"close","content-length":16,"content-md5":"Xmn3QcFXaIaKw9RPUARGBA==","content-type":"application/json","date":"Wed, 28 Mar 2012 17:37:29 GMT","x-response-time":3}},"msg":"finished","time":"2012-03-28T17:37:29.510Z","v":0} -</code></pre> - -<p>Lets look at each in turn to see what is interesting -- pretty-printed with <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">node server.js | ./node_modules/.bin/bunyan -j</code>:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>{ // (1) - "name": "helloapi", - "hostname": "banana.local", - "pid": 40442, - "level": 30, - "req": { - "method": "GET", - "url": "/hello?name=paul", - "headers": { - "user-agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3", - "host": "0.0.0.0:8080", - "accept": "*/*" - }, - "remoteAddress": "127.0.0.1", - "remotePort": 59834 - }, - "msg": "start", - "time": "2012-03-28T17:39:44.880Z", - "v": 0 -} -</code></pre> - -<p>Here we logged the incoming request with <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">request.log.info({req: request}, 'start')</code>. The use of the "req" field triggers the <a href="https://github.com/trentm/node-bunyan/blob/master/lib/bunyan.js#L857-870">"req" serializer</a> <a href="https://github.com/trentm/hello-json-logging/blob/master/server.js#L24">registered at Logger creation</a>.</p> - -<p>Next the <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">req.log.debug</code> in our handler:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>{ // (2) - "name": "helloapi", - "hostname": "banana.local", - "pid": 40442, - "route": "SayHello", - "req_id": "9496dfdd-4ec7-4b59-aae7-3fed57aed5ba", - "level": 20, - "msg": "caller is \"paul\"", - "time": "2012-03-28T17:39:44.883Z", - "v": 0 -} -</code></pre> - -<p>and the log of response in the "after" event:</p> - -<pre style="overflow:auto;color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:5px;"><code>{ // (3) - "name": "helloapi", - "hostname": "banana.local", - "pid": 40442, - "route": "SayHello", - "req_id": "9496dfdd-4ec7-4b59-aae7-3fed57aed5ba", - "level": 30, - "res": { - "statusCode": 200, - "headers": { - "access-control-allow-origin": "*", - "access-control-allow-headers": "Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version", - "access-control-expose-headers": "X-Api-Version, X-Request-Id, X-Response-Time", - "server": "Hello API", - "x-request-id": "9496dfdd-4ec7-4b59-aae7-3fed57aed5ba", - "access-control-allow-methods": "GET", - "connection": "close", - "content-length": 16, - "content-md5": "Xmn3QcFXaIaKw9RPUARGBA==", - "content-type": "application/json", - "date": "Wed, 28 Mar 2012 17:39:44 GMT", - "x-response-time": 5 - } - }, - "msg": "finished", - "time": "2012-03-28T17:39:44.886Z", - "v": 0 -} -</code></pre> - -<p>Two useful details of note here:</p> - -<ol> -<li><p>The last two log messages include <strong>a "req_id" field</strong> (added to the <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">req.log</code> logger by restify). Note that this is the same UUID as the "X-Request-Id" header in the <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">curl</code> response. This means that if you use <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">req.log</code> for logging in your API handlers you will get an easy way to collate all logging for particular requests.</p> - -<p>If your's is an SOA system with many services, a best practice is to carry that X-Request-Id/req_id through your system to enable collating handling of a single top-level request.</p></li> -<li><p>The last two log messages include <strong>a "route" field</strong>. This tells you to which handler restify routed the request. While possibly useful for debugging, this can be very helpful for log-based monitoring of endpoints on a server.</p></li> -</ol> - -<p>Recall that we also setup all logging to go the "hello.log" file. This was set at the TRACE level. Restify will log more detail of its operation at the trace level. See <a href="https://gist.github.com/1761772">my "hello.log"</a> for an example. The <code style="color:#999;background-color:#2f2f2f;border:1px solid #484848;padding:.2em .4em;">bunyan</code> tool does a decent job of <a href="https://gist.github.com/1761772#file_2.+cat+hello.log+pipe+bunyan">nicely formatting</a> multiline messages and "req"/"res" keys (with color, not shown in the gist).</p> - -<p><em>This</em> is logging you can use effectively.</p> - -<h1 style="margin:48px 0 24px;" id="other-tools">Other Tools</h1> - -<p>Bunyan is just one of many options for logging in node.js-land. Others (that I know of) supporting JSON logging are <a href="https://github.com/flatiron/winston#readme">winston</a> and <a href="https://github.com/pquerna/node-logmagic/">logmagic</a>. Paul Querna has <a href="http://journal.paul.querna.org/articles/2011/12/26/log-for-machines-in-json/">an excellent post on using JSON for logging</a>, which shows logmagic usage and also touches on topics like the GELF logging format, log transporting, indexing and searching.</p> - -<h1 style="margin:48px 0 24px;" id="final-thoughts">Final Thoughts</h1> - -<p>Parsing challenges won't ever completely go away, but it can for your logs if you use JSON. Collating log records across logs from multiple nodes is facilitated by a common "time" field. Correlating logging across multiple services is enabled by carrying a common "req_id" (or equivalent) through all such logs.</p> - -<p>Separate log files for a single service is an anti-pattern. The typical Apache example of separate access and error logs is legacy, not an example to follow. A JSON log provides the structure necessary for tooling to easily filter for log records of a particular type.</p> - -<p>JSON logs bring possibilities. Feeding to tools like Splunk becomes easy. Ad hoc fields allow for a lightly spec'd comm channel from apps to other services: records with a "metric" could feed to <a href="http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/">statsd</a>, records with a "loggly: true" could feed to loggly.com.</p> - -<p>Here I've described a very simple example of restify and bunyan usage for node.js-based API services with easy JSON logging. Restify provides a powerful framework for robust API services. Bunyan provides a light API for nice JSON logging and the beginnings of tooling to help consume Bunyan JSON logs.</p> - -<p><strong>Update (29-Mar-2012):</strong> Fix styles somewhat for RSS readers.</p> diff --git a/doc/blog/nodejs-road-ahead.md b/doc/blog/nodejs-road-ahead.md deleted file mode 100644 index 568530f21..000000000 --- a/doc/blog/nodejs-road-ahead.md +++ /dev/null @@ -1,52 +0,0 @@ -title: Node.js and the Road Ahead -date: Thu Jan 16 15:00:00 PST 2014 -author: Timothy J Fontaine -slug: nodejs-road-ahead - -As the new project lead for Node.js I am excited for our future, and want to -give you an update on where we are. - -One of Node's major goals is to provide a small core, one that provides the -right amount of surface area for consumers to achieve and innovate, without -Node itself getting in the way. That ethos is alive and well, we're going to -continue to provide a small, simple, and stable set of APIs that facilitate the -amazing uses the community finds for Node. We're going to keep providing -backward compatible APIs, so code you write today will continue to work on -future versions of Node. And of course, performance tuning and bug fixing will -always be an important part of every release cycle. - -The release of Node v0.12 is imminent, and a lot of significant work has gone -into this release. There's streams3, a better keep alive agent for http, the vm -module is now based on contextify, and significant performance work done in -core features (Buffers, TLS, streams). We have a few APIs that are still being -ironed out before we can feature freeze and branch (execSync, AsyncListeners, -user definable instrumentation). We are definitely in the home stretch. - -But Node is far from done. In the short term there will be new releases of v8 -that we'll need to track, as well as integrating the new ABI stable C module -interface. There are interesting language features that we can use to extend -Node APIs (extend not replace). We need to write more tooling, we need to -expose more interfaces to further enable innovation. We can explore -functionality to embed Node in your existing project. - -The list can go on and on. Yet, Node is larger than the software itself. Node -is also the community, the businesses, the ecosystems, and their related -events. With that in mind there are things we can work to improve. - -The core team will be improving its procedures such that we can quickly and -efficiently communicate with you. We want to provide high quality and timely -responses to issues, describe our development roadmap, as well as provide our -progress during each release cycle. We know you're interested in our plans for -Node, and it's important we're able to provide that information. Communication -should be bidirectional: we want to continue to receive feedback about how -you're using Node, and what your pain points are. - -After the release of v0.12 we will facilitate the community to contribute and -curate content for nodejs.org. Allowing the community to continue to invest in -Node will ensure nodejs.org is an excellent starting point and the primary -resource for tutorials, documentation, and materials regarding Node. We have an -awesome and engaged community, and they're paramount to our success. - -I'm excited for Node's future, to see new and interesting use cases, and to -continue to help businesses scale and innovate with Node. We have a lot we can -accomplish together, and I look forward to seeing those results. diff --git a/doc/blog/npm/2013-outage-postmortem.md b/doc/blog/npm/2013-outage-postmortem.md deleted file mode 100644 index cd27e16c8..000000000 --- a/doc/blog/npm/2013-outage-postmortem.md +++ /dev/null @@ -1,82 +0,0 @@ -date: Tue Nov 26 07:14:59 PST 2013 -author: Charlie Robbins -title: Keeping The npm Registry Awesome -slug: npm-post-mortem -category: npm - -We know the availability and overall health of The npm Registry is paramount to everyone using Node.js as well as the larger JavaScript community and those of your using it for [some][browserify] [awesome][dotc] [projects][npm-rubygems] [and ideas][npm-python]. Between November 4th and November 15th 2013 The npm Registry had several hours of downtime over three distinct time periods: - -1. November 4th -- 16:30 to 15:00 UTC -2. November 13th -- 15:00 to 19:30 UTC -3. November 15th -- 15:30 to 18:00 UTC - -The root cause of these downtime was insufficient resources: both hardware and human. This is a full post-mortem where we will be look at how npmjs.org works, what went wrong, how we changed the previous architecture of The npm Registry to fix it, as well next steps we are taking to prevent this from happening again. - -All of the next steps require additional expenditure from Nodejitsu: both servers and labor. This is why along with this post-mortem we are announcing our [crowdfunding campaign: scalenpm.org](https://scalenpm.org)! Our goal is to raise enough funds so that Nodejitsu can continue to run The npm Registry as a free service for _you, the community._ - -Please take a minute now to donate at [https://scalenpm.org](https://scalenpm.org)! - -## How does npmjs.org work? - -There are two distinct components that make up npmjs.org operated by different people: - -* **http://registry.npmjs.org**: The main CouchApp (Github: [isaacs/npmjs.org](https://github.com/isaacs/npmjs.org)) that stores both package tarballs and metadata. It is operated by Nodejitsu since we [acquired IrisCouch in May](https://www.nodejitsu.com/company/press/2013/05/22/iriscouch/). The primary system administrator is [Jason Smith](https://github.com/jhs), the current CTO at Nodejitsu, cofounder of IrisCouch, and the System Administrator of registry.npmjs.org since 2011. -* **http://npmjs.org**: The npmjs website that you interact with using a web browser. It is a Node.js program (Github: [isaacs/npm-www](https://github.com/isaacs/npm-www)) maintained and operated by Isaac and running on a Joyent Public Cloud SmartMachine. - -Here is a high-level summary of the _old architecture:_ - -<img width=600 src="https://i.cloudup.com/bapm3fk8Ve-3000x3000.png" alt="old npm architecture"> -<div style="text-align:center"> - _Diagram 1. Old npm architecture_ -</div> - -## What went wrong and how was it fixed? - -As illustrated above, before November 13th, 2013, npm operated as a single CouchDB server with regular daily backups. We briefly ran a multi-master CouchDB setup after downtime back in August, but after reports that `npm login` no longer worked correctly we rolled back to a single CouchDB server. On both November 13th and November 15th CouchDB became unresponsive on requests to the `/registry` database while requests to all other databases (e.g. `/public_users`) remained responsive. Although the root cause of the CouchDB failures have yet to be determined given that only requests to `/registry` were slow and/or timed out we suspect it is related to the massive number of attachments stored in the registry. - -The incident on November 4th was ultimately resolved by a reboot and resize of the host machine, but when the same symptoms reoccured less than 10 days later additional steps were taken: - -1. The [registry was moved to another machine][ops-new-machine] of equal resources to exclude the possibility of a hardware issue. -2. The [registry database itself][ops-compaction] was [compacted][compaction]. - -When neither of these yielded a solution Jason Smith and I decided to move to a multi-master architecture with continuous replication illustrated below: - -<img width=600 src="https://i.cloudup.com/xu1faVCq8p-3000x3000.png" alt="current npm architecture"> -<div style="text-align:center"> - _Diagram 2. Current npm architecture -- Red-lines denote continuous replication_ -</div> - -This _should_ have been the end of our story but unfortunately our supervision logic did not function properly to restart the secondary master on the morning of November 15th. During this time we [moved briefly][ops-single-server] back to a single master architecture. Since then the secondary master has been closely monitored by the entire Nodejitsu operations team to ensure it's continued stability. - -## What is being done to prevent future incidents? - -The public npm registry simply cannot go down. **Ever.** We gained a lot of operational knowledge about The npm Registry and about CouchDB as a result of these outages. This new knowledge has made clear several steps that we need to take to prevent future downtime: - -1. **Always be in multi-master**: The multi-master CouchDB architecture we have setup will scale to more than just two CouchDB servers. _As npm grows we'll be able to add additional capacity!_ -2. **Decouple www.npmjs.org and registry.npmjs.org**: Right now www.npmjs.org still depends directly on registry.npmjs.org. We are planning to add an additional replica to the current npm architecture so that Isaac can more easily service requests to www.npmjs.org. That means it won't go down if the registry goes down. -3. **Always have a spare replica**: We need have a hot spare replica running continuous replication from either to swap out when necessary. This is also important as we need to regularly run compaction on each master since the registry is growing ~10GB per week on disk. -4. **Move attachments out of CouchDB**: Work has begun to move the package tarballs out of CouchDB and into [Joyent's Manta service](http://www.joyent.com/products/manta). Additionally, [MaxCDN](http://www.maxcdn.com/) has generously offered to provide CDN services for npm, once the tarballs are moved out of the registry database. This will help improve delivery speed, while dramatically reducing the file system I/O load on the CouchDB servers. Work is progressing slowly, because at each stage in the plan, we are making sure that current replication users are minimally impacted. - -When these new infrastructure components are in-place The npm Registry will look like this: - -<img width=600 src="https://i.cloudup.com/XwrpFNICJ2-3000x3000.png" alt="planned npm architecture"> -<div style="text-align:center"> - _Diagram 3. Planned npm architecture -- Red-lines denote continuous replication_ -</div> - -## You are npm! And we need your help! - -The npm Registry has had a 10x year. In November 2012 there were 13.5 million downloads. In October 2013 there were **114.6 million package downloads.** We're honored to have been a part of sustaining this growth for the community and we want to see it continue to grow to a billion package downloads a month and beyond. - -_**But we need your help!**_ All of these necessary improvements require more servers, more time from Nodejitsu staff and an overall increase to what we spend maintaining the public npm registry as a free service for the Node.js community. - -Please take a minute now to donate at [https://scalenpm.org](https://scalenpm.org)! - -[browserify]: http://browserify.org/ -[dotc]: https://github.com/substack/dotc -[npm-rubygems]: http://andrew.ghost.io/emulating-node-js-modules-in-ruby/ -[npm-python]: https://twitter.com/__lucas/status/391688082573258753 -[ops-new-machine]: https://twitter.com/npmjs/status/400692071377276928 -[ops-compaction]: https://twitter.com/npmjs/status/400705715846643712 -[compaction]: http://wiki.apache.org/couchdb/Compaction -[ops-single-server]: https://twitter.com/npmjs/status/401384681507016704 diff --git a/doc/blog/npm/managing-node-js-dependencies-with-shrinkwrap.md b/doc/blog/npm/managing-node-js-dependencies-with-shrinkwrap.md deleted file mode 100644 index d48afab5a..000000000 --- a/doc/blog/npm/managing-node-js-dependencies-with-shrinkwrap.md +++ /dev/null @@ -1,167 +0,0 @@ -title: Managing Node.js Dependencies with Shrinkwrap -author: Dave Pacheco -date: Mon Feb 27 2012 10:51:59 GMT-0800 (PST) -status: publish -category: npm -slug: managing-node-js-dependencies-with-shrinkwrap - -<p style="float:right;text-align:center;margin:5px;"><a href="http://www.flickr.com/photos/luc_viatour/4247957432/"><img class="size-medium wp-image-652" style="border:1px #000000 solid;" title="Web" src="http://dtrace.org/blogs/dap/files/2012/02/web-300x300.jpg" alt="" width="250" height="250" /></a><br> -Photo by Luc Viatour (flickr)</p> - -<p>Managing dependencies is a fundamental problem in building complex software. The terrific success of github and <a href="http://npmjs.org/">npm</a> have made code reuse especially easy in the Node world, where packages don't exist in isolation but rather as nodes in a large graph. The software is constantly changing (releasing new versions), and each package has its own constraints about what other packages it requires to run (dependencies). npm keeps track of these constraints, and authors express what kind of changes are compatible using <a href="http://npmjs.org/doc/semver.html">semantic versioning</a>, allowing authors to specify that their package will work with even future versions of its dependencies as long as the semantic versions are assigned properly. - -</p> -<p>This does mean that when you "npm install" a package with dependencies, there's no guarantee that you'll get the same set of code now that you would have gotten an hour ago, or that you would get if you were to run it again an hour later. You may get a bunch of bug fixes now that weren't available an hour ago. This is great during development, where you want to keep up with changes upstream. It's not necessarily what you want for deployment, though, where you want to validate whatever bits you're actually shipping. - -</p> -<p>Put differently, <strong>it's understood that all software changes incur some risk, and it's critical to be able to manage this risk on your own terms</strong>. Taking that risk in development is good because by definition that's when you're incorporating and testing software changes. On the other hand, if you're shipping production software, you probably don't want to take this risk when cutting a release candidate (i.e. build time) or when you actually ship (i.e. deploy time) because you want to validate whatever you ship. - -</p> -<p>You can address a simple case of this problem by only depending on specific versions of packages, allowing no semver flexibility at all, but this falls apart when you depend on packages that don't also adopt the same principle. Many of us at Joyent started wondering: can we generalize this approach? - -</p> -<h2>Shrinkwrapping packages</h2> -<p>That brings us to <a href="http://npmjs.org/doc/shrinkwrap.html">npm shrinkwrap</a><a href="#note1-note" name="note1-top">[1]</a>: - -</p> -<pre><code>NAME - npm-shrinkwrap -- Lock down dependency versions - -SYNOPSIS - npm shrinkwrap - -DESCRIPTION - This command locks down the versions of a package's dependencies so - that you can control exactly which versions of each dependency will - be used when your package is installed.</code></pre> -<p>Let's consider package A: - -</p> -<pre><code>{ - "name": "A", - "version": "0.1.0", - "dependencies": { - "B": "<0.1.0" - } -}</code></pre> -<p>package B: - -</p> -<pre><code>{ - "name": "B", - "version": "0.0.1", - "dependencies": { - "C": "<0.1.0" - } -}</code></pre> -<p>and package C: - -</p> -<pre><code>{ - "name": "C, - "version": "0.0.1" -}</code></pre> -<p>If these are the only versions of A, B, and C available in the registry, then a normal "npm install A" will install: - -</p> -<pre><code>A@0.1.0 -└─┬ B@0.0.1 - └── C@0.0.1</code></pre> -<p>Then if B@0.0.2 is published, then a fresh "npm install A" will install: - -</p> -<pre><code>A@0.1.0 -└─┬ B@0.0.2 - └── C@0.0.1</code></pre> -<p>assuming the new version did not modify B's dependencies. Of course, the new version of B could include a new version of C and any number of new dependencies. As we said before, if A's author doesn't want that, she could specify a dependency on B@0.0.1. But if A's author and B's author are not the same person, there's no way for A's author to say that she does not want to pull in newly published versions of C when B hasn't changed at all. - -</p> -<p>In this case, A's author can use - -</p> -<pre><code># npm shrinkwrap</code></pre> -<p>This generates npm-shrinkwrap.json, which will look something like this: - -</p> -<pre><code>{ - "name": "A", - "dependencies": { - "B": { - "version": "0.0.1", - "dependencies": { - "C": { "version": "0.1.0" } - } - } - } -}</code></pre> -<p>The shrinkwrap command has locked down the dependencies based on what's currently installed in node_modules. <strong>When "npm install" installs a package with a npm-shrinkwrap.json file in the package root, the shrinkwrap file (rather than package.json files) completely drives the installation of that package and all of its dependencies (recursively).</strong> So now the author publishes A@0.1.0, and subsequent installs of this package will use B@0.0.1 and C@0.1.0, regardless the dependencies and versions listed in A's, B's, and C's package.json files. If the authors of B and C publish new versions, they won't be used to install A because the shrinkwrap refers to older versions. Even if you generate a new shrinkwrap, it will still reference the older versions, since "npm shrinkwrap" uses what's installed locally rather than what's available in the registry. - -</p> -<h4>Using shrinkwrapped packages</h4> -<p>Using a shrinkwrapped package is no different than using any other package: you can "npm install" it by hand, or add a dependency to your package.json file and "npm install" it. - -</p> -<h4>Building shrinkwrapped packages</h4> -<p>To shrinkwrap an existing package: - -</p> -<ol> -<li>Run "npm install" in the package root to install the current versions of all dependencies.</li> -<li>Validate that the package works as expected with these versions.</li> -<li>Run "npm shrinkwrap", add npm-shrinkwrap.json to git, and publish your package.</li> -</ol> -<p>To add or update a dependency in a shrinkwrapped package: - -</p> -<ol> -<li>Run "npm install" in the package root to install the current versions of all dependencies.</li> -<li>Add or update dependencies. "npm install" each new or updated package individually and then update package.json.</li> -<li>Validate that the package works as expected with the new dependencies.</li> -<li>Run "npm shrinkwrap", commit the new npm-shrinkwrap.json, and publish your package.</li> -</ol> -<p>You can still use <a href="http://npmjs.org/doc/outdated.html">npm outdated(1)</a> to view which dependencies have newer versions available. - -</p> -<p>For more details, check out the full docs on <a href="http://npmjs.org/doc/shrinkwrap.html">npm shrinkwrap</a>, from which much of the above is taken. - -</p> -<h2>Why not just check <code>node_modules</code> into git?</h2> -<p>One previously <a href="http://www.mikealrogers.com/posts/nodemodules-in-git.html">proposed solution</a> is to "npm install" your dependencies during development and commit the results into source control. Then you deploy your app from a specific git SHA knowing you've got exactly the same bits that you tested in development. This does address the problem, but it has its own issues: for one, binaries are tricky because you need to "npm install" them to get their sources, but this builds the [system-dependent] binary too. You can avoid checking in the binaries and use "npm rebuild" at build time, but we've had a lot of difficulty trying to do this.<a href="#note2-note" name="note2-top">[2]</a> At best, this is second-class treatment for binary modules, which are critical for many important types of Node applications.<a href="#note3-note" name="note3-top">[3]</a> - -</p> -<p>Besides the issues with binary modules, this approach just felt wrong to many of us. There's a reason we don't check binaries into source control, and it's not just because they're platform-dependent. (After all, we could build and check in binaries for all supported platforms and operating systems.) It's because that approach is error-prone and redundant: error-prone because it introduces a new human failure mode where someone checks in a source change but doesn't regenerate all the binaries, and redundant because the binaries can always be built from the sources alone. An important principle of software version control is that you don't check in files derived directly from other files by a simple transformation.<a href="#note4-note" name="note4-top">[4]</a> Instead, you check in the original sources and automate the transformations via the build process. - -</p> -<p>Dependencies are just like binaries in this regard: they're files derived from a simple transformation of something else that is (or could easily be) already available: the name and version of the dependency. Checking them in has all the same problems as checking in binaries: people could update package.json without updating the checked-in module (or vice versa). Besides that, adding new dependencies has to be done by hand, introducing more opportunities for error (checking in the wrong files, not checking in certain files, inadvertently changing files, and so on). Our feeling was: why check in this whole dependency tree (and create a mess for binary add-ons) when we could just check in the package name and version and have the build process do the rest? - -</p> -<p>Finally, the approach of checking in node_modules doesn't really scale for us. We've got at least a dozen repos that will use restify, and it doesn't make sense to check that in everywhere when we could instead just specify which version each one is using. There's another principle at work here, which is <strong>separation of concerns</strong>: each repo specifies <em>what</em> it needs, while the build process figures out <em>where to get it</em>. - -</p> -<h2>What if an author republishes an existing version of a package?</h2> -<p>We're not suggesting deploying a shrinkwrapped package directly and running "npm install" to install from shrinkwrap in production. We already have a build process to deal with binary modules and other automateable tasks. That's where we do the "npm install". We tar up the result and distribute the tarball. Since we test each build before shipping, we won't deploy something we didn't test. - -</p> -<p>It's still possible to pick up newly published versions of existing packages at build time. We assume force publish is not that common in the first place, let alone force publish that breaks compatibility. If you're worried about this, you can use git SHAs in the shrinkwrap or even consider maintaining a mirror of the part of the npm registry that you use and require human confirmation before mirroring unpublishes. - -</p> -<h2>Final thoughts</h2> -<p>Of course, the details of each use case matter a lot, and the world doesn't have to pick just one solution. If you like checking in node_modules, you should keep doing that. We've chosen the shrinkwrap route because that works better for us. - -</p> -<p>It's not exactly news that Joyent is heavy on Node. Node is the heart of our SmartDataCenter (SDC) product, whose public-facing web portal, public API, Cloud Analytics, provisioning, billing, heartbeating, and other services are all implemented in Node. That's why it's so important to us to have robust components (like <a href="https://github.com/trentm/node-bunyan">logging</a> and <a href="http://mcavage.github.com/node-restify/">REST</a>) and tools for <a href="http://dtrace.org/blogs/dap/2012/01/13/playing-with-nodev8-postmortem-debugging/">understanding production failures postmortem</a>, <a href="http://dtrace.org/blogs/dap/2012/01/05/where-does-your-node-program-spend-its-time/">profile Node apps in production</a>, and now managing Node dependencies. Again, we're interested to hear feedback from others using these tools. - -</p> -<hr /> -Dave Pacheco blogs at <a href="http://dtrace.org/blogs/dap/">dtrace.org</a>. - -<p><a href="#note1-top" name="note1-note">[1]</a> Much of this section is taken directly from the "npm shrinkwrap" documentation. - -</p> -<p><a href="#note2-top" name="note2-note">[2]</a> We've had a lot of trouble with checking in node_modules with binary dependencies. The first problem is figuring out exactly which files <em>not</em> to check in (<em>.o, </em>.node, <em>.dynlib, </em>.so, *.a, ...). When <a href="https://twitter.com/#!/mcavage">Mark</a> went to apply this to one of our internal services, the "npm rebuild" step blew away half of the dependency tree because it ran "make clean", which in dependency <a href="http://ldapjs.org/">ldapjs</a> brings the repo to a clean slate by blowing away its dependencies. Later, a new (but highly experienced) engineer on our team was tasked with fixing a bug in our Node-based DHCP server. To fix the bug, we went with a new dependency. He tried checking in node_modules, which added 190,000 lines of code (to this repo that was previously a few hundred LOC). And despite doing everything he could think of to do this correctly and test it properly, the change broke the build because of the binary modules. So having tried this approach a few times now, it appears quite difficult to get right, and as I pointed out above, the lack of actual documentation and real world examples suggests others either aren't using binary modules (which we know isn't true) or haven't had much better luck with this approach. - -</p> -<p><a href="#note3-top" name="note3-note">[3]</a> Like a good Node-based distributed system, our architecture uses lots of small HTTP servers. Each of these serves a REST API using <a href="http://mcavage.github.com/node-restify/">restify</a>. restify uses the binary module <a href="https://github.com/chrisa/node-dtrace-provider">node-dtrace-provider</a>, which gives each of our services <a href="http://mcavage.github.com/node-restify/#DTrace">deep DTrace-based observability for free</a>. So literally almost all of our components are or will soon be depending on a binary add-on. Additionally, the foundation of <a href="http://dtrace.org/blogs/dap/2011/03/01/welcome-to-cloud-analytics/">Cloud Analytics</a> are a pair of binary modules that extract data from <a href="https://github.com/bcantrill/node-libdtrace">DTrace</a> and <a href="https://github.com/bcantrill/node-kstat">kstat</a>. So this isn't a corner case for us, and we don't believe we're exceptional in this regard. The popular <a href="https://github.com/pietern/hiredis-node">hiredis</a> package for interfacing with redis from Node is also a binary module. - -</p> -<p><a href="#note4-top" name="note4-note">[4]</a> Note that I said this is an important principle for <em>software version control</em>, not using git in general. People use git for lots of things where checking in binaries and other derived files is probably fine. Also, I'm not interested in proselytizing; if you want to do this for software version control too, go ahead. But don't do it out of ignorance of existing successful software engineering practices.</p> diff --git a/doc/blog/npm/npm-1-0-global-vs-local-installation.md b/doc/blog/npm/npm-1-0-global-vs-local-installation.md deleted file mode 100644 index 77a3fa895..000000000 --- a/doc/blog/npm/npm-1-0-global-vs-local-installation.md +++ /dev/null @@ -1,64 +0,0 @@ -title: npm 1.0: Global vs Local installation -author: Isaac Schlueter -date: Wed Mar 23 2011 23:07:13 GMT-0700 (PDT) -status: publish -category: npm -slug: npm-1-0-global-vs-local-installation - -<p><i>npm 1.0 is in release candidate mode. <a href="http://groups.google.com/group/npm-/browse_thread/thread/43d3e76d71d1f141">Go get it!</a></i></p> - -<p>More than anything else, the driving force behind the npm 1.0 rearchitecture was the desire to simplify what a package installation directory structure looks like.</p> - -<p>In npm 0.x, there was a command called <code>bundle</code> that a lot of people liked. <code>bundle</code> let you install your dependencies locally in your project, but even still, it was basically a hack that never really worked very reliably.</p> - -<p>Also, there was that activation/deactivation thing. That’s confusing.</p> - -<h2>Two paths</h2> - -<p>In npm 1.0, there are two ways to install things:</p> - -<ol> <li>globally —- This drops modules in <code>{prefix}/lib/node_modules</code>, and puts executable files in <code>{prefix}/bin</code>, where <code>{prefix}</code> is usually something like <code>/usr/local</code>. It also installs man pages in <code>{prefix}/share/man</code>, if they’re supplied.</li> <li>locally —- This installs your package in the current working directory. Node modules go in <code>./node_modules</code>, executables go in <code>./node_modules/.bin/</code>, and man pages aren’t installed at all.</li> </ol> - -<h2>Which to choose</h2> - -<p>Whether to install a package globally or locally depends on the <code>global</code> config, which is aliased to the <code>-g</code> command line switch.</p> - -<p>Just like how global variables are kind of gross, but also necessary in some cases, global packages are important, but best avoided if not needed.</p> - -<p>In general, the rule of thumb is:</p> - -<ol> <li>If you’re installing something that you want to use <em>in</em> your program, using <code>require('whatever')</code>, then install it locally, at the root of your project.</li> <li>If you’re installing something that you want to use in your <em>shell</em>, on the command line or something, install it globally, so that its binaries end up in your <code>PATH</code> environment variable.</li> </ol> - -<h2>When you can't choose</h2> - -<p>Of course, there are some cases where you want to do both. <a href="http://coffeescript.org/">Coffee-script</a> and <a href="http://expressjs.com/">Express</a> both are good examples of apps that have a command line interface, as well as a library. In those cases, you can do one of the following:</p> - -<ol> <li>Install it in both places. Seriously, are you that short on disk space? It’s fine, really. They’re tiny JavaScript programs.</li> <li>Install it globally, and then <code>npm link coffee-script</code> or <code>npm link express</code> (if you’re on a platform that supports symbolic links.) Then you only need to update the global copy to update all the symlinks as well.</li> </ol> - -<p>The first option is the best in my opinion. Simple, clear, explicit. The second is really handy if you are going to re-use the same library in a bunch of different projects. (More on <code>npm link</code> in a future installment.)</p> - -<p>You can probably think of other ways to do it by messing with environment variables. But I don’t recommend those ways. Go with the grain.</p> - -<h2 id="slight_exception_it8217s_not_always_the_cwd">Slight exception: It’s not always the cwd.</h2> - -<p>Let’s say you do something like this:</p> - -<pre style="background:#333!important;color:#ccc!important;overflow:auto!important;padding:2px!important;"><code>cd ~/projects/foo # go into my project -npm install express # ./node_modules/express -cd lib/utils # move around in there -vim some-thing.js # edit some stuff, work work work -npm install redis # ./lib/utils/node_modules/redis!? ew.</code></pre> - -<p>In this case, npm will install <code>redis</code> into <code>~/projects/foo/node_modules/redis</code>. Sort of like how git will work anywhere within a git repository, npm will work anywhere within a package, defined by having a <code>node_modules</code> folder.</p> - -<h2>Test runners and stuff</h2> - -<p>If your package's <code>scripts.test</code> command uses a command-line program installed by one of your dependencies, not to worry. npm makes <code>./node_modules/.bin</code> the first entry in the <code>PATH</code> environment variable when running any lifecycle scripts, so this will work fine, even if your program is not globally installed: - -<pre style="background:#333!important;color:#ccc!important;overflow:auto!important;padding:2px!important;"><code>{ "name" : "my-program" -, "version" : "1.2.3" -, "dependencies": { "express": "*", "coffee-script": "*" } -, "devDependencies": { "vows": "*" } -, "scripts": - { "test": "vows test/*.js" - , "preinstall": "cake build" } }</code></pre> diff --git a/doc/blog/npm/npm-1-0-link.md b/doc/blog/npm/npm-1-0-link.md deleted file mode 100644 index 095ecb58b..000000000 --- a/doc/blog/npm/npm-1-0-link.md +++ /dev/null @@ -1,114 +0,0 @@ -title: npm 1.0: link -author: Isaac Schlueter -date: Wed Apr 06 2011 17:40:33 GMT-0700 (PDT) -status: publish -category: npm -slug: npm-1-0-link - -<p><i>npm 1.0 is in release candidate mode. <a href="http://groups.google.com/group/npm-/browse_thread/thread/43d3e76d71d1f141">Go get it!</a></i></p> - -<p>In npm 0.x, there was a command called <code>link</code>. With it, you could “link-install” a package so that changes would be reflected in real-time. This is especially handy when you’re actually building something. You could make a few changes, run the command again, and voila, your new code would be run without having to re-install every time.</p> - -<p>Of course, compiled modules still have to be rebuilt. That’s not ideal, but it’s a problem that will take more powerful magic to solve.</p> - -<p>In npm 0.x, this was a pretty awful kludge. Back then, every package existed in some folder like:</p> - -<pre><code>prefix/lib/node/.npm/my-package/1.3.6/package -</code></pre> - -<p>and the package’s version and name could be inferred from the path. Then, symbolic links were set up that looked like:</p> - -<pre><code>prefix/lib/node/my-package@1.3.6 -> ./.npm/my-package/1.3.6/package -</code></pre> - -<p>It was easy enough to point that symlink to a different location. However, since the <em>package.json file could change</em>, that meant that the connection between the version and the folder was not reliable.</p> - -<p>At first, this was just sort of something that we dealt with by saying, “Relink if you change the version.” However, as more and more edge cases arose, eventually the solution was to give link packages this fakey version of “9999.0.0-LINK-hash” so that npm knew it was an impostor. Sometimes the package was treated as if it had the 9999.0.0 version, and other times it was treated as if it had the version specified in the package.json.</p> - -<h2 id="a_better_way">A better way</h2> - -<p>For npm 1.0, we backed up and looked at what the actual use cases were. Most of the time when you link something you want one of the following:</p> - -<ol> -<li>globally install this package I’m working on so that I can run the command it creates and test its stuff as I work on it.</li> -<li>locally install my thing into some <em>other</em> thing that depends on it, so that the other thing can <code>require()</code> it.</li> -</ol> - -<p>And, in both cases, changes should be immediately apparent and not require any re-linking.</p> - -<p><em>Also</em>, there’s a third use case that I didn’t really appreciate until I started writing more programs that had more dependencies:</p> - -<ol start="3"> <li><p>Globally install something, and use it in development in a bunch of projects, and then update them all at once so that they all use the latest version. </ol> - -<p>Really, the second case above is a special-case of this third case.</p> - -<h2 id="link_devel_global">Link devel → global</h2> - -<p>The first step is to link your local project into the global install space. (See <a href="http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/">global vs local installation</a> for more on this global/local business.)</p> - -<p>I do this as I’m developing node projects (including npm itself).</p> - -<pre><code>cd ~/dev/js/node-tap # go into the project dir -npm link # create symlinks into {prefix} -</code></pre> - -<p>Because of how I have my computer set up, with <code>/usr/local</code> as my install prefix, I end up with a symlink from <code>/usr/local/lib/node_modules/tap</code> pointing to <code>~/dev/js/node-tap</code>, and the executable linked to <code>/usr/local/bin/tap</code>.</p> - -<p>Of course, if you <a href="http://blog.nodejs.org/2011/04/04/development-environment/">set your paths differently</a>, then you’ll have different results. (That’s why I tend to talk in terms of <code>prefix</code> rather than <code>/usr/local</code>.)</p> - -<h2 id="link_global_local">Link global → local</h2> - -<p>When you want to link the globally-installed package into your local development folder, you run <code>npm link pkg</code> where <code>pkg</code> is the name of the package that you want to install.</p> - -<p>For example, let’s say that I wanted to write some tap tests for my node-glob package. I’d <em>first</em> do the steps above to link tap into the global install space, and <em>then</em> I’d do this:</p> - -<pre><code>cd ~/dev/js/node-glob # go to the project that uses the thing. -npm link tap # link the global thing into my project. -</code></pre> - -<p>Now when I make changes in <code>~/dev/js/node-tap</code>, they’ll be immediately reflected in <code>~/dev/js/node-glob/node_modules/tap</code>.</p> - -<h2 id="link_to_stuff_you_don8217t_build">Link to stuff you <em>don’t</em> build</h2> - -<p>Let’s say I have 15 sites that all use express. I want the benefits of local development, but I also want to be able to update all my dev folders at once. You can globally install express, and then link it into your local development folder.</p> - -<pre><code>npm install express -g # install express globally -cd ~/dev/js/my-blog # development folder one -npm link express # link the global express into ./node_modules -cd ~/dev/js/photo-site # other project folder -npm link express # link express into here, as well - - # time passes - # TJ releases some new stuff. - # you want this new stuff. - -npm update express -g # update the global install. - # this also updates my project folders. -</code></pre> - -<h2 id="caveat_not_for_real_servers">Caveat: Not For Real Servers</h2> - -<p>npm link is a development tool. It’s <em>awesome</em> for managing packages on your local development box. But deploying with npm link is basically asking for problems, since it makes it super easy to update things without realizing it.</p> - -<h2 id="caveat_2_sorry_windows">Caveat 2: Sorry, Windows!</h2> - -<p>I highly doubt that a native Windows node will ever have comparable symbolic link support to what Unix systems provide. I know that there are junctions and such, and I've heard legends about symbolic links on Windows 7.</p> - -<p>When there is a native windows port of Node, if that native windows port has `fs.symlink` and `fs.readlink` support that is exactly identical to the way that they work on Unix, then this should work fine.</p> - -<p>But I wouldn't hold my breath. Any bugs about this not working on a native Windows system (ie, not Cygwin) will most likely be closed with <code>wontfix</code>.</p> - - -<h2 id="aside_credit_where_credit8217s_due">Aside: Credit where Credit’s Due</h2> - -<p>Back before the Great Package Management Wars of Node 0.1, before npm or kiwi or mode or seed.js could do much of anything, and certainly before any of them had more than 2 users, Mikeal Rogers invited me to the Couch.io offices for lunch to talk about this npm registry thingie I’d mentioned wanting to build. (That is, to convince me to use CouchDB for it.)</p> - -<p>Since he was volunteering to build the first version of it, and since couch is pretty much the ideal candidate for this use-case, it was an easy sell.</p> - -<p>While I was there, he said, “Look. You need to be able to link a project directory as if it was installed as a package, and then have it all Just Work. Can you do that?”</p> - -<p>I was like, “Well, I don’t know… I mean, there’s these edge cases, and it doesn’t really fit with the existing folder structure very well…”</p> - -<p>“Dude. Either you do it, or I’m going to have to do it, and then there’ll be <em>another</em> package manager in node, instead of writing a registry for npm, and it won’t be as good anyway. Don’t be python.”</p> - -<p>The rest is history.</p> diff --git a/doc/blog/npm/npm-1-0-released.md b/doc/blog/npm/npm-1-0-released.md deleted file mode 100644 index d91b2793e..000000000 --- a/doc/blog/npm/npm-1-0-released.md +++ /dev/null @@ -1,36 +0,0 @@ -title: npm 1.0: Released -author: Isaac Schlueter -date: Sun May 01 2011 08:09:45 GMT-0700 (PDT) -status: publish -category: npm -slug: npm-1-0-released - -<p>npm 1.0 has been released. Here are the highlights:</p> - -<ul> <li><a href="http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/">Global vs local installation</a></li> <li><a href="http://blog.nodejs.org/2011/03/17/npm-1-0-the-new-ls/">ls displays a tree</a>, instead of being a remote search</li> <li>No more “activation” concept - dependencies are nested</li> <li><a href="http://blog.nodejs.org/2011/04/06/npm-1-0-link/">Updates to link command</a></li> <li>Install script cleans up any 0.x cruft it finds. (That is, it removes old packages, so that they can be installed properly.)</li> <li>Simplified “search” command. One line per package, rather than one line per version.</li> <li>Renovated “completion” approach</li> <li>More help topics</li> <li>Simplified folder structure</li> </ul> - -<p>The focus is on npm being a development tool, rather than an apt-wannabe.</p> - -<h2 id="installing_it">Installing it</h2> - -<p>To get the new version, run this command:</p> - -<pre style="background:#333;color:#ccc;overflow:auto;padding:2px;"><code>curl http://npmjs.org/install.sh | sh </code></pre> - -<p>This will prompt to ask you if it’s ok to remove all the old 0.x cruft. If you want to not be asked, then do this:</p> - -<pre style="background:#333;color:#ccc;overflow:auto;padding:2px;"><code>curl http://npmjs.org/install.sh | clean=yes sh </code></pre> - -<p>Or, if you want to not do the cleanup, and leave the old stuff behind, then do this:</p> - -<pre style="background:#333;color:#ccc;overflow:auto;padding:2px;"><code>curl http://npmjs.org/install.sh | clean=no sh </code></pre> - -<p>A lot of people in the node community were brave testers and helped make this release a lot better (and swifter) than it would have otherwise been. Thanks :)</p> - -<h2 id="code_freeze">Code Freeze</h2> - -<p>npm will not have any major feature enhancements or architectural changes <span style="border-bottom:1px dotted;cursor:default;" title="That is, the freeze ends no sooner than November 1, 2011">for at least 6 months</span>. There are interesting developments planned that leverage npm in some ways, but it’s time to let the client itself settle. Also, I want to focus attention on some other problems for a little while.</p> - -<p>Of course, <a href="https://github.com/isaacs/npm/issues">bug reports</a> are always welcome.</p> - -<p>See you at NodeConf!</p> diff --git a/doc/blog/npm/npm-1-0-the-new-ls.md b/doc/blog/npm/npm-1-0-the-new-ls.md deleted file mode 100644 index 9fef76c31..000000000 --- a/doc/blog/npm/npm-1-0-the-new-ls.md +++ /dev/null @@ -1,144 +0,0 @@ -title: npm 1.0: The New "ls" -author: Isaac Schlueter -date: Thu Mar 17 2011 23:22:17 GMT-0700 (PDT) -status: publish -category: npm -slug: npm-1-0-the-new-ls - -<p><em>This is the first in a series of hopefully more than 1 posts, each detailing some aspect of npm 1.0.</em></p> - -<p>In npm 0.x, the <code>ls</code> command was a combination of both searching the registry as well as reporting on what you have installed.</p> - -<p>As the registry has grown in size, this has gotten unwieldy. Also, since npm 1.0 manages dependencies differently, nesting them in <code>node_modules</code> folder and installing locally by default, there are different things that you want to view.</p> - -<p>The functionality of the <code>ls</code> command was split into two different parts. <code>search</code> is now the way to find things on the registry (and it only reports one line per package, instead of one line per version), and <code>ls</code> shows a tree view of the packages that are installed locally.</p> - -<p>Here’s an example of the output:</p> - -<pre style="background:#333;color:#ccc;overflow:auto;padding:2px;"><code>$ npm ls -npm@1.0.0 /Users/isaacs/dev-src/js/npm -├── semver@1.0.1 -├─┬ ronn@0.3.5 -│ └── opts@1.2.1 -└─┬ express@2.0.0rc3 <span style="background:#000;color:#0f0;">extraneous</span> - ├─┬ connect@1.1.0 - │ ├── qs@0.0.7 - │ └── mime@1.2.1 - ├── mime@1.2.1 - └── qs@0.0.7 -</code></pre> - -<p>This is after I’ve done <code>npm install semver ronn express</code> in the npm source directory. Since express isn’t actually a dependency of npm, it shows up with that “extraneous” marker.</p> - -<p>Let’s see what happens when we create a broken situation:</p> - -<pre style="background:#333;color:#ccc;overflow:auto;padding:2px;"><code>$ rm -rf ./node_modules/express/node_modules/connect -$ npm ls -npm@1.0.0 /Users/isaacs/dev-src/js/npm -├── semver@1.0.1 -├─┬ ronn@0.3.5 -│ └── opts@1.2.1 -└─┬ express@2.0.0rc3 <span style="background:#000;color:#0f0;">extraneous</span> - ├── <span style="background:#000;color:#f00;">UNMET DEPENDENCY</span> connect >= 1.1.0 < 2.0.0 - ├── mime@1.2.1 - └── qs@0.0.7 -</code></pre> - -<p>Tree views are great for human readability, but some times you want to pipe that stuff to another program. For that output, I took the same datastructure, but instead of building up a treeview string for each line, it spits out just the folders like this:</p> - -<pre style="background:#333;color:#ccc;overflow:auto;padding:2px;"><code>$ npm ls -p -/Users/isaacs/dev-src/js/npm -/Users/isaacs/dev-src/js/npm/node_modules/semver -/Users/isaacs/dev-src/js/npm/node_modules/ronn -/Users/isaacs/dev-src/js/npm/node_modules/ronn/node_modules/opts -/Users/isaacs/dev-src/js/npm/node_modules/express -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/connect -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/connect/node_modules/qs -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/connect/node_modules/mime -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/mime -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/qs -</code></pre> - -<p>Since you sometimes want a bigger view, I added the <code>--long</code> option to (shorthand: <code>-l</code>) to spit out more info:</p> - -<pre style="background:#333;color:#ccc;overflow:auto;padding:2px;"><code>$ npm ls -l -npm@1.0.0 -│ /Users/isaacs/dev-src/js/npm -│ A package manager for node -│ git://github.com/isaacs/npm.git -│ http://npmjs.org/ -├── semver@1.0.1 -│ ./node_modules/semver -│ The semantic version parser used by npm. -│ git://github.com/isaacs/node-semver.git -├─┬ ronn@0.3.5 -│ │ ./node_modules/ronn -│ │ markdown to roff and html converter -│ └── opts@1.2.1 -│ ./node_modules/ronn/node_modules/opts -│ Command line argument parser written in the style of commonjs. To be used with node.js -└─┬ express@2.0.0rc3 <span style="background:#000;color:#0f0;">extraneous</span> - │ ./node_modules/express - │ Sinatra inspired web development framework - ├─┬ connect@1.1.0 - │ │ ./node_modules/express/node_modules/connect - │ │ High performance middleware framework - │ │ git://github.com/senchalabs/connect.git - │ ├── qs@0.0.7 - │ │ ./node_modules/express/node_modules/connect/node_modules/qs - │ │ querystring parser - │ └── mime@1.2.1 - │ ./node_modules/express/node_modules/connect/node_modules/mime - │ A comprehensive library for mime-type mapping - ├── mime@1.2.1 - │ ./node_modules/express/node_modules/mime - │ A comprehensive library for mime-type mapping - └── qs@0.0.7 - ./node_modules/express/node_modules/qs - querystring parser - -$ npm ls -lp -/Users/isaacs/dev-src/js/npm:npm@1.0.0:::: -/Users/isaacs/dev-src/js/npm/node_modules/semver:semver@1.0.1:::: -/Users/isaacs/dev-src/js/npm/node_modules/ronn:ronn@0.3.5:::: -/Users/isaacs/dev-src/js/npm/node_modules/ronn/node_modules/opts:opts@1.2.1:::: -/Users/isaacs/dev-src/js/npm/node_modules/express:express@2.0.0rc3:EXTRANEOUS::: -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/connect:connect@1.1.0:::: -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/connect/node_modules/qs:qs@0.0.7:::: -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/connect/node_modules/mime:mime@1.2.1:::: -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/mime:mime@1.2.1:::: -/Users/isaacs/dev-src/js/npm/node_modules/express/node_modules/qs:qs@0.0.7:::: -</code></pre> - -<p>And, if you want to get at the globally-installed modules, you can use ls with the global flag:</p> - -<pre style="background:#333;color:#ccc;overflow:auto;padding:2px;"><code>$ npm ls -g -/usr/local -├─┬ A@1.2.3 -> /Users/isaacs/dev-src/js/A -│ ├── B@1.2.3 -> /Users/isaacs/dev-src/js/B -│ └─┬ npm@0.3.15 -│ └── semver@1.0.1 -├─┬ B@1.2.3 -> /Users/isaacs/dev-src/js/B -│ └── A@1.2.3 -> /Users/isaacs/dev-src/js/A -├── glob@2.0.5 -├─┬ npm@1.0.0 -> /Users/isaacs/dev-src/js/npm -│ ├── semver@1.0.1 -│ └─┬ ronn@0.3.5 -│ └── opts@1.2.1 -└── supervisor@0.1.2 -> /Users/isaacs/dev-src/js/node-supervisor - -$ npm ls -gpl -/usr/local::::: -/usr/local/lib/node_modules/A:A@1.2.3::::/Users/isaacs/dev-src/js/A -/usr/local/lib/node_modules/A/node_modules/npm:npm@0.3.15::::/Users/isaacs/dev-src/js/A/node_modules/npm -/usr/local/lib/node_modules/A/node_modules/npm/node_modules/semver:semver@1.0.1::::/Users/isaacs/dev-src/js/A/node_modules/npm/node_modules/semver -/usr/local/lib/node_modules/B:B@1.2.3::::/Users/isaacs/dev-src/js/B -/usr/local/lib/node_modules/glob:glob@2.0.5:::: -/usr/local/lib/node_modules/npm:npm@1.0.0::::/Users/isaacs/dev-src/js/npm -/usr/local/lib/node_modules/npm/node_modules/semver:semver@1.0.1::::/Users/isaacs/dev-src/js/npm/node_modules/semver -/usr/local/lib/node_modules/npm/node_modules/ronn:ronn@0.3.5::::/Users/isaacs/dev-src/js/npm/node_modules/ronn -/usr/local/lib/node_modules/npm/node_modules/ronn/node_modules/opts:opts@1.2.1::::/Users/isaacs/dev-src/js/npm/node_modules/ronn/node_modules/opts -/usr/local/lib/node_modules/supervisor:supervisor@0.1.2::::/Users/isaacs/dev-src/js/node-supervisor -</code></pre> - -<p>Those <code>-></code> flags are indications that the package is link-installed, which will be covered in the next installment.</p> diff --git a/doc/blog/npm/peer-dependencies.md b/doc/blog/npm/peer-dependencies.md deleted file mode 100644 index 2baab8799..000000000 --- a/doc/blog/npm/peer-dependencies.md +++ /dev/null @@ -1,134 +0,0 @@ -category: npm -title: Peer Dependencies -date: 2013-02-08T00:00:00Z -author: Domenic Denicola -slug: peer-dependencies - -<i>Reposted from [Domenic's -blog](http://domenic.me/2013/02/08/peer-dependencies/) with -permission. Thanks!</i> - -npm is awesome as a package manager. In particular, it handles sub-dependencies very well: if my package depends on -`request` version 2 and `some-other-library`, but `some-other-library` depends on `request` version 1, the resulting -dependency graph looks like: - -```text -├── request@2.12.0 -└─┬ some-other-library@1.2.3 - └── request@1.9.9 -``` - -This is, generally, great: now `some-other-library` has its own copy of `request` v1 that it can use, while not -interfering with my package's v2 copy. Everyone's code works! - -## The Problem: Plugins - -There's one use case where this falls down, however: *plugins*. A plugin package is meant to be used with another "host" -package, even though it does not always directly *use* the host package. There are many examples of this pattern in the -Node.js package ecosystem already: - -- Grunt [plugins](http://gruntjs.com/#plugins-all) -- Chai [plugins](http://chaijs.com/plugins) -- LevelUP [plugins](https://github.com/rvagg/node-levelup/wiki/Modules) -- Express [middleware](http://expressjs.com/api.html#middleware) -- Winston [transports](https://github.com/flatiron/winston/blob/master/docs/transports.md) - -Even if you're not familiar with any of those use cases, surely you recall "jQuery plugins" from back when you were a -client-side developer: little `<script>`s you would drop into your page that would attach things to `jQuery.prototype` -for your later convenience. - -In essence, plugins are designed to be used with host packages. But more importantly, they're designed to be used with -*particular versions* of host packages. For example, versions 1.x and 2.x of my `chai-as-promised` plugin work with -`chai` version 0.5, whereas versions 3.x work with `chai` 1.x. Or, in the faster-paced and less-semver–friendly world of -Grunt plugins, version 0.3.1 of `grunt-contrib-stylus` works with `grunt` 0.4.0rc4, but breaks when used with `grunt` -0.4.0rc5 due to removed APIs. - -As a package manager, a large part of npm's job when installing your dependencies is managing their versions. But its -usual model, with a `"dependencies"` hash in `package.json`, clearly falls down for plugins. Most plugins never actually -depend on their host package, i.e. grunt plugins never do `require("grunt")`, so even if plugins did put down their host -package as a dependency, the downloaded copy would never be used. So we'd be back to square one, with your application -possibly plugging in the plugin to a host package that it's incompatible with. - -Even for plugins that do have such direct dependencies, probably due to the host package supplying utility APIs, -specifying the dependency in the plugin's `package.json` would result in a dependency tree with multiple copies of the -host package—not what you want. For example, let's pretend that `winston-mail` 0.2.3 specified `"winston": "0.5.x"` in -its `"dependencies"` hash, since that's the latest version it was tested against. As an app developer, you want the -latest and greatest stuff, so you look up the latest versions of `winston` and of `winston-mail`, putting them in your -`package.json` as - -```json -{ - "dependencies": { - "winston": "0.6.2", - "winston-mail": "0.2.3" - } -} -``` - -But now, running `npm install` results in the unexpected dependency graph of - -```text -├── winston@0.6.2 -└─┬ winston-mail@0.2.3 - └── winston@0.5.11 -``` - -I'll leave the subtle failures that come from the plugin using a different Winston API than the main application to -your imagination. - -## The Solution: Peer Dependencies - -What we need is a way of expressing these "dependencies" between plugins and their host package. Some way of saying, "I -only work when plugged in to version 1.2.x of my host package, so if you install me, be sure that it's alongside a -compatible host." We call this relationship a *peer dependency*. - -The peer dependency idea has been kicked around for [literally](https://github.com/isaacs/npm/issues/930) -[years](https://github.com/isaacs/npm/issues/1400). After -[volunteering](https://github.com/isaacs/npm/issues/1400#issuecomment-5932027) to get this done "over the weekend" nine -months ago, I finally found a free weekend, and now peer dependencies are in npm! - -Specifically, they were introduced in a rudimentary form in npm 1.2.0, and refined over the next few releases into -something I'm actually happy with. Today Isaac packaged up npm 1.2.10 into -[Node.js 0.8.19](http://blog.nodejs.org/2013/02/06/node-v0-8-19-stable/), so if you've installed the latest version of -Node, you should be ready to use peer dependencies! - -As proof, I present you the results of trying to install [`jitsu`](https://npmjs.org/package/jitsu) 0.11.6 with npm -1.2.10: - -```text -npm ERR! peerinvalid The package flatiron does not satisfy its siblings' peerDependencies requirements! -npm ERR! peerinvalid Peer flatiron-cli-config@0.1.3 wants flatiron@~0.1.9 -npm ERR! peerinvalid Peer flatiron-cli-users@0.1.4 wants flatiron@~0.3.0 -``` - -As you can see, `jitsu` depends on two Flatiron-related packages, which themselves peer-depend on conflicting versions -of Flatiron. Good thing npm was around to help us figure out this conflict, so it could be fixed in version 0.11.7! - -## Using Peer Dependencies - -Peer dependencies are pretty simple to use. When writing a plugin, figure out what version of the host package you -peer-depend on, and add it to your `package.json`: - -```json -{ - "name": "chai-as-promised", - "peerDependencies": { - "chai": "1.x" - } -} -``` - -Now, when installing `chai-as-promised`, the `chai` package will come along with it. And if later you try to install -another Chai plugin that only works with 0.x versions of Chai, you'll get an error. Nice! - -One piece of advice: peer dependency requirements, unlike those for regular dependencies, *should be lenient*. You -should not lock your peer dependencies down to specific patch versions. It would be really annoying if one Chai plugin -peer-depended on Chai 1.4.1, while another depended on Chai 1.5.0, simply because the authors were lazy and didn't spend -the time figuring out the actual minimum version of Chai they are compatible with. - -The best way to determine what your peer dependency requirements should be is to actually follow -[semver](http://semver.org/). Assume that only changes in the host package's major version will break your plugin. Thus, -if you've worked with every 1.x version of the host package, use `"~1.0"` or `"1.x"` to express this. If you depend on -features introduced in 1.5.2, use `">= 1.5.2 < 2"`. - -Now go forth, and peer depend! diff --git a/doc/blog/release/0.6.21.md b/doc/blog/release/0.6.21.md deleted file mode 100644 index 6257b680c..000000000 --- a/doc/blog/release/0.6.21.md +++ /dev/null @@ -1,43 +0,0 @@ -version: 0.6.21 -title: Version 0.6.21 (maintenance) -category: release -slug: node-v0-6-21-maintenance -date: Fri Aug 03 2012 14:44:02 GMT-0700 (PDT) - -2012.08.03 Version 0.6.21 (maintenance) - -* sunos: work around OS bug to prevent fs.watch() from spinning (Bryan Cantrill) - -* net: make pause/resume work with connecting sockets (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.6.21/node-v0.6.21.tar.gz - -Windows Installer: http://nodejs.org/dist/v0.6.21/node-v0.6.21.msi - -Windows x64 Files: http://nodejs.org/dist/v0.6.21/x64/ - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.6.21/node-v0.6.21.pkg - -Other release files: http://nodejs.org/dist/v0.6.21/ - -Website: http://nodejs.org/docs/v0.6.21/ - -Documentation: http://nodejs.org/docs/v0.6.21/api/ - -Shasums: - -``` -04f58b0da23c3db291d84ac55a924332ad83c427 node-v0.6.21.pkg -31f564bf34c64b07cae3b9a88a87b4a08bab4dc5 node-v0.6.21.tar.gz -1e3184fe2cfe7140a88b5dcc9c2ec7d32f1f5af5 node.exe -b8887a056152622c08ee10f5867bd27910260477 node.exp -c6468ffe2e145e7db1bb3e2d66adb9f5d50271ad node.lib -2a896bcb7c83f2fa710650116580daf4ac5e6c4c node.msi -207441e8c3dc184c478367b775dc7ece1ee36501 node.pdb -715ad9946db5f97c54a53bdea6bbe9ba69f2f299 x64/node.exe -2fa2c2d82fedeec1ed8be5d908b790f473d4a7c2 x64/node.exp -b403cb71d4cf21e97a78d446403cedc9795bcf69 x64/node.lib -ef47520dbc6a1a68ec37d290c421031cfd670048 x64/node.msi -fb15e3991c420f3ae67ade92b11b07bb9112124a x64/node.pdb -``` diff --git a/doc/blog/release/node-v0-4-10.md b/doc/blog/release/node-v0-4-10.md deleted file mode 100644 index 5af354ee4..000000000 --- a/doc/blog/release/node-v0-4-10.md +++ /dev/null @@ -1,25 +0,0 @@ -version: 0.4.10 -title: Node v0.4.10 -author: ryandahl -date: Wed Jul 20 2011 07:36:38 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-10 - -2011.07.19, Version 0.4.10 (stable) -<ul><li>#394 Fix Buffer drops last null character in UTF-8 -<li>#829 Backport r8577 from V8 (Ben Noordhuis) -<li>#877 Don't wait for HTTP Agent socket pool to establish connections. -<li>#915 Find kqueue on FreeBSD correctly (Brett Kiefer) -<li>#1085 HTTP: Fix race in abort/dispatch code (Stefan Rusu) -<li>#1274 debugger improvement (Yoshihiro Kikuchi) -<li>#1291 Properly respond to HEAD during end(body) hot path (Reid Burke) -<li>#1304 TLS: Fix race in abort/connection code (Stefan Rusu) -<li>#1360 Allow _ in url hostnames. -<li>Revert 37d529f8 - unbreaks debugger command parsing. -<li>Bring back global execScript -<li>Doc improvements</ul> - -Download: <a href="http://nodejs.org/dist/node-v0.4.10.tar.gz">http://nodejs.org/dist/node-v0.4.10.tar.gz</a> -Website: <a href="http://nodejs.org/docs/v0.4.10">http://nodejs.org/docs/v0.4.10</a> -Documentation: <a href="http://nodejs.org/docs/v0.4.10/api">http://nodejs.org/docs/v0.4.10/api</a> diff --git a/doc/blog/release/node-v0-4-11.md b/doc/blog/release/node-v0-4-11.md deleted file mode 100644 index 0bcbc37f5..000000000 --- a/doc/blog/release/node-v0-4-11.md +++ /dev/null @@ -1,39 +0,0 @@ -version: 0.4.11 -title: Node v0.4.11 -author: ryandahl -date: Thu Aug 18 2011 01:44:42 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-11 - -2011.08.17, Version 0.4.11 (stable) -<ul><li><a href="http://github.com/joyent/node/issues/738">#738</a> Fix crypto encryption/decryption with Base64. (SAWADA Tadashi) - -<li><a href="http://github.com/joyent/node/issues/1202">#1202</a> net.createConnection defer DNS lookup error events to next tick (Ben Noordhuis) - -<li><a href="http://github.com/joyent/node/issues/1374">#1374</a> fix setting ServerResponse.statusCode in writeHead (Trent Mick) - -<li><a href="http://github.com/joyent/node/issues/1417">#1417</a> Fix http.ClientRequest crashes if end() was called twice - -<li><a href="http://github.com/joyent/node/issues/1497">#1497</a> querystring: Replace 'in' test with 'hasOwnProperty' (isaacs) - -<li><a href="http://github.com/joyent/node/issues/1546">#1546</a> http perf improvement - -<li>fix memleak in libeio (Tom Hughes) - -<li>cmake improvements (Tom Hughes) - -<li>node_net.cc: fix incorrect sizeof() (Tom Hughes) - -<li>Windows/cygwin: no more GetConsoleTitleW errors on XP (Bert Belder) - -<li>Doc improvements (koichik, Logan Smyth, Ben Noordhuis, Arnout Kazemier)</ul> - - - - -Download: <a href="http://nodejs.org/dist/node-v0.4.11.tar.gz">http://nodejs.org/dist/node-v0.4.11.tar.gz</a> - -Website: <a href="http://nodejs.org/docs/v0.4.11/">http://nodejs.org/docs/v0.4.11/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.4.11/api/">http://nodejs.org/docs/v0.4.11/api/</a> diff --git a/doc/blog/release/node-v0-4-12.md b/doc/blog/release/node-v0-4-12.md deleted file mode 100644 index 8eb53d1fe..000000000 --- a/doc/blog/release/node-v0-4-12.md +++ /dev/null @@ -1,29 +0,0 @@ -version: 0.4.12 -title: Node v0.4.12 -author: ryandahl -date: Thu Sep 15 2011 17:32:07 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-12 - -2011.09.15, Version 0.4.12 (stable) - -<ul> -<li>Improve docs -<li>#1563 overflow in ChildProcess custom_fd. -<li>#1569, parse error on multi-line HTTP headers. (Ben Noordhuis) -<li>#1586 net: Socket write encoding case sensitivity (koichik) -<li>#1610 Remove DigiNotar CA from trusted list (isaacs) -<li>#1624 buffer: Avoid overrun with 'binary' encoding. (koichik) -<li>#1633 buffer: write() should always set _charsWritten. (koichik) -<li>#1707 hasOwnProperty usage security hole in querystring (isaacs) -<li>#1719 Drain OpenSSL error queue -<li>Fix error reporting in net.Server.listen</ul> - - - -Download: <a href="http://nodejs.org/dist/node-v0.4.12.tar.gz">http://nodejs.org/dist/node-v0.4.12.tar.gz</a> - -Website: <a href="http://nodejs.org/docs/v0.4.12/">http://nodejs.org/docs/v0.4.12/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.4.12/api/">http://nodejs.org/docs/v0.4.12/api/</a> diff --git a/doc/blog/release/node-v0-4-3.md b/doc/blog/release/node-v0-4-3.md deleted file mode 100644 index 10a3a5b29..000000000 --- a/doc/blog/release/node-v0-4-3.md +++ /dev/null @@ -1,33 +0,0 @@ -version: 0.4.3 -title: Node v0.4.3 -author: ryandahl -date: Fri Mar 18 2011 22:17:59 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-3 - -2011.03.18, Version 0.4.3 (stable) -<ul> -<li> Don't decrease server connection counter again if destroy() is called more than once GH-431 (Andreas Reich, Anders Conbere) -<li> Documentation improvements (koichik) -<li> Fix bug with setMaxListeners GH-682 -<li> Start up memory footprint improvement. (Tom Hughes) -<li> Solaris improvements. -<li> Buffer::Length(Buffer*) should not invoke itself recursively GH-759 (Ben Noordhuis) -<li> TLS: Advertise support for client certs GH-774 (Theo Schlossnagle) -<li> HTTP Agent bugs: GH-787, GH-784, GH-803. -<li> Don't call GetMemoryUsage every 5 seconds. -<li> Upgrade V8 to 3.1.8.3 -</ul> - - - -Download: http://nodejs.org/dist/node-v0.4.3.tar.gz - -Website: http://nodejs.org/docs/v0.4.3/ - -Documentation: http://nodejs.org/docs/v0.4.3/api - -<a href="https://groups.google.com/d/topic/nodejs/JrYQCQtf6lM/discussion">Announcement</a> - -<a href="https://github.com/joyent/node/tree/v0.4.3">commit</a> diff --git a/doc/blog/release/node-v0-4-4.md b/doc/blog/release/node-v0-4-4.md deleted file mode 100644 index 417d73c54..000000000 --- a/doc/blog/release/node-v0-4-4.md +++ /dev/null @@ -1,27 +0,0 @@ -version: 0.4.4 -title: Node v0.4.4 -author: ryandahl -date: Sat Mar 26 2011 08:58:45 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-4 - -2011.03.26, Version 0.4.4 (stable) -<ul> -<li> CryptoStream.end shouldn't throw if not writable GH-820 -<li> Drop out if connection destroyed before connect() GH-819 -<li> expose https.Agent -<li> Correctly setsid in tty.open GH-815 -<li> Bug fix for failed buffer construction -<li> Added support for removing .once listeners (GH-806) -<li> Upgrade V8 to 3.1.8.5</ul> - - - -Download: <a href="http://nodejs.org/dist/node-v0.4.4.tar.gz">http://nodejs.org/dist/node-v0.4.4.tar.gz</a> - -Website: <a href="http://nodejs.org/docs/v0.4.4/">http://nodejs.org/docs/v0.4.4</a> - -Documentation: <a href="http://nodejs.org/docs/v0.4.4/api/">http://nodejs.org/docs/v0.4.4/api</a> - -<a href="https://groups.google.com/d/topic/nodejs/LlQCYhDEPAc/discussion">announcement</a> diff --git a/doc/blog/release/node-v0-4-5.md b/doc/blog/release/node-v0-4-5.md deleted file mode 100644 index 6935de062..000000000 --- a/doc/blog/release/node-v0-4-5.md +++ /dev/null @@ -1,29 +0,0 @@ -version: 0.4.5 -title: node v0.4.5 -author: ryandahl -date: Sat Apr 02 2011 02:04:58 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-5 - -2011.04.01, Version 0.4.5 (stable) -<ul> -<li> Fix listener leak in stream.pipe() (Mikeal Rogers) -<li> Retain buffers in fs.read/write() GH-814 (Jorge Chamorro Bieling) -<li> TLS performance improvements -<li> SlowBuffer.prototype.slice bug GH-843 -<li> process.stderr.write should return true -<li> Immediate pause/resume race condition GH-535 (isaacs) -<li> Set default host header properly GH-721 (isaacs) -<li> Upgrade V8 to 3.1.8.8</ul> - - - -Download: <a href="http://nodejs.org/dist/node-v0.4.5.tar.gz">http://nodejs.org/dist/node-v0.4.5.tar.gz</a> - -Website: <a href="http://nodejs.org/docs/v0.4.5">http://nodejs.org/docs/v0.4.5</a> - -Documentation: <a href="http://nodejs.org/docs/v0.4.5/api">http://nodejs.org/docs/v0.4.5/api</a> - - -<a href="https://groups.google.com/d/topic/nodejs/aOC7SRLJhQY/discussion">announcement</a> diff --git a/doc/blog/release/node-v0-4-6.md b/doc/blog/release/node-v0-4-6.md deleted file mode 100644 index 12d007283..000000000 --- a/doc/blog/release/node-v0-4-6.md +++ /dev/null @@ -1,27 +0,0 @@ -version: 0.4.6 -title: Node v0.4.6 -author: ryandahl -date: Thu Apr 14 2011 05:00:30 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-6 - -2011.04.13, Version 0.4.6 (stable) -<ul><li> Don't error on ENOTCONN from shutdown() #670 -<li> Auto completion of built-in debugger suggests prefix match rather than partial match. (koichik) -<li> circular reference in vm modules. #822 (Jakub Lekstan) -<li> http response.readable should be false after 'end' #867 (Abe Fettig) -<li> Implement os.cpus() and os.uptime() on Solaris (Scott McWhirter) -<li> fs.ReadStream: Allow omission of end option for range reads #801 (Felix Geisendörfer) -<li> Buffer.write() with UCS-2 should not be write partial char #916 (koichik) -<Li> Pass secureProtocol through on tls.Server creation (Theo Schlossnagle) -<li> TLS use RC4-SHA by default -<li> Don't strangely drop out of event loop on HTTPS client uploads #892 -<li> Doc improvements -<li> Upgrade v8 to 3.1.8.10</ul> - -Download: <a href="http://nodejs.org/dist/node-v0.4.6.tar.gz">http://nodejs.org/dist/node-v0.4.6.tar.gz</a> - -Website: <a href="http://nodejs.org/docs/v0.4.6/">http://nodejs.org/docs/v0.4.6/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.4.6/api/">http://nodejs.org/docs/v0.4.6/api/</a> diff --git a/doc/blog/release/node-v0-4-7.md b/doc/blog/release/node-v0-4-7.md deleted file mode 100644 index 44e2715dc..000000000 --- a/doc/blog/release/node-v0-4-7.md +++ /dev/null @@ -1,23 +0,0 @@ -version: 0.4.7 -title: Node v0.4.7 -author: ryandahl -date: Sat Apr 23 2011 00:47:55 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-7 - -2011.04.22, Version 0.4.7 (stable) -<ul><li> Don't emit error on ECONNRESET from read() #670 -<li> Fix: Multiple pipes to the same stream were broken #929 (Felix Geisendörfer) -<li> URL parsing/formatting corrections #954 (isaacs) -<li> make it possible to do repl.start('', stream) (Wade Simmons) -<li> Add os.loadavg for SunOS (Robert Mustacchi) -<li> Fix timeouts with floating point numbers #897 (Jorge Chamorro Bieling) -<li> Improve docs.</ul> - - -Download: <a href="http://nodejs.org/dist/node-v0.4.7.tar.gz">http://nodejs.org/dist/node-v0.4.7.tar.gz</a> - -Website: <a href="http://nodejs.org/docs/v0.4.7/">http://nodejs.org/docs/v0.4.7/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.4.7/api">http://nodejs.org/docs/v0.4.7/api</a> diff --git a/doc/blog/release/node-v0-4-8.md b/doc/blog/release/node-v0-4-8.md deleted file mode 100644 index a25aedf60..000000000 --- a/doc/blog/release/node-v0-4-8.md +++ /dev/null @@ -1,55 +0,0 @@ -version: 0.4.8 -title: Node v0.4.8 -author: ryandahl -date: Sat May 21 2011 07:06:00 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-8 - -2011.05.20, Version 0.4.8 (stable) - -* #974 Properly report traceless errors (isaacs) - -* #983 Better JSON.parse error detection in REPL (isaacs) - -* #836 Agent socket errors bubble up to req only if req exists - -* #1041 Fix event listener leak check timing (koichik) - -* #1038 Fix dns.resolve() with 'PTR' throws Error: Unknown type "PTR" - (koichik) - -* #1073 Share SSL context between server connections (Fedor Indutny) - -* Disable compression with OpenSSL. Improves memory perf. - -* Implement os.totalmem() and os.freemem() for SunOS (Alexandre Marangone) - -* Fix a special characters in URL regression (isaacs) - -* Fix idle timeouts in HTTPS (Felix Geisendörfer) - -* SlowBuffer.write() with 'ucs2' throws ReferenceError. (koichik) - -* http.ServerRequest 'close' sometimes gets an error argument - (Felix Geisendörfer) - -* Doc improvements - -* cleartextstream.destroy() should close(2) the socket. Previously was being - mapped to a shutdown(2) syscall. - -* No longer compile out asserts and debug statements in normal build. - -* Debugger improvements. - -* Upgrade V8 to 3.1.8.16. - - - - -Website: <a href="http://nodejs.org/docs/v0.4.8/">http://nodejs.org/docs/v0.4.8/</a> - -Download: <a href="http://nodejs.org/dist/node-v0.4.8.tar.gz">http://nodejs.org/dist/node-v0.4.8.tar.gz</a> - -Documentation: <a href="http://nodejs.org/docs/v0.4.8/api/">http://nodejs.org/docs/v0.4.8/api/</a> diff --git a/doc/blog/release/node-v0-4-9.md b/doc/blog/release/node-v0-4-9.md deleted file mode 100644 index 8b71bd962..000000000 --- a/doc/blog/release/node-v0-4-9.md +++ /dev/null @@ -1,30 +0,0 @@ -version: 0.4.9 -title: Node v0.4.9 -author: ryandahl -date: Wed Jun 29 2011 11:41:05 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-4-9 - -2011.06.29, Version 0.4.9 (stable)<ul> -<li> Improve documentation -<li> #1095 error handling bug in stream.pipe() (Felix Geisendörfer) -<li> #1097 Fix a few leaks in node_crypto.cc (Ben Noordhuis) -<li> #562 #1078 Parse file:// urls properly (Ryan Petrello) -<li> #880 Option to disable SSLv2 (Jérémy Lal) -<li> #1087 Disabling SSL compression disabled with early OpenSSLs. -<li> #1144 debugger: don't allow users to input non-valid commands (Siddharth Mahendraker) -<li> Perf improvement for util.inherits -<li> #1166 Support for signature verification with RSA/DSA public keys (Mark Cavage) -<li> #1177 Remove node_modules lookup optimization to better support nested project structures (Mathias Buus) -<li> #1203 Add missing scope.Close to fs.sendfileSync -<li> #1187 Support multiple 'link' headers -<li> #1196 Fix -e/--eval can't load module from node_modules (Koichi Kobayashi) -<li> Upgrade V8 to 3.1.8.25, upgrade http-parser.</ul> - - -Download: <a href="http://nodejs.org/dist/node-v0.4.9.tar.gz">http://nodejs.org/dist/node-v0.4.9.tar.gz</a> - -Website: <a href="http://nodejs.org/docs/v0.4.9">http://nodejs.org/docs/v0.4.9</a> - -Documentation: <a href="http://nodejs.org/docs/v0.4.9/api">http://nodejs.org/docs/v0.4.9/api</a> diff --git a/doc/blog/release/node-v0-5-0-unstable.md b/doc/blog/release/node-v0-5-0-unstable.md deleted file mode 100644 index 68ff2d117..000000000 --- a/doc/blog/release/node-v0-5-0-unstable.md +++ /dev/null @@ -1,39 +0,0 @@ -version: 0.5.0 -title: Node v0.5.0 (Unstable) -author: ryandahl -date: Wed Jul 06 2011 02:23:17 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-0-unstable - -2011.07.05, Version 0.5.0 (unstable) - -<li> New non-default libuv backend to support IOCP on Windows. Use <code>--use-uv</code> to enable. -<li> deprecate http.cat -<li> docs improved. -<li> add child_process.fork -<li> add fs.utimes() and fs.futimes() support (Ben Noordhuis) -<li> add process.uptime() (Tom Huges) -<li> add path.relative (Tony Huang) -<li> add os.getNetworkInterfaces() -<li> add remoteAddress and remotePort for client TCP connections (Brian White) -<li> add secureOptions flag, setting ciphers, SSL_OP_CRYPTOPRO_TLSEXT_BUG to TLS (Theo Schlossnagle) -<li> add process.arch (Nathan Rajlich) -<li> add reading/writing of floats and doubles from/to buffers (Brian White) -<li> Allow script to be read from stdin -<li> #477 add Buffer::fill method to do memset (Konstantin Käfer) -<li> #573 Diffie-Hellman support to crypto module (Håvard Stranden) -<li> #695 add 'hex' encoding to buffer (isaacs) -<li> #851 Update how REPLServer uses contexts (Ben Weaver) -<li> #853 add fs.lchow, fs.lchmod, fs.fchmod, fs.fchown (isaacs) -<li> #889 Allow to remove all EventEmitter listeners at once (Felix Geisendörfer) -<li> #926 OpenSSL NPN support (Fedor Indutny) -<li> #955 Change ^C handling in REPL (isaacs) -<li> #979 add support for Unix Domain Sockets to HTTP (Mark Cavage) -<li> #1173 #1170 add AMD, asynchronous module definition (isaacs) -<li> DTrace probes: support X-Forwarded-For (Dave Pacheco) </ul> -Download: <a href="http://nodejs.org/dist/node-v0.5.0.tar.gz">http://nodejs.org/dist/node-v0.5.0.tar.gz</a> - -Website: <a href="http://nodejs.org/docs/v0.5.0/">http://nodejs.org/docs/v0.5.0/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.5.0/api/">http://nodejs.org/docs/v0.5.0/api/</a> diff --git a/doc/blog/release/node-v0-5-1.md b/doc/blog/release/node-v0-5-1.md deleted file mode 100644 index 8137e8c88..000000000 --- a/doc/blog/release/node-v0-5-1.md +++ /dev/null @@ -1,30 +0,0 @@ -version: 0.5.1 -title: Node v0.5.1 -author: ryandahl -date: Thu Jul 14 2011 23:48:08 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-1 - -2011.07.14, Version 0.5.1 (unstable) -<ul><li> #1233 Fix os.totalmem on FreeBSD amd64 (Artem Zaytsev) -<li> #1149 IDNA and Punycode support in url.parse (Jeremy Selier, Ben Noordhuis, isaacs) -<li> Export $CC and $CXX to uv and V8's build systems -<li> Include pthread-win32 static libraries in build (Igor Zinkovsky) -<li> #1199, #1094 Fix fs can't handle large file on 64bit platform (koichik) -<li> #1281 Make require a public member of module (isaacs) -<li> #1303 Stream.pipe returns the destination (Elijah Insua) -<li> #1229 Addons should not -DEV_MULTIPLICITY=0 (Brian White) -<li> libuv backend improvements -<li> Upgrade V8 to 3.4.10</ul> - - - - -Download: <a href="http://nodejs.org/dist/v0.5.1/node-v0.5.1.tar.gz">http://nodejs.org/dist/v0.5.1/node-v0.5.1.tar.gz</a> - -Windows Build: <a href="http://nodejs.org/dist/v0.5.1/node.exe">http://nodejs.org/dist/v0.5.1/node.exe</a> - -Documentation: <a href="http://nodejs.org/dist/v0.5.1/docs/api/">http://nodejs.org/dist/v0.5.1/docs/api/</a> - -Website: <a href="http://nodejs.org/dist/v0.5.1/docs">http://nodejs.org/dist/v0.5.1/docs</a> diff --git a/doc/blog/release/node-v0-5-10.md b/doc/blog/release/node-v0-5-10.md deleted file mode 100644 index 305813ecf..000000000 --- a/doc/blog/release/node-v0-5-10.md +++ /dev/null @@ -1,41 +0,0 @@ -version: 0.5.10 -title: Node v0.5.10 -author: ryandahl -date: Fri Oct 21 2011 19:12:31 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-10 - -2011.10.21, Version 0.5.10 (unstable) -<ul><li>Remove cmake build system, support for Cygwin, legacy code base, process.ENV, process.ARGV, process.memoryUsage().vsize, os.openOSHandle</li> -<li>Documentation improvments (Igor Zinkovsky, Bert Belder, Ilya Dmitrichenko, koichik, Maciej Małecki, Guglielmo Ferri, isaacs)</li> -<li>Performance improvements (Daniel Ennis, Bert Belder, Ben Noordhuis) </li> -<li>Long process.title support (Ben Noordhuis)</li> -<li>net: register net.Server callback only once (Simen Brekken)</li> -<li>net: fix connect queue bugs (Ben Noordhuis)</li> -<li>debugger: fix backtrace err handling (Fedor Indutny)</li> -<li>Use getaddrinfo instead of c-ares for dns.lookup</li> -<li>Emit 'end' from crypto streams on close</li> -<li>repl: print out `undefined` (Nathan Rajlich)</li> -<li>#1902 buffer: use NO_NULL_TERMINATION flag (koichik)</li> -<li>#1907 http: Added support for HTTP PATCH verb (Thomas Parslow)</li> -<li>#1644 add GetCPUInfo on windows (Karl Skomski)</li> -<li>#1484, #1834, #1482, #771 Don't use a separate context for the repl. (isaacs)</li> -<li>#1882 zlib Update 'availOutBefore' value, and test (isaacs)</li> -<li>#1888 child_process.fork: don't modify args (koichik)</li> -<li>#1516 tls: requestCert unusable with Firefox and Chrome (koichik)</li> -<li>#1467 tls: The TLS API is inconsistent with the TCP API (koichik)</li> -<li>#1894 net: fix error handling in listen() (koichik)</li> -<li>#1860 console.error now goes through uv_tty_t</li> -<li>Upgrade V8 to 3.7.0</li> -<li>Upgrade GYP to r1081</li></ul> - - - -Download: <a href="http://nodejs.org/dist/v0.5.10/node-v0.5.10.tar.gz">http://nodejs.org/dist/v0.5.10/node-v0.5.10.tar.gz</a> - -Windows Executable: <a href="http://nodejs.org/dist/v0.5.10/node.exe">http://nodejs.org/dist/v0.5.10/node.exe</a> - -Website: <a href="http://nodejs.org/docs/v0.5.10/">http://nodejs.org/docs/v0.5.10/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.5.10/api/">http://nodejs.org/docs/v0.5.10/api/</a> diff --git a/doc/blog/release/node-v0-5-2.md b/doc/blog/release/node-v0-5-2.md deleted file mode 100644 index e87fda36f..000000000 --- a/doc/blog/release/node-v0-5-2.md +++ /dev/null @@ -1,27 +0,0 @@ -version: 0.5.2 -title: Node v0.5.2 -author: ryandahl -date: Fri Jul 22 2011 11:40:22 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-2 - -2011.07.22, Version 0.5.2 (unstable) -<ul><li>libuv improvements; named pipe support -<li>#1242 check for SSL_COMP_get_compression_methods() (Ben Noordhuis) -<li>#1348 remove require.paths (isaacs) -<li>#1349 Delimit NODE_PATH with ; on Windows (isaacs) -<li>#1335 Remove EventEmitter from C++ -<li>#1357 Load json files with require() (isaacs) -<li>#1374 fix setting ServerResponse.statusCode in writeHead (Trent Mick) -<li>Fixed: GC was being run too often. -<li>Upgrade V8 to 3.4.14 -<li>doc improvements</ul> - -Download: <a href="http://nodejs.org/dist/v0.5.2/node-v0.5.2.tar.gz">http://nodejs.org/dist/v0.5.2/node-v0.5.2.tar.gz</a> - -Windows Executable: <a href="http://nodejs.org/dist/v0.5.2/node.exe">http://nodejs.org/dist/v0.5.2/node.exe</a> - -Website: <a href="http://nodejs.org/dist/v0.5.2/docs/">http://nodejs.org/dist/v0.5.2/docs/</a> - -Documentation: <a href="http://nodejs.org/dist/v0.5.2/docs/api">http://nodejs.org/dist/v0.5.2/docs/api</a> diff --git a/doc/blog/release/node-v0-5-3.md b/doc/blog/release/node-v0-5-3.md deleted file mode 100644 index 0b9e7b83b..000000000 --- a/doc/blog/release/node-v0-5-3.md +++ /dev/null @@ -1,53 +0,0 @@ -version: 0.5.3 -title: Node v0.5.3 -author: ryandahl -date: Tue Aug 02 2011 08:03:06 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-3 - -2011.08.01, Version 0.5.3 (unstable) - -<ul><li>Fix crypto encryption/decryption with Base64. (SAWADA Tadashi) - -<li>#243 Add an optional length argument to Buffer.write() (koichik) - -<li>#657 convert nonbuffer data to string in fs.writeFile/Sync (Daniel Pihlström) - -<li>Add process.features, remove process.useUV (Ben Noordhuis) - -<li>#324 Fix crypto hmac to accept binary keys + add test cases from rfc 2202 and 4231 (Stefan Bühler) - -<li>Add Socket::bytesRead, Socket::bytesWritten (Alexander Uvarov) - -<li>#572 Don't print result of --eval in CLI (Ben Noordhuis) - -<li>#1223 Fix http.ClientRequest crashes if end() was called twice (koichik) - -<li>#1383 Emit 'close' after all connections have closed (Felix Geisendörfer) - -<li>Add sprintf-like util.format() function (Ben Noordhuis) - -<li>Add support for TLS SNI (Fedor Indutny) - -<li>New http agent implementation. Off by default the command line flag <code>--use-http2</code> will enable it. <code>make test-http2</code> will run the tests for the new implementation. (Mikeal Rogers) - -<li>Revert AMD compatibility. (isaacs) - -<li>Windows: improvements, child_process support. - -<li>Remove pkg-config file. - -<li>Fix startup time regressions. - -<li>doc improvements</ul> - - - -Download: <a href="http://nodejs.org/dist/v0.5.3/node-v0.5.3.tar.gz">http://nodejs.org/dist/v0.5.3/node-v0.5.3.tar.gz</a> - -Windows Executable: <a href="http://nodejs.org/dist/v0.5.3/node.exe">http://nodejs.org/dist/v0.5.3/node.exe</a> - -Website: <a href="http://nodejs.org/dist/v0.5.3/docs">http://nodejs.org/dist/v0.5.3/docs</a> - -Documentation: <a href="http://nodejs.org/dist/v0.5.3/docs/api">http://nodejs.org/dist/v0.5.3/docs/api</a> diff --git a/doc/blog/release/node-v0-5-4.md b/doc/blog/release/node-v0-5-4.md deleted file mode 100644 index 9f5f4e28a..000000000 --- a/doc/blog/release/node-v0-5-4.md +++ /dev/null @@ -1,36 +0,0 @@ -version: 0.5.4 -title: Node v0.5.4 -author: ryandahl -date: Fri Aug 12 2011 08:38:26 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-4 - -2011.08.12, Version 0.5.4 (unstable) - -<ul><li>libuv/Windows compatibility improvements - -<li>Build on Microsoft Visual Studio via GYP. Use generate-projects.bat in the to build sln files. (Peter Bright, Igor Zinkovsky) - -<li>Make Mikeal's HTTP agent client the default. Use old HTTP client with <code>--use-http1</code> - -<li>Fixes https host header default port handling. (Mikeal Rogers) - -<li>#1440 strip byte order marker when loading *.js and *.json files (Ben Noordhuis) - -<li>#1434 Improve util.format() compatibility with browser. (Koichi Kobayashi) - -<li>Provide unchecked uint entry points for integer Buffer.read/writeInt methods. (Robert Mustacchi) - -<li>CMake improvements (Tom Huges) - -<li>Upgrade V8 to 3.5.4.</ul> - - -Download: <a href="http://nodejs.org/dist/v0.5.4/node-v0.5.4.tar.gz">http://nodejs.org/dist/v0.5.4/node-v0.5.4.tar.gz</a> - -Windows Executable: <a href="http://nodejs.org/dist/v0.5.4/node.exe">http://nodejs.org/dist/v0.5.4/node.exe</a> - -Website: <a href="http://nodejs.org/dist/v0.5.4/docs">http://nodejs.org/dist/v0.5.4/docs</a> - -Documentation: <a href="http://nodejs.org/dist/v0.5.4/docs/api">http://nodejs.org/dist/v0.5.4/docs/api</a> diff --git a/doc/blog/release/node-v0-5-5.md b/doc/blog/release/node-v0-5-5.md deleted file mode 100644 index 683fed49c..000000000 --- a/doc/blog/release/node-v0-5-5.md +++ /dev/null @@ -1,40 +0,0 @@ -version: 0.5.5 -title: Node v0.5.5 -author: bennoordhuis -date: Fri Aug 26 2011 23:20:10 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-5 - -<p>2011.08.26, Version 0.5.5 (unstable)</p> -<ul> -<li>typed arrays, implementation from Plesk -<li>fix IP multicast on SunOS -<li>fix DNS lookup order: IPv4 first, IPv6 second (--use-uv only) -<li>remove support for UNIX datagram sockets (--use-uv only) -<li>UDP support for Windows (Bert Belder) -<li>#1572 improve tab completion for objects in the REPL (Nathan Rajlich) -<li>#1563 fix buffer overflow in child_process module (reported by Dean McNamee) -<li>#1546 fix performance regression in http module (reported by Brian Geffon) -<li>#1491 add PBKDF2 crypto support (Glen Low) -<li>#1447 remove deprecated http.cat() function (Mikeal Rogers) -<li>#1140 fix incorrect dispatch of vm.runInContext's filename argument<br /> - (Antranig Basman)</p> -<li>#1140 document vm.runInContext() and vm.createContext() (Antranig Basman) -<li>#1428 fix os.freemem() on 64 bits freebsd (Artem Zaytsev) -<li>#1164 make all DNS lookups async, fixes uncatchable exceptions<br /> - (Koichi Kobayashi)</p> -<li>fix incorrect ssl shutdown check (Tom Hughes) -<li>various cmake fixes (Tom Hughes) -<li>improved documentation (Koichi Kobayashi, Logan Smyth, Fedor Indutny,<br /> - Mikeal Rogers, Maciej Małecki, Antranig Basman, Mickaël Delahaye)</p> -<li>upgrade libuv to commit 835782a -<li>upgrade V8 to 3.5.8 -</ul> -<p>Download: <a href="http://nodejs.org/dist/node-v0.5.5.tar.gz">http://nodejs.org/dist/node-v0.5.5.tar.gz</a></p> -<p>Windows Executable: <a href="http://nodejs.org/dist/v0.5.5/node.exe">http://nodejs.org/dist/v0.5.5/node.exe</a></p> -<p>Website: <a href="http://nodejs.org/docs/v0.5.5/">http://nodejs.org/docs/v0.5.5/</a></p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.5.5/api/">http://nodejs.org/docs/v0.5.5/api/</a></p> -<br /><br /> - -<b>Update:</b> The <code>.exe</code> has a bug that results in incompatibility with Windows XP and Server 2003. This has been reported in <a href="https://github.com/joyent/node/issues/1592">issue #1592</a> and fixed. A new binary was made that is compatibile with the older Windows: <a href="http://nodejs.org/dist/v0.5.5/node-186364e.exe">http://nodejs.org/dist/v0.5.5/node-186364e.exe</a>. diff --git a/doc/blog/release/node-v0-5-6.md b/doc/blog/release/node-v0-5-6.md deleted file mode 100644 index 452878c30..000000000 --- a/doc/blog/release/node-v0-5-6.md +++ /dev/null @@ -1,49 +0,0 @@ -version: 0.5.6 -title: Node v0.5.6 (unstable) -author: piscisaureus -date: Fri Sep 09 2011 16:30:39 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-6 - -2011.09.08, Version 0.5.6 (unstable) -<ul> - <li>#345, #1635, #1648 Documentation improvements (Thomas Shinnick, Abimanyu Raja, AJ ONeal, Koichi Kobayashi, Michael Jackson, Logan Smyth, Ben Noordhuis)</li> - <li>#650 Improve path parsing on windows (Bert Belder)</li> - <li>#752 Remove headers sent check in OutgoingMessage.getHeader() (Peter Lyons)</li> - <li>#1236, #1438, #1506, #1513, #1621, #1640, #1647 Libuv-related bugs fixed (Jorge Chamorro Bieling, Peter Bright, Luis Lavena, Igor Zinkovsky)</li> - <li>#1296, #1612 crypto: Fix BIO's usage. (Koichi Kobayashi)</li> - <li>#1345 Correctly set socket.remoteAddress with libuv backend (Bert Belder)</li> - <li>#1429 Don't clobber quick edit mode on windows (Peter Bright)</li> - <li>#1503 Make libuv backend default on unix, override with `node --use-legacy`</li> - <li>#1565 Fix fs.stat for paths ending with \ on windows (Igor Zinkovsky)</li> - <li>#1568 Fix x509 certificate subject parsing (Koichi Kobayashi)</li> - <li>#1586 Make socket write encoding case-insensitive (Koichi Kobayashi)</li> - <li>#1591, #1656, #1657 Implement fs in libuv, remove libeio and pthread-win32 dependency on windows (Igor Zinkovsky, Ben Noordhuis, Ryan Dahl, Isaac Schlueter)</li> - <li>#1592 Don't load-time link against CreateSymbolicLink on windows (Peter Bright)</li> - <li>#1601 Improve API consistency when dealing with the socket underlying a HTTP client request (Mikeal Rogers)</li> - <li>#1610 Remove DigiNotar CA from trusted list (Isaac Schlueter)</li> - <li>#1617 Added some win32 os functions (Karl Skomski)</li> - <li>#1624 avoid buffer overrun with 'binary' encoding (Koichi Kobayashi)</li> - <li>#1633 make Buffer.write() always set _charsWritten (Koichi Kobayashi)</li> - <li>#1644 Windows: set executables to be console programs (Peter Bright)</li> - <li>#1651 improve inspection for sparse array (Koichi Kobayashi)</li> - <li>#1672 set .code='ECONNRESET' on socket hang up errors (Ben Noordhuis)</li> - <li>Add test case for foaf+ssl client certificate (Niclas Hoyer)</li> - <li>Added RPATH environment variable to override run-time library paths (Ashok Mudukutore)</li> - <li>Added TLS client-side session resumption support (Sean Cunningham)</li> - <li>Added additional properties to getPeerCertificate (Nathan Rixham, Niclas Hoyer)</li> - <li>Don't eval repl command twice when an error is thrown (Nathan Rajlich)</li> - <li>Improve util.isDate() (Nathan Rajlich)</li> - <li>Improvements in libuv backend and bindings, upgrade libuv to bd6066cb349a9b3a1b0d87b146ddaee06db31d10</li> - <li>Show warning when using lib/sys.js (Maciej Malecki)</li> - <li>Support plus sign in url protocol (Maciej Malecki)</li> - <li>Upgrade V8 to 3.6.2</li> -</ul> -Download: <a href="http://nodejs.org/dist/v0.5.6/node-v0.5.6.tar.gz">http://nodejs.org/dist/v0.5.6/node-v0.5.6.tar.gz</a> - -Windows Executable: <a href="http://nodejs.org/dist/v0.5.6/node.exe">http://nodejs.org/dist/v0.5.6/node.exe</a> - -Website: <a href="http://nodejs.org/docs/v0.5.6/">http://nodejs.org/docs/v0.5.6/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.5.6/api/">http://nodejs.org/docs/v0.5.6/api/</a> diff --git a/doc/blog/release/node-v0-5-7-unstable.md b/doc/blog/release/node-v0-5-7-unstable.md deleted file mode 100644 index b125a1497..000000000 --- a/doc/blog/release/node-v0-5-7-unstable.md +++ /dev/null @@ -1,35 +0,0 @@ -version: 0.5.7 -title: Node v0.5.7 (unstable) -author: ryandahl -date: Fri Sep 16 2011 18:57:03 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-7-unstable - -2011.09.16, Version 0.5.7 (unstable) -<ul> -<li>Upgrade V8 to 3.6.4 -<li>Improve Windows compatibility -<li>Documentation improvements -<li>Debugger and REPL improvements (Fedor Indutny) -<li>Add legacy API support: net.Stream(fd), process.stdout.writable, process.stdout.fd -<li>Fix mkdir EEXIST handling (isaacs) -<li>Use net_uv instead of net_legacy for stdio -<li>Do not load readline from util.inspect -<li>#1673 Fix bug related to V8 context with accessors (Fedor Indutny) -<li>#1634 util: Fix inspection for Error (koichik) -<li>#1645 fs: Add positioned file writing feature to fs.WriteStream (Thomas Shinnick) -<li>#1637 fs: Unguarded fs.watchFile cache statWatchers checking fixed (Thomas Shinnick) -<li>#1695 Forward customFds to ChildProcess.spawn -<li>#1707 Fix hasOwnProperty security problem in querystring (isaacs) -<li>#1719 Drain OpenSSL error queue</ul> - - - -Download: <a href="http://nodejs.org/dist/v0.5.7/node-v0.5.7.tar.gz">http://nodejs.org/dist/v0.5.7/node-v0.5.7.tar.gz</a> - -Windows Executable: <a href="http://nodejs.org/dist/v0.5.7/node.exe">http://nodejs.org/dist/v0.5.7/node.exe</a> - -Website: <a href="http://nodejs.org/docs/v0.5.7/">http://nodejs.org/docs/v0.5.7/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.5.7/api/">http://nodejs.org/docs/v0.5.7/api/</a> diff --git a/doc/blog/release/node-v0-5-8.md b/doc/blog/release/node-v0-5-8.md deleted file mode 100644 index 6924ff372..000000000 --- a/doc/blog/release/node-v0-5-8.md +++ /dev/null @@ -1,26 +0,0 @@ -version: 0.5.8 -title: Node v0.5.8 -author: ryandahl -date: Fri Sep 30 2011 16:47:11 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-8 - -2011.09.30, Version 0.5.8 (unstable)<ul><li>zlib bindings (isaacs) -<li>Windows supports TTY ANSI escape codes (Bert Belder) -<li>Debugger improvements (Fedor Indutny) -<li>crypto: look up SSL errors with ERR_print_errors() (Ben Noordhuis) -<li>dns callbacks go through MakeCallback now -<li>Raise an error when a malformed package.json file is found. (Ben Leslie) -<li>buffers: handle bad length argument in constructor (Ben Noordhuis) -<li>#1726, unref process.stdout -<li>Doc improvements (Ben Noordhuis, Fedor Indutny, koichik) -<li>Upgrade libuv to fe18438</ul> - -Download: <a href="http://nodejs.org/dist/v0.5.8/node-v0.5.8.tar.gz">http://nodejs.org/dist/v0.5.8/node-v0.5.8.tar.gz</a> - -Windows Executable: <a href="http://nodejs.org/dist/v0.5.8/node.exe">http://nodejs.org/dist/v0.5.8/node.exe</a> - -Website: <a href="http://nodejs.org/docs/v0.5.8/">http://nodejs.org/docs/v0.5.8/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.5.8/api/">http://nodejs.org/docs/v0.5.8/api/</a> diff --git a/doc/blog/release/node-v0-5-9.md b/doc/blog/release/node-v0-5-9.md deleted file mode 100644 index 8cf7e8101..000000000 --- a/doc/blog/release/node-v0-5-9.md +++ /dev/null @@ -1,27 +0,0 @@ -version: 0.5.9 -title: Node v0.5.9 -author: ryandahl -date: Mon Oct 10 2011 19:06:21 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-5-9 - -2011.10.10, Version 0.5.9 (unstable) -<ul><li>fs.watch interface backed by kqueue, inotify, and ReadDirectoryChangesW (Igor Zinkovsky, Ben Noordhuis)</li> -<li>add dns.resolveTxt (Christian Tellnes)</li> -<li>Remove legacy http library (Ben Noordhuis)</li> -<li>child_process.fork returns and works on Windows. Allows passing handles. (Igor Zinkovsky, Bert Belder)</li> -<li>#1774 Lint and clean up for --harmony_block_scoping (Tyler Larson, Colton Baker)</li> -<li>#1813 Fix ctrl+c on Windows (Bert Belder)</li> -<li>#1844 unbreak --use-legacy (Ben Noordhuis)</li> -<li>process.stderr now goes through libuv. Both process.stdout and process.stderr are blocking when referencing a TTY.</li> -<li>net_uv performance improvements (Ben Noordhuis, Bert Belder)</li></ul> - - -Download: <a href="http://nodejs.org/dist/v0.5.9/node-v0.5.9.tar.gz">http://nodejs.org/dist/v0.5.9/node-v0.5.9.tar.gz</a> - -Windows Executable: <a href="http://nodejs.org/dist/v0.5.9/node.exe">http://nodejs.org/dist/v0.5.9/node.exe</a> - -Website: <a href="http://nodejs.org/docs/v0.5.9/">http://nodejs.org/docs/v0.5.9/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.5.9/api/">http://nodejs.org/docs/v0.5.9/api/</a> diff --git a/doc/blog/release/node-v0-6-0.md b/doc/blog/release/node-v0-6-0.md deleted file mode 100644 index 5c796e74b..000000000 --- a/doc/blog/release/node-v0-6-0.md +++ /dev/null @@ -1,80 +0,0 @@ -version: 0.6.0 -title: Node v0.6.0 -author: ryandahl -date: Sat Nov 05 2011 02:07:10 GMT-0700 (PDT) -status: publish -category: release -slug: node-v0-6-0 - -We are happy to announce the third stable branch of Node v0.6. We will be freezing JavaScript, C++, and binary interfaces for all v0.6 releases. - -The major differences between v0.4 and v0.6 are<ul> -<li>Native Windows support using I/O Completion Ports for sockets. -<li>Integrated load balancing over multiple processes. <a href="http://nodejs.org/docs/v0.6.0/api/cluster.html">docs</a> -<li>Better support for IPC between Node instances <a href="http://nodejs.org/docs/v0.6.0/api/child_processes.html#child_process.fork">docs</a> -<li>Improved command line debugger <a href="http://nodejs.org/docs/v0.6.0/api/debugger.html">docs</a> -<li>Built-in binding to zlib for compression <a href="http://nodejs.org/docs/v0.6.0/api/zlib.html">docs</a> -<li>Upgrade v8 from 3.1 to 3.6</ul> - -In order to support Windows we reworked much of the core architecture. There was some fear that our work would degrade performance on UNIX systems but this was not the case. Here is a Linux system we benched for demonstration: - -<table><tr> <th></th> <th>v0.4.12 (linux)</th><th>v0.6.0 (linux)</th></tr> -<tr> <td>http_simple.js /bytes/1024</td> <td>5461 r/s</td> <td>6263 r/s</td> </tr> -<tr> <td>io.js read </td> <td>19.75 mB/s</td> <td>26.63 mB/s</td> </tr> -<tr> <td>io.js write </td> <td>21.60 mB/s</td> <td>17.40 mB/s</td> </tr> -<tr> <td>startup.js </td> <td>74.7 ms</td> <td>49.6 ms</td> </tr></table> - -Bigger is better in http and io benchmarks, smaller is better in startup. The http benchmark was done with 600 clients on a 10GE network served from three load generation machines. - -In the last version of Node, v0.4, we could only run Node on Windows with Cygwin. Therefore we've gotten massive improvements by targeting the native APIs. Benchmarks on the same machine: - -<table><tr><th></th><th>v0.4.12 (windows)</th><th>v0.6.0 (windows)</th></tr> -<tr> <td>http_simple.js /bytes/1024</td> <td>3858 r/s</td> <td>5823 r/s</td> </tr> -<tr> <td>io.js read </td> <td>12.41 mB/s</td> <td>26.51 mB/s</td> </tr> -<tr> <td>io.js write </td> <td>12.61 mB/s</td> <td>33.58 mB/s</td> </tr> -<tr> <td>startup.js </td> <td>152.81 ms</td> <td>52.04 ms</td> </tr></table> - -We consider this a good intermediate stage for the Windows port. There is still work to be done. For example, we are not yet providing users with a blessed path for building addon modules in MS Visual Studio. Work will continue in later releases. - -For users upgrading code bases from v0.4 to v0.6 <a href="https://github.com/joyent/node/wiki/API-changes-between-v0.4-and-v0.6">we've documented</a> most of the issues that you will run into. Most people find the change painless. Despite the long list of changes most core APIs remain untouched. - -Our release cycle will be tightened dramatically now. Expect to see a new stable branch in January. We wish to eventually have our releases in sync with Chrome and V8's 6 week cycle. - -Thank you to everyone who contributed code, tests, docs, or sent in bug reports. - -Here are the changes between v0.5.12 and v0.6.0: - -2011.11.04, Version 0.6.0 (stable) -<ul><li>print undefined on undefined values in REPL (Nathan Rajlich)</li> -<li>doc improvements (koichik, seebees, bnoordhuis, Maciej Małecki, Jacob Kragh)</li> -<li>support native addon loading in windows (Bert Belder)</li> -<li>rename getNetworkInterfaces() to networkInterfaces() (bnoordhuis)</li> -<li>add pending accepts knob for windows (igorzi)</li> -<li>http.request(url.parse(x)) (seebees)</li> -<li>#1929 zlib Respond to 'resume' events properly (isaacs)</li> -<li>stream.pipe: Remove resume and pause events</li> -<li>test fixes for windows (igorzi)</li> -<li>build system improvements (bnoordhuis)</li> -<li>#1936 tls: does not emit 'end' from EncryptedStream (koichik)</li> -<li>#758 tls: add address(), remoteAddress/remotePort</li> -<li>#1399 http: emit Error object after .abort() (bnoordhuis)</li> -<li>#1999 fs: make mkdir() default to 0777 permissions (bnoordhuis)</li> -<li>#2001 fix pipe error codes</li> -<li>#2002 Socket.write should reset timeout timer</li> -<li>stdout and stderr are blocking when associated with file too.</li> -<li>remote debugger support on windows (Bert Belder)</li> -<li>convenience methods for zlib (Matt Robenolt)</li> -<li>process.kill support on windows (igorzi)</li> -<li>process.uptime() support on windows (igorzi)</li> -<li>Return IPv4 addresses before IPv6 addresses from getaddrinfo</li> -<li>util.inspect improvements (Nathan Rajlich)</li> -<li>cluster module api changes</li> -<li>Downgrade V8 to 3.6.6.6</li></ul> - -Download: <a href="http://nodejs.org/dist/v0.6.0/node-v0.6.0.tar.gz">http://nodejs.org/dist/v0.6.0/node-v0.6.0.tar.gz</a> - -Windows Executable: <a href="http://nodejs.org/dist/v0.6.0/node.exe">http://nodejs.org/dist/v0.6.0/node.exe</a> - -Website: <a href="http://nodejs.org/docs/v0.6.0/">http://nodejs.org/docs/v0.6.0/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.6.0/api/">http://nodejs.org/docs/v0.6.0/api/</a> diff --git a/doc/blog/release/node-v0-6-1.md b/doc/blog/release/node-v0-6-1.md deleted file mode 100644 index d7fb09cdd..000000000 --- a/doc/blog/release/node-v0-6-1.md +++ /dev/null @@ -1,33 +0,0 @@ -version: 0.6.1 -title: Node v0.6.1 -author: ryandahl -date: Fri Nov 11 2011 15:34:15 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-1 - -2011.11.11, Version 0.6.1 (stable) -<ul><li>doc improvements (Eric Lovett, Ben Noordhuis, Scott Anderson, Yoji SHIDARA)</li> -<li>crypto: make thread-safe (Ben Noordhuis)</li> -<li>fix process.kill error object</li> -<li>debugger: correctly handle source with multi-byte characters (Shigeki Ohtsu)</li> -<li>make stdout and stderr non-destroyable (Igor Zinkovsky)</li> -<li>fs: don't close uninitialized fs.watch handle (Ben Noordhuis)</li> -<li>#2026 fix man page install on BSDs (Ben Noordhuis)</li> -<li>#2040 fix unrecognized errno assert in uv_err_name</li> -<li>#2043 fs: mkdir() should call callback if mode is omitted</li> -<li>#2045 fs: fix fs.realpath on windows to return on error (Benjamin Pasero)</li> -<li>#2047 minor cluster improvements</li> -<li>#2052 readline get window columns correctly</li> -<li>Upgrade V8 to 3.6.6.7</li></ul> - - -Source Code: <a href="http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz">http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz</a> - -Windows Installer: <a href="http://nodejs.org/dist/v0.6.1/node-v0.6.1.msi">http://nodejs.org/dist/v0.6.1/node-v0.6.1.msi</a> - -Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.1/node-v0.6.1.pkg">http://nodejs.org/dist/v0.6.1/node-v0.6.1.pkg</a> - -Website: <a href="http://nodejs.org/docs/v0.6.1/">http://nodejs.org/docs/v0.6.1/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.6.1/api/">http://nodejs.org/docs/v0.6.1/api/</a> diff --git a/doc/blog/release/node-v0-6-10.md b/doc/blog/release/node-v0-6-10.md deleted file mode 100644 index 7d489932d..000000000 --- a/doc/blog/release/node-v0-6-10.md +++ /dev/null @@ -1,30 +0,0 @@ -version: 0.6.10 -title: Node v0.6.10 -author: Isaac Schlueter -date: Thu Feb 02 2012 17:22:03 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-10 - -<p>2012.02.02, Version 0.6.10 (stable)</p> - -<ul> -<li><p>Update V8 to 3.6.6.20</p></li> -<li><p>Add npm msysgit bash shim to msi installer (isaacs)</p></li> -<li><p>buffers: fix intermittent out of bounds error (Ben Noordhuis)</p></li> -<li><p>buffers: honor length argument in base64 decoder (Ben Noordhuis)</p></li> -<li><p>windows: Fix path.exists regression (Bert Belder)</p></li> -<li><p>Make QueryString.parse run faster (Philip Tellis)</p></li> -<li><p>http: avoid freeing http-parser objects too early (koichik)</p></li> -<li><p>timers: add v0.4 compatibility hack (Ben Noordhuis)</p></li> -<li><p>Proper EPERM error code support (Igor Zinkovsky, Brandon Philips)</p></li> -<li><p>dgram: Implement udp multicast methods on windows (Bert Belder)</p></li> -</ul><p>Source Code: <a href="http://nodejs.org/dist/v0.6.10/node-v0.6.10.tar.gz">http://nodejs.org/dist/v0.6.10/node-v0.6.10.tar.gz</a></p> - -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.10/node-v0.6.10.msi">http://nodejs.org/dist/v0.6.10/node-v0.6.10.msi</a></p> - -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.10/node-v0.6.10.pkg">http://nodejs.org/dist/v0.6.10/node-v0.6.10.pkg</a></p> - -<p>Website: <a href="http://nodejs.org/docs/v0.6.10/">http://nodejs.org/docs/v0.6.10/</a></p> - -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.10/api/">http://nodejs.org/docs/v0.6.10/api/</a></p> diff --git a/doc/blog/release/node-v0-6-2.md b/doc/blog/release/node-v0-6-2.md deleted file mode 100644 index 9a75dcb16..000000000 --- a/doc/blog/release/node-v0-6-2.md +++ /dev/null @@ -1,27 +0,0 @@ -version: 0.6.2 -title: Node v0.6.2 -author: bennoordhuis -date: Fri Nov 18 2011 15:35:32 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-2 - -<p>2011.11.18, Version 0.6.2 (stable)</p> -<ul> -<li>doc improvements (Artur Adib, Trevor Burnham, Ryan Emery, Trent Mick)</li> -<li>timers: remember extra setTimeout() arguments when timeout==0</li> -<li>punycode: use Mathias Bynens's punycode library, it's more compliant</li> -<li>repl: improved tab completion (Ryan Emery)</li> -<li>buffer: fix range checks in .writeInt() functions (Lukasz Walukiewicz)</li> -<li>tls: make cipher list configurable</li> -<li>addons: make Buffer and ObjectWrap visible to Windows add-ons (Bert Belder)</li> -<li>crypto: add PKCS#1 a.k.a RSA public key verification support</li> -<li>windows: fix stdout writes when redirected to nul</li> -<li>sunos: fix build on Solaris and Illumos</li> -<li>Upgrade V8 to 3.6.6.8</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.2/node-v0.6.2.tar.gz">http://nodejs.org/dist/v0.6.2/node-v0.6.2.tar.gz</a></p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.2/node-v0.6.2.msi">http://nodejs.org/dist/v0.6.2/node-v0.6.2.msi</a></p> -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.2/node-v0.6.2.pkg">http://nodejs.org/dist/v0.6.2/node-v0.6.2.pkg</a></p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.2/">http://nodejs.org/docs/v0.6.2/</a></p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.2/api/">http://nodejs.org/docs/v0.6.2/api/</a></p> diff --git a/doc/blog/release/node-v0-6-3.md b/doc/blog/release/node-v0-6-3.md deleted file mode 100644 index e61c5f714..000000000 --- a/doc/blog/release/node-v0-6-3.md +++ /dev/null @@ -1,30 +0,0 @@ -version: 0.6.3 -title: Node v0.6.3 -author: piscisaureus -date: Fri Nov 25 2011 02:54:08 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-3 - -2011.11.25, Version 0.6.3 (stable) -<ul> - <li>#2083 Land NPM in Node. It is included in packages/installers and installed on `make install`.</li> - <li>#2076 Add logos to windows installer.</li> - <li>#1711 Correctly handle http requests without headers. (Ben Noordhuis, Felix Geisendörfer)</li> - <li>TLS: expose more openssl SSL context options and constants. (Ben Noordhuis)</li> - <li>#2177 Windows: don't kill UDP socket when a packet fails to reach its destination. (Bert Belder)</li> - <li>Windows: support paths longer than 260 characters. (Igor Zinkovsky)</li> - <li>Windows: correctly resolve drive-relative paths. (Bert Belder)</li> - <li>#2166 Don't leave file descriptor open after lchmod. (Isaac Schlueter)</li> - <li>#2084 Add OS X .pkg build script to make file.</li> - <li>#2160 Documentation improvements. (Ben Noordhuis)</li> -</ul> -Source Code: <a href="http://nodejs.org/dist/v0.6.3/node-v0.6.3.tar.gz">http://nodejs.org/dist/v0.6.3/node-v0.6.3.tar.gz</a> - -Windows Installer: <a href="http://nodejs.org/dist/v0.6.3/node-v0.6.3.msi">http://nodejs.org/dist/v0.6.3/node-v0.6.3.msi</a> - -Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.3/node-v0.6.3.pkg">http://nodejs.org/dist/v0.6.3/node-v0.6.3.pkg</a> - -Website: <a href="http://nodejs.org/docs/v0.6.3/">http://nodejs.org/docs/v0.6.3/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.6.3/api/">http://nodejs.org/docs/v0.6.3/api/</a> diff --git a/doc/blog/release/node-v0-6-4.md b/doc/blog/release/node-v0-6-4.md deleted file mode 100644 index ee5f6335a..000000000 --- a/doc/blog/release/node-v0-6-4.md +++ /dev/null @@ -1,31 +0,0 @@ -version: 0.6.4 -title: Node v0.6.4 -author: bennoordhuis -date: Thu Dec 01 2011 18:20:14 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-4 - -2011.12.02, Version 0.6.4 (stable) -<ul> -<li>doc improvements (Kyle Young, Tim Oxley, Roman Shtylman, Mathias Bynens)</li> -<li>upgrade bundled npm (Isaac Schlueter)</li> -<li>polish Windows installer (Igor Zinkovsky, Isaac Schlueter)</li> -<li>punycode: upgrade to v0.2.1 (Mathias Bynens)</li> -<li>build: add --without-npm flag to configure script</li> -<li>sys: deprecate module some more, print stack trace if NODE_DEBUG=sys</li> -<li>cli: add -p switch, prints result of --eval</li> -<li>#1997: fix Blowfish ECB encryption and decryption (Ingmar Runge)</li> -<li>#2223: fix socket 'close' event being emitted twice</li> -<li>#2224: fix RSS memory usage > 4 GB reporting (Russ Bradberry)</li> -<li>#2225: fix util.inspect() object stringification bug (Nathan Rajlich)</li> -</ul> -Source Code: <a href="http://nodejs.org/dist/v0.6.4/node-v0.6.4.tar.gz">http://nodejs.org/dist/v0.6.4/node-v0.6.4.tar.gz</a> - -Windows Installer: <a href="http://nodejs.org/dist/v0.6.4/node-v0.6.4.msi">http://nodejs.org/dist/v0.6.4/node-v0.6.4.msi</a> - -Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.4/node-v0.6.4.pkg">http://nodejs.org/dist/v0.6.4/node-v0.6.4.pkg</a> - -Website: <a href="http://nodejs.org/docs/v0.6.4/">http://nodejs.org/docs/v0.6.4/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.6.4/api/">http://nodejs.org/docs/v0.6.4/api/</a> diff --git a/doc/blog/release/node-v0-6-5.md b/doc/blog/release/node-v0-6-5.md deleted file mode 100644 index 3035894cb..000000000 --- a/doc/blog/release/node-v0-6-5.md +++ /dev/null @@ -1,21 +0,0 @@ -version: 0.6.5 -title: Node v0.6.5 -author: ryandahl -date: Sun Dec 04 2011 00:59:57 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-5 - -2011.12.04, Version 0.6.5 (stable) -<ul><li>npm workaround Windows antivirus software (isaacs) -<li>Upgrade V8 to 3.6.6.11</ul> - -Source Code: <a href="http://nodejs.org/dist/v0.6.5/node-v0.6.5.tar.gz">http://nodejs.org/dist/v0.6.5/node-v0.6.5.tar.gz</a> - -Windows Installer: <a href="http://nodejs.org/dist/v0.6.5/node-v0.6.5.msi">http://nodejs.org/dist/v0.6.5/node-v0.6.5.msi</a> - -Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.5/node-v0.6.5.pkg">http://nodejs.org/dist/v0.6.5/node-v0.6.5.pkg</a> - -Website: <a href="http://nodejs.org/docs/v0.6.5/">http://nodejs.org/docs/v0.6.5/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.6.5/api/">http://nodejs.org/docs/v0.6.5/api/</a> diff --git a/doc/blog/release/node-v0-6-6.md b/doc/blog/release/node-v0-6-6.md deleted file mode 100644 index df5339854..000000000 --- a/doc/blog/release/node-v0-6-6.md +++ /dev/null @@ -1,32 +0,0 @@ -version: 0.6.6 -title: Node v0.6.6 -author: Isaac Schlueter -date: Thu Dec 15 2011 11:07:57 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-6 - -2011.12.14, Version 0.6.6 (stable) - -<ul> -<li>npm update to 1.1.0-beta-4 (Isaac Z. Schlueter)</li> -<li>cli: fix output of --help (Ben Noordhuis)</li> -<li>new website</li> -<li>pause/resume semantics for stdin (Isaac Z. Schlueter)</li> -<li>Travis CI integration (Maciej Małecki)</li> -<li>child_process: Fix bug regarding closed stdin (Ben Noordhuis)</li> -<li>Enable upgrades in MSI. (Igor Zinkovsky)</li> -<li>net: Fixes memory leak (Ben Noordhuis)</li> -<li>fs: handle fractional or NaN ReadStream buffer size (Ben Noordhuis)</li> -<li>crypto: fix memory leaks in PBKDF2 error path (Ben Noordhuis)</li> -</ul> - -Source Code: <a href="http://nodejs.org/dist/v0.6.6/node-v0.6.6.tar.gz">http://nodejs.org/dist/v0.6.6/node-v0.6.6.tar.gz</a> - -Windows Installer: <a href="http://nodejs.org/dist/v0.6.6/node-v0.6.6.msi">http://nodejs.org/dist/v0.6.6/node-v0.6.6.msi</a> - -Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.6/node-v0.6.6.pkg">http://nodejs.org/dist/v0.6.6/node-v0.6.6.pkg</a> - -Website: <a href="http://nodejs.org/docs/v0.6.6/">http://nodejs.org/docs/v0.6.6/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.6.6/api/">http://nodejs.org/docs/v0.6.6/api/</a> diff --git a/doc/blog/release/node-v0-6-7.md b/doc/blog/release/node-v0-6-7.md deleted file mode 100644 index 06d939751..000000000 --- a/doc/blog/release/node-v0-6-7.md +++ /dev/null @@ -1,41 +0,0 @@ -version: 0.6.7 -title: Node v0.6.7 -author: Isaac Schlueter -date: Fri Jan 06 2012 17:54:49 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-7 - -<p>2012.01.06, Version 0.6.7 (stable)</p> - -<ul> -<li><p>V8 hash collision fix (Breaks MIPS) (Bert Belder, Erik Corry)</p></li> -<li><p>Upgrade V8 to 3.6.6.15</p></li> -<li><p>Upgrade npm to 1.1.0-beta-10 (isaacs)</p></li> -<li><p>many doc updates (Ben Noordhuis, Jeremy Martin, koichik, Dave Irvine, -Seong-Rak Choi, Shannen, Adam Malcontenti-Wilson, koichik)</p></li> -<li><p>Fix segfault in <code>node_http_parser.cc</code></p></li> -<li><p>dgram, timers: fix memory leaks (Ben Noordhuis, Yoshihiro Kikuchi)</p></li> -<li><p>repl: fix repl.start not passing the <code>ignoreUndefined</code> arg (Damon Oehlman)</p></li> -<li><p>#1980: Socket.pause null reference when called on a closed Stream (koichik)</p></li> -<li><p>#2263: XMLHttpRequest piped in a writable file stream hang (koichik)</p></li> -<li><p>#2069: http resource leak (koichik)</p></li> -<li><p>buffer.readInt global pollution fix (Phil Sung)</p></li> -<li><p>timers: fix performance regression (Ben Noordhuis)</p></li> -<li><p>#2308, #2246: node swallows openssl error on request (koichik)</p></li> -<li><p>#2114: timers: remove _idleTimeout from item in .unenroll() (James Hartig)</p></li> -<li><p>#2379: debugger: Request backtrace w/o refs (Fedor Indutny)</p></li> -<li><p>simple DTrace ustack helper (Dave Pacheco)</p></li> -<li><p>crypto: rewrite HexDecode without snprintf (Roman Shtylman)</p></li> -<li><p>crypto: don’t ignore DH init errors (Ben Noordhuis)</p></li> -</ul> - -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.7/node-v0.6.7.tar.gz">http://nodejs.org/dist/v0.6.7/node-v0.6.7.tar.gz</a></p> - -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.7/node-v0.6.7.msi">http://nodejs.org/dist/v0.6.7/node-v0.6.7.msi</a></p> - -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.7/node-v0.6.7.pkg">http://nodejs.org/dist/v0.6.7/node-v0.6.7.pkg</a></p> - -<p>Website: <a href="http://nodejs.org/docs/v0.6.7/">http://nodejs.org/docs/v0.6.7/</a></p> - -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.7/api/">http://nodejs.org/docs/v0.6.7/api/</a></p> diff --git a/doc/blog/release/node-v0-6-8.md b/doc/blog/release/node-v0-6-8.md deleted file mode 100644 index 81f7ace94..000000000 --- a/doc/blog/release/node-v0-6-8.md +++ /dev/null @@ -1,31 +0,0 @@ -version: 0.6.8 -title: Node v0.6.8 -author: Isaac Schlueter -date: Thu Jan 19 2012 19:59:53 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-8 - -<p>2012.01.19, Version 0.6.8 (stable)</p> - -<ul> -<li><p>Update V8 to 3.6.6.19</p></li> -<li><p>Numeric key hash collision fix for V8 (Erik Corry, Fedor Indutny)</p></li> -<li><p>Add missing TTY key translations for F1-F5 on Windows (Brandon Benvie)</p></li> -<li><p>path.extname bugfix with . and .. paths (Bert Belder)</p></li> -<li><p>cluster: don't always kill the master on uncaughtException (Ben Noordhuis)</p></li> -<li><p>Update npm to 1.1.0-2 (isaacs)</p></li> -<li><p>typed arrays: set class name (Ben Noordhuis)</p></li> -<li><p>zlib binding cleanup (isaacs, Bert Belder)</p></li> -<li><p>dgram: use slab memory allocator (Michael Bernstein)</p></li> -<li><p>fix segfault #2473</p></li> -<li><p>#2521 60% improvement in fs.stat on Windows (Igor Zinkovsky)</p></li> -</ul><p>Source Code: <a href="http://nodejs.org/dist/v0.6.8/node-v0.6.8.tar.gz">http://nodejs.org/dist/v0.6.8/node-v0.6.8.tar.gz</a></p> - -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.8/node-v0.6.8.msi">http://nodejs.org/dist/v0.6.8/node-v0.6.8.msi</a></p> - -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.8/node-v0.6.8.pkg">http://nodejs.org/dist/v0.6.8/node-v0.6.8.pkg</a></p> - -<p>Website: <a href="http://nodejs.org/docs/v0.6.8/">http://nodejs.org/docs/v0.6.8/</a></p> - -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.8/api/">http://nodejs.org/docs/v0.6.8/api/</a></p> diff --git a/doc/blog/release/node-v0-6-9.md b/doc/blog/release/node-v0-6-9.md deleted file mode 100644 index 6e95bfdd7..000000000 --- a/doc/blog/release/node-v0-6-9.md +++ /dev/null @@ -1,30 +0,0 @@ -version: 0.6.9 -title: Node v0.6.9 -author: Isaac Schlueter -date: Fri Jan 27 2012 16:58:18 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-6-9 - -<p>2012.01.27, Version 0.6.9 (stable)</p> - -<ul> -<li> -<p>dgram: Bring back missing functionality for Unix (Dan VerWeire, -Roman Shtylman, Ben Noordhuis)</p> -<p>- Note: Windows UDP support not yet complete.</p></li> -<li><p>http: Fix parser memory leak (koichik)</p></li> -<li><p>zlib: Fix #2365 crashes on invalid input (Nicolas LaCasse)</p></li> -<li><p>module: fix --debug-brk on symlinked scripts (Fedor Indutny)</p></li> -<li><p>Documentation Restyling (Matthew Fitzsimmons)</p></li> -<li><p>Update npm to 1.1.0-3 (isaacs)</p></li> -<li><p>Windows: fix regression in stat() calls to C:\ (Bert Belder)</p></li> -</ul><p>Source Code: <a href="http://nodejs.org/dist/v0.6.9/node-v0.6.9.tar.gz">http://nodejs.org/dist/v0.6.9/node-v0.6.9.tar.gz</a></p> - -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.9/node-v0.6.9.msi">http://nodejs.org/dist/v0.6.9/node-v0.6.9.msi</a></p> - -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.9/node-v0.6.9.pkg">http://nodejs.org/dist/v0.6.9/node-v0.6.9.pkg</a></p> - -<p>Website: <a href="http://nodejs.org/docs/v0.6.9/">http://nodejs.org/docs/v0.6.9/</a></p> - -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.9/api/">http://nodejs.org/docs/v0.6.9/api/</a></p> diff --git a/doc/blog/release/node-v0-7-0-unstable.md b/doc/blog/release/node-v0-7-0-unstable.md deleted file mode 100644 index 5b768e70f..000000000 --- a/doc/blog/release/node-v0-7-0-unstable.md +++ /dev/null @@ -1,29 +0,0 @@ -version: 0.7.0 -title: Node v0.7.0 (Unstable) -author: ryandahl -date: Mon Jan 16 2012 19:58:28 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-7-0-unstable - -<strong>This is the first release in the unstable v0.7 series. Almost all users will want to remain using the stable v0.6 releases.</strong> - -2012.01.16, Version 0.7.0 (unstable) -<ul> -<li>Upgrade V8 to 3.8.6 -<li>Use GYP build system on unix (Ben Noordhuis) -<li>Experimental isolates support (Ben Noordhuis) -<li>Improvements to Cluster API (Andreas Madsen) -<li>Use isolates for internal debugger (Fedor Indutny) -<li>Bug fixes</ul> - - -Source Code: <a href="http://nodejs.org/dist/v0.7.0/node-v0.7.0.tar.gz">http://nodejs.org/dist/v0.7.0/node-v0.7.0.tar.gz</a> - -Windows Installer: <a href="http://nodejs.org/dist/v0.7.0/node-v0.7.0.msi">http://nodejs.org/dist/v0.7.0/node-v0.7.0.msi</a> - -Macintosh Installer: <a href="http://nodejs.org/dist/v0.7.0/node-v0.7.0.pkg">http://nodejs.org/dist/v0.7.0/node-v0.7.0.pkg</a> - -Website: <a href="http://nodejs.org/docs/v0.7.0/">http://nodejs.org/docs/v0.7.0/</a> - -Documentation: <a href="http://nodejs.org/docs/v0.7.0/api/">http://nodejs.org/docs/v0.7.0/api/</a> diff --git a/doc/blog/release/node-v0-7-1.md b/doc/blog/release/node-v0-7-1.md deleted file mode 100644 index cd3666d72..000000000 --- a/doc/blog/release/node-v0-7-1.md +++ /dev/null @@ -1,30 +0,0 @@ -version: 0.7.1 -title: Node v0.7.1 -author: Isaac Schlueter -date: Mon Jan 23 2012 17:35:59 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-7-1 - -<p>2012.01.23, Version 0.7.1 (unstable)</p> - -<ul> -<li><p>Update V8 to 3.8.8</p></li> -<li><p>Install node-waf by default (Fedor Indutny)</p></li> -<li><p>crypto: Add ability to turn off PKCS padding (Ingmar Runge)</p></li> -<li><p>v8: implement VirtualMemory class on SunOS (Ben Noordhuis)</p></li> -<li><p>Add cluster.setupMaster (Andreas Madsen)</p></li> -<li><p>move <code>path.exists*</code> to <code>fs.exists*</code> (Maciej Małecki)</p></li> -<li><p>typed arrays: set class name (Ben Noordhuis)</p></li> -<li><p>libuv bug fixes (Igor Zinkovsky, Ben Noordhuis, Dan VerWeire)</p></li> -</ul> - -<p>Source: <a href="http://nodejs.org/dist/v0.7.1/node-v0.7.1.tar.gz">http://nodejs.org/dist/v0.7.1/node-v0.7.1.tar.gz</a></p> - -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.1/node-v0.7.1.msi">http://nodejs.org/dist/v0.7.1/node-v0.7.1.msi</a></p> - -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.7.1/node-v0.7.1.pkg">http://nodejs.org/dist/v0.7.1/node-v0.7.1.pkg</a></p> - -<p>Website: <a href="http://nodejs.org/docs/v0.7.1/">http://nodejs.org/docs/v0.7.1/</a></p> - -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.1/api/">http://nodejs.org/docs/v0.7.1/api/</a></p> diff --git a/doc/blog/release/node-v0-7-2-unstable.md b/doc/blog/release/node-v0-7-2-unstable.md deleted file mode 100644 index e25e1b442..000000000 --- a/doc/blog/release/node-v0-7-2-unstable.md +++ /dev/null @@ -1,32 +0,0 @@ -version: 0.7.2 -title: Node v0.7.2 (unstable) -author: Isaac Schlueter -date: Wed Feb 01 2012 13:13:04 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-7-2-unstable - -<p>2012.02.01, Version 0.7.2 (unstable)</p> - -<ul> -<li><p>Update V8 to 3.8.9</p></li> -<li><p>Support for sharing streams across Isolates (Igor Zinkovsky)</p></li> -<li><p>#2636 - Fix case where http_parsers are freed too early (koichik)</p></li> -<li><p>url: Support for IPv6 addresses in URLs (Łukasz Walukiewicz)</p></li> -<li><p>child_process: Add disconnect() method to child processes (Andreas Madsen)</p></li> -<li><p>fs: add O_EXCL support, exclusive open file (Ben Noordhuis)</p></li> -<li><p>fs: more specific error messages (Tj Holowaychuk)</p></li> -<li><p>tty: emit 'unknown' key event if key sequence not found (Dan VerWeire, Nathan Rajlich)</p></li> -<li><p>build: compile release build too if BUILDTYPE=Debug (Ben Noordhuis)</p></li> -<li><p>module: fix --debug-brk on symlinked scripts (Fedor Indutny)</p></li> -<li><p>zlib: fix <code>Failed to set dictionary</code> issue (Fedor Indutny)</p></li> -<li><p>waf: predict target arch for OS X (Fedor Indutny)</p></li> -</ul><p>Source Code: <a href="http://nodejs.org/dist/v0.7.2/node-v0.7.2.tar.gz">http://nodejs.org/dist/v0.7.2/node-v0.7.2.tar.gz</a></p> - -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.2/node-v0.7.2.msi">http://nodejs.org/dist/v0.7.2/node-v0.7.2.msi</a></p> - -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.7.2/node-v0.7.2.pkg">http://nodejs.org/dist/v0.7.2/node-v0.7.2.pkg</a></p> - -<p>Website: <a href="http://nodejs.org/docs/v0.7.2/">http://nodejs.org/docs/v0.7.2/</a></p> - -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.2/api/">http://nodejs.org/docs/v0.7.2/api/</a></p> diff --git a/doc/blog/release/node-v0-7-3.md b/doc/blog/release/node-v0-7-3.md deleted file mode 100644 index e4942bd68..000000000 --- a/doc/blog/release/node-v0-7-3.md +++ /dev/null @@ -1,39 +0,0 @@ -version: 0.7.3 -title: Node v0.7.3 (unstable) -author: Isaac Schlueter -date: Tue Feb 07 2012 17:08:27 GMT-0800 (PST) -status: publish -category: release -slug: node-v0-7-3 - -<p>2012.02.07, Version 0.7.3 (unstable) - -</p> -<ul> -<li><p>Upgrade V8 to 3.9.2</p> -</li> -<li><p>Revert support for isolates. (Ben Noordhuis)</p> -</li> -<li><p>cluster: Cleanup docs, event handling, and process.disconnect (Andreas Madsen)</p> -</li> -<li><p>gyp_addon: link with node.lib on Windows (Nathan Rajlich)</p> -</li> -<li><p>http: fix case where http-parser is freed twice (koichik)</p> -</li> -<li><p>Windows: disable RTTI and exceptions (Bert Belder)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.7.3/node-v0.7.3.tar.gz">http://nodejs.org/dist/v0.7.3/node-v0.7.3.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.3/node-v0.7.3.msi">http://nodejs.org/dist/v0.7.3/node-v0.7.3.msi</a> - -</p> -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.7.3/node-v0.7.3.pkg">http://nodejs.org/dist/v0.7.3/node-v0.7.3.pkg</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.7.3/">http://nodejs.org/docs/v0.7.3/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.3/api/">http://nodejs.org/docs/v0.7.3/api/</a> -</p> diff --git a/doc/blog/release/node-v0.8.0.md b/doc/blog/release/node-v0.8.0.md deleted file mode 100644 index 118668fc9..000000000 --- a/doc/blog/release/node-v0.8.0.md +++ /dev/null @@ -1,384 +0,0 @@ -title: Node v0.8.0 -date: Mon Jun 25 2012 09:00:00 GMT-0700 (PDT) -version: 0.8.0 -category: release -author: Isaac Z. Schlueter -slug: node-v0-8-0 -status: publish - -I am thrilled to announce the arrival of a new stable version of -Node.js. - -Compared with the v0.6 releases of Node, this release brings significant -improvements in many key performance metrics, as well as -cleanup in several core APIs, and the addition of new debugging -features. - -## tl;dr - -With version 0.8.0: - -1. Node got a lot faster. -2. Node got more stable. -3. You can do stuff with file descriptors again. -4. The [cluster module](http://nodejs.org/api/cluster.html) is much more - awesome. -5. The [domain module](http://nodejs.org/api/domain.html) was added. -6. The repl is better. -7. The build system changed from waf to gyp. -8. [Some other stuff changed, - too.](https://github.com/joyent/node/wiki/API-changes-between-v0.6-and-v0.8) -9. Scroll to the bottom for the links to install it. - -## Performance - -This version brings a few key enhancements in V8 and libuv that result -in significantly improved throughput. - -All of these benchmarks were run on my OS X laptop, but the results are -typical of what we're seeing on SmartOS, Linux, and Windows. - -``` -# io.js - -# 0.6.19, writes -Wrote 1024 byte buffers: 19.428793471925395 mB/s -Wrote 4096 byte buffers: 59.737156511350065 mB/s -Wrote 16384 byte buffers: 83.97010664203543 mB/s -Wrote 65536 byte buffers: 97.4184120798831 mB/s - -# 0.8.0, writes -Wrote 1024 byte buffers: 61.236987140232706 mB/s +215.19% -Wrote 4096 byte buffers: 109.05125408942203 mB/s +82.55% -Wrote 16384 byte buffers: 182.18254691200585 mB/s +116.96% -Wrote 65536 byte buffers: 181.91740949608877 mB/s +86.74% - -# v0.6.19, reads -Read 1024 byte buffers: 29.96883241428914 mB/s -Read 4096 byte buffers: 62.34413965087282 mB/s -Read 16384 byte buffers: 165.7550140891762 mB/s -Read 65536 byte buffers: 266.73779674579885 mB/s - -# v0.8.0, reads -Read 1024 byte buffers: 57.63688760806916 mB/s +92.32% -Read 4096 byte buffers: 136.7801942278758 mB/s +119.40% -Read 16384 byte buffers: 244.8579823702253 mB/s +47.72% -Read 65536 byte buffers: 302.2974607013301 mB/s +13.33% -``` - -The difference is not small. If you are writing network programs with -node, and pushing a lot of traffic, you will notice this improvement. - -The speed of reading files got quite a bit faster as well: - -``` -# v0.6.19 -read the file 110948 times (higher is better) -90141.32 ns per read (lower is better) -11093.69 reads per sec (higher is better) - -# v0.8.0 -read the file 158193 times (higher is better) +42.58% -63217.16 ns per read (lower is better) -29.87% -15818.48 reads per sec (higher is better) +42.59% -``` - -And of course, the ubiquitous 'hello, world' http server benchmark got -significantly faster, especially for large message sizes: - -``` -$ TYPE=bytes LENGTH=123 bash benchmark/http.sh 2>&1 | grep Req -# 0.6.19 -Requests per second: 3317.24 [#/sec] (mean) -# 0.8.0 -Requests per second: 3795.34 [#/sec] (mean) +14.41% - - -$ TYPE=bytes LENGTH=1024 bash benchmark/http.sh 2>&1 | grep Req -# v0.6.19 -Requests per second: 3258.42 [#/sec] (mean) -# 0.8.0 -Requests per second: 3585.62 [#/sec] (mean) +10.04% - - -$ TYPE=bytes LENGTH=123456 bash benchmark/http.sh 2>&1 | grep Req -# v0.6.19 -Requests per second: 218.51 [#/sec] (mean) -# 0.8.0 -Requests per second: 749.17 [#/sec] (mean) +242.85% -``` - -The difference with Unicode responses is even more pronounced: - -``` -$ TYPE=unicode LENGTH=1024 bash benchmark/http.sh 2>&1 | grep Req -# v0.6.19 -Requests per second: 3228.23 [#/sec] (mean) -# v0.8.0 -Requests per second: 3317.60 [#/sec] (mean) +2.77% - -$ TYPE=unicode LENGTH=12345 bash benchmark/http.sh 2>&1 | grep Req -# v0.6.19 -Requests per second: 1703.96 [#/sec] (mean) -# v0.8.0 -Requests per second: 2431.61 [#/sec] (mean) +42.70% - -$ TYPE=unicode LENGTH=55555 bash benchmark/http.sh 2>&1 | grep Req -#v0.6.19 -Requests per second: 161.65 [#/sec] (mean) -#v0.8.0 -Requests per second: 980.38 [#/sec] (mean) +506.48% - -$ TYPE=unicode LENGTH=99999 bash benchmark/http.sh 2>&1 | grep Req -# v0.6.19 -^C # lost patience after a few hours -# v0.8.0 -Requests per second: 252.69 [#/sec] (mean) -``` - -The more bytes you're pushing, and the more work you're doing, the more -win you'll see with node 0.8 over 0.6. - -The vast majority of the performance boost is due to improvements in V8. -They've been very responsive to the needs of the Node.js project. A lot -of Node's success is due to being built on such a stellar VM. - - -## Build System - -Since its inception Node has used the WAF build system which is a Python -based system similar to SCons. The Chrome project recently changed to -the GYP meta-build system from SCons. GYP generates Makefiles, Visual -Studio project files, or XCode files depending on the target. V8, being -part of the Chrome project, now defines its build in GYP. By using GYP, -Node is able to: - -- integrate with the optimal build system on all platforms, -- easily able to integrate V8's build process into its own, and -- define its compilation declaratively for better manageability - -GYP was used already in Node v0.6 to build on Windows, but now it -defines the build on all platforms. Node is still in the process of -migrating external addon modules to GYP, and node-gyp is included with -npm. In future releases, node-waf will be officially deprecated. If -you are currently using a wscript in your addon, please migrate to gyp -as soon as possible. - - -## Stabler - -The transition from libev and libeio to libuv in 0.6 was somewhat -destabilizing for many node internals. The gambit paid off: libuv is -the obvious choice in cross-platform asynchronous IO libraries, and -Node.js is impressively performant on both Windows and Unix. But it -made the transition from 0.4 to 0.6 was very rocky for a lot of users. -Libuv wasn't as mature as node, and it showed in those early releases. - -At this point, with very few exceptions, if your v0.6 program doesn't -run on v0.8, it should be easy and obvious to make whatever changes are -necessary. Libuv has come a very long way, and Node 0.8 is a simpler -and more efficient machine as a result. - -See the [migration -wiki](https://github.com/joyent/node/wiki/API-changes-between-v0.6-and-v0.8) -for details on the specific APIs that changed. - -## The Return of File Descriptors - -In Node 0.4, there was a `listenFD` method that servers could use to -listen on a specific file descriptor that was already bound to a socket -or port. In 0.6, that functionality went away, largely because it was -very Unix-specific, and couldn't be easily made to work with the new -cross-platform libuv base. - -Since the most common use case for listenFD was as a method for having -servers in multiple node processes share the same underlying handle, the -`cluster` module was added in its place. However, this still left a lot -of use cases unaddressed, and was a reason why some people could not use -node 0.6 for their programs. - -In 0.8, we've replaced this functionality, as `server.listen({ fd: -number })`. - -The other feature in node 0.4 that got dropped in 0.6 was the ability to -pass arbitrary file descriptors as a child process's stdio, using the -`customFds` array. In Node 0.6, `customFds` could be used to inherit -the parent's stdio handles, but not to pass arbitrary handles or file -descriptors to the child's stdio. Also, there was never a way to pass -more than the standard `in, out, err` trio, so programs that expected -FD 4 to be opened in some specific way were out of luck. - -In 0.8, we've added the `stdio` array on the `child_process.spawn` -options. Pass as many file descriptors, handles, etc. as you like, and -the child process will see them as already-opened FDs. - -## More Powerful Cluster - -The cluster module in 0.8 is so much improved over 0.6, it's basically a -complete rewrite. The API is mostly backwards compatible, but not -entirely. (See the [migration -wiki](https://github.com/joyent/node/wiki/API-changes-between-v0.6-and-v0.8) -for details.) - -Barring these very minor API changes, if you were using cluster in 0.6, -then your program will still work, but it'll be faster and more -well-behaved now. And if you aren't taking advantage of the new -features in 0.8's cluster, you're really missing out. - -There's too much even to do it justice here. Go read [the API -docs](http://nodejs.org/api/cluster.html). - -## Domains - -The original idea for Domains was a way to join multiple different IO -actions, so that you can have some context when an error occurs. - -Since Ryan discussed the feature with node users at NodeConf Summer Camp -last year, the domains feature has gone through many revisions. The -problem is fairly well understood, but most attempts to solve it -resulted in serious performance regressions, or uncovered difficult edge -cases. - -What we ended up with in 0.8 is a very stripped-down version of this -idea. It's entirely opt-in, with minimal performance impact when it's -used (and none when it isn't). There are a lot of examples in [the API -documentation](http://nodejs.org/api/domain.html), so check them out, -and start handling your crashes smarter. - -The domain module is still experimental. We are looking forward to your -feedback, so please use it and let us know what you think. - -## Repl, Readline, TTY - -The Repl, Readline, and TTY modules have all had a major facelift. The -interfaces between these three modules are cleaned up and refactored, -removing a lot of common pain points and making it easier to use for -debugging your programs. - -It may seem minor at times, but a good repl dramatically increases the -quality of the overall experience. My personal favorites are: - -1. Typing `fs` or `net` or `path` will automatically load the module. -2. Typing `npm install ...` will give you a helpful message. -3. It doesn't do that stupid thing where long lines wrap and then the - backspace makes it get all confused and crazy. Instead of that, it - does the right thing. - -## Looking Forward - -Like other even-numbered version families before it, v0.8 will maintain -API and ABI stability throughout its lifetime. - -The v0.6 release family will continue to see releases for critical -bugfixes and security issues through the end of 2012. However, it will -not be the main focus of the core team's attention. - -The v0.9 releases will start in the next couple weeks. The main focus -of v0.9 will be: - -* The HTTP implementation - It has seen a lot of real-world use now, but - the http module is in dire need of a cleanup and refactor. Special - attention will be paid to making the interfaces more consistent, - improve performance, and increase correctness in more edge cases. -* The Streams API - The concept of the Stream API is very core to node. - However, it is also (like HTTP) a feature that grew up organically, - and is now in need of a cleanup. It is currently too hard to get - right, especially regarding error handling. -* Libuv Streams - The handle interfaces in libuv are going to be - refactored for added consistency throughout the codebase and across - platforms. - -Looking past that, there are a few areas where Node.js still has room -for improvement in terms of internal consistency, idiomatic JavaScript -usage, and performance. None of these are fully-fleshed out ideas yet, -but these are some of the items on our radar: - -* We ought to move to TypedArrays in favor of Buffers. Buffers will - continue to work, but since TypedArray is a JavaScript native, it - makes sense to move towards that as the preferred API. -* SSL performance leaves much to be desired at the moment. Node's - interface with OpenSSL is somewhat naive and leaves a lot of potential - optimization on the table. -* The VM module needs massive improvement. It lacks features required - to emulate a web browser JavaScript context, which means that it is - inadequate. -* The Crypto module still uses some very dated APIs. In 0.8, it can - accept Buffers for many things (finally!) but it still does not - present a Node-like streaming interface. - -At this point, the scope of Node's feature set is pretty much locked -down. We may move things around internally for these cleanup tasks, but -as you can see, there are no major new features planned. We've drawn -our boundaries, and now it's time to continue focusing on improving -stability and performance of the core, so that more innovation can -happen in **your** programs. - -And now, for those of you who may be wondering what was added since -v0.7.12, your regularly scheduled release announcement: - -## 2012.06.25, Version 0.8.0 (stable) - -* V8: upgrade to v3.11.10.10 - -* npm: Upgrade to 1.1.32 - -* Deprecate iowatcher (Ben Noordhuis) - -* windows: update icon (Bert Belder) - -* http: Hush 'MUST NOT have a body' warnings to debug() (isaacs) - -* Move blog.nodejs.org content into repository (isaacs) - -* Fix #3503: stdin: resume() on pipe(dest) (isaacs) - -* crypto: fix error reporting in SetKey() (Fedor Indutny) - -* Add --no-deprecation and --trace-deprecation command-line flags (isaacs) - -* fs: fix fs.watchFile() (Ben Noordhuis) - -* fs: Fix fs.readfile() on pipes (isaacs) - -* Rename GYP variable node_use_system_openssl to be consistent (Ryan Dahl) - - -Source Code: http://nodejs.org/dist/v0.8.0/node-v0.8.0.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.0/node-v0.8.0.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.0/node-v0.8.0-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.0/x64/node-v0.8.0-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.0/x64/ - -Other release files: http://nodejs.org/dist/v0.8.0/ - -Website: http://nodejs.org/docs/v0.8.0/ - -Documentation: http://nodejs.org/docs/v0.8.0/api/ - -Shasums: - -``` -b92208b291ad420025c65661a7df51fc618e21ca license.rtf -0786bcda79bd651b9981682527a1bbabe0250700 node-v0.8.0-x86.msi -8f160a742a01fdfc1b1423b3fc742d184f1ab70c node-v0.8.0-x86.wixpdb -6035d6d59304add21e462cd7eb89491570b4970d node-v0.8.0.pkg -5171fb46fbfee5ac7129c4b17207a3f35a1f57e8 node-v0.8.0.tar.gz -742100a4ee4cd4d190031a30d9b22b2b69b6872e node.exe -52d20d285e9aec53043af0843f5ecc4153210693 node.exp -6d67a64274d844548cc6099c76181a50feafc233 node.lib -aa2af08d5ab869e6c8b67f01ed67129c1cad8bce node.pdb -b92208b291ad420025c65661a7df51fc618e21ca x64/license.rtf -c4d4164d4f78ea68e0e2a85b96f9b355f3b1df8b x64/node-v0.8.0-x64.msi -df8bb178ee4cb9562d93fe80bbe59b2acf1b9e6b x64/node-v0.8.0-x64.wixpdb -fc07b475d943f7681e1904d6d7d666b41874a6fa x64/node.exe -895002806dfb6d5bb141ef0f43cad3b540a4ff6c x64/node.exp -686c60d5ae5dad7fcffcdc88049c63b2cd23cffc x64/node.lib -75549cffab0c11107348a66ab0d94d4897bd6a27 x64/node.pdb -``` - -<ins>Edited by Tim Oxley to provide percentage differences in the -benchmarks.</ins> diff --git a/doc/blog/release/node-version-0-6-19-stable.md b/doc/blog/release/node-version-0-6-19-stable.md deleted file mode 100644 index cb8febe35..000000000 --- a/doc/blog/release/node-version-0-6-19-stable.md +++ /dev/null @@ -1,61 +0,0 @@ -version: 0.6.19 -title: Node Version 0.6.19 (stable) -author: Isaac Schlueter -date: Wed Jun 06 2012 09:55:37 GMT-0700 (PDT) -status: publish -category: release -slug: node-version-0-6-19-stable - -<p>2012.06.06 Version 0.6.19 (stable) - -</p> -<ul> -<li><p>npm: upgrade to 1.1.24</p> -</li> -<li><p>fs: no end emit after createReadStream.pause() (Andreas Madsen)</p> -</li> -<li><p>vm: cleanup module memory leakage (Marcel Laverdet)</p> -</li> -<li><p>unix: fix loop starvation under high network load (Ben Noordhuis)</p> -</li> -<li><p>unix: remove abort() in ev_unref() (Ben Noordhuis)</p> -</li> -<li><p>windows/tty: never report error after forcibly aborting line-buffered read (Bert Belder)</p> -</li> -<li><p>windows: skip GetFileAttributes call when opening a file (Bert Belder)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.19/node-v0.6.19.tar.gz">http://nodejs.org/dist/v0.6.19/node-v0.6.19.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.19/node-v0.6.19.msi">http://nodejs.org/dist/v0.6.19/node-v0.6.19.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.6.19/x64/">http://nodejs.org/dist/v0.6.19/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.6.19/node-v0.6.19.pkg">http://nodejs.org/dist/v0.6.19/node-v0.6.19.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.6.19/">http://nodejs.org/dist/v0.6.19/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.19/">http://nodejs.org/docs/v0.6.19/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.19/api/">http://nodejs.org/docs/v0.6.19/api/</a> -</p> - -<p>Shasums:</p> -<pre>ef4f5c1e5f12f6ef3478a794d6a81f59669332f9 node-v0.6.19.msi -781616f33208f532f168633758a648c20e1ea68b node-v0.6.19.pkg -f6c5cfbadff4788ac3a95f8263a0c2f4e07444b6 node-v0.6.19.tar.gz -10f729ca236825821d97556441fa64f994cb4ca8 node.exe -5b8cd02e5f92ed6512aabdac11766ad8c1abc436 node.exp -20037e4901de605e08e48d0c85531334912844e3 node.lib -c44f62852918d449850014d9b29dd073cb6920a5 node.pdb -04db25c93c5357394941dd2de12cb61959eb82d1 x64/node-v0.6.19.msi -f77c77f2e470cfc9071853af2f277ba91d660b9c x64/node.exe -fcf26a3f984a3f19804e0567414604b77b1d3bac x64/node.exp -bfed2a24f253dbac99379d6f22fc8e9e85ade7ed x64/node.lib -95226c1cc5170ea05c2e54431040f06c3e95e99f x64/node.pdb</pre> diff --git a/doc/blog/release/node-version-0-7-9-unstable.md b/doc/blog/release/node-version-0-7-9-unstable.md deleted file mode 100644 index 683823aa3..000000000 --- a/doc/blog/release/node-version-0-7-9-unstable.md +++ /dev/null @@ -1,73 +0,0 @@ -version: 0.7.9 -title: Node Version 0.7.9 (unstable) -author: Isaac Schlueter -date: Tue May 29 2012 10:11:45 GMT-0700 (PDT) -status: publish -category: release -slug: node-version-0-7-9-unstable - -<p>2012.05.28, Version 0.7.9 (unstable) - -</p> -<ul> -<li><p>Upgrade V8 to 3.11.1</p> -</li> -<li><p>Upgrade npm to 1.1.23</p> -</li> -<li><p>uv: rework reference counting scheme (Ben Noordhuis)</p> -</li> -<li><p>uv: add interface for joining external event loops (Bert Belder)</p> -</li> -<li><p>repl, readline: Handle Ctrl+Z and SIGCONT better (Nathan Rajlich)</p> -</li> -<li><p>fs: 64bit offsets for fs calls (Igor Zinkovsky)</p> -</li> -<li><p>fs: add sync open flags 'rs' and 'rs+' (Kevin Bowman)</p> -</li> -<li><p>windows: enable creating directory junctions with fs.symlink (Igor Zinkovsky, Bert Belder)</p> -</li> -<li><p>windows: fix fs.lstat to properly detect symlinks. (Igor Zinkovsky)</p> -</li> -<li><p>Fix #3270 Escape url.parse delims (isaacs)</p> -</li> -<li><p>http: make http.get() accept a URL (Adam Malcontenti-Wilson)</p> -</li> -<li><p>Cleanup vm module memory leakage (Marcel Laverdet)</p> -</li> -<li><p>Optimize writing strings with Socket.write (Bert Belder)</p> -</li> -<li><p>add support for CESU-8 and UTF-16LE encodings (koichik)</p> -</li> -<li><p>path: add path.sep to get the path separator. (Yi, EungJun)</p> -</li> -<li><p>net, http: add backlog parameter to .listen() (Erik Dubbelboer)</p> -</li> -<li><p>debugger: support mirroring Date objects (Fedor Indutny)</p> -</li> -<li><p>addon: add AtExit() function (Ben Noordhuis)</p> -</li> -<li><p>net: signal localAddress bind failure in connect (Brian Schroeder)</p> -</li> -<li><p>util: handle non-string return value in .inspect() (Alex Kocharin)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.7.9/node-v0.7.9.tar.gz">http://nodejs.org/dist/v0.7.9/node-v0.7.9.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.9/node-v0.7.9.msi">http://nodejs.org/dist/v0.7.9/node-v0.7.9.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.7.9/x64/">http://nodejs.org/dist/v0.7.9/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.7.9/node-v0.7.9.pkg">http://nodejs.org/dist/v0.7.9/node-v0.7.9.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.7.9/">http://nodejs.org/dist/v0.7.9/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.7.9/">http://nodejs.org/docs/v0.7.9/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.9/api/">http://nodejs.org/docs/v0.7.9/api/</a> -</p> diff --git a/doc/blog/release/v0.10.0.md b/doc/blog/release/v0.10.0.md deleted file mode 100644 index 35a65f5a4..000000000 --- a/doc/blog/release/v0.10.0.md +++ /dev/null @@ -1,487 +0,0 @@ -title: Node v0.10.0 (Stable) -category: release -version: 0.10.0 -date: 2013-03-11T16:00:00.000Z -slug: node-v0-10-0-stable -author: Isaac Z. Schlueter - -I am pleased to announce a new stable version of Node. - -This branch brings significant improvements to many areas, with a -focus on API polish, ease of use, and backwards compatibility. - -For a very brief overview of the relevant API changes since v0.8, -please see [the API changes wiki -page](https://github.com/joyent/node/wiki/Api-changes-between-v0.8-and-v0.10). - -## Streams2 - -In a [previous post](http://blog.nodejs.org/2012/12/20/streams2/), we -introduced the -"[Streams2](http://blog.nodejs.org/2012/12/20/streams2/)" API changes. -If you haven't reviewed the changes, please go read that now (at least -the tl;dr section). - -The changes to the stream interface have been a long time in the -making. Even from the earliest days of Node, we've all sort of known -that this whole "data events come right away" and "pause() is -advisory" stuff was unnecessarily awful. In v0.10, we finally bit the -bullet and committed to making drastic changes in order to make these -things better. - -More importantly, all streams in Node-core are built using the same -set of easily-extended base classes, so their behavior is much more -consistent, and it's easier than ever to create streaming interfaces -in your own userland programs. - -In fact, the Streams2 API was developed while using it for modules in -the npm registry. At the time of this writing, [37 published Node -modules](https://npmjs.org/browse/depended/readable-stream) already -are using the -[readable-stream](https://npmjs.org/package/readable-stream) library -as a dependency. The readable-stream npm package allows you to use -the new Stream interface in your legacy v0.8 codebase. - -## Domains and Error Handling - -The `domain` module has been elevated from "Experimental" to -"Unstable" status. It's been given more of a first-class treatment -internally, making it easier to handle some of the edge cases that we -found using Domains for error handling in v0.8. Specifically, domain -error handler no longer relies on `process.on('uncaughtException')` -being raised, and the C++ code in Node is domain-aware. - -If you're not already using Domains to catch errors in your programs, -and you've found yourself wishing that you could get better debugging -information when errors are thrown (especially in the midst of lots of -requests and asynchronous calls), then definitely check it out. - -## Faster process.nextTick - -In v0.8 (and before), the `process.nextTick()` function scheduled its -callback using a spinner on the event loop. This *usually* caused the -callback to be fired before any other I/O. However, it was not -guaranteed. - -As a result, a lot of programs (including some parts of Node's -internals) began using `process.nextTick` as a "do later, but before -any actual I/O is performed" interface. Since it usually works that -way, it seemed fine. - -However, under load, it's possible for a server to have a lot of I/O -scheduled, to the point where the `nextTick` gets preempted for -something else. This led to some odd errors and race conditions, -which could not be fixed without changing the semantics of nextTick. - -So, that's what we did. In v0.10, `nextTick` handlers are run right -after each call from C++ into JavaScript. That means that, if your -JavaScript code calls `process.nextTick`, then the callback will fire -as soon as the code runs to completion, but *before* going back to -the event loop. The race is over, and all is good. - -However, there are programs out in the wild that use recursive calls -to `process.nextTick` to avoid pre-empting the I/O event loop for -long-running jobs. In order to avoid breaking horribly right away, -Node will now print a deprecation warning, and ask you to use -`setImmediate` for these kinds of tasks instead. - -## Latency and Idle Garbage Collection - -One of the toughest things to get right in a garbage collected -language is garbage collection. In order to try to avoid excessive -memory usage, Node used to try to tell V8 to collect some garbage -whenever the event loop was idle. - -However, knowing exactly when to do this is extremely difficult. -There are different degrees of "idleness", and if you get it wrong, -you can easily end up spending massive amounts of time collecting -garbage when you'd least expect. In practice, disabling the -`IdleNotification` call yields better performance without any -excessive memory usage, because V8 is pretty good at knowing when it's -the best time to run GC. - -So, in v0.10, we just ripped that feature out. (According to another -point of view, we fixed the bug that it was ever there in the first -place.) As a result, latency is much more predictable and stable. -You won't see a difference in the benchmarks as a result of this, but -you'll probably find that your app's response times are more reliable. - - -## Performance and Benchmarks - -When the Streams2 feature first landed in master, it disrupted a lot -of things. We focused first on correctness rather than speed, and as -a result of that, we got a correct implementation that was -significantly slower. - -We have a consistent rule in Node, that it cannot be allowed to get -slower for our main use cases. It took a lot of work, but over the -last few months, we've managed to get v0.10 to an appropriate level of -performance, without sacrificing the API goals that we had in mind. - -Benchmarks are complicated beasts. Until this release, we've gotten -by with a pretty ad-hoc approach to running benchmarks. However, as -we started actually having to track down regressions, the need for a -more comprehensive approach was obvious. - -Work is underway to figure out the optimum way to get statistically -significant benchmark results in an automated way. As it is, we're -still seeing significant jitter in some of the data, so take the red -and green colors with a grain of salt. - -The benchmarks below were run on an Apple 13-inch, Late 2011 MacBook -Pro with a 2.8 GHz Intel Core i7 processor, 8GB of 1333MHz DDR3 RAM, -running OS X Lion 10.7.5 (11G63b). The numbers are slightly different -on Linux and SmartOS, but the conclusions are the same. The [raw data -is available](http://nodejs.org/benchmarks-v0.10-vs-v0.8/), as well. - -## Benchmarks: http - -Node is for websites, and websites run over HTTP, so this is the one -that people usually care the most about: - -<pre style="background-color:#333;color:#eee;font-size:12px"> -http/cluster.js type=bytes length=4: <span style="background-color:#0f0;color:#000">v0.10: 16843</span> v0.8: 16202 ................. <span style="background-color:#0f0;color:#000">3.96%</span> -http/cluster.js type=bytes length=1024: <span style="background-color:#0f0;color:#000">v0.10: 15505</span> v0.8: 15065 .............. <span style="background-color:#0f0;color:#000">2.92%</span> -http/cluster.js type=bytes length=102400: v0.10: 1555.2 <span style="background-color:#f00;color:#fff">v0.8: 1566.3</span> ......... <span style="background-color:#f00;color:#fff">-0.71%</span> -http/cluster.js type=buffer length=4: <span style="background-color:#0f0;color:#000">v0.10: 15308</span> v0.8: 14763 ................ <span style="background-color:#0f0;color:#000">3.69%</span> -http/cluster.js type=buffer length=1024: <span style="background-color:#0f0;color:#000">v0.10: 15039</span> v0.8: 14830 ............. <span style="background-color:#0f0;color:#000">1.41%</span> -http/cluster.js type=buffer length=102400: <span style="background-color:#0f0;color:#000">v0.10: 7584.6</span> v0.8: 7433.6 ......... <span style="background-color:#0f0;color:#000">2.03%</span> -http/simple.js type=bytes length=4: <span style="background-color:#0f0;color:#000">v0.10: 12343</span> v0.8: 11761 .................. <span style="background-color:#0f0;color:#000">4.95%</span> -http/simple.js type=bytes length=1024: <span style="background-color:#0f0;color:#000">v0.10: 11051</span> v0.8: 10287 ............... <span style="background-color:#0f0;color:#000">7.43%</span> -http/simple.js type=bytes length=102400: v0.10: 853.19 <span style="background-color:#f00;color:#fff">v0.8: 892.75</span> .......... <span style="background-color:#f00;color:#fff">-4.43%</span> -http/simple.js type=buffer length=4: <span style="background-color:#0f0;color:#000">v0.10: 11316</span> v0.8: 10728 ................. <span style="background-color:#0f0;color:#000">5.48%</span> -http/simple.js type=buffer length=1024: <span style="background-color:#0f0;color:#000">v0.10: 11199</span> v0.8: 10429 .............. <span style="background-color:#0f0;color:#000">7.38%</span> -http/simple.js type=buffer length=102400: <span style="background-color:#0f0;color:#000">v0.10: 4942.1</span> v0.8: 4822.9 .......... <span style="background-color:#0f0;color:#000">2.47%</span> -</pre> - -What we see here is that, overall, HTTP is faster. It's just slightly -slower (1-5%) when sending extremely large string messages (ie -`type=bytes` rather than `type=buffer`). But otherwise, things are -about the same, or slightly faster. - -## Benchmarks: fs - -The fs.ReadStream throughput is massively improved, and less affected -by the chunk size argument: - -<pre style="background-color:#333;color:#eee;font-size:12px"> -fs/read-stream buf size=1024: <span style="background-color:#0f0;color:#000">v0.10</span>: 1106.6 v0.8: 60.597 ................... <span style="background-color:#0f0;color:#000">1726.12%</span> -fs/read-stream buf size=4096: <span style="background-color:#0f0;color:#000">v0.10</span>: 1107.9 v0.8: 235.51 .................... <span style="background-color:#0f0;color:#000">370.44%</span> -fs/read-stream buf size=65535: <span style="background-color:#0f0;color:#000">v0.10</span>: 1108.2 v0.8: 966.84 .................... <span style="background-color:#0f0;color:#000">14.62%</span> -fs/read-stream buf size=1048576: <span style="background-color:#0f0;color:#000">v0.10</span>: 1103.3 v0.8: 959.66 .................. <span style="background-color:#0f0;color:#000">14.97%</span> -fs/read-stream asc size=1024: <span style="background-color:#0f0;color:#000">v0.10</span>: 1081.5 v0.8: 62.218 ................... <span style="background-color:#0f0;color:#000">1638.21%</span> -fs/read-stream asc size=4096: <span style="background-color:#0f0;color:#000">v0.10</span>: 1082.3 v0.8: 174.78 .................... <span style="background-color:#0f0;color:#000">519.21%</span> -fs/read-stream asc size=65535: <span style="background-color:#0f0;color:#000">v0.10</span>: 1083.9 v0.8: 627.91 .................... <span style="background-color:#0f0;color:#000">72.62%</span> -fs/read-stream asc size=1048576: <span style="background-color:#0f0;color:#000">v0.10</span>: 1083.2 v0.8: 627.49 .................. <span style="background-color:#0f0;color:#000">72.62%</span> -fs/read-stream utf size=1024: <span style="background-color:#0f0;color:#000">v0.10</span>: 46.553 v0.8: 16.944 .................... <span style="background-color:#0f0;color:#000">174.74%</span> -fs/read-stream utf size=4096: <span style="background-color:#0f0;color:#000">v0.10</span>: 46.585 v0.8: 32.933 ..................... <span style="background-color:#0f0;color:#000">41.45%</span> -fs/read-stream utf size=65535: <span style="background-color:#0f0;color:#000">v0.10</span>: 46.57 v0.8: 45.832 ...................... <span style="background-color:#0f0;color:#000">1.61%</span> -fs/read-stream utf size=1048576: <span style="background-color:#0f0;color:#000">v0.10</span>: 46.576 v0.8: 45.884 ................... <span style="background-color:#0f0;color:#000">1.51%</span> -</pre> - -The fs.WriteStream throughput increases considerably, for most -workloads. As the size of the chunk goes up, the speed is limited by -the underlying system and the cost of string conversion, so v0.8 and -v0.10 converge. But for smaller chunk sizes (like you'd be more -likely to see in real applications), v0.10 is a significant -improvement. - -<pre style="background-color:#333;color:#eee;font-size:12px"> -fs/write-stream buf size=2: <span style="background-color:#0f0;color:#000">v0.10</span>: 0.12434 v0.8: 0.10097 ..................... <span style="background-color:#0f0;color:#000">23.15%</span> -fs/write-stream buf size=1024: <span style="background-color:#0f0;color:#000">v0.10</span>: 59.926 v0.8: 49.822 .................... <span style="background-color:#0f0;color:#000">20.28%</span> -fs/write-stream buf size=65535: <span style="background-color:#0f0;color:#000">v0.10</span>: 180.41 v0.8: 179.26 .................... <span style="background-color:#0f0;color:#000">0.64%</span> -fs/write-stream buf size=1048576: <span style="background-color:#0f0;color:#000">v0.10</span>: 181.49 v0.8: 176.73 .................. <span style="background-color:#0f0;color:#000">2.70%</span> -fs/write-stream asc size=2: <span style="background-color:#0f0;color:#000">v0.10</span>: 0.11133 v0.8: 0.08123 ..................... <span style="background-color:#0f0;color:#000">37.06%</span> -fs/write-stream asc size=1024: <span style="background-color:#0f0;color:#000">v0.10</span>: 53.023 v0.8: 36.708 .................... <span style="background-color:#0f0;color:#000">44.45%</span> -fs/write-stream asc size=65535: <span style="background-color:#0f0;color:#000">v0.10</span>: 178.54 v0.8: 174.36 .................... <span style="background-color:#0f0;color:#000">2.39%</span> -fs/write-stream asc size=1048576: <span style="background-color:#0f0;color:#000">v0.10</span>: 185.27 v0.8: 183.65 .................. <span style="background-color:#0f0;color:#000">0.88%</span> -fs/write-stream utf size=2: <span style="background-color:#0f0;color:#000">v0.10</span>: 0.11165 v0.8: 0.080079 .................... <span style="background-color:#0f0;color:#000">39.43%</span> -fs/write-stream utf size=1024: <span style="background-color:#0f0;color:#000">v0.10</span>: 45.166 v0.8: 32.636 .................... <span style="background-color:#0f0;color:#000">38.39%</span> -fs/write-stream utf size=65535: <span style="background-color:#0f0;color:#000">v0.10</span>: 176.1 v0.8: 175.34 ..................... <span style="background-color:#0f0;color:#000">0.43%</span> -fs/write-stream utf size=1048576: v0.10: 182.3 <span style="background-color:#f00;color:#fff">v0.8</span>: 182.82 .................. <span style="background-color:#f00;color:#fff">-0.28%</span> -</pre> - -## Benchmark: tls - -We switched to a newer version of OpenSSL, and the CryptoStream -implementation was significantly changed to support the Stream2 -interface. - -The throughput of TLS connections is massively improved: - -<pre style="background-color:#333;color:#eee;font-size:12px"> -tls/throughput.js dur=5 type=buf size=2: <span style="background-color:#0f0;color:#000">v0.10: 0.90836</span> v0.8: 0.32381 ....... <span style="background-color:#0f0;color:#000">180.52%</span> -tls/throughput.js dur=5 type=buf size=1024: <span style="background-color:#0f0;color:#000">v0.10: 222.84</span> v0.8: 116.75 ....... <span style="background-color:#0f0;color:#000">90.87%</span> -tls/throughput.js dur=5 type=buf size=1048576: <span style="background-color:#0f0;color:#000">v0.10: 403.17</span> v0.8: 360.42 .... <span style="background-color:#0f0;color:#000">11.86%</span> -tls/throughput.js dur=5 type=asc size=2: <span style="background-color:#0f0;color:#000">v0.10: 0.78323</span> v0.8: 0.28761 ....... <span style="background-color:#0f0;color:#000">172.32%</span> -tls/throughput.js dur=5 type=asc size=1024: <span style="background-color:#0f0;color:#000">v0.10: 199.7</span> v0.8: 102.46 ........ <span style="background-color:#0f0;color:#000">94.91%</span> -tls/throughput.js dur=5 type=asc size=1048576: <span style="background-color:#0f0;color:#000">v0.10: 375.85</span> v0.8: 317.81 .... <span style="background-color:#0f0;color:#000">18.26%</span> -tls/throughput.js dur=5 type=utf size=2: <span style="background-color:#0f0;color:#000">v0.10: 0.78503</span> v0.8: 0.28834 ....... <span style="background-color:#0f0;color:#000">172.26%</span> -tls/throughput.js dur=5 type=utf size=1024: <span style="background-color:#0f0;color:#000">v0.10: 182.43</span> v0.8: 100.3 ........ <span style="background-color:#0f0;color:#000">81.88%</span> -tls/throughput.js dur=5 type=utf size=1048576: <span style="background-color:#0f0;color:#000">v0.10: 333.05</span> v0.8: 301.57 .... <span style="background-color:#0f0;color:#000">10.44%</span> -</pre> - -However, the speed at which we can make connections is somewhat -reduced: - -<pre style="background-color:#333;color:#eee;font-size:12px"> -tls/tls-connect.js concurrency=1 dur=5: v0.10: 433.05 <span style="background-color:#f00;color:#fff">v0.8: 560.43</span> .......... <span style="background-color:#f00;color:#fff">-22.73%</span> -tls/tls-connect.js concurrency=10 dur=5: v0.10: 438.38 <span style="background-color:#f00;color:#fff">v0.8: 577.93</span> ......... <span style="background-color:#f00;color:#fff">-24.15%</span> -</pre> - -At this point, it seems like the connection speed is related to the -new version of OpenSSL, but we'll be tracking that further. - -TLS still has more room for improvement, but this throughput increase -is a huge step. - -## Benchmark: net - -The net throughput tests tell an interesting story. When sending -ascii messages, they're much faster. - -<pre style="background-color:#333;color:#eee;font-size:12px"> -net/net-c2s.js len=102400 type=asc dur=5: <span style="background-color:#0f0;color:#000">v0.10: 3.6551</span> v0.8: 2.0478 ......... <span style="background-color:#0f0;color:#000">78.49%</span> -net/net-c2s.js len=16777216 type=asc dur=5: <span style="background-color:#0f0;color:#000">v0.10: 3.2428</span> v0.8: 2.0503 ....... <span style="background-color:#0f0;color:#000">58.16%</span> -net/net-pipe.js len=102400 type=asc dur=5: <span style="background-color:#0f0;color:#000">v0.10: 4.4638</span> v0.8: 3.0798 ........ <span style="background-color:#0f0;color:#000">44.94%</span> -net/net-pipe.js len=16777216 type=asc dur=5: <span style="background-color:#0f0;color:#000">v0.10: 3.9449</span> v0.8: 2.8906 ...... <span style="background-color:#0f0;color:#000">36.48%</span> -net/net-s2c.js len=102400 type=asc dur=5: <span style="background-color:#0f0;color:#000">v0.10: 3.6306</span> v0.8: 2.0415 ......... <span style="background-color:#0f0;color:#000">77.84%</span> -net/net-s2c.js len=16777216 type=asc dur=5: <span style="background-color:#0f0;color:#000">v0.10: 3.2271</span> v0.8: 2.0636 ....... <span style="background-color:#0f0;color:#000">56.38%</span> -</pre> - -When sending Buffer messages, they're just slightly slower. (This -difference is less than the typical variability of the test, but they -were run 20 times and outliers were factored out for this post.) - -<pre style="background-color:#333;color:#eee;font-size:12px"> -net/net-c2s.js len=102400 type=buf dur=5: v0.10: 5.5597 <span style="background-color:#f00;color:#fff">v0.8: 5.6967</span> ......... <span style="background-color:#f00;color:#fff">-2.40%</span> -net/net-c2s.js len=16777216 type=buf dur=5: v0.10: 6.1843 <span style="background-color:#f00;color:#fff">v0.8: 6.4595</span> ....... <span style="background-color:#f00;color:#fff">-4.26%</span> -net/net-pipe.js len=102400 type=buf dur=5: v0.10: 5.6898 <span style="background-color:#f00;color:#fff">v0.8: 5.986</span> ......... <span style="background-color:#f00;color:#fff">-4.95%</span> -net/net-pipe.js len=16777216 type=buf dur=5: <span style="background-color:#0f0;color:#000">v0.10: 5.9643</span> v0.8: 5.9251 ....... <span style="background-color:#0f0;color:#000">0.66%</span> -net/net-s2c.js len=102400 type=buf dur=5: v0.10: 5.473 <span style="background-color:#f00;color:#fff">v0.8: 5.6492</span> .......... <span style="background-color:#f00;color:#fff">-3.12%</span> -net/net-s2c.js len=16777216 type=buf dur=5: v0.10: 6.1986 <span style="background-color:#f00;color:#fff">v0.8: 6.3236</span> ....... <span style="background-color:#f00;color:#fff">-1.98%</span> -</pre> - -When sending utf-8 messages, they're a bit slower than that: - -<pre style="background-color:#333;color:#eee;font-size:12px"> -net/net-c2s.js len=102400 type=utf dur=5: v0.10: 2.2671 <span style="background-color:#f00;color:#fff">v0.8: 2.4606</span> ......... <span style="background-color:#f00;color:#fff">-7.87%</span> -net/net-c2s.js len=16777216 type=utf dur=5: v0.10: 1.7434 <span style="background-color:#f00;color:#fff">v0.8: 1.8771</span> ....... <span style="background-color:#f00;color:#fff">-7.12%</span> -net/net-pipe.js len=102400 type=utf dur=5: v0.10: 3.1679 <span style="background-color:#f00;color:#fff">v0.8: 3.5401</span> ....... <span style="background-color:#f00;color:#fff">-10.51%</span> -net/net-pipe.js len=16777216 type=utf dur=5: v0.10: 2.5615 <span style="background-color:#f00;color:#fff">v0.8: 2.7002</span> ...... <span style="background-color:#f00;color:#fff">-5.14%</span> -net/net-s2c.js len=102400 type=utf dur=5: v0.10: 2.2495 <span style="background-color:#f00;color:#fff">v0.8: 2.4578</span> ......... <span style="background-color:#f00;color:#fff">-8.48%</span> -net/net-s2c.js len=16777216 type=utf dur=5: v0.10: 1.7733 <span style="background-color:#f00;color:#fff">v0.8: 1.8975</span> ....... <span style="background-color:#f00;color:#fff">-6.55%</span> -</pre> - -You might suspect that this is a result of the new Streams -implementation. However, running the same benchmarks without using -any of the code in Node's `lib/` folder, just calling into the C++ -bindings directly, yields consistently similar results. - -This slight regression comes along with significant improvements in -everything that sits on *top* of TCP (that is, TLS and HTTP). - -Keep an eye out for more work in this area. Fast is never fast -enough! - - -## Continuous Integration - -To support a higher degree of stability, and hopefully catch issues -sooner, we have a Jenkins instance running every commit through the -test suite, on each operating system we support. You can watch the -action at [the Node Jenkins web portal](http://jenkins.nodejs.org/). - -Coming soon, we'll have automatically generated nightly builds every -day, and eventually, the entire release process will be automated. - -While we're pretty rigorous about running tests and benchmarks, it's -easy for things to slip by, and our ad-hoc methods are not cutting it -any longer. This promises a much lower incidence of the sort of -regressions that delayed the release of v0.10 for several months. - - -## Growing Out - -A year ago, we said that the innovation in the Node universe would be -happening in userland modules. Now, we've finally taken that to its -logical conclusion, and moved our iteration on **core** modules into -userland as well. Things like `readable-stream` and `tlsnappy` allow -us to get much more user-testing, experimentation, and contributions -to a feature. - -The userland module can live on as a compatibility layer so that -libraries can use the new features, even if they need to support older -versions of Node. This is a remarkably effective way to do node-core -development. Future developments will continue to be iterated in -userland modules. - -## Growing Up <a name="enterprise"></a> - -The question comes up pretty often whether Node is "ready for prime -time" yet. I usually answer that it depends on your requirements for -"prime time", but Node has been powering some high profile sites, and -the options for "real" companies using Node for The Business are -better than ever. - -It would be out of scope to try to provide an exhaustive list of all -the companies using Node, and all of the options for support and -training. However, here are a few resources that are quickly -expanding to fill the "Enterprise Node" space. - -For those looking for commercial support, -[StrongLoop](http://strongloop.com/) (Ben Noordhuis & Bert Belder's -company) has released a distribution containing node v0.10 that they -will support on Windows, Mac, Red Hat/Fedora, Debian/Ubuntu and -multiple cloud platforms. You can [download their Node distribution -here](http://strongloop.com/products#downloads). - -[The Node Firm](http://thenodefirm.com) is a worldwide network of key -Node contributors and community members that help organizations -succeed with Node. Through corporate training, consulting, -architectural guidance, and [ongoing consulting -subscriptions](http://thenodefirm.com/nodejs-consulting-subscriptions), -they have helped Skype, Qualcomm, and others quickly and effectively -embrace Node. - -Node would not be what it is without [npm](https://npmjs.org/), and -npm would not be what it is without the registry of published modules. -However, relying on the public registry is problematic for many -enterprise use-cases. [Iris npm](https://www.irisnpm.com/) is a fully -managed private npm registry, from [Iris -Couch](http://www.iriscouch.com), the team that runs the public npm -registry in production. - -[Joyent](http://joyent.com), the company you probably know as the -custodian of the Node project, provides high performance cloud -infrastructure specializing in real-time web and mobile applications. -Joyent uses Node extensively throughout their stack, and provides -impressive [post-mortem debugging and real-time performance analysis -tools](http://dtrace.org/blogs/dap/2012/05/31/debugging-node-js-in-production-fluent-slides/) -for Node.js applications. They are also my employer, so I'd probably -have to get a "real" job if they weren't sponsoring Node :) - -## Next Up: v0.12 - -The focus of Node v0.12 will be to make HTTP better. Node's current -HTTP implementation is pretty good, and clearly sufficient to do a lot -of interesting things with. However: - -1. The codebase is a mess. We share a lot of code between the Client - and Server implementations, but do so in a way that makes it - unnecessarily painful to read the code or fix bugs. It will be - split up so that client and server are clearly separated, and have - cleaner interfaces. -2. The socket pooling behavior is confusing and weird. We will be - adding configurable socket pooling as a standalone utility. This - will allow us to implement KeepAlive behavior in a more reasonable - manner, as well as providing something that you can use in your own - programs. - -There is some experimentation going on in the -[tlsnappy](https://github.com/indutny/tlsnappy) module, which may make -its way back into the core TLS implementation and speed things up -considerably. - -## 1.0 - -After 0.12, the next major stable release will be 1.0. At that point, -very little will change in terms of the day-to-day operation of the -project, but it will mark a significant milestone in terms of our -stability and willingness to add new features. However, we've already -gotten strict about maintaining backwards compatibility, so this won't -really be so much of a shift. - -New versions will still come out, especially to pull in new versions -of our dependencies, and bugs will continue to be fixed. There's been -talk of pinning our release cycles to V8, and automating the release -process in some interesting ways. - -The goal of Node has always been to eventually be "finished" with the -core program. Of course, that's a rather lofty goal, perhaps even -impossible. But as we take Node to more places, and use it in more -ways, we're getting closer to the day when the relevant innovation -happens outside of the core Node program. - -Stability in the platform enables growth on top of it. - -And now, the traditional release notes: - -## 2013.03.11, Version 0.10.0 (Stable) - -* npm: Upgrade to 1.2.14 - -* core: Append filename properly in dlopen on windows (isaacs) - -* zlib: Manage flush flags appropriately (isaacs) - -* domains: Handle errors thrown in nested error handlers (isaacs) - -* buffer: Strip high bits when converting to ascii (Ben Noordhuis) - -* win/msi: Enable modify and repair (Bert Belder) - -* win/msi: Add feature selection for various Node parts (Bert Belder) - -* win/msi: use consistent registry key paths (Bert Belder) - -* child_process: support sending dgram socket (Andreas Madsen) - -* fs: Raise EISDIR on Windows when calling fs.read/write on a dir (isaacs) - -* unix: fix strict aliasing warnings, macro-ify functions (Ben Noordhuis) - -* unix: honor UV_THREADPOOL_SIZE environment var (Ben Noordhuis) - -* win/tty: fix typo in color attributes enumeration (Bert Belder) - -* win/tty: don't touch insert mode or quick edit mode (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.10.0/node-v0.10.0.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.0/node-v0.10.0.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.0/node-v0.10.0-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.0/x64/node-v0.10.0-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.0/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.0/node-v0.10.0-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.0/node-v0.10.0-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.0/node-v0.10.0-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.0/node-v0.10.0-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.0/ - -Website: http://nodejs.org/docs/v0.10.0/ - -Documentation: http://nodejs.org/docs/v0.10.0/api/ - -Shasums: - -``` -b9e9bca99cdb5563cad3d3f04baa262e317b827c node-v0.10.0-darwin-x64.tar.gz -0227c9bc3df5b62267b9d4e3b0a92b3a70732229 node-v0.10.0-darwin-x86.tar.gz -9f5f7350d6f889ea8e794516ecfea651e8e53d24 node-v0.10.0-linux-x64.tar.gz -cc5f1cd6a2f2530bc400e761144bbaf8fcb66cc4 node-v0.10.0-linux-x86.tar.gz -42c14b7eab398976b1ac0a8e6e96989059616af5 node-v0.10.0-sunos-x64.tar.gz -ddcadbac66d1acea48aa6c5462d0a0d7308ea823 node-v0.10.0-sunos-x86.tar.gz -70eacf2cca7abec79fac4ca502e8d99590a2108a node-v0.10.0-x86.msi -c48c269b9b0f0a95e6e9234d4597d1c8a1c45c5a node-v0.10.0.pkg -7321266347dc1c47ed2186e7d61752795ce8a0ef node-v0.10.0.tar.gz -f8c6f55469551243ea461f023cc57c024f57fef2 node.exe -253ae79e411fcfddcf28861559ececb4b335db64 node.exp -acb8febb5ea714c065f201ced5423b0838fdf1b6 node.lib -0fdad1400036dd26d720070f783d3beeb3bb9c0a node.pdb -abcaf8ef606655a05e73ee5d06715ffd022aad22 x64/node-v0.10.0-x64.msi -e5d0c235629b26430b6e07c07ee2c7dcda82f35e x64/node.exe -43b3fb3a6aaf6a04f578ee607a9455c1e23acf08 x64/node.exp -87dd6eb6c8127a1af0dcca639961441fc303d75a x64/node.lib -50aca715777fa42b854e6cfc56b6199a54aabd3c x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.1.md b/doc/blog/release/v0.10.1.md deleted file mode 100644 index 1bd22c268..000000000 --- a/doc/blog/release/v0.10.1.md +++ /dev/null @@ -1,82 +0,0 @@ -date: Thu Mar 21 09:09:59 PDT 2013 -version: 0.10.1 -category: release -title: Node v0.10.1 (Stable) -slug: node-v0-10-1-stable - -2013.03.21, Version 0.10.1 (Stable) - -* npm: upgrade to 1.2.15 - -* crypto: Improve performance of non-stream APIs (Fedor Indutny) - -* tls: always reset this.ssl.error after handling (Fedor Indutny) - -* tls: Prevent mid-stream hangs (Fedor Indutny, isaacs) - -* net: improve arbitrary tcp socket support (Ben Noordhuis) - -* net: handle 'finish' event only after 'connect' (Fedor Indutny) - -* http: Don't hot-path end() for large buffers (isaacs) - -* fs: Missing cb errors are deprecated, not a throw (isaacs) - -* fs: make write/appendFileSync correctly set file mode (Raymond Feng) - -* stream: Return self from readable.wrap (isaacs) - -* stream: Never call decoder.end() multiple times (Gil Pedersen) - -* windows: enable watching signals with process.on('SIGXYZ') (Bert Belder) - -* node: revert removal of MakeCallback (Trevor Norris) - -* node: Unwrap without aborting in handle fd getter (isaacs) - - -Source Code: http://nodejs.org/dist/v0.10.1/node-v0.10.1.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.1/node-v0.10.1.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.1/node-v0.10.1-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.1/x64/node-v0.10.1-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.1/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.1/node-v0.10.1-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.1/node-v0.10.1-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.1/node-v0.10.1-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.1/node-v0.10.1-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.1/ - -Website: http://nodejs.org/docs/v0.10.1/ - -Documentation: http://nodejs.org/docs/v0.10.1/api/ - -Shasums: -``` -e213170fe5ec7721b31149fba1a7a691c50b5379 node-v0.10.1-darwin-x64.tar.gz -5526d189fa3180e11731e1aebb0f22c1c2fb3d8d node-v0.10.1-darwin-x86.tar.gz -ec0818d8f151d933ec79961374bf74d9855305a5 node-v0.10.1-linux-x64.tar.gz -b6345e86bc52575f8cc275cda36b1295ed544139 node-v0.10.1-linux-x86.tar.gz -e94cb3ab3ac5a8026564152798070e06f1ba3119 node-v0.10.1-sunos-x64.tar.gz -a894eaca7f49077e48b1786071dbdf57a2ea704c node-v0.10.1-sunos-x86.tar.gz -3f64590730d8e24e57530192479fd39dafde13b5 node-v0.10.1-x86.msi -b41c576c473a1ae44c3061fe4799362239f00d8f node-v0.10.1.pkg -d4d9ef3b70452112246ea2043ef75943611e3537 node-v0.10.1.tar.gz -c034695812148c3fafe8b208203355d16289d1a7 node.exe -9fac94cbe9431ca518fdb1eed1a1b240a58ac781 node.exp -3571d5d7f9940f48b75f9a9b1fac8c8661e8ace2 node.lib -74f9ea112e2da1c1837180422a20630bc92bd5c9 node.pdb -0958d68900b80419e2af7a5448c4a451af06d0b4 x64/node-v0.10.1-x64.msi -cc074b6c99cb1df01707ea12e986cf5bb4dc3c05 x64/node.exe -f2746fea78ffb346e8ea979ea09924dc4408bcb9 x64/node.exp -1f1d9d1ba0d9383ecc93e8d8a481b13db39dc5f8 x64/node.lib -39a0a5a699e4a8cba44e618f6be6bd79f36a370f x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.10.md b/doc/blog/release/v0.10.10.md deleted file mode 100644 index 5907f3909..000000000 --- a/doc/blog/release/v0.10.10.md +++ /dev/null @@ -1,63 +0,0 @@ -date: Tue Jun 4 14:37:25 PDT 2013 -version: 0.10.10 -category: release -title: Node v0.10.10 (Stable) -slug: node-v0-10-10-stable - -2013.06.04, Version 0.10.10 (Stable) - -* uv: Upgrade to 0.10.10 - -* npm: Upgrade to 1.2.25 - -* url: Properly parse certain oddly formed urls (isaacs) - -* stream: unshift('') is a noop (isaacs) - - -Source Code: http://nodejs.org/dist/v0.10.10/node-v0.10.10.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.10/node-v0.10.10.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.10/node-v0.10.10-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.10/x64/node-v0.10.10-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.10/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.10/node-v0.10.10-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.10/node-v0.10.10-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.10/node-v0.10.10-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.10/node-v0.10.10-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.10/ - -Website: http://nodejs.org/docs/v0.10.10/ - -Documentation: http://nodejs.org/docs/v0.10.10/api/ - -Shasums: - -``` -d632cad2adb5b4eef7a94bc9e549579586b381f5 node-v0.10.10-darwin-x64.tar.gz -6f74d0ca1a3bc810a4e73267451c0177be405874 node-v0.10.10-darwin-x86.tar.gz -b8a1f1954027b88b9545f3a2161543635f2120e7 node-v0.10.10-linux-x64.tar.gz -aae6893ee82cee09eec0351b770d4857e31e46b7 node-v0.10.10-linux-x86.tar.gz -0004745f5c0f96efc85f2bd9d9df24b1b706f77e node-v0.10.10-sunos-x64.tar.gz -a4e623f6688fde7f30d720ac4b1228546da823db node-v0.10.10-sunos-x86.tar.gz -1f09e829c92274de13270a7519e9e1cd5788e0a8 node-v0.10.10-x86.msi -24f7573e92060565ba84b7700efc4d9cf566e5ba node-v0.10.10.pkg -c21643a57b1ec9eca56e6deac22fe075616e0e9c node-v0.10.10.tar.gz -419fc85e5e16139260f7b2080ffbb66550fbe93f node.exe -bb2782228bf4f8783f9e6a9d1171f8ff0835c9b9 node.exp -28ce8d1f8156e6a8bf38844738f4a76499e0d2ce node.lib -eb58da2b123bc7aaceaa37a7a0bcc048d8d8dcc1 node.pdb -781f75fc1c7499edb8d7e247d774266d57514d21 x64/node-v0.10.10-x64.msi -14b75f31d14ca2e0fb90308e98a3567c6de0434e x64/node.exe -c5723e00cc875543ae263121d34d204690561860 x64/node.exp -df523e092ee9ff13b3acf4f4b574d043c0da6d9a x64/node.lib -db2a8874a3bc7cd21b8b29bc7faa5f75c8af0414 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.11.md b/doc/blog/release/v0.10.11.md deleted file mode 100644 index 67b80cdf7..000000000 --- a/doc/blog/release/v0.10.11.md +++ /dev/null @@ -1,70 +0,0 @@ -date: Thu Jun 13 11:34:24 PDT 2013 -version: 0.10.11 -category: release -title: Node v0.10.11 (Stable) -slug: node-v0-10-11-stable - -2013.06.13, Version 0.10.11 (Stable) - -* uv: upgrade to 0.10.11 - -* npm: Upgrade to 1.2.30 - -* openssl: add missing configuration pieces for MIPS (Andrei Sedoi) - -* Revert "http: remove bodyHead from 'upgrade' events" (isaacs) - -* v8: fix pointer arithmetic undefined behavior (Trevor Norris) - -* crypto: fix utf8/utf-8 encoding check (Ben Noordhuis) - -* net: Fix busy loop on POLLERR|POLLHUP on older linux kernels (Ben Noordhuis, isaacs) - - - -Source Code: http://nodejs.org/dist/v0.10.11/node-v0.10.11.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.11/node-v0.10.11.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.11/node-v0.10.11-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.11/x64/node-v0.10.11-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.11/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.11/node-v0.10.11-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.11/node-v0.10.11-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.11/node-v0.10.11-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.11/node-v0.10.11-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.11/ - -Website: http://nodejs.org/docs/v0.10.11/ - -Documentation: http://nodejs.org/docs/v0.10.11/api/ - -Shasums: - -``` -c460678436e513ef5b8b8513abd74c75d8ebf7bb node-v0.10.11-darwin-x64.tar.gz -edd321fc6d7525774a12433e943db3a7817a19b9 node-v0.10.11-darwin-x86.tar.gz -1388e8a2b6b4b2043db4fc382959d43e7c32e28e node-v0.10.11-linux-x64.tar.gz -2923e08deeb08a5ce1a29607c00f8b8e4fbd16c8 node-v0.10.11-linux-x86.tar.gz -4d12e60a9bf4c9c418d88951733a6a51201b789d node-v0.10.11-sunos-x64.tar.gz -842e283ea724a6d69a17e18426c32e6fd4b0734b node-v0.10.11-sunos-x86.tar.gz -bbc874e7ad72d980a19ee76dc1d9012d801f1d8f node-v0.10.11-x86.msi -05d0a697a183f809a949832a0fd98e1e30d53e72 node-v0.10.11.pkg -4f646bb3418d1c177ce28cdbc61e71de35b38aea node-v0.10.11.tar.gz -e2eec3e170e1d26622231ee3f0b632485756a5f0 node.exe -8957dd0c31c115819f9387250f038a1e6259cfa9 node.exp -930ba687c31f09dd199c0cfb2ac492f57c0f640f node.lib -6bd963cff4baba07cb05d7e6aa566aebe8db5519 node.pdb -016356e656ac8091900637e3fb64ddc3dd53cfb5 x64/node-v0.10.11-x64.msi -a845f30c9f0100b6f4d79080c72068ff497c5c23 x64/node.exe -00719da33432ae9a264407c89239ce5a76e21df0 x64/node.exp -1f96e883134197c27aada23847b049491dd46b13 x64/node.lib -83989e612f56b0a8e90e4fad8cb1a7d8b0bdfcd0 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.12.md b/doc/blog/release/v0.10.12.md deleted file mode 100644 index e58140456..000000000 --- a/doc/blog/release/v0.10.12.md +++ /dev/null @@ -1,67 +0,0 @@ -date: Tue Jun 18 11:12:19 PDT 2013 -version: 0.10.12 -category: release -title: Node v0.10.12 (Stable) -slug: node-v0-10-12-stable - -2013.06.18, Version 0.10.12 (Stable) - -* npm: Upgrade to 1.2.32 - -* readline: make `ctrl + L` clear the screen (Yuan Chuan) - -* v8: add setVariableValue debugger command (Ben Noordhuis) - -* net: Do not destroy socket mid-write (isaacs) - -* v8: fix build for mips32r2 architecture (Andrei Sedoi) - -* configure: fix cross-compilation host_arch_cc() (Andrei Sedoi) - - -Source Code: http://nodejs.org/dist/v0.10.12/node-v0.10.12.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.12/node-v0.10.12.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.12/node-v0.10.12-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.12/x64/node-v0.10.12-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.12/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.12/node-v0.10.12-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.12/node-v0.10.12-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.12/node-v0.10.12-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.12/node-v0.10.12-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.12/ - -Website: http://nodejs.org/docs/v0.10.12/ - -Documentation: http://nodejs.org/docs/v0.10.12/api/ - -Shasums: - -``` -e3c28629938d70dac535dca0b78199ae7e4e7cf6 node-v0.10.12-darwin-x64.tar.gz -d777c8c50270b7c834ee9ca95c186d30e181f885 node-v0.10.12-darwin-x86.tar.gz -c5b9cbb9b6329767f11a89c14e09afa795e3f9e9 node-v0.10.12-linux-x64.tar.gz -f7a7ac317ab3a8406ec11ec118c38971d5e4c508 node-v0.10.12-linux-x86.tar.gz -c5f446d6768298ad0d917f920f422a1e82d92fce node-v0.10.12-sunos-x64.tar.gz -05725a5255f762193838dac7175cbba418ef77c7 node-v0.10.12-sunos-x86.tar.gz -3403fed2cedf23764de50e17d0eeb5c960e88b79 node-v0.10.12-x86.msi -8e7cfecf737886014616d7c683bbb8a5ef38f4f7 node-v0.10.12.pkg -3e4f692fb9156c0cee4dd35bd8a6be4ff89a29de node-v0.10.12.tar.gz -d1cb17e753a5e0370c9ffe7f753e5c9b1d5bb9ff node.exe -af802e62b0da817543f5a4d51304d7fc49b4e56c node.exp -737eb43e0daed76112e8371f85176151dc380ac5 node.lib -b273075995dba44e7ae02641c3c8ba4c6301be8d node.pdb -e109532cc9d83599d7ebe18c325d14bdc7087ae8 x64/node-v0.10.12-x64.msi -1d902d66ecfd78c5bfef4181bab075119377006d x64/node.exe -3d79a1f3a94c31f73c095d9b3fd83ae80e14042f x64/node.exp -80295d8b0cb4922dbae01d85a0726f2721f0db00 x64/node.lib -2b5663f50946b13a1df4d9fcf7f9edd9605e130c x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.13.md b/doc/blog/release/v0.10.13.md deleted file mode 100644 index 484f1ecdc..000000000 --- a/doc/blog/release/v0.10.13.md +++ /dev/null @@ -1,76 +0,0 @@ -date: Tue Jul 9 14:24:47 PDT 2013 -version: 0.10.13 -category: release -title: Node v0.10.13 (Stable) -slug: node-v0-10-13-stable - -2013.07.09, Version 0.10.13 (Stable) - -* uv: Upgrade to v0.10.12 - -* npm: Upgrade to 1.3.2 - -* windows: get proper errno (Ben Noordhuis) - -* tls: only wait for finish if we haven't seen it (Timothy J Fontaine) - -* http: Dump response when request is aborted (isaacs) - -* http: use an unref'd timer to fix delay in exit (Peter Rust) - -* zlib: level can be negative (Brian White) - -* zlib: allow zero values for level and strategy (Brian White) - -* buffer: add comment explaining buffer alignment (Ben Noordhuis) - -* string_bytes: properly detect 64bit (Timothy J Fontaine) - -* src: fix memory leak in UsingDomains() (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.10.13/node-v0.10.13.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.13/node-v0.10.13.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.13/node-v0.10.13-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.13/x64/node-v0.10.13-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.13/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.13/node-v0.10.13-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.13/node-v0.10.13-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.13/node-v0.10.13-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.13/node-v0.10.13-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.13/ - -Website: http://nodejs.org/docs/v0.10.13/ - -Documentation: http://nodejs.org/docs/v0.10.13/api/ - -Shasums: -``` -ae0b5d8e9afc57da259c7f30d266c968c16479bb node-v0.10.13-darwin-x64.tar.gz -5e5629a546f9aa2c1e11883021c416a6e0e12ad2 node-v0.10.13-darwin-x86.tar.gz -83b8f07aa7981694e557a9aae7e5bc4c312d800c node-v0.10.13-linux-x64.tar.gz -ec016d282d85036151dc096cd5cee6c8bd20fdd8 node-v0.10.13-linux-x86.tar.gz -3464241dc541bbf094ed11c0cd2ef8edb6419ee7 node-v0.10.13-sunos-x64.tar.gz -abca9f52cfac47cc0b3e92e3bc18b578a92915e6 node-v0.10.13-sunos-x86.tar.gz -5d020e9d3ef1021216e5cc294449c1a699b3f458 node-v0.10.13-x86.msi -841803a64e824f84361d4e7f6e1abd8ff31056ca node-v0.10.13.pkg -f73d5f134296ed0aa16cbec5d727f94587844155 node-v0.10.13.tar.gz -19beeb0f418b226a7ec7f15cdc0dccdf5f0d9e55 node.exe -eca52e8f39d4ac5bf3d07f6b50722f41b0494cc9 node.exp -2c47530c0d7c8e60f5c0daa78c105772b5638c9d node.lib -23c917f0c2c0e85677fb85583668b5e695315ced node.pdb -76cc14f56a3225e51f25b60faebe971cfb3ca322 x64/node-v0.10.13-x64.msi -e96c1687d447ed642ffd85134c0d949428a0b400 x64/node.exe -1962db68f17ffbd44c0ff82c0ff75b4ffe338319 x64/node.exp -95f162082c359d8610dd59ea634d4bd80d40c8aa x64/node.lib -3ec49f4849d5fdb3e1acbcff8e3eb02d9d55d332 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.14.md b/doc/blog/release/v0.10.14.md deleted file mode 100644 index 760950113..000000000 --- a/doc/blog/release/v0.10.14.md +++ /dev/null @@ -1,72 +0,0 @@ -date: Thu Jul 25 13:35:41 PDT 2013 -version: 0.10.14 -category: release -title: Node v0.10.14 (Stable) -slug: node-v0-10-14-stable - -2013.07.25, Version 0.10.14 (Stable) - -* uv: Upgrade to v0.10.13 - -* npm: Upgrade to v1.3.5 - -* os: Don't report negative times in cpu info (Ben Noordhuis) - -* fs: Handle large UID and GID (Ben Noordhuis) - -* url: Fix edge-case when protocol is non-lowercase (Shuan Wang) - -* doc: Streams API Doc Rewrite (isaacs) - -* node: call MakeDomainCallback in all domain cases (Trevor Norris) - -* crypto: fix memory leak in LoadPKCS12 (Fedor Indutny) - - -Source Code: http://nodejs.org/dist/v0.10.14/node-v0.10.14.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.14/node-v0.10.14.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.14/node-v0.10.14-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.14/x64/node-v0.10.14-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.14/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.14/node-v0.10.14-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.14/node-v0.10.14-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.14/node-v0.10.14-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.14/node-v0.10.14-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.14/ - -Website: http://nodejs.org/docs/v0.10.14/ - -Documentation: http://nodejs.org/docs/v0.10.14/api/ - -Shasums: -``` -f6a13dc93f677e9d71f15570ea3db2244c09b26e node-v0.10.14-darwin-x64.tar.gz -c7a456bb7bd7a3d46e4d4ed65b19458e8c937431 node-v0.10.14-darwin-x86.tar.gz -9797f93df6085796ccad0f84a65fcdee46aaeedf node-v0.10.14-linux-x64.tar.gz -f40ade7d212be254a67994f86f598b1c1c0b7b4c node-v0.10.14-linux-x86.tar.gz -c187f1385224e8d4bc2b465d9677c060b399e268 node-v0.10.14-sunos-x64.tar.gz -bd8edd17eff8928ccd0adedbe63ddf3631324148 node-v0.10.14-sunos-x86.tar.gz -7654aacdcdc832387e479b2c3de731b3b6ca3d01 node-v0.10.14-x86.msi -90892d5672a75baa761afd2f238c06d4fa58cfef node-v0.10.14.pkg -b5d27b36d25bd7d45e1bb52ce0e0fdfb49dde370 node-v0.10.14.tar.gz -f2de9c77ed3914fd9139668581f970f8df698687 node.exe -b2a767985060c0719569d8fcfe7ad7e5548d952c node.exp -fa035fd44672547f8424df4a461f0a48c4cfdb97 node.lib -aaaf7b82f826dd2a0358223ea7f1a70ccf93bc77 node.pdb -9758a6374055ebfb5a2d788e1f95ebb267a5c20b pkgsrc/nodejs-ia32-0.10.14.tgz -d8ca87abc993a042030d63bcae08e85a30eef4b8 pkgsrc/nodejs-x64-0.10.14.tgz -b372293ff300dacae79c44603e878726e282b3a2 x64/node-v0.10.14-x64.msi -293a240db1cd280907a16956d4d6bb72ad9ef02a x64/node.exe -9d03fa6d751359e174586190e757efbf61869d50 x64/node.exp -8b4e097f17d4efe13a05bff7534bb23738821a9d x64/node.lib -0323632950aa90ed4bb083774b487f6287dae7a5 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.15.md b/doc/blog/release/v0.10.15.md deleted file mode 100644 index be8945258..000000000 --- a/doc/blog/release/v0.10.15.md +++ /dev/null @@ -1,58 +0,0 @@ -date: Thu Jul 25 16:57:47 PDT 2013 -version: 0.10.15 -category: release -title: Node v0.10.15 (Stable) -slug: node-v0-10-15-stable - -2013.07.25, Version 0.10.15 (Stable) - -* src: fix process.getuid() return value (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.10.15/node-v0.10.15.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.15/node-v0.10.15.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.15/node-v0.10.15-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.15/x64/node-v0.10.15-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.15/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.15/node-v0.10.15-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.15/node-v0.10.15-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.15/node-v0.10.15-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.15/node-v0.10.15-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.15/ - -Website: http://nodejs.org/docs/v0.10.15/ - -Documentation: http://nodejs.org/docs/v0.10.15/api/ - -Shasums: -``` -b812ba5b966b89180d1391a9de5ccd075fc84c65 node-v0.10.15-darwin-x64.tar.gz -f07bed2a59040d7adf3a647c953c3942b132da5c node-v0.10.15-darwin-x86.tar.gz -d236ed82967eefa726ec144301728b6a32ab8d8d node-v0.10.15-linux-x64.tar.gz -5629f83b10dc95d899268c3387895085270bb9e1 node-v0.10.15-linux-x86.tar.gz -408e52074146cfed792f20ea54e9eca4419164af node-v0.10.15-sunos-x64.tar.gz -01ed71a5b019c6a2b51750c2e287613be1df0d92 node-v0.10.15-sunos-x86.tar.gz -18c72b9394a943136ad5446599c732bc5fd5af9a node-v0.10.15-x86.msi -9dba40ed9c511faa215586d0b0f535d4ae55016c node-v0.10.15.pkg -14174896de074c244b0ed2251a95d7163d5a5e87 node-v0.10.15.tar.gz -fad9611a7f656b8097c97de7b2ed016f3f33c6f9 node.exe -ee48f297215ce12ba87998ccc06760ab3e667573 node.exp -11f354ebcccfb88133a529e6e1337185a3b60550 node.lib -230fc683b097afd33583ede1ec1f41fe4dae414b node.pdb -9d349103a53f444d1f9835989e22ebf2c906e3c0 pkgsrc/nodejs-ia32-0.10.15.tgz -bb1397b448bf2a58ce62fc3c51fb14633e840bbd pkgsrc/nodejs-x64-0.10.15.tgz -7c6fbdfe5c0154477f1dd8acd915c8c13766b9ae x64/node-v0.10.15-x64.msi -f273ef837b2bc3b8cf5b1b7a363b510cb230a9be x64/node.exe -57fcec104d9fd3af53286f15353c7cd75e961382 x64/node.exp -86afa3785280a25d183ff46bfea3a845b6b506c0 x64/node.lib -f6bc69a9c20c3965fd4969040cde9b43c7de50ff x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.16.md b/doc/blog/release/v0.10.16.md deleted file mode 100644 index 64528df1d..000000000 --- a/doc/blog/release/v0.10.16.md +++ /dev/null @@ -1,74 +0,0 @@ -date: Fri Aug 16 12:45:21 PDT 2013 -version: 0.10.16 -category: release -title: Node v0.10.16 (Stable) -slug: node-v0-10-16-stable - -2013.08.16, Version 0.10.16 (Stable) - -* v8: back-port fix for CVE-2013-2882 - -* npm: Upgrade to 1.3.8 - -* crypto: fix assert() on malformed hex input (Ben Noordhuis) - -* crypto: fix memory leak in randomBytes() error path (Ben Noordhuis) - -* events: fix memory leak, don't leak event names (Ben Noordhuis) - -* http: Handle hex/base64 encodings properly (isaacs) - -* http: improve chunked res.write(buf) performance (Ben Noordhuis) - -* stream: Fix double pipe error emit (Eran Hammer) - - -Source Code: http://nodejs.org/dist/v0.10.16/node-v0.10.16.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.16/node-v0.10.16.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.16/node-v0.10.16-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.16/x64/node-v0.10.16-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.16/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.16/node-v0.10.16-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.16/node-v0.10.16-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.16/node-v0.10.16-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.16/node-v0.10.16-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.16/ - -Website: http://nodejs.org/docs/v0.10.16/ - -Documentation: http://nodejs.org/docs/v0.10.16/api/ - -Shasums: - -``` -c76d0cac292784dcff16642e5b8e9b6e50bd2d1f node-v0.10.16-darwin-x64.tar.gz -0405727606cc0bfd86fe16226235d6a17cf03524 node-v0.10.16-darwin-x86.tar.gz -f651398c19cc56915c996660c8977a1da3c5cfaa node-v0.10.16-linux-arm-pi.tar.gz -784ac3b09eedc9ea2eda6d9bc8f7dd9760f40002 node-v0.10.16-linux-x64.tar.gz -8628a9679b0dd8b5521eb7009751f501b10db924 node-v0.10.16-linux-x86.tar.gz -49ebccdd4cf1b2433f64caf6430c0be050bf843c node-v0.10.16-sunos-x64.tar.gz -caf9d90e133e02f041f50056fa2be6575c606923 node-v0.10.16-sunos-x86.tar.gz -85ed82a3f0ce7fbdc6875b7d7b35474ff52ae76a node-v0.10.16-x86.msi -9e993cf61047dd5c1c1736ce372c90d184b55616 node-v0.10.16.pkg -646fd7ce38091ec9bd0c5d080a9da522edaabff7 node-v0.10.16.tar.gz -2eab45f17ad076d73c699e0b7029ef2ccb902cd6 node.exe -7f9b2b152aeb31d99f9cb728475852dcf08e4e42 node.exp -17dabe6f59c2216170c37192ce709636d9458ce8 node.lib -1b0488a644f3c45010f1da2f0fbd6915f55c646e node.pdb -c1535895c7f1b12e08432d9e7d760fa45d185013 pkgsrc/nodejs-ia32-0.10.16.tgz -68d9af8ea312603a483a15c057ccdffd39fe5ea4 pkgsrc/nodejs-x64-0.10.16.tgz -de4511ff2319f2b2e72664f0fa5cdbb97a79ca51 x64/node-v0.10.16-x64.msi -fd35dfd384a111dc52c8563125cdbe69577276b0 x64/node.exe -69b9866f0059fb7c6319d1f9bbea3886a27f29f5 x64/node.exp -6e19ddfb75eaeb41b4c18769b20ca6de997b5cd6 x64/node.lib -9e6b02883df774732ed1131c19e762cb309db917 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.17.md b/doc/blog/release/v0.10.17.md deleted file mode 100644 index 433bb4f7f..000000000 --- a/doc/blog/release/v0.10.17.md +++ /dev/null @@ -1,92 +0,0 @@ -date: Wed Aug 21 16:37:31 PDT 2013 -version: 0.10.17 -category: release -title: Node v0.10.17 (Stable) -slug: node-v0-10-17-stable - -2013.08.21, Version 0.10.17 (Stable) - -* uv: Upgrade v0.10.14 - -* http_parser: Do not accept PUN/GEM methods as PUT/GET (Chris Dickinson) - -* tls: fix assertion when ssl is destroyed at read (Fedor Indutny) - -* stream: Throw on 'error' if listeners removed (isaacs) - -* dgram: fix assertion on bad send() arguments (Ben Noordhuis) - -* readline: pause stdin before turning off terminal raw mode (Daniel Chatfield) - - -Source Code: http://nodejs.org/dist/v0.10.17/node-v0.10.17.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.17/node-v0.10.17.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.17/node-v0.10.17-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.17/x64/node-v0.10.17-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.17/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.17/node-v0.10.17-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.17/node-v0.10.17-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.17/node-v0.10.17-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.17/node-v0.10.17-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.17/ - -Website: http://nodejs.org/docs/v0.10.17/ - -Documentation: http://nodejs.org/docs/v0.10.17/api/ - -Shasums: -``` -8502c5ec4878154b5896fca6a14ff6c83c3774a1 node-v0.10.17-darwin-x64.tar.gz -6d785ae86ea050159dfd85841a4faac830be8a2a node-v0.10.17-darwin-x86.tar.gz -244dc1a25dcd2cc252ae9315bb2da07b41381c5c node-v0.10.17-linux-x64.tar.gz -109c32b514fab374b73972dda4f4d27a33e20d5d node-v0.10.17-linux-x86.tar.gz -2e046a6e05520c7be941365830517db90b791999 node-v0.10.17-sunos-x64.tar.gz -907d73aa0e84717c342327265f0b665d09b50154 node-v0.10.17-sunos-x86.tar.gz -ac8f653545b58d009e19522e3ead8886d151b59d node-v0.10.17-x86.msi -32f160364990489e1f79593e1cdcea9dfde28125 node-v0.10.17.pkg -c9d31d5415d2cf7a09fd7abebf9f01259e9dd93b node-v0.10.17.tar.gz -33a5e3a86c391fc30080e796c46a74cefbd9104c node.exe -004ebfa938b3f14984b964dcaba061d10c32f12c node.exp -3dd092b26c742f20006fc2085b329a3e32d8e3d9 node.lib -a8d997936e240626c56df8c6c8d55b659003a644 node.pdb -165fecaab04a09a4df6b731f0e4b264bdb281644 pkgsrc/nodejs-ia32-0.10.17.tgz -0c813098a93090823b513147de7f41f920dd8569 pkgsrc/nodejs-x64-0.10.17.tgz -3cf665ad6c8f7d3040c2bfea8791f77c40c8f2a0 x64/node-v0.10.17-x64.msi -95baf773a34f85014eb67d026b7b9cd0396f96f5 x64/node.exe -ebdbcea161d44368c224fce448bf3d85e5a54f21 x64/node.exp -49d12cb3d5be6f6707b7f5c89952f81bddb69a68 x64/node.lib -0c0ef15eb6705c81137187c597cb0105bd2bc352 x64/node.pdb -``` - -Shasums: -``` -8502c5ec4878154b5896fca6a14ff6c83c3774a1 node-v0.10.17-darwin-x64.tar.gz -6d785ae86ea050159dfd85841a4faac830be8a2a node-v0.10.17-darwin-x86.tar.gz -244dc1a25dcd2cc252ae9315bb2da07b41381c5c node-v0.10.17-linux-x64.tar.gz -109c32b514fab374b73972dda4f4d27a33e20d5d node-v0.10.17-linux-x86.tar.gz -2e046a6e05520c7be941365830517db90b791999 node-v0.10.17-sunos-x64.tar.gz -907d73aa0e84717c342327265f0b665d09b50154 node-v0.10.17-sunos-x86.tar.gz -ac8f653545b58d009e19522e3ead8886d151b59d node-v0.10.17-x86.msi -32f160364990489e1f79593e1cdcea9dfde28125 node-v0.10.17.pkg -c9d31d5415d2cf7a09fd7abebf9f01259e9dd93b node-v0.10.17.tar.gz -33a5e3a86c391fc30080e796c46a74cefbd9104c node.exe -004ebfa938b3f14984b964dcaba061d10c32f12c node.exp -3dd092b26c742f20006fc2085b329a3e32d8e3d9 node.lib -a8d997936e240626c56df8c6c8d55b659003a644 node.pdb -165fecaab04a09a4df6b731f0e4b264bdb281644 pkgsrc/nodejs-ia32-0.10.17.tgz -0c813098a93090823b513147de7f41f920dd8569 pkgsrc/nodejs-x64-0.10.17.tgz -3cf665ad6c8f7d3040c2bfea8791f77c40c8f2a0 x64/node-v0.10.17-x64.msi -95baf773a34f85014eb67d026b7b9cd0396f96f5 x64/node.exe -ebdbcea161d44368c224fce448bf3d85e5a54f21 x64/node.exp -49d12cb3d5be6f6707b7f5c89952f81bddb69a68 x64/node.lib -0c0ef15eb6705c81137187c597cb0105bd2bc352 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.18.md b/doc/blog/release/v0.10.18.md deleted file mode 100644 index a8acac00b..000000000 --- a/doc/blog/release/v0.10.18.md +++ /dev/null @@ -1,62 +0,0 @@ -date: Wed Sep 4 11:24:48 PDT 2013 -version: 0.10.18 -category: release -title: Node v0.10.18 (Stable) -slug: node-v0-10-18-stable - -2013.09.04, Version 0.10.18 (Stable) - -* uv: Upgrade to v0.10.15 - -* stream: Don't crash on unset _events property (isaacs) - -* stream: Pass 'buffer' encoding with decoded writable chunks (isaacs) - - -Source Code: http://nodejs.org/dist/v0.10.18/node-v0.10.18.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.18/node-v0.10.18.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.18/node-v0.10.18-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.18/x64/node-v0.10.18-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.18/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.18/node-v0.10.18-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.18/node-v0.10.18-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.18/node-v0.10.18-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.18/node-v0.10.18-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.18/ - -Website: http://nodejs.org/docs/v0.10.18/ - -Documentation: http://nodejs.org/docs/v0.10.18/api/ - -Shasums: -``` -c0219a68aa25369f4c83c5bdbb5ccc0db2cb8230 node-v0.10.18-darwin-x64.tar.gz -32261191c3b9f0988d4f132e442969714da3281f node-v0.10.18-darwin-x86.tar.gz -07923fa9613b2976b3be3a1bbe36d21b9f69f3c9 node-v0.10.18-linux-x64.tar.gz -4d4c6f485a110bf28e273020c20987c6045d2c57 node-v0.10.18-linux-x86.tar.gz -7b61c0c12fa99f8d0ab6ed0153359ed1c914e224 node-v0.10.18-sunos-x64.tar.gz -9f57be4b041058ea941b7f4c6f0a2ad9f431d46f node-v0.10.18-sunos-x86.tar.gz -fd50e0563e1ccf3efc903a33df40f86b6bfe2e62 node-v0.10.18-x86.msi -ff71d0e8003fc1b4674f98ceb912fba2161c8224 node-v0.10.18.pkg -0bc3c544ca1707ea4b8bd601706304e9c0609fe5 node-v0.10.18.tar.gz -ed35cc393d930fa05f4e1fbcadfa53e2837d59cb node.exe -5bb6f7af79fefa21ce936bdd60355d8d097c6cb6 node.exp -3581c8563d475642d07657fd639f48e595d2693d node.lib -7eb7f20b9e4dfb7d866b6d84916931630159230c node.pdb -192d7996c413e72a7f525039eca75ebdf0d5bc1f pkgsrc/nodejs-ia32-0.10.18.tgz -6c508f63bd76627ece633d04957a29bce52521c7 pkgsrc/nodejs-x64-0.10.18.tgz -8b845fe8723480f740d2efbfac3da11cb712ce66 x64/node-v0.10.18-x64.msi -dab63ee4c72612392cfa26c48808d45859cf6b4a x64/node.exe -90e37b4c9c7ea0e96a7035aa6473405da245006c x64/node.exp -1c19d9d5c6e7ced70742875a43085306b91d402d x64/node.lib -4e90849c7c96c4d2caffb64f062d91d14d152261 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.19.md b/doc/blog/release/v0.10.19.md deleted file mode 100644 index f725b340b..000000000 --- a/doc/blog/release/v0.10.19.md +++ /dev/null @@ -1,70 +0,0 @@ -date: Tue Sep 24 15:09:23 PDT 2013 -version: 0.10.19 -category: release -title: Node v0.10.19 (Stable) -slug: node-v0-10-19-stable - -2013.09.24, Version 0.10.19 (Stable) - -* uv: Upgrade to v0.10.17 - -* npm: upgrade to 1.3.11 - -* readline: handle input starting with control chars (Eric Schrock) - -* configure: add mips-float-abi (soft, hard) option (Andrei Sedoi) - -* stream: objectMode transforms allow falsey values (isaacs) - -* tls: prevent duplicate values returned from read (Nathan Rajlich) - -* tls: NPN protocols are now local to connections (Fedor Indutny) - - -Source Code: http://nodejs.org/dist/v0.10.19/node-v0.10.19.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.19/node-v0.10.19.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.19/node-v0.10.19-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.19/x64/node-v0.10.19-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.19/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.19/node-v0.10.19-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.19/node-v0.10.19-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.19/node-v0.10.19-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.19/node-v0.10.19-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.19/ - -Website: http://nodejs.org/docs/v0.10.19/ - -Documentation: http://nodejs.org/docs/v0.10.19/api/ - -Shasums: -``` -74f1db96742fcc0128d1c14d3cb808ef5c847749 node-v0.10.19-darwin-x64.tar.gz -71ef9bd63d3926a2b78a43a5d077838c43e7e2ea node-v0.10.19-darwin-x86.tar.gz -ebc6dc67276f7461dbd45496924b36949c75e7e0 node-v0.10.19-linux-x64.tar.gz -226b507f554fa5cc07296c30f08db76f5eaeb157 node-v0.10.19-linux-x86.tar.gz -3b324613b79d1c4ab3b9414b0644a3a559c2aec9 node-v0.10.19-sunos-x64.tar.gz -83cb3e58e9ac925ea22c8533cabc712625faa3f7 node-v0.10.19-sunos-x86.tar.gz -dcbe7db6d0c93f83f539f38807cd3c1923969721 node-v0.10.19-x86.msi -e6397e1df4e74864e3f0e5fc7bd24178828497f4 node-v0.10.19.pkg -39478caf7024af6d992007457540f8941104c5d9 node-v0.10.19.tar.gz -0fe9364b443e76f7364f8694751da15479417bdf node.exe -63555cdb67c2fd63411726dc691b08af520b27f6 node.exp -c4d33b56cff97c47b12df3ad237977a57d4c798d node.lib -19a603db8f8c30b1736124740a6a1c856f2d21d8 node.pdb -ca32da0335ecb09ab7316b6e18f23461e298768e pkgsrc/nodejs-ia32-0.10.19.tgz -b0b05a7f74d980720677a3232e82e23df211c122 pkgsrc/nodejs-x64-0.10.19.tgz -45aed04478346035e8dc7933d120ab636d56eac4 x64/node-v0.10.19-x64.msi -b81788c17fec167b77883dcbaf8c629ad7560c4d x64/node.exe -086761bf6ff4622714d24d7979548a37aaaea57e x64/node.exp -cc554a431039952207adfcb3997a7366ad7182e8 x64/node.lib -02d18f042f3d25663ea4d979dff8120435982079 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.2.md b/doc/blog/release/v0.10.2.md deleted file mode 100644 index 67957dd54..000000000 --- a/doc/blog/release/v0.10.2.md +++ /dev/null @@ -1,87 +0,0 @@ -date: Thu Mar 28 13:00:39 PDT 2013 -version: 0.10.2 -category: release -title: Node v0.10.2 (Stable) -slug: node-v0-10-2-stable - -2013.03.28, Version 0.10.2 (Stable) - -* npm: Upgrade to 1.2.15 - -* uv: Upgrade to 0.10.3 - -* tls: handle SSL_ERROR_ZERO_RETURN (Fedor Indutny) - -* tls: handle errors before calling C++ methods (Fedor Indutny) - -* tls: remove harmful unnecessary bounds checking (Marcel Laverdet) - -* crypto: make getCiphers() return non-SSL ciphers (Ben Noordhuis) - -* crypto: check randomBytes() size argument (Ben Noordhuis) - -* timers: do not calculate Timeout._when property (Alexey Kupershtokh) - -* timers: fix off-by-one ms error (Alexey Kupershtokh) - -* timers: handle signed int32 overflow in enroll() (Fedor Indutny) - -* stream: Fix stall in Transform under very specific conditions (Gil Pedersen) - -* stream: Handle late 'readable' event listeners (isaacs) - -* stream: Fix early end in Writables on zero-length writes (isaacs) - -* domain: fix domain callback from MakeCallback (Trevor Norris) - -* child_process: don't emit same handle twice (Ben Noordhuis) - -* child_process: fix sending utf-8 to child process (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.10.2/node-v0.10.2.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.2/node-v0.10.2.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.2/node-v0.10.2-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.2/x64/node-v0.10.2-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.2/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.2/node-v0.10.2-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.2/node-v0.10.2-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.2/node-v0.10.2-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.2/node-v0.10.2-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.2/ - -Website: http://nodejs.org/docs/v0.10.2/ - -Documentation: http://nodejs.org/docs/v0.10.2/api/ - -Shasums: - -``` -860ed25d3e77d4676b5512f87f3f98b6783ee258 node-v0.10.2-darwin-x64.tar.gz -811eb3b66651dfffeaf928496e8eecab5c9304fb node-v0.10.2-darwin-x86.tar.gz -2914731bdbe809483ed9da2578ce19121494e437 node-v0.10.2-linux-x64.tar.gz -dbf039ee15e423738db4ffc9c498d6b0ad54da07 node-v0.10.2-linux-x86.tar.gz -17bc5bf26af7da790e6b0c4cbb2b73ea1c9f2ed5 node-v0.10.2-sunos-x64.tar.gz -5e02e35cc15ae56953921ad4c8e45b849c736e20 node-v0.10.2-sunos-x86.tar.gz -2adb1bf5919fb8adeaf96edd8a8ed16d71a3f8f8 node-v0.10.2-x86.msi -73ff97a4d2d3bb1f468db2654b5b59a28f868cce node-v0.10.2.pkg -759a05eff48ff0b54e55748012c5c45502f7cecd node-v0.10.2.tar.gz -6c1336a61395747fed20a12c8977a2b2ecf23354 node.exe -f0775d4f649ee9c3d5614fdb26e64bc7d000cd5d node.exp -9860c6eb9062fbdc50b515f4ccab179f74dd3ec8 node.lib -d41d99a3921022533c1760e15447ce3acf050a7d node.pdb -1dbd11a5278831356daca035fe5bbbe1062798b4 x64/node-v0.10.2-x64.msi -d36abd4ecf02c522e8c75fce24eab1ce800d6458 x64/node.exe -295a950fe3c1c3ceb04249474388b891bf2a39ed x64/node.exp -b64eabafc3f9498552b3ea97bd0d922db1f90f75 x64/node.lib -1f31d6c0079e9f2c9a6de3d956649d83ca6e7a25 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.20.md b/doc/blog/release/v0.10.20.md deleted file mode 100644 index 70db1fe92..000000000 --- a/doc/blog/release/v0.10.20.md +++ /dev/null @@ -1,59 +0,0 @@ -date: Mon Sep 30 15:05:41 PDT 2013 -version: 0.10.20 -category: release -title: Node v0.10.20 (Stable) -slug: node-v0-10-20-stable - -2013.09.30, Version 0.10.20 (Stable) - -* tls: fix sporadic hang and partial reads (Fedor Indutny) - - fixes "npm ERR! cb() never called!" - - -Source Code: http://nodejs.org/dist/v0.10.20/node-v0.10.20.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.20/node-v0.10.20.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.20/node-v0.10.20-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.20/x64/node-v0.10.20-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.20/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.20/node-v0.10.20-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.20/node-v0.10.20-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.20/node-v0.10.20-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.20/node-v0.10.20-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.20/ - -Website: http://nodejs.org/docs/v0.10.20/ - -Documentation: http://nodejs.org/docs/v0.10.20/api/ - -Shasums: -``` -6f827b5bb1184160a58e0aac711791b610c30afd node-v0.10.20-darwin-x64.tar.gz -89869942f09351a5256f9ff68c3e1c363f108e7a node-v0.10.20-darwin-x86.tar.gz -b7c0a79acddfaeda8af221acdd18640ef5c62e8a node-v0.10.20-linux-x64.tar.gz -709cd1a646447036abe3f57ea6e33bb1d411c229 node-v0.10.20-linux-x86.tar.gz -dbe318556bc7a4d7ea47947600edcdb375a92d8e node-v0.10.20-sunos-x64.tar.gz -b003527f645bfc8c65d890854e20c92edc1feb86 node-v0.10.20-sunos-x86.tar.gz -34015dac5e517492fec6584cacd2d9864056107e node-v0.10.20-x86.msi -a0408be15afd0b5d34b8762edab6420339a8c4ff node-v0.10.20.pkg -d8777ac318627c1413f01358ea5c455f0f86e4b5 node-v0.10.20.tar.gz -5f61f783345dc3663b03322d6387800d96560cd5 node.exe -bb81cb60eae4c6be9238aa05b5245f29609b6f96 node.exp -e06eab29b27de1908aa2cf624d438e15ee126640 node.lib -2495f7a88f0085df5206c0d0cb44131cf9715156 node.pdb -6036d6b1f2cf34a5055ed59b6519cb09cc6f86ff pkgsrc/nodejs-ia32-0.10.20.tgz -9b743d9a5d80758e8cd9d436e165c9569fa9d0fd pkgsrc/nodejs-x64-0.10.20.tgz -1b574ef4fe2ad61ce398415599f8f376b576e65d x64/node-v0.10.20-x64.msi -7137043329a25c36ad24d11d8e4ce6e5ff8a72b2 x64/node.exe -624c5bdb06ddd726457fa7b04197069ba021016b x64/node.exp -f61da5166124895495bd72520d6b6f730acc1cbc x64/node.lib -efa36de57eda469254fab252f24ef67c17f96f00 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.21.md b/doc/blog/release/v0.10.21.md deleted file mode 100644 index 36bc2945b..000000000 --- a/doc/blog/release/v0.10.21.md +++ /dev/null @@ -1,71 +0,0 @@ -date: Fri Oct 18 15:39:23 PDT 2013 -version: 0.10.21 -category: release -title: Node v0.10.21 (Stable) -slug: node-v0-10-21-stable - -This release contains a security fix for the http server implementation, please -upgrade as soon as possible. Details will be released soon. - -2013.10.18, Version 0.10.21 (Stable) - -* uv: Upgrade to v0.10.18 - -* crypto: clear errors from verify failure (Timothy J Fontaine) - -* dtrace: interpret two byte strings (Dave Pacheco) - -* fs: fix fs.truncate() file content zeroing bug (Ben Noordhuis) - -* http: provide backpressure for pipeline flood (isaacs) - -* tls: fix premature connection termination (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.10.21/node-v0.10.21.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.21/node-v0.10.21.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.21/node-v0.10.21-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.21/x64/node-v0.10.21-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.21/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.21/node-v0.10.21-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.21/node-v0.10.21-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.21/node-v0.10.21-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.21/node-v0.10.21-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.21/ - -Website: http://nodejs.org/docs/v0.10.21/ - -Documentation: http://nodejs.org/docs/v0.10.21/api/ - -Shasums: -``` -fb1318fb7721aa292310599e7c6696edebcfd70d node-v0.10.21-darwin-x64.tar.gz -486235cc54d269d1961dfb150b1479ec14e83541 node-v0.10.21-darwin-x86.tar.gz -7528d2fa240a5dd88d37e4847cebec50ef40c8eb node-v0.10.21-linux-x64.tar.gz -b372abf9d9c53bfe675e2c3f71dcfdece44edddd node-v0.10.21-linux-x86.tar.gz -cb873cdff3f30aa198b52c8be3588745d2ee3933 node-v0.10.21-sunos-x64.tar.gz -020d202d7066b68f160d0ceebe8cc8306de25956 node-v0.10.21-sunos-x86.tar.gz -037ea0e3be3512da2bc94aa765fa89d61da3e275 node-v0.10.21-x86.msi -de2bd0e858f99098ef24f99f972b8088c1f0405c node-v0.10.21.pkg -b7fd2a3660635af40e3719ca0db49280d10359b2 node-v0.10.21.tar.gz -a0e3988170beee1273a2fb6d650bf17db8495c67 node.exe -99332a03aeba8a22254d671665b9b2161a64bd84 node.exp -263dafeec907bd1f28ceb8272b9caaadceacb4d6 node.lib -76d578bf352772dc4db9ebb95fb61cf18e34c80d node.pdb -b6d11b67ce7aaff5c7a456a4c85c80849a3d576e pkgsrc/nodejs-ia32-0.10.21.tgz -b116825d1d2cbcfd567f730b1c2452424508b062 pkgsrc/nodejs-x64-0.10.21.tgz -29632c5a21a4ebf89703e417852306a676f6ede8 x64/node-v0.10.21-x64.msi -033b0a2b57e031a9e47f0b28eb4dc50a5389b592 x64/node.exe -f62b53229d77eaddf1f3a7909ef6533eea0e2295 x64/node.exp -8d5cfe83c3bc78ddcf79de9d065d1b4f2af9347e x64/node.lib -6844e78e9ba80bfa48f6c150544e3e73d83dd316 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.22.md b/doc/blog/release/v0.10.22.md deleted file mode 100644 index f6425c801..000000000 --- a/doc/blog/release/v0.10.22.md +++ /dev/null @@ -1,74 +0,0 @@ -date: Tue Nov 12 12:52:56 PST 2013 -version: 0.10.22 -category: release -title: Node v0.10.22 (Stable) -slug: node-v0-10-22-stable - -2013.11.12, Version 0.10.22 (Stable) - -* npm: Upgrade to 1.3.14 - -* uv: Upgrade to v0.10.19 - -* child_process: don't assert on stale file descriptor events (Fedor Indutny) - -* darwin: Fix "Not Responding" in Mavericks activity monitor (Fedor Indutny) - -* debugger: Fix bug in sb() with unnamed script (Maxim Bogushevich) - -* repl: do not insert duplicates into completions (Maciej Małecki) - -* src: Fix memory leak on closed handles (Timothy J Fontaine) - -* tls: prevent stalls by using read(0) (Fedor Indutny) - -* v8: use correct timezone information on Solaris (Maciej Małecki) - - -Source Code: http://nodejs.org/dist/v0.10.22/node-v0.10.22.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.22/node-v0.10.22.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.22/node-v0.10.22-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.22/x64/node-v0.10.22-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.22/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.22/node-v0.10.22-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.22/node-v0.10.22-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.22/node-v0.10.22-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.22/node-v0.10.22-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.22/ - -Website: http://nodejs.org/docs/v0.10.22/ - -Documentation: http://nodejs.org/docs/v0.10.22/api/ - -Shasums: -``` -3082a8d13dfafa7212a7f75bd0a83447fb4d7b99 node-v0.10.22-darwin-x64.tar.gz -dca37fa37c8ce3c0df68e74643ed822bec7a12b3 node-v0.10.22-darwin-x86.tar.gz -3739f75bbb85c920a237ceb1c34cb872409d61f7 node-v0.10.22-linux-x64.tar.gz -7e99b654c21bc2a5cbccc33f1bae3ce6e26b3d12 node-v0.10.22-linux-x86.tar.gz -3dfb3585386ca0645ba02b5ad06014ddccda8cbe node-v0.10.22-sunos-x64.tar.gz -e6004f073fc81826335dc0c8fba04a82beada0bc node-v0.10.22-sunos-x86.tar.gz -3beff0c7893e39df54e416307b624eb642bffa62 node-v0.10.22-x86.msi -b4433b98f87f3f06130adad410e2fb5f959bbf37 node-v0.10.22.pkg -d7c6a39dfa714eae1f8da7a00c9a07efd74a03b3 node-v0.10.22.tar.gz -0ff278f5d6225d2be2a51bd4c7ba8fa0d15e98a4 node.exe -6cded62495794c53f6642745d34cbeb7a28266b1 node.exp -caaa11790ac8ec40d074e141afa7ffa611f216b4 node.lib -3c7592832d403c93a17b29852f2c828760a45128 node.pdb -f335aef2844a6bf9d8d5a9782e7c631d730acc2e pkgsrc/nodejs-ia32-0.10.22.tgz -6d47f98efd86faa71e1e9887aa63916e884bb2a8 pkgsrc/nodejs-x64-0.10.22.tgz -c3c169304c6371ee7bd119151bcbced61a322394 x64/node-v0.10.22-x64.msi -307de602a091fa2af3adaa64812200e32ee00fdc x64/node.exe -67440fca57eb4be5800434245ef1a5d16f5aea01 x64/node.exp -e6ee29859cd069ff5b8bf749a598112d9f09ed3c x64/node.lib -fee98420155b88c0c4b11616aa416d2328cec97d x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.23.md b/doc/blog/release/v0.10.23.md deleted file mode 100644 index 251c37ea0..000000000 --- a/doc/blog/release/v0.10.23.md +++ /dev/null @@ -1,86 +0,0 @@ -date: Wed Dec 11 22:10:46 PST 2013 -version: 0.10.23 -category: release -title: Node v0.10.23 (Stable) -slug: node-v0-10-23-stable - -2013.12.12, Version 0.10.23 (Stable) - -* uv: Upgrade to v0.10.20 (Timothy J Fontaine) - -* npm: Upgrade to 1.3.17 (isaacs) - -* gyp: update to 78b26f7 (Timothy J Fontaine) - -* build: include postmortem symbols on linux (Timothy J Fontaine) - -* crypto: Make Decipher._flush() emit errors. (Kai Groner) - -* dgram: fix abort when getting `fd` of closed dgram (Fedor Indutny) - -* events: do not accept NaN in setMaxListeners (Fedor Indutny) - -* events: avoid calling `once` functions twice (Tim Wood) - -* events: fix TypeError in removeAllListeners (Jeremy Martin) - -* fs: report correct path when EEXIST (Fedor Indutny) - -* process: enforce allowed signals for kill (Sam Roberts) - -* tls: emit 'end' on .receivedShutdown (Fedor Indutny) - -* tls: fix potential data corruption (Fedor Indutny) - -* tls: handle `ssl.start()` errors appropriately (Fedor Indutny) - -* tls: reset NPN callbacks after SNI (Fedor Indutny) - - -Source Code: http://nodejs.org/dist/v0.10.23/node-v0.10.23.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.23/node-v0.10.23.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.23/node-v0.10.23-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.23/x64/node-v0.10.23-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.23/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.23/node-v0.10.23-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.23/node-v0.10.23-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.23/node-v0.10.23-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.23/node-v0.10.23-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.23/ - -Website: http://nodejs.org/docs/v0.10.23/ - -Documentation: http://nodejs.org/docs/v0.10.23/api/ - -Shasums: -``` -80980a23ec1915a0d4522fd4423a2eee25bf9ba5 node-v0.10.23-darwin-x64.tar.gz -c9c0f6772f2bda746d3997f4d821da9090dcd2a3 node-v0.10.23-darwin-x86.tar.gz -4c7d17ae61c753750e8f5ae989e3d80f7c8f89ea node-v0.10.23-linux-x64.tar.gz -afa901a312350ec8b271d402261a7882e1d3640b node-v0.10.23-linux-x86.tar.gz -30d5e06cfed35eea80d5ee4643858c157d104a85 node-v0.10.23-sunos-x64.tar.gz -2c4ce154b8595848119bb63164ca021f4fe8457e node-v0.10.23-sunos-x86.tar.gz -d51b641354a41243830ff6e3bdd1e03a7758fc38 node-v0.10.23-x86.msi -a7711fbb958350011641c218dae64c0c6f1f80a8 node-v0.10.23.pkg -8717942d1bdfa8902ce65cd33b4293d16b486c64 node-v0.10.23.tar.gz -12d1e0a6373bb2b67129c7f0ebc514b793b106af node.exe -9f107c4dba21fee76bbb5ac2fe552d40e6ae5e70 node.exp -52b4c463f8b667c24a54a0d8cd583b677706ae3c node.lib -ec619173e2e867b929d4178ecbe561639aed4cb2 node.pdb -837ff717c2842c32e0804ce6c131404fc8599d8d pkgsrc/nodejs-ia32-0.10.23.tgz -395e9fe9e32874a24febffa17adacd7e1e387e63 pkgsrc/nodejs-x64-0.10.23.tgz -56892aadf1c9d2d2bc637ee87bd08775a139b252 x64/node-v0.10.23-x64.msi -663d9dd7face6399f5c0b7d6082ec2d5b4acc2c3 x64/node.exe -601b564b73df1f4a871ed55e2e2c9aee5b28f04d x64/node.exp -523e3f96f45132d2e5e2eb39a1dbd0c5bf6b8822 x64/node.lib -2624cddcbd23c84d947af2bf2b91b1e0b64e3602 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.24.md b/doc/blog/release/v0.10.24.md deleted file mode 100644 index 443e65445..000000000 --- a/doc/blog/release/v0.10.24.md +++ /dev/null @@ -1,68 +0,0 @@ -date: Thu Dec 19 09:02:48 PST 2013 -version: 0.10.24 -category: release -title: Node v0.10.24 (Stable) -slug: node-v0-10-24-stable - -2013.12.18, Version 0.10.24 (Stable) - -* uv: Upgrade to v0.10.21 - -* npm: upgrade to 1.3.21 - -* v8: backport fix for CVE-2013-{6639|6640} - -* build: unix install node and dep library headers (Timothy J Fontaine) - -* cluster, v8: fix --logfile=%p.log (Ben Noordhuis) - -* module: only cache package main (Wyatt Preul) - - -Source Code: http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.24/node-v0.10.24.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.24/node-v0.10.24-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.24/x64/node-v0.10.24-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.24/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.24/node-v0.10.24-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.24/node-v0.10.24-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.24/node-v0.10.24-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.24/node-v0.10.24-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.24/ - -Website: http://nodejs.org/docs/v0.10.24/ - -Documentation: http://nodejs.org/docs/v0.10.24/api/ - -Shasums: -``` -4a233e4e51ec24de3b2c3196b9128781665b4edc node-v0.10.24-darwin-x64.tar.gz -1b018a372d919462e8ebef29a0de4816a83e38ff node-v0.10.24-darwin-x86.tar.gz -423018f6a60b18d0dddf3007c325e0cc8cf55099 node-v0.10.24-linux-x64.tar.gz -fb99761ce4cef4a43743c1ed630b185545152264 node-v0.10.24-linux-x86.tar.gz -9719b2b636d8f5caf5495e967cbe167fd16eb160 node-v0.10.24-sunos-x64.tar.gz -84d7645d88dad9050f72c01d5f783cc018a8dc2b node-v0.10.24-sunos-x86.tar.gz -4b3cd142e691033308bfab237b6bf79a1a7f5c10 node-v0.10.24-x86.msi -74aba302d8b34e1fc93b3e0babc3f5d9bd8c09f3 node-v0.10.24.pkg -d162d01eb173cb5a0e7e46c9d706421c4c771039 node-v0.10.24.tar.gz -782c0b437f1d4205d7ba012e02157fb984d656b0 node.exe -c3bf16e3e2e268340a96fca869a1e3ce3ead46b5 node.exp -b81ceddb831981b200f04403718b2adcd24fd5ed node.lib -1c009c51c273512eb76ef3a1e36d5d1ccf1e4094 node.pdb -8c90873802c40ecadb304002401ba857ad728f9c pkgsrc/nodejs-ia32-0.10.24.tgz -94eda460e90dd59886ee2543bb55c8baea6daf1c pkgsrc/nodejs-x64-0.10.24.tgz -9b36fd16d8a6eb95c375ced0e1929b88b3dbb3e6 x64/node-v0.10.24-x64.msi -43c51bf9ff7c6aa421c4c89a4b14e0ab1cb0527a x64/node.exe -74d67c1cad72c0231fdc3498a0ca90c09e49abfb x64/node.exp -724463c1a1bd3ad386e1089f53c7fa0ca16c38b6 x64/node.lib -58a6bcec861c0a8d20e90db348d3a4fbd49e88cc x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.25.md b/doc/blog/release/v0.10.25.md deleted file mode 100644 index 9a105866d..000000000 --- a/doc/blog/release/v0.10.25.md +++ /dev/null @@ -1,72 +0,0 @@ -date: Thu Jan 23 11:43:30 PST 2014 -version: 0.10.25 -category: release -title: Node v0.10.25 (Stable) -slug: node-v0-10-25-stable - -2014.01.23, Version 0.10.25 (Stable) - -* uv: Upgrade to v0.10.23 - -* npm: Upgrade to v1.3.24 - -* v8: Fix enumeration for objects with lots of properties - -* child_process: fix spawn() optional arguments (Sam Roberts) - -* cluster: report more errors to workers (Fedor Indutny) - -* domains: exit() only affects active domains (Ryan Graham) - -* src: OnFatalError handler must abort() (Timothy J Fontaine) - -* stream: writes may return false but forget to emit drain (Yang Tianyang) - - -Source Code: http://nodejs.org/dist/v0.10.25/node-v0.10.25.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.25/node-v0.10.25.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.25/node-v0.10.25-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.25/x64/node-v0.10.25-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.25/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.25/node-v0.10.25-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.25/node-v0.10.25-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.25/node-v0.10.25-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.25/node-v0.10.25-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.25/ - -Website: http://nodejs.org/docs/v0.10.25/ - -Documentation: http://nodejs.org/docs/v0.10.25/api/ - -Shasums: -``` -b347508376ceef724b464e6009ec2daead7ea572 node-v0.10.25-darwin-x64.tar.gz -f7b3c7a36b45a83360bcd9e541e64bf18ef29272 node-v0.10.25-darwin-x86.tar.gz -7c75e7e13561be1222bddd438a84a8f228fe1bc3 node-v0.10.25-linux-x64.tar.gz -16a2c861de5b27ef907dc18253fcd4f33d506662 node-v0.10.25-linux-x86.tar.gz -05bdc1cd7933ccfa95c2f1f058ff0125eacbdc2d node-v0.10.25-sunos-x64.tar.gz -250a48c9a2b6c6a8a6feebb0d7d33f96bf8d82f4 node-v0.10.25-sunos-x86.tar.gz -ce78cc8b49e339f71888f627c4e985dda0a83e27 node-v0.10.25-x86.msi -abab975e86250b51a7434d229d13b30acdf4e82e node-v0.10.25.pkg -1e330b4fbb6f7bb858a0b37d8573dd4956f40885 node-v0.10.25.tar.gz -e3779ed14a68dc6f711ead628fe11a127d09547c node.exe -35521b6142d39fa371aba7d1fda87a1836db78e4 node.exp -35eb46e5d04fdb1c1417876d1712b85eea6be03c node.lib -cc749498572b4cf4b277225404beefdd75a4e903 node.pdb -9bf1bf3a59a3f0dc0fd32f9504e8011e5b4ebc42 pkgsrc/nodejs-ia32-0.10.25.tgz -f4a6e7d561c321b917c1b6a021fe38cd330a374e pkgsrc/nodejs-x64-0.10.25.tgz -aab984860cc02e1d27a0932c4c8d34e5e3551ebf x64/node-v0.10.25-x64.msi -d2f884d75d5f30693f62625787f27fb2a8824178 x64/node.exe -75cdbe43984c9a9f6c5f1e5875fa7422c97b2d62 x64/node.exp -108c2d9dd6ecf7cad83c4cb5cd62303f51c5570a x64/node.lib -a7c37dadc994c281d08f6a55bfbd01ecf738fe66 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.3.md b/doc/blog/release/v0.10.3.md deleted file mode 100644 index 288eb2638..000000000 --- a/doc/blog/release/v0.10.3.md +++ /dev/null @@ -1,77 +0,0 @@ -date: Wed Apr 3 11:24:08 PDT 2013 -version: 0.10.3 -category: release -title: Node v0.10.3 (Stable) -slug: node-v0-10-3-stable - -2013.04.03, Version 0.10.3 (Stable) - -* npm: Upgrade to 1.2.17 - -* child_process: acknowledge sent handles (Fedor Indutny) - -* etw: update prototypes to match dtrace provider (Timothy J Fontaine) - -* dtrace: pass more arguments to probes (Dave Pacheco) - -* build: allow building with dtrace on osx (Dave Pacheco) - -* http: Remove legacy ECONNRESET workaround code (isaacs) - -* http: Ensure socket cleanup on client response end (isaacs) - -* tls: Destroy socket when encrypted side closes (isaacs) - -* repl: isSyntaxError() catches "strict mode" errors (Nathan Rajlich) - -* crypto: Pass options to ctor calls (isaacs) - -* src: tie process.versions.uv to uv_version_string() (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.10.3/node-v0.10.3.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.3/node-v0.10.3.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.3/node-v0.10.3-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.3/x64/node-v0.10.3-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.3/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.3/node-v0.10.3-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.3/node-v0.10.3-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.3/node-v0.10.3-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.3/node-v0.10.3-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.3/ - -Website: http://nodejs.org/docs/v0.10.3/ - -Documentation: http://nodejs.org/docs/v0.10.3/api/ - -Shasums: - -``` -9b2f0936ee60aa65f6a5053e82440508aa9be0a7 node-v0.10.3-darwin-x64.tar.gz -f0392db831ca58c1f7b2d857d7e8cc601ea8b022 node-v0.10.3-darwin-x86.tar.gz -9a375e77f9994fbd4afd741bae64c548f2a43a64 node-v0.10.3-linux-x64.tar.gz -3323da517271e45a3850b169b10ef3d254a263a9 node-v0.10.3-linux-x86.tar.gz -0026e2453a3940ed16b9569b8187943ccf0aeb45 node-v0.10.3-sunos-x64.tar.gz -af88ad2dc98368b36f1aafc7b79f8378169fc56e node-v0.10.3-sunos-x86.tar.gz -e057c8841ddbe4dc8bc155a28b7e07dbe3d108d1 node-v0.10.3-x86.msi -a37575d47de5696b8abb2e12dc3e9d0cdb5d17f6 node-v0.10.3.pkg -4a1feb4ac18ede9e7193921f59fc181c88b1c7ba node-v0.10.3.tar.gz -9d9266d1e69bfe24837c67ff755f055fd049cd48 node.exe -8762416a5e0d71e285215efde181c7242f3f2c6f node.exp -5c05f332070a77900010f15c1074c4e86e20fa0d node.lib -a8dc61535f6ae5fd13bce9cdca989ffc113a4080 node.pdb -b834751b2e9f18e6ef38cf9fe5331e6073e3cab2 x64/node-v0.10.3-x64.msi -932c30a53f546717f00de063ee09fc8ce603dd2a x64/node.exe -a3e91038e027c91a555116d2c20742eea2e9378f x64/node.exp -d60bb0f9026df9dcc17cff0267964032aaf46712 x64/node.lib -f645a2d63179ae749defe13c653cf1777dd9021a x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.4.md b/doc/blog/release/v0.10.4.md deleted file mode 100644 index 938d1ccbb..000000000 --- a/doc/blog/release/v0.10.4.md +++ /dev/null @@ -1,85 +0,0 @@ -date: Thu Apr 11 10:52:56 PDT 2013 -version: 0.10.4 -category: release -title: Node v0.10.4 (Stable) -slug: node-v0-10-4-stable - -2013.04.11, Version 0.10.4 (Stable) - -* uv: Upgrade to 0.10.4 - -* npm: Upgrade to 1.2.18 - -* v8: Avoid excessive memory growth in JSON.parse (Fedor Indutny) - -* child_process, cluster: fix O(n*m) scan of cmd string (Ben Noordhuis) - -* net: fix socket.bytesWritten Buffers support (Fedor Indutny) - -* buffer: fix offset checks (Łukasz Walukiewicz) - -* stream: call write cb before finish event (isaacs) - -* http: Support write(data, 'hex') (isaacs) - -* crypto: dh secret should be left-padded (Fedor Indutny) - -* process: expose NODE_MODULE_VERSION in process.versions (Rod Vagg) - -* crypto: fix constructor call in crypto streams (Andreas Madsen) - -* net: account for encoding in .byteLength (Fedor Indutny) - -* net: fix buffer iteration in bytesWritten (Fedor Indutny) - -* crypto: zero is not an error if writing 0 bytes (Fedor Indutny) - -* tls: Re-enable check of CN-ID in cert verification (Tobias Müllerleile) - - -Source Code: http://nodejs.org/dist/v0.10.4/node-v0.10.4.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.4/node-v0.10.4.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.4/node-v0.10.4-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.4/x64/node-v0.10.4-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.4/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.4/node-v0.10.4-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.4/node-v0.10.4-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.4/node-v0.10.4-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.4/node-v0.10.4-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.4/ - -Website: http://nodejs.org/docs/v0.10.4/ - -Documentation: http://nodejs.org/docs/v0.10.4/api/ - -Shasums: - -``` -0bebde7d5d698e93fd96ad1b5d223166cd0c5892 node-v0.10.4-darwin-x64.tar.gz -8d847a68f8178b102c72c3f35861f496e12fe455 node-v0.10.4-darwin-x86.tar.gz -28e3a4d2702a13454a3c1d9e1035ee07ef8764bc node-v0.10.4-linux-x64.tar.gz -839be3dfe4504072e372b2a3f597e0b0f4e26331 node-v0.10.4-linux-x86.tar.gz -94d68094afacb70b71a3393f07f81eff6e8a14f1 node-v0.10.4-sunos-x64.tar.gz -6b287dcdb9498cb7d59acbab8faaea4455ffe2c4 node-v0.10.4-sunos-x86.tar.gz -1863868f40d4e3af876d21976d9b06a9e99d1dcf node-v0.10.4-x86.msi -bafb80cff0ada4cdfd98c917459d627d7df408d5 node-v0.10.4.pkg -901c1410b7c28a79644292567d3384255f3a6274 node-v0.10.4.tar.gz -73b5f6eaea8417f4b937bf99812263dc170696e0 node.exe -85064a019b8e6416152ae609ace81469331f773c node.exp -e5b26b8480c3979ddab5ea3bf6bfb0fbef9ecb54 node.lib -0098965a1a2206a1fc148ab776d182018b80d0ba node.pdb -31bd64f33436fa543f0599f80c5df97c14b10224 x64/node-v0.10.4-x64.msi -8280dbeb5a1296fe3496f57376a619467c4c6263 x64/node.exe -e317e0db2693e42851f3774a20dc98e02a9a90fe x64/node.exp -7f0aa389465ac7983a4c099671bb52c7a6988676 x64/node.lib -a7fb9a08d6337225dd8c5b1db5fb95a2f39fd773 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.5.md b/doc/blog/release/v0.10.5.md deleted file mode 100644 index 6e80b395e..000000000 --- a/doc/blog/release/v0.10.5.md +++ /dev/null @@ -1,73 +0,0 @@ -date: Tue Apr 23 14:05:49 PDT 2013 -version: 0.10.5 -category: release -title: Node v0.10.5 (Stable) -slug: node-v0-10-5-stable - -2013.04.23, Version 0.10.5 (Stable) - -* uv: Upgrade to 0.10.5 (isaacs) - -* build: added support for Visual Studio 2012 (Miroslav Bajtoš) - -* http: Don't try to destroy nonexistent sockets (isaacs) - -* crypto: LazyTransform on properties, not methods (isaacs) - -* assert: put info in err.message, not err.name (Ryan Doenges) - -* dgram: fix no address bind() (Ben Noordhuis) - -* handle_wrap: fix NULL pointer dereference (Ben Noordhuis) - -* os: fix unlikely buffer overflow in os.type() (Ben Noordhuis) - -* stream: Fix unshift() race conditions (isaacs) - - -Source Code: http://nodejs.org/dist/v0.10.5/node-v0.10.5.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.5/node-v0.10.5.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.5/node-v0.10.5-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.5/x64/node-v0.10.5-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.5/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.5/node-v0.10.5-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.5/node-v0.10.5-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.5/node-v0.10.5-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.5/node-v0.10.5-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.5/ - -Website: http://nodejs.org/docs/v0.10.5/ - -Documentation: http://nodejs.org/docs/v0.10.5/api/ - -Shasums: - -``` -b3a5122fdfa67a7b69c4c80e5cca4c8d700c9461 node-v0.10.5-darwin-x64.tar.gz -c95d027af3d774c8650be634b9fe2555c3381c88 node-v0.10.5-darwin-x86.tar.gz -6bdc5d48368a4425f289c3babe457bb427cb2476 node-v0.10.5-linux-x64.tar.gz -99643f86f6441436822a0feebd397a3c515d03f9 node-v0.10.5-linux-x86.tar.gz -72a41a467dcfd96b4244ef8089cf03cf68fa0788 node-v0.10.5-sunos-x64.tar.gz -6388c920ce5500f6523b718c864ccee2f3c4e72e node-v0.10.5-sunos-x86.tar.gz -1dc49f8689c90c84fd335d8023d7c9f01b0183ab node-v0.10.5-x86.msi -4a7c59c37afa8ac7b6f2d1d83b34de30f24642ae node-v0.10.5.pkg -99b92864f4a277debecb4c872ea7202c9aa6996f node-v0.10.5.tar.gz -6f094dd0ce62bcdbf6f36cc67413b1b194d98616 node.exe -9b1b33512631bc58f6480db5587832c79851afc5 node.exp -01788dd89217706b9ca8e7ef9f9136d06236a191 node.lib -1890ff369a65222539ddfd705a40699ca37d476a node.pdb -368e7b7b56cb2c05dc818449cf7962a36b1a9cb7 x64/node-v0.10.5-x64.msi -8624e85306a27079bf4cc3ff25c6914fd59a4e29 x64/node.exe -c9c0c0b45eebdfaf93b5e6bda38b23052308dab3 x64/node.exp -0fb687c156204c59e26dff2302f8f9fab73cc3f2 x64/node.lib -afdecf9ffdce0c28815ae5fc24d6e0defa71ed32 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.6.md b/doc/blog/release/v0.10.6.md deleted file mode 100644 index 574d47381..000000000 --- a/doc/blog/release/v0.10.6.md +++ /dev/null @@ -1,65 +0,0 @@ -date: Tue May 14 14:32:31 PDT 2013 -version: 0.10.6 -category: release -title: Node v0.10.6 (Stable) -slug: node-v0-10-6-stable - -2013.05.14, Version 0.10.6 (Stable) - -* module: Deprecate require.extensions (isaacs) - -* stream: make Readable.wrap support objectMode, empty streams (Daniel Moore) - -* child_process: fix handle delivery (Ben Noordhuis) - -* crypto: Fix performance regression (isaacs) - -* src: DRY string encoding/decoding (isaacs) - - -Source Code: http://nodejs.org/dist/v0.10.6/node-v0.10.6.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.6/node-v0.10.6.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.6/node-v0.10.6-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.6/x64/node-v0.10.6-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.6/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.6/node-v0.10.6-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.6/node-v0.10.6-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.6/node-v0.10.6-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.6/node-v0.10.6-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.6/ - -Website: http://nodejs.org/docs/v0.10.6/ - -Documentation: http://nodejs.org/docs/v0.10.6/api/ - -Shasums: - -``` -24982edc3b6aafd019273fa5e8a2031353314b56 node-v0.10.6-darwin-x64.tar.gz -e208c5dc83864a7f35f9df60ee35642bc7dd689c node-v0.10.6-darwin-x86.tar.gz -ab2ad473f5aa0f1c5adb50b9ea47fd05010bca2c node-v0.10.6-linux-x64.tar.gz -29cdac417449f088e6e6fa67d57c9205d8bff6c5 node-v0.10.6-linux-x86.tar.gz -66e3a9e53af6d8f27c690a77c329a2bd108965ac node-v0.10.6-sunos-x64.tar.gz -05bda089f4f702deddb8e593653676ede5f0e10b node-v0.10.6-sunos-x86.tar.gz -6ceb80be28c63f2c57e8479755d206400b205c46 node-v0.10.6-x86.msi -cd0acf9b332c30aba6a72979d3373e342fad6b95 node-v0.10.6.pkg -fa06101af8890eeaf997bd2620d7742b71a7223c node-v0.10.6.tar.gz -a2a2befa62b3cd2da9c2e51204df017e0f0c0cae node.exe -8401647a2f8fb3486fa08d7e603822ae12cf6dee node.exp -8ab923eb23584310874a4f63d71244cca5bfc0f8 node.lib -b9042fec324b202853f7f1d8b1d26ea49d944913 node.pdb -647a2ea899113e14d8f0894aa969ffd3a5d407c6 x64/node-v0.10.6-x64.msi -021048aa29fce5ce200b22896fd5f1b053f0d40c x64/node.exe -adbdc6112b3172c259a3fa9e07b7d456a0c65beb x64/node.exp -226af9033a41c96c68ade96cecedcf1289414424 x64/node.lib -cca201bfe38713ffde4a0cad70cb3a5325097257 x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.7.md b/doc/blog/release/v0.10.7.md deleted file mode 100644 index e31bf9c4e..000000000 --- a/doc/blog/release/v0.10.7.md +++ /dev/null @@ -1,65 +0,0 @@ -date: Fri May 17 14:36:03 PDT 2013 -version: 0.10.7 -category: release -title: Node v0.10.7 (Stable) -slug: node-v0-10-7-stable - -2013.05.17, Version 0.10.7 (Stable) - -* uv: upgrade to v0.10.7 - -* npm: Upgrade to 1.2.21 - -* crypto: Don't ignore verify encoding argument (isaacs) - -* buffer, crypto: fix default encoding regression (Ben Noordhuis) - -* timers: fix setInterval() assert (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.10.7/node-v0.10.7.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.7/node-v0.10.7.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.7/node-v0.10.7-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.7/x64/node-v0.10.7-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.7/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.7/node-v0.10.7-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.7/node-v0.10.7-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.7/node-v0.10.7-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.7/node-v0.10.7-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.7/ - -Website: http://nodejs.org/docs/v0.10.7/ - -Documentation: http://nodejs.org/docs/v0.10.7/api/ - -Shasums: - -``` -95d64001ccd5a17c2c25f1ae4b0358b6131e7cb8 node-v0.10.7-darwin-x64.tar.gz -c34f991cc0752679002f763b2b3c8927babb08d8 node-v0.10.7-darwin-x86.tar.gz -673c287bcf671eced6aa94637b7c91e5149f4c56 node-v0.10.7-linux-x64.tar.gz -9f14d4f9add721148f0c15f093d3e6b1fa3820c9 node-v0.10.7-linux-x86.tar.gz -1fb7dc4195a9dd228039f5f7ca2cb9f7c35b105a node-v0.10.7-sunos-x64.tar.gz -d84cd8afb50df44483b9dab0c65d5c81f07ac4a2 node-v0.10.7-sunos-x86.tar.gz -d7794a7da103d639fdec4b9e7236a5a0a4330297 node-v0.10.7-x86.msi -0524ad9268095c9ed435708268e6aad7968309f7 node-v0.10.7.pkg -f2bde505faf6ffed3084c8e550a9e6d4311f13d5 node-v0.10.7.tar.gz -5f50384766dd5435dba4989d95032452754150bf node.exe -809f12f84c8495d101ce6ae443890e8533695ab0 node.exp -5a7355e2f75ae3f72deab75f4c9f93e4e5325584 node.lib -6e45953bd7488a4236c43fea93b05da0854158a7 node.pdb -fc5e3b2b1c74e53f1d214a9e2d5af30fe5247381 x64/node-v0.10.7-x64.msi -aa67bbd421f26b37fa09ce30d5e626106677853e x64/node.exe -b289989a156d4d7055554962e6f00ba3e380aeea x64/node.exp -0dbecc5007c9e28ad488d2058157f8360eaed958 x64/node.lib -e4b63472787a3db6a3d85237e8c7fb4d973f797b x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.8.md b/doc/blog/release/v0.10.8.md deleted file mode 100644 index de9bc87ad..000000000 --- a/doc/blog/release/v0.10.8.md +++ /dev/null @@ -1,75 +0,0 @@ -date: Fri May 24 15:43:01 PDT 2013 -version: 0.10.8 -category: release -title: Node v0.10.8 (Stable) -slug: node-v0-10-8-stable - -2013.05.24, Version 0.10.8 (Stable) - -* v8: update to 3.14.5.9 - -* uv: upgrade to 0.10.8 - -* npm: Upgrade to 1.2.23 - -* http: remove bodyHead from 'upgrade' events (Nathan Zadoks) - -* http: Return true on empty writes, not false (isaacs) - -* http: save roundtrips, convert buffers to strings (Ben Noordhuis) - -* configure: respect the --dest-os flag consistently (Nathan Rajlich) - -* buffer: throw when writing beyond buffer (Trevor Norris) - -* crypto: Clear error after DiffieHellman key errors (isaacs) - -* string_bytes: strip padding from base64 strings (Trevor Norris) - - -Source Code: http://nodejs.org/dist/v0.10.8/node-v0.10.8.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.8/node-v0.10.8.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.8/node-v0.10.8-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.8/x64/node-v0.10.8-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.8/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.8/node-v0.10.8-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.8/node-v0.10.8-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.8/node-v0.10.8-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.8/node-v0.10.8-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.8/ - -Website: http://nodejs.org/docs/v0.10.8/ - -Documentation: http://nodejs.org/docs/v0.10.8/api/ - -Shasums: - -``` -c1b81939e55d42fd7a90ec88ab23fd7a411ed77c node-v0.10.8-darwin-x64.tar.gz -4474b8d4222efd6f6076243a4aa78e72760ee01a node-v0.10.8-darwin-x86.tar.gz -898283b1ba8a9732c98ce38a89dc15af23291702 node-v0.10.8-linux-x64.tar.gz -2e15464289f618245fc6f420191490c144d81be3 node-v0.10.8-linux-x86.tar.gz -9a36b001ce5eef52641b836a42d1fc69c516d329 node-v0.10.8-sunos-x64.tar.gz -490d9a6d2a300fd2750a4a227288aed67a767713 node-v0.10.8-sunos-x86.tar.gz -96218cb0c14fbcaa76165fbe5a3af402883f898b node-v0.10.8-x86.msi -a713f339195dd009d2614fac25b61bc88295f063 node-v0.10.8.pkg -d650a09ae868bb04f424e3560658c15b9a885b5b node-v0.10.8.tar.gz -38034b7a6bca2dbe3aaacc3cc8aa9920394baaf7 node.exe -19cd4ae9f3edeaa259e5ca84abd28dea400a91d7 node.exp -1ccffaf0ff0f4bb11e8d23a2938366fd87b3e583 node.lib -079f617ef81507a6b5fe7e8bd1f5a2f109a574ec node.pdb -985d55d1ba49f47354ba13a419d678bf73634ef9 x64/node-v0.10.8-x64.msi -25d4d74c73cd57346094979e5c51c5b16d6dcb83 x64/node.exe -19587e8301371e721695c7aed335f74c6873dfaf x64/node.exp -4a002dd8a1742431fc99a2a92580a3040a796f2c x64/node.lib -8d18200f9fe81805fe81201355d9f3509bd0c81b x64/node.pdb -``` diff --git a/doc/blog/release/v0.10.9.md b/doc/blog/release/v0.10.9.md deleted file mode 100644 index ee8d39851..000000000 --- a/doc/blog/release/v0.10.9.md +++ /dev/null @@ -1,67 +0,0 @@ -date: Thu May 30 11:12:12 PDT 2013 -version: 0.10.9 -category: release -title: Node v0.10.9 (Stable) -slug: node-v0-10-9-stable - -2013.05.30, Version 0.10.9 (Stable) - -* npm: Upgrade to 1.2.24 - -* uv: Upgrade to v0.10.9 - -* repl: fix JSON.parse error check (Brian White) - -* tls: proper .destroySoon (Fedor Indutny) - -* tls: invoke write cb only after opposite read end (Fedor Indutny) - -* tls: ignore .shutdown() syscall error (Fedor Indutny) - - -Source Code: http://nodejs.org/dist/v0.10.9/node-v0.10.9.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.9/node-v0.10.9.pkg - -Windows Installer: http://nodejs.org/dist/v0.10.9/node-v0.10.9-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.10.9/x64/node-v0.10.9-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.10.9/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.10.9/node-v0.10.9-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.10.9/node-v0.10.9-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.9/node-v0.10.9-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.9/node-v0.10.9-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.10.9/ - -Website: http://nodejs.org/docs/v0.10.9/ - -Documentation: http://nodejs.org/docs/v0.10.9/api/ - -Shasums: - -``` -b527f5cf879fd834cb70cec630fce34eb30b5a02 node-v0.10.9-darwin-x64.tar.gz -b2c9b14aa4a2aa17dd63f2ebe5a4f27171eb64f7 node-v0.10.9-darwin-x86.tar.gz -4626105fbf907c76314bf487460662e5c97e14ea node-v0.10.9-linux-x64.tar.gz -29a4aa89ca61b5a4f3c520f0f798b8b19ce2d3d3 node-v0.10.9-linux-x86.tar.gz -6d755df136dec6dc085cc6b214154245402a5372 node-v0.10.9-sunos-x64.tar.gz -2dadf9feca00bb3e681ea31ebd4086ab926a1c39 node-v0.10.9-sunos-x86.tar.gz -5ff6c7ed7174af8502f54f4476bf8de616180625 node-v0.10.9-x86.msi -7d945ed2102fcfab28e26dca5f4698b6cf0b921a node-v0.10.9.pkg -e4b2bb8c42da2ec90e6fd81da1e6b382ba499608 node-v0.10.9.tar.gz -889e9c4cb614c79fb728816790a622d13ce9ca88 node.exe -3b9b15f8ab5fc5378e05301f465114d93ade237a node.exp -3c8034b9e4eef1f46d186a266a60690edd17b1f4 node.lib -b9f1d9452f2815b43df98b40ab1b6cf2c358ad8a node.pdb -4b767d596c8a395fe22215d065f9d31b3a5b9423 x64/node-v0.10.9-x64.msi -e763bc24888254ddd992a4b7302d1ad4538ad920 x64/node.exe -eec159254e209f172bca37dc547f0bfcfa1bd87c x64/node.exp -6ae5f3a36ffba256cb8077c47a218749449f798c x64/node.lib -5c2283b50c74a8b43708fdc29cb5c314fbe2d018 x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.0.md b/doc/blog/release/v0.11.0.md deleted file mode 100644 index 7f917b424..000000000 --- a/doc/blog/release/v0.11.0.md +++ /dev/null @@ -1,86 +0,0 @@ -date: Thu Mar 28 14:52:55 PDT 2013 -version: 0.11.0 -category: release -title: Node v0.11.0 (Unstable) -slug: node-v0-11-0-stable - -2013.03.28, Version 0.11.0 (Unstable) - -* V8: update to 3.17.13 - -* os: use %SystemRoot% or %windir% in os.tmpdir() (Suwon Chae) - -* util: fix util.inspect() line width calculation (Marcin Kostrzewa) - -* buffer: remove _charsWritten (Trevor Norris) - -* fs: uv_[fl]stat now reports subsecond resolution (Timothy J Fontaine) - -* fs: Throw if error raised and missing callback (bnoordhuis) - -* tls: expose SSL_CTX_set_timeout via tls.createServer (Manav Rathi) - -* tls: remove harmful unnecessary bounds checking (Marcel Laverdet) - -* buffer: write ascii strings using WriteOneByte (Trevor Norris) - -* dtrace: fix generation of v8 constants on freebsd (Fedor Indutny) - -* dtrace: x64 ustack helper (Fedor Indutny) - -* readline: handle wide characters properly (Nao Iizuka) - -* repl: Use a domain to catch async errors safely (isaacs) - -* repl: emit 'reset' event when context is reset (Sami Samhuri) - -* util: custom `inspect()` method may return an Object (Nathan Rajlich) - -* console: `console.dir()` bypasses inspect() methods (Nathan Rajlich) - - -Source Code: http://nodejs.org/dist/v0.11.0/node-v0.11.0.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.0/node-v0.11.0.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.0/node-v0.11.0-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.0/x64/node-v0.11.0-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.0/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.0/node-v0.11.0-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.0/node-v0.11.0-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.0/node-v0.11.0-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.0/node-v0.11.0-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.0/ - -Website: http://nodejs.org/docs/v0.11.0/ - -Documentation: http://nodejs.org/docs/v0.11.0/api/ - -Shasums: -``` -4889d63a4a08d146d59cd057b1c8b341ceac07cf node-v0.11.0-darwin-x64.tar.gz -4ef64fa36c095edfa3c6da852ed1ec46c6f3cf23 node-v0.11.0-darwin-x86.tar.gz -04c4d1fb71f98dfc921d9558667a727ca1aa6586 node-v0.11.0-linux-x64.tar.gz -b1507837292e23464e2d184007f2567db3db1483 node-v0.11.0-linux-x86.tar.gz -cd195da08ea5208a6c08b95511fa888d750f4cd7 node-v0.11.0-sunos-x64.tar.gz -4698b9a6cb911cbea3deac38ea191cef3051b3ab node-v0.11.0-sunos-x86.tar.gz -829649fe65133459c7fc231b8d048f19ae870c7b node-v0.11.0-x86.msi -7958b8212aaa9787724c552197d37cf5602ff645 node-v0.11.0.pkg -0402aae18f847238409e9d1a5ddd806beb5fe678 node-v0.11.0.tar.gz -320778de3329437815daa4f86d1a89db33458126 node.exe -1f4f509a9dc48c519064ca7f2deddeaff2b6b15b node.exp -5f83864acae194c0652a61af71262bd1ba55a04c node.lib -0d100a18ba569e5e9bb9e216355959261c4cd77b node.pdb -b55553c83e12f253f23dec4d998b05bd673db83b x64/node-v0.11.0-x64.msi -7100ef58f9a8428d2bdd9d4de8ffb679d0198b1e x64/node.exe -12bf810852e7097bde1bf4bff6cd7f802603cdb9 x64/node.exp -28f83178241353dc727ba6d8ff38f9b9177be79a x64/node.lib -6c0f43db501facc3d9ed542a090f9ba2e84bdc41 x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.1.md b/doc/blog/release/v0.11.1.md deleted file mode 100644 index b2dff72fc..000000000 --- a/doc/blog/release/v0.11.1.md +++ /dev/null @@ -1,75 +0,0 @@ -date: Fri Apr 19 09:11:40 PDT 2013 -version: 0.11.1 -category: release -title: Node v0.11.1 (Unstable) -slug: node-v0-11-1-unstable - -**Note**: This version does not work on 64-bit Windows systems Expect -a fix for this bug in the next v0.11 release. As this is an unstable -release, we opted to push out the changes for other systems, rather -than delay. - -2013.04.19, Version 0.11.1 (Unstable) - -* V8: upgrade to 3.18.0 - -* uv: Upgrade to v0.11.1 - -* http: split into multiple separate modules (Timothy J Fontaine) - -* http: escape unsafe characters in request path (Ben Noordhuis) - -* url: Escape all unwise characters (isaacs) - -* build: depend on v8 postmortem-metadata if enabled (Paddy Byers) - -* etw: update prototypes to match dtrace provider (Timothy J Fontaine) - -* buffer: change output of Buffer.prototype.toJSON() (David Braun) - -* dtrace: actually use the _handle.fd value (Timothy J Fontaine) - -* dtrace: pass more arguments to probes (Dave Pacheco) - -* build: allow building with dtrace on osx (Dave Pacheco) - -* zlib: allow passing options to convenience methods (Kyle Robinson Young) - - -Source Code: http://nodejs.org/dist/v0.11.1/node-v0.11.1.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.1/node-v0.11.1.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.1/node-v0.11.1-x86.msi - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.1/node-v0.11.1-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.1/node-v0.11.1-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.1/node-v0.11.1-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.1/node-v0.11.1-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.1/ - -Website: http://nodejs.org/docs/v0.11.1/ - -Documentation: http://nodejs.org/docs/v0.11.1/api/ - -Shasums: - -``` -83f440046d64619b974487e3445d541fa1310ec6 node-v0.11.1-darwin-x64.tar.gz -684118ba684d21f07bf1095727a15457d301edf9 node-v0.11.1-darwin-x86.tar.gz -2c71490f3664421f58145f2945018efeb4d43652 node-v0.11.1-linux-x64.tar.gz -07b7ed48a50792605229efb2c256a3681d242b0e node-v0.11.1-linux-x86.tar.gz -bbe383ba0954f47812ff5d853069069901d8160d node-v0.11.1-sunos-x64.tar.gz -6782ff3bdd3af79d8ba8c8b0f352ca2106fcfafc node-v0.11.1-sunos-x86.tar.gz -47bf9b530d662f67b7b07729d83cd4f5575846b8 node-v0.11.1-x86.msi -b98e549850355be6a107044ca6a000518599a982 node-v0.11.1.pkg -fe13c36f4d9116ed718af9894aab989d74a9d91c node-v0.11.1.tar.gz -655ab3f0ce8227ffd68714491c2dd5aa7bdc0d10 node.exe -43a8f8a9cf53c0a2318b2288b6ba0e0f2a052858 node.exp -d54e5b303a0568f803ad09aa802b7f95b676180c node.lib -08098d40b362018f5df09f302d85c5834f127292 node.pdb -``` diff --git a/doc/blog/release/v0.11.10.md b/doc/blog/release/v0.11.10.md deleted file mode 100644 index 28444ccb5..000000000 --- a/doc/blog/release/v0.11.10.md +++ /dev/null @@ -1,106 +0,0 @@ -date: Tue Dec 31 16:20:57 PST 2013 -version: 0.11.10 -category: release -title: Node v0.11.10 (Unstable) -slug: node-v0-11-10-unstable - -2013.12.31, Version 0.11.10 (Unstable) - -* http_parser: update to 2.2 - -* uv: Upgrade to v0.11.17 - -* v8: Upgrade to 3.22.24.10 - -* buffer: optimize writeInt* methods (Paul Loyd) - -* child_process: better error handling (Alexis Campailla) - -* cluster: do not synchronously emit 'setup' event (Sam Roberts) - -* cluster: restore backwards compatibility and various fixes (Sam Roberts) - -* crypto: remove unnecessary OpenSSL_add_all_digests (Yorkie) - -* crypto: support GCM authenticated encryption mode. (Ingmar Runge) - -* dns: add resolveSoa and 'SOA' rrtype (Tuğrul Topuz) - -* events: move EE c'tor guts to EventEmitter.init (Bert Belder) - -* http: DELETE shouldn't default to chunked encoding (Lalit Kapoor) - -* http: parse the status message in a http response. (Cam Swords) - -* node: fix removing AsyncListener in callback (Vladimir Kurchatkin) - -* node: follow specification, zero-fill ArrayBuffers (Trevor Norris) - -* openssl: use ASM optimized routines (Fedor Indutny) - -* process: allow nextTick infinite recursion (Trevor Norris) - -* querystring: remove `name` from `stringify()` (Yorkie) - -* timers: setImmediate v8 optimization fix (pflannery) - -* tls: add serialNumber to getPeerCertificate() (Ben Noordhuis) - -* tls: reintroduce socket.encrypted (Fedor Indutny) - -* tls: fix handling of asterisk in SNI context (Fedor Indutny) - -* util: Format negative zero as '-0' (David Chan) - -* vm: fix race condition in timeout (Alexis Campailla) - -* windows: fix dns lookup of localhost with ipv6 (Alexis Campailla) - - -Source Code: http://nodejs.org/dist/v0.11.10/node-v0.11.10.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.10/node-v0.11.10.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.10/node-v0.11.10-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.10/x64/node-v0.11.10-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.10/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.10/node-v0.11.10-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.10/node-v0.11.10-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.10/node-v0.11.10-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.10/node-v0.11.10-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.10/ - -Website: http://nodejs.org/docs/v0.11.10/ - -Documentation: http://nodejs.org/docs/v0.11.10/api/ - -Shasums: -``` -4f7d0d43c1ee7593035ddb3cf09020a18a03c794 node-v0.11.10-darwin-x64.tar.gz -3b7100bcff39e39b6db5118805fcfc76d8524da2 node-v0.11.10-darwin-x86.tar.gz -3df4cb183a78bb975c831155d3c0aa29a274dec4 node-v0.11.10-linux-x64.tar.gz -12fc680b0a26cc73b4df0a0e9544b0db2bc06e96 node-v0.11.10-linux-x86.tar.gz -145417c8d801174a42255dc273da962cde94ffc9 node-v0.11.10-sunos-x64.tar.gz -981baba494e9be8978fa1bb336b3048367e809ce node-v0.11.10-sunos-x86.tar.gz -5f4d96c37cfb1423cc844f52e0547cb5bca99dd8 node-v0.11.10-x86.msi -8bd455fb7539609a7ee6bed87875a908fd6221ea node-v0.11.10.pkg -b860f511e4fc657a64594fc9f3f1225c1a140e5e node-v0.11.10.tar.gz -80976bffed871310a86d31694e2767ccbe9f6c35 node.exe -f11675958a492a83f057f356dd224ad507e82c61 node.exp -5a80c4ab5b1d0984b3a118536ca6421b4b9bc14f node.lib -207daafc40fba36200504fa52869b9c41cdbf5c9 node.pdb -3aa165e2d235888037f8099abd5bc9dca4b12100 pkgsrc/nodejs-ia32-0.11.10.tgz -1d5ef599b93c7d8c0d34ff2ab3dd4255babfaf72 pkgsrc/nodejs-x64-0.11.10.tgz -a6b16441721c34bae732b2b14134d0e1fd9706de x64/node-v0.11.10-x64.msi -933ff8a0a42c6e69fcbd51b9eaae4e4d14f043ae x64/node.exe -31c9abd54e5ba431f0645fa04d315f15dc010107 x64/node.exp -66bec5eae9033972463a6bd89183aa97bb84bfd1 x64/node.lib -43fbac8665dfcd121e547f56b1434a1c6039091d x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.11.md b/doc/blog/release/v0.11.11.md deleted file mode 100644 index 9b9a95978..000000000 --- a/doc/blog/release/v0.11.11.md +++ /dev/null @@ -1,106 +0,0 @@ -date: Tue Jan 28 19:46:04 PST 2014 -version: 0.11.11 -category: release -title: Node v0.11.11 (Unstable) -slug: node-v0-11-11-unstable - -2014.01.29, Version 0.11.11 (Unstable) - -* v8: Upgrade to 3.22.24.19 - -* http_parser: Upgrade to 2.2.1 - -* openssl: Upgrade to 1.0.1f - -* uv: Upgrade to 0.11.18 - -* async-listener: revamp of subsystem (Trevor Norris) - -* node: do not ever close stdio (Fedor Indutny) - -* http: use writev on chunked encoding (Trevor Norris) - -* async_wrap/timers: remove Add/RemoveAsyncListener (Trevor Norris) - -* child_process: better error reporting for exec (Fedor Indutny) - -* crypto: add newline to cert and key if not present (Fedor Indutny) - -* crypto: clear error in GetPeerCertificate (Fedor Indutny) - -* crypto: honor default ciphers in client mode (Jacob Hoffman-Andrews) - -* crypto: introduce .setEngine(engine, [flags]) (Fedor Indutny) - -* crypto: support custom pbkdf2 digest methods (Ben Noordhuis) - -* domain: fix off-by-one in Domain.exit() (Ryan Graham) - -* http: concatenate duplicate headers by default (Alex Kocharin) - -* http: do not emit EOF non-readable socket (Fedor Indutny) - -* node: fix argument parsing with -p arg (Alexis Campailla) - -* path: improve POSIX path.join() performance (Jo Liss) - -* tls: emit `clientError` on early socket close (Fedor Indutny) - -* tls: introduce `.setMaxSendFragment(size)` (Fedor Indutny) - -* tls: make cert/pfx optional in tls.createServer() (Ben Noordhuis) - -* tls: process accumulated input (Fedor Indutny) - -* tls: show human-readable error messages (Ben Noordhuis) - -* util: handle escaped forward slashes correctly (Tom Gallacher) - - -Source Code: http://nodejs.org/dist/v0.11.11/node-v0.11.11.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.11/node-v0.11.11.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.11/node-v0.11.11-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.11/x64/node-v0.11.11-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.11/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.11/node-v0.11.11-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.11/node-v0.11.11-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.11/node-v0.11.11-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.11/node-v0.11.11-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.11/ - -Website: http://nodejs.org/docs/v0.11.11/ - -Documentation: http://nodejs.org/docs/v0.11.11/api/ - -Shasums: -``` -b14d62e992a12cb552277770942a89b94c9edddd node-v0.11.11-darwin-x64.tar.gz -62ebf588c1909f0d820e975ee88cd506c0c8de30 node-v0.11.11-darwin-x86.tar.gz -cb0f4477d6ec96993e0b538885e960027872a936 node-v0.11.11-linux-x64.tar.gz -ac9e91f268f1ac1bad79a0c817d5d8689ece1095 node-v0.11.11-linux-x86.tar.gz -e25eab9e2e560d02b0ca57a219a0eba3d4e3d14d node-v0.11.11-sunos-x64.tar.gz -3a1ce4e226edf56fb7811ebe13da9163ae0a1460 node-v0.11.11-sunos-x86.tar.gz -a0b237df15b1ce07049f72b4a49b4ab5109dfe67 node-v0.11.11-x86.msi -78807abf9b4faeea4b405ad9fb13daab09306772 node-v0.11.11.pkg -65b257ec6584bf339f06f58a8a02ba024e13f283 node-v0.11.11.tar.gz -33fa2097f75f5077bb1ef34930594a591d922a7f node.exe -192b4503b351fd9a98a136f697e85c4372c71bd1 node.exp -bd9a3482a6be8b5708172450abe9358a3956816e node.lib -d51780e8f3a936d2dd28fa00f832424ad6e7ca42 node.pdb -a687afbb8e4d5a3a120a812e889dae2f0eca2fa4 pkgsrc/nodejs-ia32-0.11.11.tgz -3da73af5f7059000b1a898259de9e7197b6e9bac pkgsrc/nodejs-x64-0.11.11.tgz -9fa14e245795b7adf0dfebe317490fefd40bfbe9 x64/node-v0.11.11-x64.msi -e19bcf90ef4d864a11744648cadb864911ee5f4e x64/node.exe -83e31621bfc45b9b86f4724a3255cf3afdb3236a x64/node.exp -c778c1853e45686e5fefb463a419658ff9b966e1 x64/node.lib -ced8fe51cd619d07c53c0f1f1fdcfc5ff3c70373 x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.2.md b/doc/blog/release/v0.11.2.md deleted file mode 100644 index 5fbe6cd79..000000000 --- a/doc/blog/release/v0.11.2.md +++ /dev/null @@ -1,87 +0,0 @@ -date: Mon May 13 15:53:06 PDT 2013 -version: 0.11.2 -category: release -title: Node v0.11.2 (Unstable) -slug: node-v0-11-2-unstable - -2013.05.13, Version 0.11.2 (Unstable) - -* uv: Upgrade to 0.11.2 - -* V8: Upgrade to 3.19.0 - -* npm: Upgrade to 1.2.21 - -* build: Makefile should respect configure --prefix (Timothy J Fontaine) - -* cluster: use round-robin load balancing (Ben Noordhuis) - -* debugger, cluster: each worker has new debug port (Miroslav Bajtoš) - -* debugger: `restart` with custom debug port (Miroslav Bajtoš) - -* debugger: breakpoints in scripts not loaded yet (Miroslav Bajtoš) - -* event: EventEmitter#setMaxListeners() returns this (Sam Roberts) - -* events: add EventEmitter.defaultMaxListeners (Ben Noordhuis) - -* install: Support $(PREFIX) install target directory prefix (Olof Johansson) - -* os: Include netmask in os.networkInterfaces() (Ben Kelly) - -* path: add path.isAbsolute(path) (Ryan Doenges) - -* stream: Guarantee ordering of 'finish' event (isaacs) - -* streams: introduce .cork/.uncork/._writev (Fedor Indutny) - -* vm: add support for timeout argument (Andrew Paprocki) - - -Source Code: http://nodejs.org/dist/v0.11.2/node-v0.11.2.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.2/node-v0.11.2.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.2/node-v0.11.2-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.2/x64/node-v0.11.2-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.2/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.2/node-v0.11.2-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.2/node-v0.11.2-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.2/node-v0.11.2-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.2/node-v0.11.2-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.2/ - -Website: http://nodejs.org/docs/v0.11.2/ - -Documentation: http://nodejs.org/docs/v0.11.2/api/ - -Shasums: - -``` -ddc85fd6ed70057c64d7c9cd64bb94f28596d163 node-v0.11.2-darwin-x64.tar.gz -9893a3a3598d2e5ed24bfee8642b72c37808dbae node-v0.11.2-darwin-x86.tar.gz -f81189c30aa268f2b43572e1795fedd50f3495c3 node-v0.11.2-linux-x64.tar.gz -6322bf3be78f907a3b5e06f38af1b33c52957612 node-v0.11.2-linux-x86.tar.gz -3becca01532e104081ca51a265f07e77b6e9e25f node-v0.11.2-sunos-x64.tar.gz -9489238384edb456d9a603e5bef1128dfafe69b1 node-v0.11.2-sunos-x86.tar.gz -76421e22cff4d4f4d1cb2ce3e3566e2c9004cdee node-v0.11.2-x86.msi -a23d607f7b433197533cd6d88c981c75463efff8 node-v0.11.2.pkg -1d1080598431062ccb4bbbf7ecbb7596fe664c67 node-v0.11.2.tar.gz -b45a04167d32887c32a2479c4567af394627c8ad node.exe -c65ce6e073e173ae5769fe4dd9ff83f2f56ce05d node.exp -31f569697cb8447492e3172e614c3c4cfff81d09 node.lib -c98f8a717ef9d660ff3d45e86e2ee396ca02e721 node.pdb -7caabd3a774c96a8126f10d2e184727bd5160526 x64/node-v0.11.2-x64.msi -3b049227e3c392fdb88de9a5da7ad1ec14c82d17 x64/node.exe -c95f9746e180c064a5225ab83cca604bf918e59a x64/node.exp -78c94386c312ded2f7cb0c84951535b67e36fecf x64/node.lib -ad774b472a3cfa03374aac2d1dac19f9599ad2f8 x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.3.md b/doc/blog/release/v0.11.3.md deleted file mode 100644 index 4bc89efc3..000000000 --- a/doc/blog/release/v0.11.3.md +++ /dev/null @@ -1,101 +0,0 @@ -date: Wed Jun 26 16:55:29 PDT 2013 -version: 0.11.3 -category: release -title: Node v0.11.3 (Unstable) -slug: node-v0-11-3-unstable - -2013.06.26, Version 0.11.3 (Unstable) - -* uv: Upgrade to v0.11.5 - -* c-ares: upgrade to 1.10.0 - -* v8: upgrade to v3.19.13 - -* punycode: update to v1.2.3 (Mathias Bynens) - -* debugger: break on uncaught exception (Miroslav Bajtos) - -* child_process: emit 'disconnect' asynchronously (Ben Noordhuis) - -* dtrace: enable uv's probes if enabled (Timothy J Fontaine) - -* dtrace: unify dtrace and systemtap interfaces (Timothy J Fontaine) - -* buffer: New API for backing data store (Trevor Norris) - -* buffer: return `this` in fill() for chainability (Brian White) - -* build: fix include order for building on windows (Timothy J Fontaine) - -* build: add android support (Linus Mårtensson) - -* readline: strip ctrl chars for prompt width calc (Krzysztof Chrapka) - -* tls: introduce TLSSocket based on tls_wrap binding (Fedor Indutny) - -* tls: add localAddress and localPort properties (Ben Noordhuis) - -* crypto: free excessive memory in NodeBIO (Fedor Indutny) - -* process: remove maxTickDepth (Trevor Norris) - -* timers: use uv_now instead of Date.now (Timothy J Fontaine) - -* util: Add debuglog, deprecate console lookalikes (isaacs) - -* module: use path.sep instead of a custom solution (Robert Kowalski) - -* http: don't escape request path, reject bad chars (Ben Noordhuis) - -* net: emit dns 'lookup' event before connect (Ben Noordhuis) - -* dns: add getServers and setServers (Timothy J Fontaine) - - -Source Code: http://nodejs.org/dist/v0.11.3/node-v0.11.3.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.3/node-v0.11.3.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.3/node-v0.11.3-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.3/x64/node-v0.11.3-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.3/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.3/node-v0.11.3-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.3/node-v0.11.3-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.3/node-v0.11.3-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.3/node-v0.11.3-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.3/ - -Website: http://nodejs.org/docs/v0.11.3/ - -Documentation: http://nodejs.org/docs/v0.11.3/api/ - -Shasums: - -``` -8320d6167f4c49d85b42bde41a201dabc125540d node-v0.11.3-darwin-x64.tar.gz -df9a540da0f5eb80682b5f63a8f7c841876ae9b2 node-v0.11.3-darwin-x86.tar.gz -76839ea31e90046c80af088b36c619eae622a6c0 node-v0.11.3-linux-x64.tar.gz -fd571ebfcdf5d7e35a2fbd972967ac24326ecb39 node-v0.11.3-linux-x86.tar.gz -85c03b89d61245ddfc911784a358e32a8a801c4f node-v0.11.3-sunos-x64.tar.gz -58f7824fdbe8b57e13865630c11100ac920474f9 node-v0.11.3-sunos-x86.tar.gz -507bbb003c755865f2b9cfc7a656ec9b142624fd node-v0.11.3-x86.msi -613ac2e985738ac06859394daf64347594b1e073 node-v0.11.3.pkg -4b82d58ed3ce38fa67a8484b42cfd47179b6a4a5 node-v0.11.3.tar.gz -e8628e45ee979ed0e666ff4ddce82444251afc85 node.exe -e883f3f4b110e78cd11d03848003829fd7377ddb node.exp -5e82f6ef29379d8d39fb0661a0533bdbed412432 node.lib -cc3ee23230b947159282161481491f39f9a36c85 node.pdb -2f7adfe4cfb69efc5d9f0b94b18787a0e14c3021 x64/node-v0.11.3-x64.msi -625fd4ab66816e57b08d73853a9438ea9e16f720 x64/node.exe -dbc8cc48c651b342980b408fdc07da01e6e3e67e x64/node.exp -9203d66c50a34c1658928d525d1f1d2eaae9718c x64/node.lib -9b1261772868734a7962848e1d1db55efde2bce9 x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.4.md b/doc/blog/release/v0.11.4.md deleted file mode 100644 index f4b58dc7b..000000000 --- a/doc/blog/release/v0.11.4.md +++ /dev/null @@ -1,88 +0,0 @@ -date: Fri Jul 12 14:34:13 PDT 2013 -version: 0.11.4 -category: release -title: Node v0.11.4 (Unstable) -slug: node-v0-11-4-unstable - -2013.07.12, Version 0.11.4 (Unstable) - -* npm: Upgrade to 1.3.4 - -* v8: Upgrade to v3.20.2 - -* c-ares: Upgrade to piscisaureus/cares@805d153 - -* timers: setImmediate process full queue each turn (Ben Noordhuis) - -* http: Add agent.get/request methods (isaacs) - -* http: Proper KeepAlive behavior (isaacs) - -* configure: fix the --without-ssl option (Nathan Rajlich) - -* buffer: propagate originating parent (Trevor Norris) - -* tls_wrap: return Error not throw for missing cert (Timothy J Fontaine) - -* src: enable native v8 typed arrays (Ben Noordhuis) - -* stream: objectMode transform should allow falsey values (Jeff Barczewski) - -* slab_allocator: remove SlabAllocator (Trevor Norris) - -* crypto: fix memory leak in LoadPKCS12 (Fedor Indutny) - -* tls: export TLSSocket (Fedor Indutny) - -* zlib: allow changing of level and strategy (Brian White) - -* zlib: allow custom flush type for flush() (Brian White) - - -Source Code: http://nodejs.org/dist/v0.11.4/node-v0.11.4.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.4/node-v0.11.4.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.4/node-v0.11.4-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.4/x64/node-v0.11.4-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.4/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.4/node-v0.11.4-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.4/node-v0.11.4-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.4/node-v0.11.4-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.4/node-v0.11.4-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.4/ - -Website: http://nodejs.org/docs/v0.11.4/ - -Documentation: http://nodejs.org/docs/v0.11.4/api/ - -Shasums: -``` -0035d18e2dcf9aad669b1c7c07319e17abfe3762 ./node-v0.11.4.tar.gz -a7be873e87c6f4721892791a047331018f851986 ./node-v0.11.4.pkg -fbfcf8a599c765ba924ddbe1ba8c143053b5342e ./node-v0.11.4-linux-x64.tar.gz -7df3de8dfb8547ba11e8dec16380ac1ca9978e82 ./node-v0.11.4-linux-x86.tar.gz -f272e7d87ab9b0baa41b10561d34b3aeadfcd0fa ./node-v0.11.4-darwin-x86.tar.gz -7f56d5a7e6b73e22950610ae6c1dd00edd4940bc ./node-v0.11.4-darwin-x64.tar.gz -0b919bae82fa7ab9a17bf694fa44080b2612a0d4 ./node-v0.11.4-sunos-x86.tar.gz -5283e2c1f8a9e51fa864957d1ed28bb1549a7ab9 ./node-v0.11.4-sunos-x64.tar.gz -50374dcf0932465ce0ac8d124df8ecd34eeea6a1 ./node-v0.11.4-x86.msi -42a9430e7500d8e4b0a78428594082f5deeab4d6 ./node.pdb -4eda314346e201890fde54fc55f8db7896cb9288 ./node.exp -8c1631b168d855fc93a952a8a1a91946d2596278 ./node.exe -bb76a0d00c3c8c10f8c49c46e7d684b8850ac90a ./node.lib -2f2bf4bc58da9be63e9840b113b4d665a6019bad ./x64/node-v0.11.4-x64.msi -31273870a763aa55d611a366ade2ca6c39bac2f5 ./x64/node.exp -a90905f911e2f741c34699c62f28ffab48565559 ./x64/node.pdb -d325667dcbdf50c92fc8c3034df3808f734179fa ./x64/node.exe -9a9a0fc005cf4c09154f3171be74b4153579c6fe ./x64/node.lib -0d3f96506def112ff1344f87d7271122412ff899 ./pkgsrc/nodejs-x64-0.11.4.tgz -28b1eb61fe7b9901a809a137424c4e05bd8f6fa6 ./pkgsrc/nodejs-ia32-0.11.4.tgz -``` diff --git a/doc/blog/release/v0.11.5.md b/doc/blog/release/v0.11.5.md deleted file mode 100644 index 95d36991d..000000000 --- a/doc/blog/release/v0.11.5.md +++ /dev/null @@ -1,88 +0,0 @@ -date: Tue Aug 6 17:05:46 PDT 2013 -version: 0.11.5 -category: release -title: Node v0.11.5 (Unstable) -slug: node-v0-11-5-unstable - -2013.08.06, Version 0.11.5 (Unstable) - -* v8: upgrade to 3.20.11 - -* uv: upgrade to v0.11.7 - -* buffer: return offset for end of last write (Trevor Norris) - -* build: embed the mdb_v8.so into the binary (Timothy J Fontaine) - -* build: fix --without-ssl build (Ben Noordhuis) - -* child_process: add 'shell' option to .exec() (Ben Noordhuis) - -* dgram: report send errors to cb, don't pass bytes (Ben Noordhuis) - -* fs: write strings directly to disk (Trevor Norris) - -* https: fix default port (Koichi Kobayashi) - -* openssl: use asm for sha, md5, rmd (Fedor Indutny) - -* os: add mac address to networkInterfaces() output (Brian White) - -* smalloc: introduce smalloc module (Trevor Norris) - -* stream: Simplify flowing, passive data listening (streams3) (isaacs) - -* tls: asynchronous SNICallback (Fedor Indutny) - -* tls: share tls tickets key between cluster workers (Fedor Indutny) - -* util: don't throw on circular %j input to format() (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.11.5/node-v0.11.5.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.5/node-v0.11.5.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.5/node-v0.11.5-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.5/x64/node-v0.11.5-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.5/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.5/node-v0.11.5-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.5/node-v0.11.5-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.5/node-v0.11.5-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.5/node-v0.11.5-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.5/ - -Website: http://nodejs.org/docs/v0.11.5/ - -Documentation: http://nodejs.org/docs/v0.11.5/api/ - -Shasums: -``` -a48c7c1ffa0344ab4c7f9b3466ed76d8b7ce4385 node-v0.11.5-darwin-x64.tar.gz -c18ef8b45a4a6a8afebaa0c43f7388f20c6dee92 node-v0.11.5-darwin-x86.tar.gz -caa13a498ef32b09c717c86c7b9e5be1feb34a42 node-v0.11.5-linux-x64.tar.gz -1b55090713d6cb4fadab080f4e50bc5e2b9ee2fe node-v0.11.5-linux-x86.tar.gz -7cfc4574dd70517d46856c03751e362e61049d70 node-v0.11.5-sunos-x64.tar.gz -443e4e51a49e34b5d62b7ead3e0b1079cae05dd9 node-v0.11.5-sunos-x86.tar.gz -1042917fb1fa5ae8d387f918924a8dcd15f4d6a3 node-v0.11.5-x86.msi -0e832e2e466c1ffffed1e7ed781fb9366339d053 node-v0.11.5.pkg -5cd49ac41bb6929a43aaf77037d051fe794e5ad3 node-v0.11.5.tar.gz -432da8b8e801ec8660ddbeb73524fc8cb74da8ea node.exe -1d724ca5211148180ba0154575648edd758ec2c8 node.exp -ef12c19e95e671debfa96afe3496afbb8f16283d node.lib -12fefe001a90260ca6e403aa27d770611d2bdd51 node.pdb -96e15938a6845895cde1ca6db64ba86350bd4d06 pkgsrc/nodejs-ia32-0.11.5.tgz -960ade5a3cf7ac7b1b35755f204e9adfb784cc4a pkgsrc/nodejs-x64-0.11.5.tgz -151ab6ffe45d84918edd9c95bda378fdefe170b8 x64/node-v0.11.5-x64.msi -c2b0f6130539a6ad22206308050b34a44026ce26 x64/node.exe -89c631942ec57e30165ddbb637da0100493c3f7b x64/node.exp -719b857474a8e3eb7269778414d7af2aee855ede x64/node.lib -f2eebec1949f4d7da59d3a2135207ac4c2fe0161 x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.6.md b/doc/blog/release/v0.11.6.md deleted file mode 100644 index 6edc3dfc7..000000000 --- a/doc/blog/release/v0.11.6.md +++ /dev/null @@ -1,110 +0,0 @@ -date: Wed Aug 21 14:11:09 PDT 2013 -version: 0.11.6 -category: release -title: Node v0.11.6 (Unstable) -slug: node-v0-11-6-unstable - -2013.08.21, Version 0.11.6 (Unstable) - -* uv: Upgrade to v0.11.8 - -* v8: upgrade v8 to 3.20.14.1 - -* build: disable SSLv2 by default (Ben Noordhuis) - -* build: don't auto-destroy existing configuration (Ben Noordhuis) - -* crypto: add TLS 1.1 and 1.2 to secureProtocol list (Matthias Bartelmeß) - -* crypto: fix memory leak in randomBytes() error path (Ben Noordhuis) - -* dgram: don't call into js when send cb is omitted (Ben Noordhuis) - -* dgram: fix regression in string argument handling (Ben Noordhuis) - -* domains: performance improvements (Trevor Norris) - -* events: EventEmitter = require('events') (Jake Verbaten) - -* http: Add write()/end() callbacks (isaacs) - -* http: Consistent 'finish' event semantics (isaacs) - -* http: Prefer 'binary' over 'ascii' (isaacs) - -* http: Support legacy agent.addRequest API (isaacs) - -* http: Write hex/base64 chunks properly (isaacs) - -* http: add agent.maxFreeSockets option (isaacs) - -* http: provide access to raw headers/trailers (isaacs) - -* http: removed headers stay removed (James Halliday) - -* http,timers: improve callback performance (Ben Noordhuis) - -* net: family option in net.connect (Vsevolod Strukchinsky) - -* readline: pause stdin before turning off terminal raw mode (Daniel Chatfield) - -* smalloc: allow different external array types (Trevor Norris) - -* smalloc: expose ExternalArraySize (Trevor Norris) - -* stream: Short-circuit buffer pushes when flowing (isaacs) - -* tls: handle errors on socket before releasing it (Fedor Indutny) - -* util: fix isPrimitive check (Trevor Norris) - -* util: isObject should always return boolean (Trevor Norris) - - -Source Code: http://nodejs.org/dist/v0.11.6/node-v0.11.6.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.6/node-v0.11.6.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.6/node-v0.11.6-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.6/x64/node-v0.11.6-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.6/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.6/node-v0.11.6-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.6/node-v0.11.6-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.6/node-v0.11.6-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.6/node-v0.11.6-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.6/ - -Website: http://nodejs.org/docs/v0.11.6/ - -Documentation: http://nodejs.org/docs/v0.11.6/api/ - -Shasums: -``` -5bab906e0ec1d5d2c2a750f17253955ba8c590b1 ./node-v0.11.6-darwin-x64.tar.gz -085a4ecf18ec3200e6e8bd140b3dc7f9fa65f8b5 ./node-v0.11.6-darwin-x86.tar.gz -c162932132977820e06b856ba9cc84c7d4b57749 ./node-v0.11.6-linux-x64.tar.gz -ed188f465c62da99d870bf8fa17fbd0d543d8d2e ./node-v0.11.6-linux-x86.tar.gz -0f52a91353d2c51b4d59c07b2a3b5d2e26060c93 ./node-v0.11.6-sunos-x64.tar.gz -eac97868a552eae2dad92d633d0b78e069d05bed ./node-v0.11.6-sunos-x86.tar.gz -3bdcfd9305fca8bc81197c53c5aff4c4a0745966 ./node-v0.11.6-x86.msi -92abb4a4cc83bf9d3f1ed2f86a8aecd19672e7cf ./node-v0.11.6.pkg -4f3a643b4913ef085175aef180c3bfd9259a4357 ./node-v0.11.6.tar.gz -8051915c27eaee334a3d89a32fe1593e2b01182b ./node.exe -29f62a9272ae7679118f4a21c536eb2384fa3af4 ./node.exp -dc060de643dec7f17a696c533d9443bfdf25ee61 ./node.lib -6438410f3685c585379e44b8bf39240ff0e65175 ./node.pdb -dddfd481d376a215f0e039143ff1d22b317ca1d3 ./pkgsrc/nodejs-ia32-0.11.6.tgz -634c9249428fde318e9087eebc9d50401c110521 ./pkgsrc/nodejs-x64-0.11.6.tgz -90b58cb39a655591c240388942b629ff725fb076 ./x64/node-v0.11.6-x64.msi -faeda12db9ca90a89dbd1d131702be39a883e7a2 ./x64/node.exe -d6ab6da893cefd30795163a4e0d5585a996f13ec ./x64/node.exp -f8f598114199b8876ef2cf7414eee488fcf713b9 ./x64/node.lib -e09f49b3d3b881f2c3dcdff24369176572cc7338 ./x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.7.md b/doc/blog/release/v0.11.7.md deleted file mode 100644 index d0639cabf..000000000 --- a/doc/blog/release/v0.11.7.md +++ /dev/null @@ -1,92 +0,0 @@ -date: Wed Sep 4 15:18:08 PDT 2013 -version: 0.11.7 -category: release -title: Node v0.11.7 (Unstable) -slug: node-v0-11-7-unstable - -2013.08.21, Version 0.11.7 (Unstable) - -* uv: upgrade to v0.11.13 - -* v8: upgrade to 3.20.17 - -* buffer: adhere to INSPECT_MAX_BYTES (Timothy J Fontaine) - -* buffer: fix regression for large buffer creation (Trevor Norris) - -* buffer: don't throw if slice length too long (Trevor Norris) - -* buffer: Buffer(buf) constructor copies into the proper buffer (Ben Noordhuis) - -* cli: remove --max-stack-size (Ben Noordhuis) - -* cli: unknown command line options are errors (Ben Noordhuis) - -* child_process: exec accept buffer as an encoding (Seth Fitzsimmons) - -* crypto: make randomBytes/pbkdf2 callbacks domain aware (Ben Noordhuis) - -* domain: deprecate domain.dispose(). (Forrest L Norvell) - -* fs: Expose birthtime on stat objects (isaacs) - -* http: Only send connection:keep-alive if necessary (isaacs) - -* repl: Catch syntax errors better (isaacs, Nathan Rajlich) - -* stream: change default highWaterMark for objectMode to 16 (Mathias Buus) - -* stream: make setEncoding/pause/resume chainable (Julian Gruber, isaacs) - -* util: pass opts to custom inspect functions (Timothy J Fontaine) - -* vm: rewritten to behave like Contextify (Domenic Denicola) - - -Source Code: http://nodejs.org/dist/v0.11.7/node-v0.11.7.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.7/node-v0.11.7.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.7/node-v0.11.7-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.7/x64/node-v0.11.7-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.7/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.7/node-v0.11.7-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.7/node-v0.11.7-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.7/node-v0.11.7-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.7/node-v0.11.7-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.7/ - -Website: http://nodejs.org/docs/v0.11.7/ - -Documentation: http://nodejs.org/docs/v0.11.7/api/ - -Shasums: -``` -7ce3cf1297b6a8cda2aa134424890dcc6eaacc12 node-v0.11.7-darwin-x64.tar.gz -183b4a29eb65dabb5de732f2ab15cdac8c5e5c94 node-v0.11.7-darwin-x86.tar.gz -7d39c046388e7ec6bb2d53a575a0c9ed1d4a9bcc node-v0.11.7-linux-x64.tar.gz -4cf9a367b614b76722324ec6a3beb3295412100c node-v0.11.7-linux-x86.tar.gz -1d98fa4117f3ac7c7f081eea22a016c8549b27c1 node-v0.11.7-sunos-x64.tar.gz -9c04eb5ca9485370d757b0be94b223b5a0180b7a node-v0.11.7-sunos-x86.tar.gz -f131bca701ad9dac61d8929362a3c8cde41845de node-v0.11.7-x86.msi -95c1ab2d08f3ba1bb514469ad8786af6ecb18f57 node-v0.11.7.pkg -a3b0d7fb818754ad55f06a02745d7ec53986de64 node-v0.11.7.tar.gz -33371cadab85e7c3864d5eafae4041a9ca0f3ca2 node.exe -823487bfaa44f10770ecc9c8deec1bbe63bc955e node.exp -194c286bf8ef6608a891dc2c27cd38471da780a3 node.lib -0491c4e8d45fe420cc065be4de05dbcff0d4223a node.pdb -d8b2d7e034d6031c083fb3c88c251f179b18b4ca pkgsrc/nodejs-ia32-0.11.7.tgz -a9e7822718212a22b5630057efcba174041db9ff pkgsrc/nodejs-x64-0.11.7.tgz -44e7eeafb0982f81778a15ece00c8f25cc4d00f5 x64/node-v0.11.7-x64.msi -88067c4d19af87f5645a3f8bc81ec7d1610580de x64/node.exe -d150573f7567a0da4418d5086410fecabcc1fae8 x64/node.exp -e0482e1cca25faacaa1111e2de647025bca5e7f5 x64/node.lib -e9a87b9b7aa1ff220ce4b4b5cb0758c9071c8ce2 x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.8.md b/doc/blog/release/v0.11.8.md deleted file mode 100644 index eb8d8a256..000000000 --- a/doc/blog/release/v0.11.8.md +++ /dev/null @@ -1,96 +0,0 @@ -date: Wed Oct 30 08:54:47 PDT 2013 -version: 0.11.8 -category: release -title: Node v0.11.8 (Unstable) -slug: node-v0-11-8-unstable - -2013.10.30, Version 0.11.8 (Unstable) - -* uv: Upgrade to v0.11.14 - -* v8: upgrade 3.21.18.3 - -* assert: indicate if exception message is generated (Glen Mailer) - -* buffer: add buf.toArrayBuffer() API (Trevor Norris) - -* cluster: fix premature 'disconnect' event (Ben Noordhuis) - -* crypto: add SPKAC support (Jason Gerfen) - -* debugger: count space for line numbers correctly (Alex Kocharin) - -* debugger: make busy loops SIGUSR1-interruptible (Ben Noordhuis) - -* debugger: repeat last command (Alex Kocharin) - -* debugger: show current line, fix for #6150 (Alex Kocharin) - -* dgram: send() can accept strings (Trevor Norris) - -* dns: rename domain to hostname (Ben Noordhuis) - -* dns: set hostname property on error object (Ben Noordhuis) - -* dtrace, mdb_v8: support more string, frame types (Dave Pacheco) - -* http: add statusMessage (Patrik Stutz) - -* http: expose supported methods (Ben Noordhuis) - -* http: provide backpressure for pipeline flood (isaacs) - -* process: Add exitCode property (isaacs) - -* tls: socket.renegotiate(options, callback) (Fedor Indutny) - -* util: format as Error if instanceof Error (Rod Vagg) - - -Source Code: http://nodejs.org/dist/v0.11.8/node-v0.11.8.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.8/node-v0.11.8.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.8/node-v0.11.8-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.8/x64/node-v0.11.8-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.8/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.8/node-v0.11.8-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.8/node-v0.11.8-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.8/node-v0.11.8-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.8/node-v0.11.8-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.8/ - -Website: http://nodejs.org/docs/v0.11.8/ - -Documentation: http://nodejs.org/docs/v0.11.8/api/ - -Shasums: -``` -1911bc1407fd116318edaa0cfd01bd664b2b352c node-v0.11.8-darwin-x64.tar.gz -bac43c31e257e9f2deffb08c4154f522d5925825 node-v0.11.8-darwin-x86.tar.gz -1b2dac1788f3aad51ec643854ae57771792e6647 node-v0.11.8-linux-x64.tar.gz -1f674dd1ac15561dbf99ecf80d00e2cfcdc1a23b node-v0.11.8-linux-x86.tar.gz -51d29f3624b18e75cf5736eedd62a55931551251 node-v0.11.8-sunos-x64.tar.gz -b995b05a3b14373c61faf4cd5c05157e06f410c8 node-v0.11.8-sunos-x86.tar.gz -5f6fd1f68d9f61c889c7a0148a6bfbb681a119b5 node-v0.11.8-x86.msi -95097ea074fa1b20c3bd46eae33a24935842149b node-v0.11.8.pkg -21d3927c78adaaf3fe7cc9602ffb0a85de7f6ea0 node-v0.11.8.tar.gz -f735cf8b6404428087ba759dc21818b4d968e2ba node.exe -c632e716ac2b303a4e2f3e0c81819b4020c9e0df node.exp -dea16a4911693689c3981e19ae2fa77ea2884797 node.lib -0a5bfce12045512b1f4a0341d1381459e9731321 node.pdb -25b8d468c1ef53332834a46aaae0ee1820771871 pkgsrc/nodejs-ia32-0.11.8.tgz -fb16a45a0a467aa7661048a3d00d4e81c35bbf56 pkgsrc/nodejs-x64-0.11.8.tgz -b4b2c453404f5aa0d37fbce5d55ac1e030f3e7cc x64/node-v0.11.8-x64.msi -799da7eb400d91b7eec157d25da0e138630f27e4 x64/node.exe -6482cce41d8a98ba55daaccc581929df018f2edf x64/node.exp -7e2bb85b6ca45c4df487b9cca7d420e87170b272 x64/node.lib -1aa3a1f9d767e81dbdd1af1d13f221830c467d68 x64/node.pdb -``` diff --git a/doc/blog/release/v0.11.9.md b/doc/blog/release/v0.11.9.md deleted file mode 100644 index 101994fcf..000000000 --- a/doc/blog/release/v0.11.9.md +++ /dev/null @@ -1,92 +0,0 @@ -date: Wed Nov 20 16:40:35 PST 2013 -version: 0.11.9 -category: release -title: Node v0.11.9 (Unstable) -slug: node-v0-11-9-unstable - -2013.11.20, Version 0.11.9 (Unstable) - -* uv: upgrade to v0.11.15 (Timothy J Fontaine) - -* v8: upgrade to 3.22.24.5 (Timothy J Fontaine) - -* buffer: remove warning when no encoding is passed (Trevor Norris) - -* build: make v8 use random seed for hash tables (Ben Noordhuis) - -* crypto: build with shared openssl without NPN (Ben Noordhuis) - -* crypto: update root certificates (Ben Noordhuis) - -* debugger: pass on v8 debug switches (Ben Noordhuis) - -* domain: use AsyncListener API (Trevor Norris) - -* fs: add recursive subdirectory support to fs.watch (Nick Simmons) - -* fs: make fs.watch() non-recursive by default (Ben Noordhuis) - -* http: cleanup freeSockets when socket destroyed (fengmk2) - -* http: force socket encoding to be null (isaacs) - -* http: make DELETE requests set `req.method` (Nathan Rajlich) - -* node: add AsyncListener support (Trevor Norris) - -* src: remove global HandleScope that hid memory leaks (Ben Noordhuis) - -* tls: add ECDH ciphers support (Erik Dubbelboer) - -* tls: do not default to 'localhost' servername (Fedor Indutny) - -* tls: more accurate wrapping of connecting socket (Fedor Indutny) - - -Source Code: http://nodejs.org/dist/v0.11.9/node-v0.11.9.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.11.9/node-v0.11.9.pkg - -Windows Installer: http://nodejs.org/dist/v0.11.9/node-v0.11.9-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.11.9/x64/node-v0.11.9-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.11.9/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.11.9/node-v0.11.9-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.11.9/node-v0.11.9-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.11.9/node-v0.11.9-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.11.9/node-v0.11.9-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.11.9/ - -Website: http://nodejs.org/docs/v0.11.9/ - -Documentation: http://nodejs.org/docs/v0.11.9/api/ - -Shasums: -``` -3a1af0d716042d617e51a82b43b2f97542f6c03a node-v0.11.9-darwin-x64.tar.gz -580696c5b2f30c8394cdee265c4888ad67e03b89 node-v0.11.9-darwin-x86.tar.gz -585df0690254afc22b29d7dc5f12fcb50f1bb588 node-v0.11.9-linux-x64.tar.gz -16fb7e69b90b6b6ac84a9120202918f197d4c0c0 node-v0.11.9-linux-x86.tar.gz -bff51e2ab3752f4ae338adca14c2c453294e6017 node-v0.11.9-sunos-x64.tar.gz -9a7ada5c862174d6ce4b524d5816e26a36b763a8 node-v0.11.9-sunos-x86.tar.gz -3a4de2ae0dd8268592546b4fdcbd78f1cbc68118 node-v0.11.9-x86.msi -8c70de5cd39ecd33e6c02d4b0f6ca4010d21372e node-v0.11.9.pkg -b4fc0e38ccde4edae45db198f331499055d77ca2 node-v0.11.9.tar.gz -9a4b04f0d40251696fac9161567e97c228d4e57d node.exe -96bfa67a417599c96818461d6d27f50401a74a36 node.exp -5f56ef7c2204ea75916876f6ab9e641b312dff11 node.lib -2db6eb844b36d96a0e34370ad1d311a57facd3d6 node.pdb -4a3590db0e6131739661628632ae1b8d70e2247b pkgsrc/nodejs-ia32-0.11.9.tgz -3ce0291cf0972ac5a2c0543fd1672d8b20569891 pkgsrc/nodejs-x64-0.11.9.tgz -9b736ec896e6b1b5856730869471c7e736f6ce78 x64/node-v0.11.9-x64.msi -1ec3593262b6e281457748ff3f3f195cd682592d x64/node.exe -1cf9ba6d503d5f8b18bfc2c1554bce04eba8a536 x64/node.exp -0a3e79ceecd05add6dab97bb6d9f460a61adddbc x64/node.lib -2037b32bbcb14e24d10c6cb2abe128bc9a85a932 x64/node.pdb -``` diff --git a/doc/blog/release/v0.6.20.md b/doc/blog/release/v0.6.20.md deleted file mode 100644 index 8eee1e364..000000000 --- a/doc/blog/release/v0.6.20.md +++ /dev/null @@ -1,51 +0,0 @@ -version: 0.6.20 -title: Version 0.6.20 (maintenance) -category: release -slug: node-v0-6-20-maintenance -date: 2012.07.10 18:00 - -2012.07.10 Version 0.6.20 (maintenance) - -* npm: Upgrade to 1.1.37 (isaacs) - -* benchmark: Backport improvements made in master (isaacs) - -* build: always link with -lz (Trent Mick) - -* core: use proper #include directives (Ben Noordhuis) - -* cluster: don't silently drop messages when the write queue gets big (Bert Belder) - -* windows: don't print error when GetConsoleTitleW returns an empty string (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.6.20/node-v0.6.20.tar.gz - -Windows Installer: http://nodejs.org/dist/v0.6.20/node-v0.6.20.msi - -Windows x64 Files: http://nodejs.org/dist/v0.6.20/x64/ - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.6.20/node-v0.6.20.pkg - -Other release files: http://nodejs.org/dist/v0.6.20/ - -Website: http://nodejs.org/docs/v0.6.20/ - -Documentation: http://nodejs.org/docs/v0.6.20/api/ - -Shasums: - -``` -5029f30e6af79e7a9a1d45396afbe20229059b47 node-v0.6.20.msi -370105015bae2a77e4da41564ad3df8fcd0acaec node-v0.6.20.pkg -91da1dde9badd5250f3d4829c47757de0caab84b node-v0.6.20.tar.gz -efa29addd716c175d945ade5dfa2b9ebd7f6fed8 node.exe -aab0e367adcc9fdee479dbe67a32c6b27ee35960 node.exp -ce6c455937f96eb671f44dc731d628849fa8b350 node.lib -a8db5c269de9c3059684f9aa3de5a4cdbd9b3d12 node.pdb -22f97ba2c678b4c8a1def251269920ee46c90bca x64/node-v0.6.20.msi -276136ae7f6e2e59d0ae26d434e4d6ab65769957 x64/node.exe -af56811749aa4fe013a36f7bccecfb94587c0afd x64/node.exp -a629af1b4f6f4b82e332c35695fff956bd555f3b x64/node.lib -3b2d22b20efeb06bf3d86378168d604dbe52eb08 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.1.md b/doc/blog/release/v0.8.1.md deleted file mode 100644 index 0ce631efe..000000000 --- a/doc/blog/release/v0.8.1.md +++ /dev/null @@ -1,77 +0,0 @@ -version: 0.8.1 -title: Version 0.8.1 (stable) -category: release -slug: node-v0-8-1-stable -date: 2012.06.29 - -2012.06.29, Version 0.8.1 (stable) - -* V8: upgrade to v3.11.10.12 - -* npm: upgrade to v1.1.33 - - Support for parallel use of the cache folder - - Retry on registry timeouts or network failures (Trent Mick) - - Reduce 'engines' failures to a warning - - Use new zsh completion if available (Jeremy Cantrell) - -* Fix #3577 Un-break require('sys') - -* util: speed up formatting of large arrays/objects (Ben Noordhuis) - -* windows: make fs.realpath(Sync) work with UNC paths (Bert Belder) - -* build: fix --shared-v8 option (Ben Noordhuis) - -* doc: `detached` is a boolean (Andreas Madsen) - -* build: use proper python interpreter (Ben Noordhuis) - -* build: expand ~ in `./configure --prefix=~/a/b/c` (Ben Noordhuis) - -* build: handle CC env var with spaces (Gabriel de Perthuis) - -* build: fix V8 build when compiling with gcc 4.5 (Ben Noordhuis) - -* build: fix --shared-v8 option (Ben Noordhuis) - -* windows msi: Fix icon issue which caused huge file size (Bert Belder) - -* unix: assume that dlopen() may clobber dlerror() (Ben Noordhuis) - -* sunos: fix memory corruption bugs (Ben Noordhuis) - -* windows: better (f)utimes and (f)stat (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.8.1/node-v0.8.1.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.1/node-v0.8.1.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.1/node-v0.8.1-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.1/x64/node-v0.8.1-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.1/x64/ - -Other release files: http://nodejs.org/dist/v0.8.1/ - -Website: http://nodejs.org/docs/v0.8.1/ - -Documentation: http://nodejs.org/docs/v0.8.1/api/ - -Shasums: - -``` -64f10cb29aaaabda83300c81d61b56a436308126 node-v0.8.1-x86.msi -75a1afca1221719ec4a9dd8ed35c0e0adbaaf153 node-v0.8.1.pkg -892790553b8121ba8624d8293d0cb7d8b01094d7 node-v0.8.1.tar.gz -85ce513182bd66c1aa3e144438022dbe4caa56a7 node.exe -592426620080c904c55ac83e151a85d42275656e node.exp -88a9177dba73597ffc08f30b886542c4d76378e2 node.lib -6b06ffd2b6e28e34189663af7b3efda5d12dd1bf node.pdb -c6d99aa58167c5489e56e2f99da99731fb4f282e x64/node-v0.8.1-x64.msi -4266ba03b2b4516d10cbc5d16eb15d5df13ebb47 x64/node.exe -7a6d0b28be88c6941aae74426199e9fb82ddfaa5 x64/node.exp -ac21ec0f61baaf584f89a92db403cd9d38ff4850 x64/node.lib -9e514c4c6c427dd4ae16edf1d2ad7a46ef9893c0 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.10.md b/doc/blog/release/v0.8.10.md deleted file mode 100644 index 26a490d5e..000000000 --- a/doc/blog/release/v0.8.10.md +++ /dev/null @@ -1,93 +0,0 @@ -title: Node v0.8.10 (Stable) -date: Tue Sep 25 15:36:47 PDT 2012 -slug: node-v0-8-10-stable -category: release -version: 0.8.10 - -2012.09.25, Version 0.8.10 (Stable) - -* npm: Upgrade to 1.1.62 - -* repl: make invalid RegExps throw in the REPL (Nathan Rajlich) - -* v8: loosen artificial mmap constraint (Bryan Cantrill) - -* process: fix setuid() and setgid() error reporting (Ben Noordhuis) - -* domain: Properly exit() on domain disposal (isaacs) - -* fs: fix watchFile() missing deletion events (Ben Noordhuis) - -* fs: fix assert in fs.watch() (Ben Noordhuis) - -* fs: don't segfault on deeply recursive stat() (Ben Noordhuis) - -* http: Remove timeout handler when data arrives (Frédéric Germain) - -* http: make the client "res" object gets the same domain as "req" (Nathan Rajlich) - -* windows: don't blow up when an invalid FD is used (Bert Belder) - -* unix: map EDQUOT to UV_ENOSPC (Charlie McConnell) - -* linux: improve /proc/cpuinfo parser (Ben Noordhuis) - -* win/tty: reset background brightness when color is set to default (Bert Belder) - -* unix: put child process stdio fds in blocking mode (Ben Noordhuis) - -* unix: fix EMFILE busy loop (Ben Noordhuis) - -* sunos: don't set TCP_KEEPALIVE (Ben Noordhuis) - -* tls: Use slab allocator for memory management (Fedor Indutny) - -* openssl: Use optimized assembly code for x86 and x64 (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.8.10/node-v0.8.10.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.10/node-v0.8.10.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.10/node-v0.8.10-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.10/x64/node-v0.8.10-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.10/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.10/node-v0.8.10-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.10/node-v0.8.10-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.10/node-v0.8.10-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.10/node-v0.8.10-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.10/ - -Website: http://nodejs.org/docs/v0.8.10/ - -Documentation: http://nodejs.org/docs/v0.8.10/api/ - -Shasums: - -``` -ae327ce5cc9f46e7d1bdd04f06ea299e44f9a0fc node-v0.8.10-darwin-x64.tar.gz -812405695e3522bfd998d67b6de2daff55ff0a7b node-v0.8.10-darwin-x86.tar.gz -8ef4e489817a79aaea75cffd09cc4b072c38fe2e node-v0.8.10-linux-x64.tar.gz -76f289b12ba41730c43b59d286de5cee571c9064 node-v0.8.10-linux-x86.tar.gz -61e40e8a5e911b26889ad33856029d783388778a node-v0.8.10-sunos-x64.tar.gz -2fd06dc2d145fdba6b2800186ffcaebb0fe3b109 node-v0.8.10-sunos-x86.tar.gz -3e49e1c958815d0144cafe5e43c2fa83e775dd1c node-v0.8.10-x86.msi -9605340dca27725110eebcb15fdf61599622e308 node-v0.8.10.pkg -c596cce77726724441cf7fc98f42df3a5335ab8e node-v0.8.10.tar.gz -f6d172e3452e2bf429dc75836a385eff22407c83 node.exe -ccb8c0e0fa052d8da48ea421cc7a220bb89835f9 node.exp -7ea077e6ca1216d5e8f42e445f75f0542f7d85c4 node.lib -d86ad55c37ac1a0975731ab444fc58c93a7bca47 node.pdb -90fc70b09f92f788fc68a116f589a86ca3309fdb x64/node-v0.8.10-x64.msi -4b62cedf4bbbff1ffb8df6d52c9a57255f383ad3 x64/node.exe -6b4b813c3b065154ce437b7f36a15beceeb76af0 x64/node.exp -9e7dd3ddca3ba37483ac2125c39a52e72035e1d0 x64/node.lib -28de8dd05af5e390f5bd63508bd27b7c683177de x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.11.md b/doc/blog/release/v0.8.11.md deleted file mode 100644 index f378d5b25..000000000 --- a/doc/blog/release/v0.8.11.md +++ /dev/null @@ -1,63 +0,0 @@ -category: release -version: v0.8.11 -date: Thu Sep 27 10:13:12 PDT 2012 -slug: node-v0.8.11 -title: Node v0.8.11 (Stable) - -This is just a minor bugfix release to correct the regression in -[v0.8.10](http://blog.nodejs.org/2012/09/25/node-v0-8-10-stable/). - -If you haven't yet upgraded to v0.8.10, then please use this release -instead. - -2012.09.27, Version 0.8.11 (Stable) - -* fs: Fix stat() size reporting for large files (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.8.11/node-v0.8.11.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.11/node-v0.8.11.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.11/node-v0.8.11-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.11/x64/node-v0.8.11-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.11/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.11/node-v0.8.11-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.11/node-v0.8.11-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.11/node-v0.8.11-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.11/node-v0.8.11-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.11/ - -Website: http://nodejs.org/docs/v0.8.11/ - -Documentation: http://nodejs.org/docs/v0.8.11/api/ - -Shasums: - -``` -3677fdcce837233d4d3d5cdfb8685123ef38fcc2 node-v0.8.11-darwin-x64.tar.gz -24213b076d5c95a1ee7598c540a454a4d6b1d899 node-v0.8.11-darwin-x86.tar.gz -380e533b7953767ec3a43109d37615238296d15c node-v0.8.11-linux-x64.tar.gz -0d9c1bd3a97aa7a5adf6274271f4a8e7745ff704 node-v0.8.11-linux-x86.tar.gz -d4dbb70ca6a3e06c763b7be5fffaae1c7630bd69 node-v0.8.11-sunos-x64.tar.gz -d8fcd334118576a744a57eb1f3565c242810f4f1 node-v0.8.11-sunos-x86.tar.gz -80a14ed82672d3c5c14f60f41ba3f03d65dde13f node-v0.8.11-x86.msi -8a096cdaf7c3e76ee82373214b51a7c7f306de47 node-v0.8.11.pkg -e9dd36cbbe03c632ee7e9c52e06122fa022981c8 node-v0.8.11.tar.gz -5bf31a7e2518d06df1dd05f135617db8c32d8a2e node.exe -79a21c6de2d8e38937865c4cd36306b92e37c832 node.exp -31862938d8cd95efe0e6121764c7797a1487fe51 node.lib -2bbcad390e7fc122be74cb1a116f5420057e9600 node.pdb -30798c0b6d69b13ba94c3501b222f88212f77149 x64/node-v0.8.11-x64.msi -1e69c413252121ab475420795023f9799823d3f7 x64/node.exe -470683d233c9d0295f45f5635203560b242d6f7c x64/node.exp -2134bf022d719da1e455585792af8782ffe81d33 x64/node.lib -1c2a22d0ce3c902f5dae7fde15d32bd9393a2153 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.12.md b/doc/blog/release/v0.8.12.md deleted file mode 100644 index b89048551..000000000 --- a/doc/blog/release/v0.8.12.md +++ /dev/null @@ -1,73 +0,0 @@ -category: release -version: v0.8.12 -date: Fri Oct 12 08:52:06 PDT 2012 -slug: node-v0.8.12 -title: Node v0.8.12 (Stable) - -2012.10.12, Version 0.8.12 (Stable) - -* npm: Upgrade to 1.1.63 - -* crypto: Reduce stability index to 2-Unstable (isaacs) - -* windows: fix handle leak in uv_fs_utime (Bert Belder) - -* windows: fix application crashed popup in debug version (Bert Belder) - -* buffer: report proper retained size in profiler (Ben Noordhuis) - -* buffer: fix byteLength with UTF-16LE (koichik) - -* repl: make "end of input" JSON.parse() errors throw in the REPL (Nathan Rajlich) - -* repl: make invalid RegExp modifiers throw in the REPL (Nathan Rajlich) - -* http: handle multiple Proxy-Authenticate values (Willi Eggeling) - - -Source Code: http://nodejs.org/dist/v0.8.12/node-v0.8.12.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.12/node-v0.8.12.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.12/node-v0.8.12-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.12/x64/node-v0.8.12-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.12/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.12/node-v0.8.12-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.12/node-v0.8.12-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.12/node-v0.8.12-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.12/node-v0.8.12-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.12/ - -Website: http://nodejs.org/docs/v0.8.12/ - -Documentation: http://nodejs.org/docs/v0.8.12/api/ - -Shasums: - -``` -2d40157436b34e9e347c587de9945e7022eb9acc node-v0.8.12-darwin-x64.tar.gz -b6ba1d2e478881e0a5248cb319ce0913ca39a51b node-v0.8.12-darwin-x86.tar.gz -5353dfab2005992deee13e6e00a30509c8c86d4b node-v0.8.12-linux-x64.tar.gz -9e501b995469d554e3356b6f5f85b72abed83310 node-v0.8.12-linux-x86.tar.gz -b3e8e655b3c6f0a2c641dcb0e22372edb6f45ffd node-v0.8.12-sunos-x64.tar.gz -82c46d12a52e09bda3ad4bd0cdb8ad18480e679a node-v0.8.12-sunos-x86.tar.gz -d70e7bc718699651281110cd9f3f13ae50ac36be node-v0.8.12-x86.msi -d24d17d34425eb86cc237b8e68fdd5d199cb0ad8 node-v0.8.12.pkg -719397c7f65365b2ec6510863ac62bd291784910 node-v0.8.12.tar.gz -ac7151c05730982eb37a7f390386219c4d05b57d node.exe -000771bbc1e26f8ac5d11183b6538f25214b64a6 node.exp -b036c368ff65f96ca44ac0ccf8d742c41ce00a95 node.lib -98edc84132157d44df7a4d08b6788843fe542961 node.pdb -d1cccae53dcb54e08a8771ef0f9406e327ac4db3 x64/node-v0.8.12-x64.msi -0aa3088bd6a55864d25e84091b3a3b796ce20ce9 x64/node.exe -1d6dc06515cead63a2e547aacc73cfb7ad8003a2 x64/node.exp -7f55dd2367523c151e4d8492c596f076e0e5d151 x64/node.lib -e34d679b61c77026dd0f437d3d91a84b83a422d3 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.13.md b/doc/blog/release/v0.8.13.md deleted file mode 100644 index cf5908db6..000000000 --- a/doc/blog/release/v0.8.13.md +++ /dev/null @@ -1,75 +0,0 @@ -category: release -version: v0.8.13 -date: Thu Oct 25 12:26:44 PDT 2012 -slug: node-v0.8.13 -title: Node v0.8.13 (Stable) - -Warning: This version contains a regression in the EventEmitter class. -Please use 0.8.14 instead. - -2012.10.25, Version 0.8.13 (Stable) - -* V8: Upgrade to 3.11.10.25 - -* npm: Upgrade to 1.1.65 - -* url: parse hostnames that start with - or _ (Ben Noordhuis) - -* repl: Fix Windows 8 terminal issue (Bert Belder) - -* typed arrays: use signed char for signed int8s (Aaron Jacobs) - -* crypto: fix bugs in DiffieHellman (Ben Noordhuis) - -* configure: turn on VFPv3 on ARMv7 (Ben Noordhuis) - -* Re-enable OpenSSL UI for entering passphrases via tty (Ben Noordhuis) - -* repl: ensure each REPL instance gets its own "context" (Nathan Rajlich) - - -Source Code: http://nodejs.org/dist/v0.8.13/node-v0.8.13.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.13/node-v0.8.13.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.13/node-v0.8.13-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.13/x64/node-v0.8.13-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.13/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.13/node-v0.8.13-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.13/node-v0.8.13-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.13/node-v0.8.13-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.13/node-v0.8.13-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.13/ - -Website: http://nodejs.org/docs/v0.8.13/ - -Documentation: http://nodejs.org/docs/v0.8.13/api/ - -Shasums: -``` -1f396f068e40639f70e5d60e8e33d0cbb5597748 node-v0.8.13-darwin-x64.tar.gz -afa416c3b6209f3d72926537c85d5943b3b07a0d node-v0.8.13-darwin-x86.tar.gz -bdcf8b69ccba2ca326c8ff2921232c1663a79d78 node-v0.8.13-linux-x64.tar.gz -d1fc168b092234bac665dc65d242f3367dfc0f24 node-v0.8.13-linux-x86.tar.gz -d3d5b19c133c73f060efa4bbe274195c9579f4be node-v0.8.13-sunos-x64.tar.gz -98916b4f0c9855dd02d87223d6369f5fa281cbe5 node-v0.8.13-sunos-x86.tar.gz -732f70fbb800c8fee6202e939502c0f23f76d4a1 node-v0.8.13-x86.msi -e2da495a2f8dd4b0cd25810c3b4e6b2e9e71cfe3 node-v0.8.13.pkg -9112a128d83f3e7d26ba0965eb426de0f18c3149 node-v0.8.13.tar.gz -f8c75e5877f103a842067adff6f6580d1c250c9b node.exe -b950a56fa0a00b78212c5d95e4ca6381f8285df9 node.exp -6fcfb00aaf78be643330f645d2d83d461bc1cbe7 node.lib -b6b0d540061e83bbe165afbc25aeeb19b00fbbf2 node.pdb -8017014664dca6b255724f30827553ca420580af x64/node-v0.8.13-x64.msi -8a9fd20b6b24aa3bb8eda8f2f9fa1ede19588a41 x64/node.exe -74ceab4f7d3192bbd2d13d602fe66e3caf7d08e2 x64/node.exp -780c395cab41a0ef59bdd82fe39f370fa1c5e839 x64/node.lib -526bd6fadffcea8f56b0a761ccae01f65b018947 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.14.md b/doc/blog/release/v0.8.14.md deleted file mode 100644 index 70f2f87ae..000000000 --- a/doc/blog/release/v0.8.14.md +++ /dev/null @@ -1,80 +0,0 @@ -category: release -version: v0.8.14 -date: Thu Oct 25 14:26:44 PDT 2012 -slug: node-v0.8.14 -title: Node v0.8.14 (Stable) - -Note: v0.8.13 contains a regression in the EventEmitter class. This -is a bugfix release, but contains no new features. Most of the -release notes are copied from v0.8.13, since it didn't live long. - - -2012.10.25, Version 0.8.14 (Stable) - -* events: Don't clobber pre-existing _events obj in EE ctor (isaacs) - -* V8: Upgrade to 3.11.10.25 - -* npm: Upgrade to 1.1.65 - -* url: parse hostnames that start with - or _ (Ben Noordhuis) - -* repl: Fix Windows 8 terminal issue (Bert Belder) - -* typed arrays: use signed char for signed int8s (Aaron Jacobs) - -* crypto: fix bugs in DiffieHellman (Ben Noordhuis) - -* configure: turn on VFPv3 on ARMv7 (Ben Noordhuis) - -* Re-enable OpenSSL UI for entering passphrases via tty (Ben Noordhuis) - -* repl: ensure each REPL instance gets its own "context" (Nathan Rajlich) - - -Source Code: http://nodejs.org/dist/v0.8.14/node-v0.8.14.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.14/node-v0.8.14.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.14/node-v0.8.14-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.14/x64/node-v0.8.14-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.14/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.14/node-v0.8.14-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.14/node-v0.8.14-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.14/node-v0.8.14-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.14/node-v0.8.14-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.14/ - -Website: http://nodejs.org/docs/v0.8.14/ - -Documentation: http://nodejs.org/docs/v0.8.14/api/ - -Shasums: - -``` -519a0d5daa52eb3f412f5ea86779a1a7f3f73f3d node-v0.8.14-darwin-x64.tar.gz -93c38392cb07e5e7386503e8e8b1932dabcd3f09 node-v0.8.14-darwin-x86.tar.gz -f737747a3c2b62c5e059d866ea27f2f050a12e0a node-v0.8.14-linux-x64.tar.gz -cd9db5907cf0796b5277954cb994789a9815f72c node-v0.8.14-linux-x86.tar.gz -b6e1c21c2bc9543255bda936bb7206490085dd6b node-v0.8.14-sunos-x64.tar.gz -c16a01e116fda023db9b1cd14f8e9520d39cf2c7 node-v0.8.14-sunos-x86.tar.gz -3d38d581316bb378f39786a2bf0be5072360ab02 node-v0.8.14-x86.msi -23d5bd298dc5ef77dbcb4f5a1d4ec35a10c9ab79 node-v0.8.14.pkg -47a1186004f6ce5e25a8555429d72b15519bc7f1 node-v0.8.14.tar.gz -0150ec86f83c86a4ce99e33671f1a6c00c19981d node.exe -7cc38da3b6d550c6a681f8e7e479f95a109f12c7 node.exp -d9a92fe10b696beb98fca60bc38183990833106b node.lib -03e211e842ae613b3e27a2a0d79ed9cf9c864802 node.pdb -8df2cc066f6cee53deb43eba92a3a1bfd30e9ae7 x64/node-v0.8.14-x64.msi -84f44295f9ed0f09ee80fd85b3ad1e0c93212795 x64/node.exe -b20a8aa61f386166c9ce1b51bb14d97eefd39090 x64/node.exp -dd254fab57148ad6315d87fd6c8ef6ef45baae35 x64/node.lib -c4ad89d4d71d82f20c7ce620319ad35aca7e56ad x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.15.md b/doc/blog/release/v0.8.15.md deleted file mode 100644 index 7dba255e1..000000000 --- a/doc/blog/release/v0.8.15.md +++ /dev/null @@ -1,71 +0,0 @@ -date: Mon Nov 26 09:14:49 PST 2012 -title: Node v0.8.15 (Stable) -slug: node-v0-8-15 -version: v0.8.15 -category: release - -2012.11.26, Version 0.8.15 (Stable) - -* npm: Upgrade to 1.1.66 (isaacs) - -* linux: use /proc/cpuinfo for CPU frequency (Ben Noordhuis) - -* windows: map WSAESHUTDOWN to UV_EPIPE (Ben Noordhuis) - -* windows: map ERROR_GEN_FAILURE to UV_EIO (Bert Belder) - -* unix: do not set environ unless one is provided (Charlie McConnell) - -* domains: don't crash if domain is set to null (Bert Belder) - -* windows: fix the x64 debug build (Bert Belder) - -* net, tls: fix connect() resource leak (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.8.15/node-v0.8.15.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.15/node-v0.8.15.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.15/node-v0.8.15-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.15/x64/node-v0.8.15-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.15/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.15/node-v0.8.15-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.15/node-v0.8.15-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.15/node-v0.8.15-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.15/node-v0.8.15-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.15/ - -Website: http://nodejs.org/docs/v0.8.15/ - -Documentation: http://nodejs.org/docs/v0.8.15/api/ - -Shasums: - -``` -084f5132d8f2ad704086285a600790c4de323e59 node-v0.8.15-darwin-x64.tar.gz -8a17c611d96aba9427de21125c2d1696e937245e node-v0.8.15-darwin-x86.tar.gz -cbd126c613eb42438a63a789b380b840793b2c83 node-v0.8.15-linux-x64.tar.gz -73431db2519d4520c6f8ac7303ec6170e6eb17c6 node-v0.8.15-linux-x86.tar.gz -1ed591003d0f502131540aadbabd95c22d2d936a node-v0.8.15-sunos-x64.tar.gz -0c5908f857a65d5f6e8cfc17e4d8114aa4d9f521 node-v0.8.15-sunos-x86.tar.gz -5c5447b6ef451cfa4762db00aabd740425ea112d node-v0.8.15-x86.msi -1e06dc52609dd106fd3553f4a9d12e66bcac1f45 node-v0.8.15.pkg -a7874cde1a87497992f1f8ea0fdaa760f617a94f node-v0.8.15.tar.gz -9251cc51eaa856bdf7c1a92d49419731e6dec830 node.exe -e4230b867122b42a16cc27eccadde3996cfdf266 node.exp -f4f7ca1d11877bcb1e50f0a139a0b7438ea406cb node.lib -02bc3e986eebb77fcabde4e492d858e14096ac34 node.pdb -9c1020cc2c7443238093f0cde3875097788e5c7f x64/node-v0.8.15-x64.msi -8a76699adbee52ee704408e6708ff5b5b6ebc02f x64/node.exe -b9fba72a0da7d2b25dcdcbcf514b877f1cb6399a x64/node.exp -81511b51ef403214f0ba97ed29cb5d45ff6a21f7 x64/node.lib -1519acd77acd41e03238f6ed9a006d97ade4a055 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.16.md b/doc/blog/release/v0.8.16.md deleted file mode 100644 index 152be6b8b..000000000 --- a/doc/blog/release/v0.8.16.md +++ /dev/null @@ -1,65 +0,0 @@ -category: release -version: 0.8.16 -date: Thu Dec 13 08:47:52 PST 2012 -title: Node v0.8.16 (Stable) -slug: node-v0-8-16 - -2012.12.13, Version 0.8.16 (Stable) - -* npm: Upgrade to 1.1.69 - -* fs: fix WriteStream/ReadStream fd leaks (Ben Noordhuis) - -* crypto: fix leak in GetPeerCertificate (Fedor Indutny) - -* buffer: Don't double-negate numeric buffer arg (Trevor Norris) - -* net: More accurate IP address validation and IPv6 dotted notation. (Joshua Erickson) - - -Source Code: http://nodejs.org/dist/v0.8.16/node-v0.8.16.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.16/node-v0.8.16.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.16/node-v0.8.16-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.16/x64/node-v0.8.16-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.16/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.16/node-v0.8.16-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.16/node-v0.8.16-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.16/node-v0.8.16-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.16/node-v0.8.16-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.16/ - -Website: http://nodejs.org/docs/v0.8.16/ - -Documentation: http://nodejs.org/docs/v0.8.16/api/ - -Shasums: - -``` -8ad2323e7909abaaa1e1f6eefa93a31e253acb20 node-v0.8.16-darwin-x64.tar.gz -760401fbb405f27a6f4379a999fa2408f30af9fb node-v0.8.16-darwin-x86.tar.gz -04d67913ea1ba12fbdf7460342f3b801b12cbf78 node-v0.8.16-linux-x64.tar.gz -5c5bbd485f4fd8682948e31237d7d59be708e64a node-v0.8.16-linux-x86.tar.gz -08b870e5b91b94a8b1b1564367e231b20f2ca2b9 node-v0.8.16-sunos-x64.tar.gz -72a564cab3dccb0569cbab9888f5746acb3b70f9 node-v0.8.16-sunos-x86.tar.gz -b3daebf61a421aa05dff9d19e8108def951366dc node-v0.8.16-x86.msi -2a37219d45a9a2bfa63ce7a57a0c550996b52833 node-v0.8.16.pkg -6479366bfbc2b4392f7f496dec55b5ab719308c0 node-v0.8.16.tar.gz -8998022ec5d46e0d083ff3230baa638fa0c40603 node.exe -8cf330b21d8ad5c1245d6b4e668ca5fe78875c2d node.exp -107feafbbf61f7173e97be29b29f33dc96b33d4b node.lib -caa002d5f0896d44a9e976d7c2f97d0e5f0fe366 node.pdb -5914d679d71a687323ff7b9232767f9df0e9d9aa x64/node-v0.8.16-x64.msi -ec1debf6dfbf6051635ca9743981e35357b2af9f x64/node.exe -21216676af7d407bc70d44c35c966992b7eaab34 x64/node.exp -ad443c0bf1bbf3a4d0b0a54f4f8ae7c1c235ee49 x64/node.lib -fb3651dcf2c871d1fdb8b96d11d5f5db137b654c x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.17.md b/doc/blog/release/v0.8.17.md deleted file mode 100644 index be1e69213..000000000 --- a/doc/blog/release/v0.8.17.md +++ /dev/null @@ -1,80 +0,0 @@ -date: Wed Jan 9 17:06:36 PST 2013 -title: Node v0.8.17 (Stable) -slug: node-v0-8-17-stable -category: release -version: 0.8.17 - -This release addresses a potential security vulnerability. - -If you do not use TypedArrays, then you're fine (but should still -upgrade for other reasons, like better performance and npm -peerDependencies.) - -If you use TypedArrays, you should upgrade to v0.8.17 as soon as -possible. If user input can affect the size parameter in a -TypedArray, an integer overflow vulnerability could allow an attacker -to write to areas of memory outside the intended buffer. Please -upgrade ASAP. - -2013.01.09, Version 0.8.17 (Stable) - -* npm: Upgrade to v1.2.0 - - peerDependencies (Domenic Denicola) - - node-gyp v0.8.2 (Nathan Rajlich) - - Faster installs from github user/project shorthands (Nathan Zadoks) - -* typed arrays: fix 32 bit size/index overflow (Ben Noordhuis) - -* http: Improve performance of single-packet responses (Ben Noordhuis) - -* install: fix openbsd man page location (Ben Noordhuis) - -* http: bubble up parser errors to ClientRequest (Brian White) - - -Source Code: http://nodejs.org/dist/v0.8.17/node-v0.8.17.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.17/node-v0.8.17.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.17/node-v0.8.17-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.17/x64/node-v0.8.17-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.17/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.17/node-v0.8.17-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.17/node-v0.8.17-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.17/node-v0.8.17-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.17/node-v0.8.17-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.17/ - -Website: http://nodejs.org/docs/v0.8.17/ - -Documentation: http://nodejs.org/docs/v0.8.17/api/ - -Shasums: - -``` -1efb55f154e6079c7f2a8991ed73b5069307576a node-v0.8.17-darwin-x64.tar.gz -d9e3f502b9121b14743fedc7d48ed15cbda3a3da node-v0.8.17-darwin-x86.tar.gz -de5d5d32ef97081b57b652289e097a332e9cc8af node-v0.8.17-linux-x64.tar.gz -44824481dbb3ed278e613f805f597e8d14f68d11 node-v0.8.17-linux-x86.tar.gz -6f3ee5e3a3515f79478c18ad61666bdaf73f8485 node-v0.8.17-sunos-x64.tar.gz -3bcd62169201e8c6223eeef09633998901692da1 node-v0.8.17-sunos-x86.tar.gz -befea571ebdf67fa47ef84826334599feb3ed7a3 node-v0.8.17-x86.msi -71b598cd3a418b8ce78a2158d8ae29a6c7e66be6 node-v0.8.17.pkg -65d22e4e183cee8888c797300d8fdbb5c530c740 node-v0.8.17.tar.gz -8bf4e9699d41bcc0fcf822af095c2a944aea3e95 node.exe -2b659a6864682d6613a94a8c187618a3893401bc node.exp -082995b6fc667af51aae11b612390800c8e9636c node.lib -bbbab14038a29fa67dfcabfd27802c39428e8f8e node.pdb -a220542df0610d848ead007673e19cb24c1e0ac5 x64/node-v0.8.17-x64.msi -636ab1f211624588d3c5073232f30aa5f93eed10 x64/node.exe -8540c7b6cfb62b51b52c72813ca30d42b936e656 x64/node.exp -1e0d70fcf5efa6e4c23c1d8ec768c5a8e6c36874 x64/node.lib -2b13ba57dbdd942b3198b441fea936f8b8154c29 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.18.md b/doc/blog/release/v0.8.18.md deleted file mode 100644 index 853fe96ea..000000000 --- a/doc/blog/release/v0.8.18.md +++ /dev/null @@ -1,67 +0,0 @@ -category: release -date: Fri Jan 18 12:49:35 PST 2013 -version: 0.8.18 -title: Node v0.8.18 (Stable) -slug: node-v0-8-18-stable - -2013.01.18, Version 0.8.18 (Stable) - -* npm: Upgrade to v1.2.2 - -* dns: make error message match errno (Dan Milon) - -* tls: follow RFC6125 more stricly (Fedor Indutny) - -* buffer: reject negative SlowBuffer offsets (Ben Noordhuis) - -* install: add simplejson fallback (Chris Dent) - -* http: fix "Cannot call method 'emit' of null" (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.8.18/node-v0.8.18.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.18/node-v0.8.18.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.18/node-v0.8.18-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.18/x64/node-v0.8.18-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.18/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.18/node-v0.8.18-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.18/node-v0.8.18-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.18/node-v0.8.18-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.18/node-v0.8.18-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.18/ - -Website: http://nodejs.org/docs/v0.8.18/ - -Documentation: http://nodejs.org/docs/v0.8.18/api/ - -Shasums: - -``` -ddf4062ec395abd2aab18bdadbf94e0c36b9133d node-v0.8.18-darwin-x64.tar.gz -a4f6fc9cfddbcbcfc0733abbee24d9834924e648 node-v0.8.18-darwin-x86.tar.gz -7fbadf6d78f97ee96a20e7d0072e672d160e745b node-v0.8.18-linux-x64.tar.gz -0081950ce52058e1d0bb6609f5dd85819e39b90c node-v0.8.18-linux-x86.tar.gz -976bcf6a4f64e12bb570618f4a24ac77e74a592c node-v0.8.18-sunos-x64.tar.gz -68e21c766f49673cda6b44afaa0462625336c488 node-v0.8.18-sunos-x86.tar.gz -1a709f10740c08ec0f88e84fc4c61e908de9fa17 node-v0.8.18-x86.msi -fb07bfaed311607f9e8003171b870928bf64a801 node-v0.8.18.pkg -e3bc9b64f60f76a32b7d9b35bf86b5d1b8166717 node-v0.8.18.tar.gz -72c8a2a99f83e48641d55467a1ad2d8d224f048d node.exe -9c3ac616aac6c663b2c82a9bca998c99878ef92f node.exp -18fb36d6cc766ed506ddf5b0db67394d05368165 node.lib -155a12e9822a1d65101680774c27481d2de81f0e node.pdb -f95437a1e5684e8b246d8b6b0a6d3d2ffcfd1ac6 x64/node-v0.8.18-x64.msi -3d2b9f1f2e2971fbefee32ed9783fe6b8c1f7d48 x64/node.exe -282de6e02f75bae87c3e7dda998b26c25ae8e709 x64/node.exp -d7612894c40655155e72188bf584dbd8c09b0739 x64/node.lib -49abf88f55028304e50bfb368d68157aed1d0291 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.19.md b/doc/blog/release/v0.8.19.md deleted file mode 100644 index 28de48774..000000000 --- a/doc/blog/release/v0.8.19.md +++ /dev/null @@ -1,72 +0,0 @@ -category: release -date: Wed Feb 6 09:47:18 PST 2013 -version: 0.8.19 -title: Node v0.8.19 (Stable) -slug: node-v0-8-19-stable - -2013.02.06, Version 0.8.19 (Stable) - -* npm: Upgrade to v1.2.10 - -* zlib: pass object size hint to V8 (Ben Noordhuis) - -* zlib: reduce memory consumption, release early (Ben Noordhuis) - -* buffer: slow buffer copy compatibility fix (Trevor Norris) - -* zlib: don't assert on malformed dictionary (Ben Noordhuis) - -* zlib: don't assert on missing dictionary (Ben Noordhuis) - -* windows: better ipv6 support (Bert Belder) - -* windows: add error mappings related to unsupported protocols (Bert Belder) - -* windows: map ERROR_DIRECTORY to UV_ENOENT (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.8.19/node-v0.8.19.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.19/node-v0.8.19.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.19/node-v0.8.19-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.19/x64/node-v0.8.19-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.19/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.19/node-v0.8.19-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.19/node-v0.8.19-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.19/node-v0.8.19-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.19/node-v0.8.19-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.19/ - -Website: http://nodejs.org/docs/v0.8.19/ - -Documentation: http://nodejs.org/docs/v0.8.19/api/ - -Shasums: -``` -b97ded53b15196764afd1cc456c5b05a40d8bb2f node-v0.8.19-darwin-x64.tar.gz -685a21891320f3bfc1b878247d64c9912f83eb19 node-v0.8.19-darwin-x86.tar.gz -b66b2bb829f627e3cf05bc19ba8b15092b1deb4d node-v0.8.19-linux-x64.tar.gz -dcc0be09cf9d9ab863c720f7470a05baea2f7a18 node-v0.8.19-linux-x86.tar.gz -67fe40e63cbf0a0a079d8214687fb9848b67bbe2 node-v0.8.19-sunos-x64.tar.gz -c949abebb61bfbe21d4f51337d2b4c76965bc467 node-v0.8.19-sunos-x86.tar.gz -0e41157ca1cbc43aafc3ac65bdde5564e2e13de6 node-v0.8.19-x86.msi -a77d2ac238aba0003144ab2d04fc6d1356c18cc5 node-v0.8.19.pkg -f4fdbb642055be65579e11cb52c823573efabcf2 node-v0.8.19.tar.gz -7bafe93904e9741592bc9a593169cabec9cca0dd node.exe -0785e45ade6642b4fee320e950795110ef1ca94c node.exp -f623019194ff2e9cf975fe007032ece07adb4e49 node.lib -3ba7c54527b8f15521f9e667867e485ef46ffda4 node.pdb -d44bff1c52b24d385edd69db14507739e53a654a x64/node-v0.8.19-x64.msi -ec60e8b2e68529d3256a94193df62088a986a826 x64/node.exe -daf65fd50219588877637b414be36e78a859d4e6 x64/node.exp -c154205667ad7c9063cebeeb98af39f203c8c16e x64/node.lib -f4a494678c0da4bad787f25001bb209f37f82722 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.2.md b/doc/blog/release/v0.8.2.md deleted file mode 100644 index c96585feb..000000000 --- a/doc/blog/release/v0.8.2.md +++ /dev/null @@ -1,73 +0,0 @@ -version: 0.8.2 -title: Version 0.8.2 (stable) -category: release -slug: node-v0-8-2-stable -date: 2012.07.09 - -2012.07.09, Version 0.8.2 (Stable) - -* npm: Upgrade to 1.1.36 - -* readline: don't use Function#call() (Nathan Rajlich) - -* Code cleanup to pass 'use strict' (Jonas Westerlund) - -* module: add filename to require() json errors (TJ Holowaychuk) - -* readline: fix for unicode prompts (Tim Macfarlane) - -* timers: fix handling of large timeouts (Ben Noordhuis) - -* repl: fix passing an empty line inserting "undefined" into the buffer (Nathan Rajlich) - -* repl: fix crashes when buffering command (Maciej Małecki) - -* build: rename strict_aliasing to node_no_strict_aliasing (Ben Noordhuis) - -* build: disable -fstrict-aliasing for any gcc < 4.6.0 (Ben Noordhuis) - -* build: detect cc version with -dumpversion (Ben Noordhuis) - -* build: handle output of localized gcc or clang (Ben Noordhuis) - -* unix: fix memory corruption in freebsd.c (Ben Noordhuis) - -* unix: fix 'zero handles, one request' busy loop (Ben Noordhuis) - -* unix: fix busy loop on unexpected tcp message (Ben Noordhuis) - -* unix: fix EINPROGRESS busy loop (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.8.2/node-v0.8.2.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.2/node-v0.8.2.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.2/node-v0.8.2-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.2/x64/node-v0.8.2-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.2/x64/ - -Other release files: http://nodejs.org/dist/v0.8.2/ - -Website: http://nodejs.org/docs/v0.8.2/ - -Documentation: http://nodejs.org/docs/v0.8.2/api/ - -Shasums: - -``` -6571b7aad17ed4860d9ecb7946098dcd569e3eb0 node-v0.8.2-x86.msi -8436e940b8c3b1dff73bf4d1eee98fd3b1fc6295 node-v0.8.2.pkg -0e743d21b487151e67950f09198def058db19a1e node-v0.8.2.tar.gz -dcc45bee9d4a6b38ccef0f00e4a6028864f07278 node.exe -5417f98a533c90f2b72ed3a2a002c2c36a65cb75 node.exp -57700a9555d16ebf5401898c179669654f045c5f node.lib -5bf7e8777d715d5d6b40c21ea3969c4244c20879 node.pdb -6a5fe7efb56c3e17de357e9b9adc8f1c54db895a x64/node-v0.8.2-x64.msi -72f04cb5bb25bd568cb7bc42eb5e1365e614b672 x64/node.exe -6b402ca44a45a3bc1393854d92247bf79eb3df2b x64/node.exp -ad39add3918fb31aef25e3a4acfe1da499900143 x64/node.lib -fa981c97e0c474ede8e7c28904d710cc3ee3390c x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.20.md b/doc/blog/release/v0.8.20.md deleted file mode 100644 index 5e6c2dd18..000000000 --- a/doc/blog/release/v0.8.20.md +++ /dev/null @@ -1,62 +0,0 @@ -title: Node v0.8.20 (Stable) -slug: node-v0-8-20-stable -category: release -date: Fri Feb 15 11:21:42 PST 2013 -version: 0.8.20 - -2013.02.15, Version 0.8.20 (Stable) - -* npm: Upgrade to v1.2.11 - -* http: Do not let Agent hand out destroyed sockets (isaacs) - -* http: Raise hangup error on destroyed socket write (isaacs) - -* http: protect against response splitting attacks (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.8.20/node-v0.8.20.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.20/node-v0.8.20.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.20/node-v0.8.20-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.20/x64/node-v0.8.20-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.20/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.20/node-v0.8.20-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.20/node-v0.8.20-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.20/node-v0.8.20-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.20/node-v0.8.20-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.20/ - -Website: http://nodejs.org/docs/v0.8.20/ - -Documentation: http://nodejs.org/docs/v0.8.20/api/ - -Shasums: -``` -2b87bf077022b8fa1cbcec10ea3866574fed2b75 node-v0.8.20-darwin-x64.tar.gz -42023ffbdbf36ef69250bd750f112e684eb97008 node-v0.8.20-darwin-x86.tar.gz -93480cbc67f2c757879228434bce1fd765db7df8 node-v0.8.20-linux-x64.tar.gz -7fedae5ce4b366d5dcaa7f2e770b3ff739648a51 node-v0.8.20-linux-x86.tar.gz -fd66ea1bfbe5c8fe8df5ba8cc79cd3fab6e753ac node-v0.8.20-sunos-x64.tar.gz -ca6ad9aa92330358f6201191347451ab42fe12cf node-v0.8.20-sunos-x86.tar.gz -200ff5e5083df2a6bb4552e673d81b498e9812f0 node-v0.8.20-x86.msi -54440b1f525da0126b434440ee6433c2b96959ae node-v0.8.20.pkg -b780f58f0e3bc43d2380d4a935f2b45350783b37 node-v0.8.20.tar.gz -8e13b125c3572a1cb46364b3241405cdf7af1a82 node.exe -f67ea64d6686207dbacb9bb8feacce3ac8899ec8 node.exp -c338212caf48d945e8e8049c2a0c30e38e8730d6 node.lib -019b24c60cdb03f9d8209290e7af90e8565999e7 node.pdb -67fff498c5271033073a3ca9fc01178b5f5c309a x64/node-v0.8.20-x64.msi -6ecab177a47ff5c74397799b329c2359b40c7d1f x64/node.exe -bcd51345c05a28be5db3553fc578aa3dd52fc97e x64/node.exp -825f2ba0bb9d7bd170adef89009b84ee147754e5 x64/node.lib -50c4cc483cc4b675966c7ec524afacb59ff99164 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.21.md b/doc/blog/release/v0.8.21.md deleted file mode 100644 index 7e9539c2d..000000000 --- a/doc/blog/release/v0.8.21.md +++ /dev/null @@ -1,86 +0,0 @@ -date: Mon Feb 25 13:48:51 PST 2013 -version: 0.8.21 -category: release -title: Node v0.8.21 (Stable) -slug: node-v0-8-21-stable - -2013.02.25, Version 0.8.21 (Stable) - -* http: Do not free the wrong parser on socket close (isaacs) - -* http: Handle hangup writes more gently (isaacs) - -* zlib: fix assert on bad input (Ben Noordhuis) - -* test: add TAP output to the test runner (Timothy J Fontaine) - -* unix: Handle EINPROGRESS from domain sockets (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.8.21/node-v0.8.21.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.21/node-v0.8.21.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.21/node-v0.8.21-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.21/x64/node-v0.8.21-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.21/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.21/node-v0.8.21-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.21/node-v0.8.21-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.21/node-v0.8.21-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.21/node-v0.8.21-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.21/ - -Website: http://nodejs.org/docs/v0.8.21/ - -Documentation: http://nodejs.org/docs/v0.8.21/api/ - -Shasums: -``` -383b9009a587b7390a5a00cef4ece441fb16dd82 node-v0.8.21-darwin-x64.tar.gz -47654ca8ecc93c846e6f7493a19931b99d5e4b87 node-v0.8.21-darwin-x86.tar.gz -46d66f3b95f447811e9253d66050859b4bb81ea0 node-v0.8.21-linux-x64.tar.gz -1f16e50dacd5e942970c28be1e578e6260a116c4 node-v0.8.21-linux-x86.tar.gz -b24b5e0acc53f004122c0cb2df775c4493b1e048 node-v0.8.21-sunos-x64.tar.gz -54ca0c94dff35e941fe90d10755427a15d6519ae node-v0.8.21-sunos-x86.tar.gz -38c5855c1ebd70fde111d50343a163a03cff9765 node-v0.8.21-x86.msi -60cd1fb8f43943bd3ed7c07745df1b3e81bafc13 node-v0.8.21.pkg -8b75377eafb5e77d6dff141c9533202d5a589ce4 node-v0.8.21.tar.gz -c310779c80d21be7556ec0921d5afca8f64792eb node.exe -61b98f9dfbe70184788b6f010ce7667c9cba0fdc node.exp -78c37ac837bbb8fefd691e351b3c20f136b212ee node.lib -40cc197db5c9fc4ded4509b5ae21bc53d178998e node.pdb -ec29a824e51308349f7895c010469f8e59939094 x64/node-v0.8.21-x64.msi -e4c5563c38a01dac1a97f6366175d1fef86da262 x64/node.exe -8e51783d5e03148f01db8386102e4ffc4e30deda x64/node.exp -a6017052052bb469a50327b4f40c990c25da0932 x64/node.lib -fb8d24e5208b14d35997bc3b46e325316e6ad94d x64/node.pdb -``` - -Shasums: -``` -62cd69928ce2da9e8512b3efb96aba353ee54a91 node-v0.8.21-darwin-x64.tar.gz -62cf9b990f8e424e7fdb1d50a46d779e4d508b23 node-v0.8.21-darwin-x86.tar.gz -83e92aec4f4a0167e7c5b3ef04388fc33712d97b node-v0.8.21-linux-x64.tar.gz -83a8aa10dafa196b372958d1052f61fe1c16c2a4 node-v0.8.21-linux-x86.tar.gz -588830b0d095c0ef3583d9f7f574426f5b456e2e node-v0.8.21-sunos-x64.tar.gz -e4eff5914432da3cf12a833aaa0444693671cca1 node-v0.8.21-sunos-x86.tar.gz -8146b2254caa814157aa511075dcf7b42d0ecb59 node-v0.8.21-x86.msi -60cd1fb8f43943bd3ed7c07745df1b3e81bafc13 node-v0.8.21.pkg -65ab7307f1aee12be4c88e396e2510967a52b1c6 node-v0.8.21.tar.gz -5d770ad554ee4a73278b2d90029e758e0a676074 node.exe -17514f32c57c64bd0d367c71ed0e6dc399fc9e12 node.exp -9404eff8562dfb0a6e0e72167278ac6131be5d3a node.lib -94908174f715d2707d48e6d53a1f96f33059f56c node.pdb -36750abf56120a63d9fa9b2b75bdc98dfac051f7 x64/node-v0.8.21-x64.msi -b61b9620e936bc9c19043a02625aed9922aeb653 x64/node.exe -21a0e855e652e7fbe84e7efc1f7a3542fa870372 x64/node.exp -f9d017c07030599e3442a958020381a37402dc81 x64/node.lib -3b35fbac0962aaff46bdd2f06412dcb1f80b9895 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.22.md b/doc/blog/release/v0.8.22.md deleted file mode 100644 index b9b0815bf..000000000 --- a/doc/blog/release/v0.8.22.md +++ /dev/null @@ -1,62 +0,0 @@ -date: Thu Mar 7 00:16:34 UTC 2013 -version: 0.8.22 -category: release -title: Node v0.8.22 (Stable) -slug: node-v0-8-22-stable - -2013.03.07, Version 0.8.22 (Stable) - -* npm: Update to 1.2.14 - -* cluster: propagate bind errors (Ben Noordhuis) - -* crypto: don't assert when calling Cipher#final() twice (Ben Noordhuis) - -* build, windows: disable SEH (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.8.22/node-v0.8.22.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.22/node-v0.8.22.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.22/node-v0.8.22-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.22/x64/node-v0.8.22-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.22/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.22/node-v0.8.22-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.22/node-v0.8.22-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.22/node-v0.8.22-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.22/node-v0.8.22-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.22/ - -Website: http://nodejs.org/docs/v0.8.22/ - -Documentation: http://nodejs.org/docs/v0.8.22/api/ - -Shasums: -``` -c536e71f028213e1dd195f6c143c43d4d92b3fda node-v0.8.22-darwin-x64.tar.gz -c3993a424034022a675c8822a44402d1a04567d3 node-v0.8.22-darwin-x86.tar.gz -fb2cd76139f258ff73980b2940c23e3d05ec7fc3 node-v0.8.22-linux-x64.tar.gz -540154b5be3a5c378b9c6b5b955942eede604e22 node-v0.8.22-linux-x86.tar.gz -607943d795c9e4e421e0d2b9b887f81057535f72 node-v0.8.22-sunos-x64.tar.gz -518a6d6e1cc03ef5c25f408f3a6f7b2ba0e27750 node-v0.8.22-sunos-x86.tar.gz -7eae67719868fe45d016a04a031bf3e95bd3b05e node-v0.8.22-x86.msi -efe68fecb78059b990e03970eaf8df7eb690d662 node-v0.8.22.pkg -1b7e65da70e2b3c2feacb1b13f673dfe43beb381 node-v0.8.22.tar.gz -190ead83110217ab9e6c52e6ac08bac8a305d6b3 node.exe -7e5b75cbe0af651a4200e0fa4a1429466a97df0a node.exp -35b92f30e337696ef7c34206a5a808cc4a9d0184 node.lib -29ced022452a877255aaa0bc395f031b12aa695e node.pdb -a4251271f65e3b210426dfa44cfbbc39b79b1efc x64/node-v0.8.22-x64.msi -93f9106d855e9b6269a392cfcbd8aca2c7403293 x64/node.exe -95b77dd57b652d7f11fc8de7bb742fc48ee0223c x64/node.exp -03499f2f1d163821927a11ff633ac9a25737910e x64/node.lib -405108c20af639582116ef15cb759791298ba4b9 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.23.md b/doc/blog/release/v0.8.23.md deleted file mode 100644 index 558890efa..000000000 --- a/doc/blog/release/v0.8.23.md +++ /dev/null @@ -1,69 +0,0 @@ -date: Mon Apr 8 17:32:26 PDT 2013 -version: 0.8.23 -category: release -title: Node v0.8.23 (Legacy) -slug: node-v0-8-23-legacy - -2013.04.09, Version 0.8.23 (Legacy) - -* npm: Upgrade to v1.2.18 - -* http: Avoid EE warning on ECONNREFUSED handling (isaacs) - -* tls: Re-enable check of CN-ID in cert verification (Tobias Müllerleile) - -* child_process: fix sending utf-8 to child process (Ben Noordhuis) - -* crypto: check key type in GetPeerCertificate() (Ben Noordhuis) - -* win/openssl: mark assembled object files as seh safe (Bert Belder) - -* windows/msi: fix msi build issue with WiX 3.7/3.8 (Raymond Feng) - - -Source Code: http://nodejs.org/dist/v0.8.23/node-v0.8.23.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.23/node-v0.8.23.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.23/node-v0.8.23-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.23/x64/node-v0.8.23-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.23/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.23/node-v0.8.23-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.23/node-v0.8.23-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.23/node-v0.8.23-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.23/node-v0.8.23-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.23/ - -Website: http://nodejs.org/docs/v0.8.23/ - -Documentation: http://nodejs.org/docs/v0.8.23/api/ - -Shasums: - -``` -64cf0081e4d5d7ac528ce938007f9a7d3d952896 node-v0.8.23-darwin-x64.tar.gz -698b9dd9ece94cde200c25d881700a23a510883e node-v0.8.23-darwin-x86.tar.gz -94ea21cb5425d712b92289a82e0f48541d163fef node-v0.8.23-linux-x64.tar.gz -c6880d51464904d782d6438bb451fdc85cb874eb node-v0.8.23-linux-x86.tar.gz -9da74301acd0e157a132392bc0e3dd9760400fbe node-v0.8.23-sunos-x64.tar.gz -dffe26030f95c6f4c1b39ca9eae7d0882b1caacc node-v0.8.23-sunos-x86.tar.gz -0b8534504bc6a00215e21e03650228a37400b228 node-v0.8.23-x86.msi -033d01b7675f557b9cb49148a860d62f015c63fd node-v0.8.23.pkg -13772b9c1060aae5441f11cd3fdbe4e4791612b9 node-v0.8.23.tar.gz -d0afaf05544c9fa8b4b6df5f1f03feb9167fb493 node.exe -13067ab2f18797536a38a76e5f8087ec54f45b6c node.exp -8a253e09bfa128b09ad0a0a507db8f7c96eba537 node.lib -51f36628dc6ec058966de7a9f3054617b0ddbb30 node.pdb -367967503a8963557f647bd9766a980f7c78ff93 x64/node-v0.8.23-x64.msi -e86d6b984a937b27e1809db551d2159aea19c3d5 x64/node.exe -29abfe7952dafde326ff52094ec49445f41f5366 x64/node.exp -d769b0e9af6975dcd860f3a57c3d3cc96c240e46 x64/node.lib -e4268618e8dea66f2d1fa9bf8b817ae1e7106337 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.24.md b/doc/blog/release/v0.8.24.md deleted file mode 100644 index 1875c2d4f..000000000 --- a/doc/blog/release/v0.8.24.md +++ /dev/null @@ -1,63 +0,0 @@ -date: Tue Jun 4 11:09:55 PDT 2013 -version: 0.8.24 -category: release -title: Node v0.8.24 (Maintenance) -slug: node-v0-8-24-maintenance - -2013.06.04, Version 0.8.24 (maintenance) - -* npm: Upgrade to v1.2.24 - -* url: Properly parse certain oddly formed urls (isaacs) - -* http: Don't try to destroy nonexistent sockets (isaacs) - -* handle_wrap: fix NULL pointer dereference (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.8.24/node-v0.8.24.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.24/node-v0.8.24.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.24/node-v0.8.24-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.24/x64/node-v0.8.24-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.24/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.24/node-v0.8.24-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.24/node-v0.8.24-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.24/node-v0.8.24-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.24/node-v0.8.24-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.24/ - -Website: http://nodejs.org/docs/v0.8.24/ - -Documentation: http://nodejs.org/docs/v0.8.24/api/ - -Shasums: - -``` -bd2f2c1dda9812d773a3d403ca69700d59471746 node-v0.8.24-darwin-x64.tar.gz -041553ba728039c7876bd109285263e654e95d80 node-v0.8.24-darwin-x86.tar.gz -4fb7ce5d80d1b9ac5cbe1d7ee1e7697e35536a35 node-v0.8.24-linux-x64.tar.gz -0cbdb661fde7414b75b5e0d7735405b1e7974b91 node-v0.8.24-linux-x86.tar.gz -0f48da822862122bc9690bdba063f6cf954c7f5a node-v0.8.24-sunos-x64.tar.gz -095fd055c9299906a11f30159443b5be784f9e20 node-v0.8.24-sunos-x86.tar.gz -cf96df4d163bdb588044245cb5e082e136ed71d7 node-v0.8.24-x86.msi -82f3c12752b1891bb208677fe7f280f8cbec36ab node-v0.8.24.pkg -4035c547a98a9e9b9e7a036abe84f19c78220b8f node-v0.8.24.tar.gz -b65113c23b0a653a3befec55e42f7a4a3db691e2 node.exe -abd8a7ab174c6f3a8508cc0fa725a35aa8258738 node.exp -1601a02e694f60d6e37adefe29fae75ec4bedf52 node.lib -b420062ebfe1fc3e9a14a65c76e50d7433ed7120 node.pdb -93d6cde7e7a72aac47a4053c5e8ceefd23e24344 x64/node-v0.8.24-x64.msi -fa63de49e8839f581aece864249c61810f9af13f x64/node.exe -b3737b22816b6324a44afab9ad6722c604ed317c x64/node.exp -f08cdeb9f0414afb23ab4079f584edecc43e32ab x64/node.lib -4bdd92ba52fc3d9ff6184df00d9f9f53ef644cde x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.25.md b/doc/blog/release/v0.8.25.md deleted file mode 100644 index 9c94b0d4d..000000000 --- a/doc/blog/release/v0.8.25.md +++ /dev/null @@ -1,59 +0,0 @@ -date: Thu Jun 13 13:18:09 PDT 2013 -version: 0.8.25 -category: release -title: Node v0.8.25 (Maintenance) -slug: node-v0-8-25-maintenance - -2013.06.13, Version 0.8.25 (maintenance) - -* npm: Upgrade to 1.2.30 - -* child_process: fix handle delivery (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.8.25/node-v0.8.25.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.25/node-v0.8.25.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.25/node-v0.8.25-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.25/x64/node-v0.8.25-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.25/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.25/node-v0.8.25-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.25/node-v0.8.25-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.25/node-v0.8.25-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.25/node-v0.8.25-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.25/ - -Website: http://nodejs.org/docs/v0.8.25/ - -Documentation: http://nodejs.org/docs/v0.8.25/api/ - -Shasums: - -``` -c650dca3031ea09535a5cb95648a9edf43dcb23a node-v0.8.25-darwin-x64.tar.gz -d479e24f693331bd09b7a29e9cb2b2140f5f0606 node-v0.8.25-darwin-x86.tar.gz -5fbf6e7718cb8576682479e002081c23b5ebb299 node-v0.8.25-linux-x64.tar.gz -c037c589f77e597503a606d66c5ab7a0d1e1b3fb node-v0.8.25-linux-x86.tar.gz -ed5709fbd80c167183ca60cf4c435caa49d35034 node-v0.8.25-sunos-x64.tar.gz -6c2914ec896330e9f6eba65cbec738b042712663 node-v0.8.25-sunos-x86.tar.gz -26cc19bc19e344e4b51ab33775d00e811bf9b1eb node-v0.8.25-x86.msi -4c7ec87036616ec6e96f8c4b7242c86c3380231e node-v0.8.25.pkg -df91c9de8f3f14efb4cbe52d3ca8beb754b2a39a node-v0.8.25.tar.gz -d111ef9ac2b2cb4d3126f147c2714ce2441d37aa node.exe -a8cd86993a6dcf8a22d1cfda2fcd6c4865aac1da node.exp -5f8538ebd80078a1eee7dfe11f1b6d21d32f38f8 node.lib -bc4b361c1594a47902e94dddf8308be5b48b4f81 node.pdb -a6a559c81802f43cd220b83e13712f71d5f13484 x64/node-v0.8.25-x64.msi -fb004a281f3914961ce2c08e859c007b5c7d61a5 x64/node.exe -8954509d45e6a9d160130acc4313a8cb4ee870f4 x64/node.exp -cc332ca7a4b34ed834e5ad07abdbe1ce79bba5a6 x64/node.lib -24511046a8504ef65f77cbd30e5bad6b18751148 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.26.md b/doc/blog/release/v0.8.26.md deleted file mode 100644 index 45e227a9b..000000000 --- a/doc/blog/release/v0.8.26.md +++ /dev/null @@ -1,71 +0,0 @@ -date: Fri Oct 18 14:52:30 PDT 2013 -version: 0.8.26 -category: release -title: Node v0.8.26 (Maintenance) -slug: node-v0-8-26-maintenance - -This release contains a security fix for the http server implementation, please -upgrade as soon as possible. Details will be released soon. - -2013.10.13, Version 0.8.26 (maintenance) - -* v8: Upgrade to 3.11.10.26 - -* crypto: clear openssl error stack when handled (Ben Noordhuis) - -* crypto: clear errors from verify failure (Timothy J Fontaine) - -* crypto: fix memory leak in LoadPKCS12 (Fedor Indutny) - -* http: provide backpressure for pipeline flood (isaacs) - -* http_parser: expose pause/resume method for parser (Timothy J Fontaine) - -* readline: pause stdin before turning off terminal raw mode (Daniel Chatfield) - - -Source Code: http://nodejs.org/dist/v0.8.26/node-v0.8.26.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.26/node-v0.8.26.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.26/node-v0.8.26-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.26/x64/node-v0.8.26-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.26/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.26/node-v0.8.26-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.26/node-v0.8.26-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.26/node-v0.8.26-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.26/node-v0.8.26-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.26/ - -Website: http://nodejs.org/docs/v0.8.26/ - -Documentation: http://nodejs.org/docs/v0.8.26/api/ - -Shasums: -``` -b9fa5fca6282a01d491ab585b6a6a64f23ea4da2 node-v0.8.26-darwin-x64.tar.gz -ba760b282f38f62ad333c2ecc69d3b296f87cf4a node-v0.8.26-darwin-x86.tar.gz -c96470908234656c6060cbe0dab4502f90ca7cd1 node-v0.8.26-linux-x64.tar.gz -3b5c776ae8632df2a4c67b89bdd37d843135be90 node-v0.8.26-linux-x86.tar.gz -6b9b6bb2676b37ff63f240931f68aa22e9187e99 node-v0.8.26-sunos-x64.tar.gz -cb3f975293f9561fdda0b46571aee570576e0406 node-v0.8.26-sunos-x86.tar.gz -668bbc8240497675bb4ed3b61c6f7fb79772b264 node-v0.8.26-x86.msi -e51a33c28e2c75b0e40826100e5f6b84d5cf8d98 node-v0.8.26.pkg -2ec960bcc8cd38da271f83c1b2007c12da5153b3 node-v0.8.26.tar.gz -860ec0bcb6e89fcee3e45e56e469dd28cfcf400c node.exe -ad0e366a82e8570768f5c92d97eebd8fd4a54f8f node.exp -559a7b4e3c49b1071d1cd1374cf4bc4bae2aa558 node.lib -687eeb71782ac36f26aaba60e07bd92f47bfcf36 node.pdb -b10e28a100ab40169759bd431ccc855de1763fa8 x64/node-v0.8.26-x64.msi -19b5210e212b3b5473c251786c3d22b8cb919f5f x64/node.exe -6129121aad9d48ffa19a712f59e6acb9bff14eb1 x64/node.exp -4eb1822b10ec3b7a17deff1126725c30c5ef65b1 x64/node.lib -7f39e38b62ad44c774ae381a661726494b2f066e x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.3.md b/doc/blog/release/v0.8.3.md deleted file mode 100644 index cc5996565..000000000 --- a/doc/blog/release/v0.8.3.md +++ /dev/null @@ -1,71 +0,0 @@ -category: release -date: 2012-07-19T17:09:26.413Z -version: 0.8.3 -title: Version 0.8.3 (Stable) -slug: node-v0-8-3-stable - -2012.07.19, Version 0.8.3 (Stable) - -* V8: upgrade to 3.11.10.15 - -* npm: Upgrade to 1.1.43 - -* net: fix net.Server.listen({fd:x}) error reporting (Ben Noordhuis) - -* net: fix bogus errno reporting (Ben Noordhuis) - -* build: Move npm shebang logic into an npm script (isaacs) - -* build: fix add-on loading on freebsd (Ben Noordhuis) - -* build: disable unsafe optimizations (Ben Noordhuis) - -* build: fix spurious mksnapshot crashes for good (Ben Noordhuis) - -* build: speed up genv8constants (Dave Pacheco) - -* fs: make unwatchFile() remove a specific listener (Ben Noordhuis) - -* domain: Remove first arg from intercepted fn (Toshihiro Nakamura) - -* domain: Fix memory leak on error (isaacs) - -* events: Fix memory leak from removeAllListeners (Nathan Rajlich) - -* zlib: Fix memory leak in Unzip class. (isaacs) - -* crypto: Fix memory leak in DecipherUpdate() (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.8.3/node-v0.8.3.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.3/node-v0.8.3.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.3/node-v0.8.3-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.3/x64/node-v0.8.3-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.3/x64/ - -Other release files: http://nodejs.org/dist/v0.8.3/ - -Website: http://nodejs.org/docs/v0.8.3/ - -Documentation: http://nodejs.org/docs/v0.8.3/api/ - -Shasums: - -``` -10d478f3a084bf5e705be3f232c41f3e3d56e57f node-v0.8.3-x86.msi -a6b9168eaa817692914d0de6c0d04702d7615681 node-v0.8.3.pkg -f699d3788e242ed87a9037bae1aa0fa9335e45a9 node-v0.8.3.tar.gz -60294792588e000d846a4c416617f127d5ba6163 node.exe -efc7f597745bcf201a7996ecf9f9b94d9112b89f node.exp -4c5ea551d88fe21465f7d2e4c6f3d39ee02f2209 node.lib -fd2c3873bed6872fd36e5906b65dfb4f1cec32fb node.pdb -64c6ec7db3f7f24e70ccecdada6f7b966c73134c x64/node-v0.8.3-x64.msi -94cd3f41004f1e9b8efd8d4a337b6154c1d5fee2 x64/node.exe -a6ed8354a14577b9200c780b129e2b66f7b85e39 x64/node.exp -3427a95bf9b14f56eec3f59aed80077fbde8f67f x64/node.lib -9af962968551daad044259641a615697f6588616 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.4.md b/doc/blog/release/v0.8.4.md deleted file mode 100644 index 3e1ea5b48..000000000 --- a/doc/blog/release/v0.8.4.md +++ /dev/null @@ -1,59 +0,0 @@ -category: release -date: 2012-07-25T17:21:16.176Z -version: 0.8.4 -title: Version 0.8.4 (Stable) -slug: node-v0-8-4-stable - -2012.07.25, Version 0.8.4 (Stable) - -* V8: Upgrade to 3.11.10.17 - -* npm: Upgrade to 1.1.45 - -* net: fix Socket({ fd: 42 }) api (Ben Noordhuis) - -* readline: Remove event listeners on close (isaacs) - -* windows: correctly prep long path for fs.exists(Sync) (Bert Belder) - -* debugger: wake up the event loop when a debugger command is dispatched (Peter Rybin) - -* tls: verify server's identity (Fedor Indutny) - -* net: ignore socket.setTimeout(Infinity or NaN) (Fedor Indutny) - - -Source Code: http://nodejs.org/dist/v0.8.4/node-v0.8.4.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.4/node-v0.8.4.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.4/node-v0.8.4-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.4/x64/node-v0.8.4-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.4/x64/ - -Other release files: http://nodejs.org/dist/v0.8.4/ - -Website: http://nodejs.org/docs/v0.8.4/ - -Documentation: http://nodejs.org/docs/v0.8.4/api/ - -Shasums: - -``` -387d7ac58d79dac301960510dfb7ee96fbf39072 node-v0.8.4-x86.msi -66687da0ef190e8c07d5499ae3c408a6cca7ac30 node-v0.8.4.pkg -8473e3dd48ab3734e2c92de0518cb80c2cdf750f node-v0.8.4.tar.gz -724ec6dc5e86805bfac79c8a702638c353850ea3 node.exe -9bf483f72ad7884988d0678f7dc5bc000f4d21d2 node.exp -3b7bd3915b62896e5c2f5701fd5d1c7fb53cdd27 node.lib -9c3079ee727d471cef9fd91c7067d0a72349bfcb node.pdb -236a693074f2c69157e2918d1342a7850fc939ca npm-1.1.45.tgz -7126700cb321f688901e7773785eb88274906d50 npm-1.1.45.zip -e9f414ba043f1daa5eee65506ef33c5377d87a09 x64/node-v0.8.4-x64.msi -4cc86f21285b7f3d3cbd594ba604f06fb3434502 x64/node.exe -6bf207a6b587bf1b01f18e9d0f2eefb528d82c2f x64/node.exp -e7b0d65992324b0688c61f6e534f3527e7e0b59f x64/node.lib -9a0072f528f9055531dee2bfa991882836b235de x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.5.md b/doc/blog/release/v0.8.5.md deleted file mode 100644 index 86915eb5b..000000000 --- a/doc/blog/release/v0.8.5.md +++ /dev/null @@ -1,77 +0,0 @@ -version: 0.8.5 -title: Version 0.8.5 (stable) -category: release -slug: node-v0-8-5-stable -date: Thu Aug 02 2012 15:00:45 GMT-0700 (PDT) - -2012.08.02, Version 0.8.5 (Stable) - -* node: tag Encode and friends NODE_EXTERN (Ben Noordhuis) - -* fs: fix ReadStream / WriteStream missing callback (Gil Pedersen) - -* fs: fix readFileSync("/proc/cpuinfo") regression (Ben Noordhuis) - -* installer: don't assume bash is installed (Ben Noordhuis) - -* Report errors properly from --eval and stdin (isaacs) - -* assert: fix throws() throws an error without message property (koichik) - -* cluster: fix libuv assert in net.listen() (Ben Noordhuis) - -* build: always link sunos builds with libumem (Trent Mick) - -* build: improve armv7 / hard-float detection (Adam Malcontenti-Wilson) - -* https: Use host header as effective servername (isaacs) - -* sunos: work around OS bug to prevent fs.watch() from spinning (Bryan Cantrill) - -* linux: fix 'two watchers, one path' segfault (Ben Noordhuis) - -* windows: fix memory leaks in many fs functions (Bert Belder) - -* windows: don't allow directories to be opened for writing/appending (Bert Belder) - -* windows: make fork() work even when not all stdio handles are valid (Bert Belder) - -* windows: make unlink() not remove mount points, and improve performance (Bert Belder) - -* build: Sign pkg installer for OS X (isaacs) - - -Source Code: http://nodejs.org/dist/v0.8.5/node-v0.8.5.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.5/node-v0.8.5.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.5/node-v0.8.5-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.5/x64/node-v0.8.5-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.5/x64/ - -Other release files: http://nodejs.org/dist/v0.8.5/ - -Website: http://nodejs.org/docs/v0.8.5/ - -Documentation: http://nodejs.org/docs/v0.8.5/api/ - -Shasums: - -``` -74b470d04c3dac9f5838d4ed61e2fb50e394114a node-v0.8.5-x86.msi -28280575b717306b34440c83aace720dccc3047f node-v0.8.5.pkg -835ba5ca429e56f65aeb1a5d9730fff105e86337 node-v0.8.5.tar.gz -c8ce66eefd6d75b44cdf29bb49aeffe4ea534b7f node.exe -d3832fb5a7a45d739c9d3faa7e13115bdaaa9cc7 node.exp -5dee595f12dbfdee14b6e8aebc07a77ee96e5e45 node.lib -ac62ec2d2508dfcd0c2f5cfcf725286ad876fb7a node.pdb -12876d80668b066b460833d096998525d8eceec7 npm-1.1.46.tgz -4e820e5a99512e194ec30878ede08488211c8391 npm-1.1.46.zip -95882b6aeab74725197b10d31ff4ee3a0723574c x64/node-v0.8.5-x64.msi -9d9c0652e57e05708b59bba78a55bc1237fcfb73 x64/node.exe -f13f377c432c5a8fb4661abaae3a07c46ac74a66 x64/node.exp -a17e3e8742ac084e1f7f99f721470e9d6182e75f x64/node.lib -4026170fed5a55fad6ee569daa9666cbb9d5ae3d x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.6.md b/doc/blog/release/v0.8.6.md deleted file mode 100644 index 76cc072c8..000000000 --- a/doc/blog/release/v0.8.6.md +++ /dev/null @@ -1,85 +0,0 @@ -version: 0.8.6 -title: Version 0.8.6 (stable) -category: release -slug: node-v0-8-6-stable -date: 2012-08-07T19:03:55.905Z - -2012.08.07, Version 0.8.6 (Stable) - -This is the first release to include binary distributions for all -supported Unix operating systems (Linux, Darwin, and SunOS). To use -the binary distribution tarballs, you can unpack them directly into a -destination directory: - - cd ~/node/ # or /usr/local if you're feeling brave - tar xzvf /path/to/binary.tar.gz --strip=1 - -This is an experimental feature. Please use it and provide feedback. - -* npm: Upgrade to v1.1.48 - -* Add 'make binary' to build binary tarballs for all Unixes (Nathan Rajlich) - -* zlib: Emit 'close' on destroy(). (Dominic Tarr) - -* child_process: Fix stdout=null when stdio=['pipe'] (Tyler Neylon) - -* installer: prevent ETXTBSY errors (Ben Noordhuis) - -* installer: honor --without-npm, default install path (Ben Noordhuis) - -* net: make pause work with connecting sockets (Bert Belder) - -* installer: fix cross-compile installs (Ben Noordhuis) - -* net: fix .listen({fd:0}) (Ben Noordhuis) - -* windows: map WSANO_DATA to UV_ENOENT (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.8.6/node-v0.8.6.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.6/node-v0.8.6.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.6/node-v0.8.6-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.6/x64/node-v0.8.6-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.6/x64/ - -Linux 32-bit Binary Package: http://nodejs.org/dist/v0.8.6/node-v0.8.6-linux-x86.tar.gz - -Linux 64-bit Binary Package: http://nodejs.org/dist/v0.8.6/node-v0.8.6-linux-x64.tar.gz - -Solaris 32-bit Binary Package: http://nodejs.org/dist/v0.8.6/node-v0.8.6-sunos-x86.tar.gz - -Solaris 64-bit Binary Package: http://nodejs.org/dist/v0.8.6/node-v0.8.6-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.6/ - -Website: http://nodejs.org/docs/v0.8.6/ - -Documentation: http://nodejs.org/docs/v0.8.6/api/ - -Shasums: - -``` -c23a57601150b3ec59aeeb0eef607d9e430e17c2 node-v0.8.6-darwin-x64.tar.gz -8f7e4e837f61991eff4605678ab27c82e854bc38 node-v0.8.6-darwin-x86.tar.gz -32ce9d28d6a294878ce9ee8f23b6fa7ecb3130e7 node-v0.8.6-linux-x64.tar.gz -6f71518f044705ff1a7d9400a573906a99c5834c node-v0.8.6-linux-x86.tar.gz -ec9c02e9713a81d8f4848924cc38e5ed28a06fc4 node-v0.8.6-sunos-x64.tar.gz -ac96cc4ce3eee4dc54ef7936ad4fd8eb04fbe359 node-v0.8.6-sunos-x86.tar.gz -0a2aca229c9cb2ec4a4a82ff88de7ea0868d1890 node-v0.8.6-x86.msi -84127d73a968f5951a9682b592a79779d1396c9e node-v0.8.6.pkg -34c7ad2bb5450653748c65840155852d67742258 node-v0.8.6.tar.gz -42f3b792326efdfc9b0d95eebd7f9f716cadb1c0 node.exe -fc56e816081ebef450ce7ed92bfd543d53191ac3 node.exp -e91f1648e4e8f7586790443248326222101c286c node.lib -8106b33d1cdae69103ca07b16c7f5d690308d751 node.pdb -6226474859e1cf2f1314d92b6207183bb36c6007 x64/node-v0.8.6-x64.msi -3c1ac597956ea9f1e7eab62f85a23e3e436cd0e8 x64/node.exe -599df091faecff536f52d17463c70e07cf9ed54f x64/node.exp -70bac4dcb9f845c8c8cb9443ff09f839fc86aac7 x64/node.lib -eb59a0ed841c9e93c406b4c636b2048973cbfae4 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.7.md b/doc/blog/release/v0.8.7.md deleted file mode 100644 index 35031cd0b..000000000 --- a/doc/blog/release/v0.8.7.md +++ /dev/null @@ -1,75 +0,0 @@ -version: 0.8.7 -title: Version 0.8.7 (stable) -category: release -slug: node-v0-8-7-stable -date: 2012-08-15T23:23:16.131Z - -2012.08.15, Version 0.8.7 (Stable) - -* npm: Upgrade to 1.1.49 - -* website: download page (Golo Roden) - -* crypto: fix uninitialized memory access in openssl (Ben Noordhuis) - -* buffer, crypto: fix buffer decoding (Ben Noordhuis) - -* build: compile with -fno-tree-vrp when gcc >= 4.0 (Ben Noordhuis) - -* tls: handle multiple CN fields when verifying cert (Ben Noordhuis) - -* doc: remove unused util from child_process (Kyle Robinson Young) - -* build: rework -fvisibility=hidden detection (Ben Noordhuis) - -* windows: don't duplicate invalid stdio handles (Bert Belder) - -* windows: fix typos in process-stdio.c (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.8.7/node-v0.8.7.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.7/node-v0.8.7.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.7/node-v0.8.7-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.7/x64/node-v0.8.7-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.7/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.7/node-v0.8.7-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.7/node-v0.8.7-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.7/node-v0.8.7-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.7/node-v0.8.7-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.7/ - -Website: http://nodejs.org/docs/v0.8.7/ - -Documentation: http://nodejs.org/docs/v0.8.7/api/ - -Shasums: - -``` -3ff82e65a845a2d5f27ea57e8a1e29e6d10f5128 node-v0.8.7-darwin-x64.tar.gz -d72ac02727aaefa094f8d06a0a124078da007df0 node-v0.8.7-darwin-x86.tar.gz -0882e19157e98c3e2214e772e3ae714125863ae6 node-v0.8.7-linux-x64.tar.gz -3e388d47f6e79acccfab117cceaeed19ceb1b14c node-v0.8.7-linux-x86.tar.gz -ffb81708df10d3c225d8f2ce57965a40db6ca556 node-v0.8.7-sunos-x64.tar.gz -19df6ae999e4a5c1dada83b72516b3941eeb701e node-v0.8.7-sunos-x86.tar.gz -19f90a0cfa41c7eaf683393d46d06aecc2f99f84 node-v0.8.7-x86.msi -0c2dcf2d5491be7b429681193a13c18de1ba488a node-v0.8.7.pkg -58ffb5884304e2f8415d8cee7921c42f66fc8d7b node-v0.8.7.tar.gz -ecaee480f0337e92870ca83aed1b49863b3f659d node.exe -ea2e25daad114692357383bfc8b4ac910fe02d99 node.exp -70c8f054a5c42f6d4e3ca5154ca1a360f549d66f node.lib -180bcc036cd5deaef49bf12fddeeafc2e78152e3 node.pdb -12ad712ff9e28eb1bdf7e508ce3a2b872ec37d4d x64/node-v0.8.7-x64.msi -c30607099ad4699b11e3ca37f94a9da196a36dc6 x64/node.exe -f864ed339952604c2205e25927fb4851da5b79b6 x64/node.exp -ce711929befe756f942a039213aeece2ef3edcc1 x64/node.lib -11bb755b054bc6ee2e441758f7d42d131cf6d557 x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.8.md b/doc/blog/release/v0.8.8.md deleted file mode 100644 index 83e830861..000000000 --- a/doc/blog/release/v0.8.8.md +++ /dev/null @@ -1,77 +0,0 @@ -version: 0.8.8 -title: Version 0.8.8 (stable) -category: release -slug: node-v0-8-8-stable -date: 2012-08-22T19:50:38.833Z - -2012.08.22, Version 0.8.8 (Stable) - -* V8: upgrade to 3.11.10.19 - -* npm: upgrade to 1.1.59 - -* windows: fix uninitialized memory access in uv_update_time() (Bert Belder) - -* unix, windows: fix memory corruption in fs-poll.c (Ben Noordhuis) - -* unix: fix integer overflow in uv_hrtime (Tim Holy) - -* sunos: fix uv_cpu_info() on x86_64 (Ben Noordhuis) - -* tls: update default cipher list (Ben Noordhuis) - -* unix: Fix llvm and older gcc duplicate symbol warnings (Bert Belder) - -* fs: fix use after free in stat watcher (Ben Noordhuis) - -* build: Fix using manually compiled gcc on OS X (Nathan Rajlich) - -* windows: make junctions work again (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.8.8/node-v0.8.8.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.8/node-v0.8.8.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.8/node-v0.8.8-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.8/x64/node-v0.8.8-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.8/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.8/node-v0.8.8-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.8/node-v0.8.8-linux-x64.tar.gz - -SunOS 32-bit Binary: http://nodejs.org/dist/v0.8.8/node-v0.8.8-sunos-x86.tar.gz - -SunOS 64-bit Binary: http://nodejs.org/dist/v0.8.8/node-v0.8.8-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.8/ - -Website: http://nodejs.org/docs/v0.8.8/ - -Documentation: http://nodejs.org/docs/v0.8.8/api/ - -Shasums: - -``` -ecf54d3aad371621446ee0432f7c182a4494a1a3 node-v0.8.8-darwin-x64.tar.gz -d1aca7c797fd262e2f0c601fe5cc3815622ce801 node-v0.8.8-darwin-x86.tar.gz -603c36611c54651c149a26dc5bc6f833b0b846d0 node-v0.8.8-linux-x64.tar.gz -30c66fc26845b14ef99d3e043bb4dfcba605bd45 node-v0.8.8-linux-x86.tar.gz -cd0d46d232d882dd4afe955bd8acd6c435c2f5fe node-v0.8.8-sunos-x64.tar.gz -857facbd156d4f7a49b9e1c5610b4a1f893bf534 node-v0.8.8-sunos-x86.tar.gz -bb08591a6f973f3699085abb50f6bdc9586f01f9 node-v0.8.8-x86.msi -14239f6f379953405ca914b129c19b379718ba64 node-v0.8.8.pkg -5ddafc059d2f774e35e6375f5b61157879a46f0f node-v0.8.8.tar.gz -6cc8a0a363c1efa184f6b72970a5d1182b5b44aa node.exe -395c73c055886e2e981b46f3c363837613456d82 node.exp -ca8a9560b3da13ecddbbc2fb15c1b3ab85d7371b node.lib -b8e0e35b0ecc7c3514ad8ca4549c57dd8a221be4 node.pdb -b604a56a236f632cdf55c366a882d3ecb2312fba x64/node-v0.8.8-x64.msi -e80c1f4791e80243c5ddc7ea1e92ebd58fc4e10f x64/node.exe -8baf5b459e7f2074e0237d40c8c80e89b47660a3 x64/node.exp -4448fc2bfef66b7334016c0ab2e118c1cbc8544c x64/node.lib -0ddddf2c2fcd746827863b2454ddb4a8f6c3844e x64/node.pdb -``` diff --git a/doc/blog/release/v0.8.9.md b/doc/blog/release/v0.8.9.md deleted file mode 100644 index 7e217961d..000000000 --- a/doc/blog/release/v0.8.9.md +++ /dev/null @@ -1,97 +0,0 @@ -date: Tue Sep 11 2012 11:50:17 GMT-0700 (PDT) -category: release -version: 0.8.9 -title: Version 0.8.9 (Stable) -slug: node-v0-8-9-stable - -2012.09.11, Version 0.8.9 (Stable) - -* v8: upgrade to 3.11.10.22 - -* GYP: upgrade to r1477 - -* npm: Upgrade to 1.1.61 - -* npm: Don't create world-writable files (isaacs) - -* windows: fix single-accept mode for shared server sockets (Bert Belder) - -* windows: fix uninitialized memory access in uv_update_time() (Bert Belder) - -* windows: don't throw when a signal handler is attached (Bert Belder) - -* unix: fix memory leak in udp (Ben Noordhuis) - -* unix: map errno ESPIPE (Ben Noordhuis) - -* unix, windows: fix memory corruption in fs-poll.c (Ben Noordhuis) - -* sunos: fix os.cpus() on x86_64 (Ben Noordhuis) - -* child process: fix processes with IPC channel don't emit 'close' (Bert Belder) - -* build: add a "--dest-os" option to force a gyp "flavor" (Nathan Rajlich) - -* build: set `process.platform` to "sunos" on SunOS (Nathan Rajlich) - -* build: fix `make -j` fails after `make clean` (Bearice Ren) - -* build: fix openssl configuration for "arm" builds (Nathan Rajlich) - -* tls: support unix domain socket/named pipe in tls.connect (Shigeki Ohtsu) - -* https: make https.get() accept a URL (koichik) - -* http: respect HTTP/1.0 TE header (Ben Noordhuis) - -* crypto, tls: Domainify setSNICallback, pbkdf2, randomBytes (Ben Noordhuis) - -* stream.pipe: Don't call destroy() unless it's a function (isaacs) - - -Source Code: http://nodejs.org/dist/v0.8.9/node-v0.8.9.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.8.9/node-v0.8.9.pkg - -Windows Installer: http://nodejs.org/dist/v0.8.9/node-v0.8.9-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.8.9/x64/node-v0.8.9-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.8.9/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.8.9/node-v0.8.9-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.8.9/node-v0.8.9-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.8.9/node-v0.8.9-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.8.9/node-v0.8.9-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.8.9/ - -Website: http://nodejs.org/docs/v0.8.9/ - -Documentation: http://nodejs.org/docs/v0.8.9/api/ - -Shasums: - -``` -68aa7341807fb114f334151b7a1c8859e96b83d4 node-v0.8.9-darwin-x64.tar.gz -9e4a9422c1fd71750e9c46235d58aedaac3ba002 node-v0.8.9-darwin-x86.tar.gz -6236f781632555abf69d77f4bdfeb1e4e83779f3 node-v0.8.9-linux-x64.tar.gz -7f46084541d4909f44cfef2bb95f1e4f7435629e node-v0.8.9-linux-x86.tar.gz -33b0fe68f63519f3c8e6dc4d2aa51c96f62d2a56 node-v0.8.9-sunos-x64.tar.gz -e05863cb3a7d4add340ad434228f57da04a03b3d node-v0.8.9-sunos-x86.tar.gz -104f325d5289c51c6eb6a0634691dcdb39abb1db node-v0.8.9-x86.msi -1dd2cf48fb9b1f3e11e6e6750084ad4b2a2b0a85 node-v0.8.9.pkg -2d3234adceedc2dc87284af88609ede6ecd71734 node-v0.8.9.tar.gz -2997e2075cd04cf693453ce5664fa37615faa9a7 node.exe -d2834bd8ed3569b7880211dfe31a4f21cd475ab8 node.exp -41eac45ae350324de321a85787897bd8aa6b371c node.lib -ab6666144b23b2594521d27a95fb36b0904d48a2 node.pdb -f29db0a61a7bb32a7198ab059eca25b1283b9d6d x64/node-v0.8.9-x64.msi -2a7e69cef1bf7bc88109e007406e6feeaaa007b2 x64/node.exe -0423cd6602684c24e65358b9caa51740af67677b x64/node.exp -92155062a70100bfb5cf1389dd93e8851e7f3d0b x64/node.lib -cbbee351b84d7da0a91f56d6bbf6805e7b85cc8f x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.0.md b/doc/blog/release/v0.9.0.md deleted file mode 100644 index 61499e532..000000000 --- a/doc/blog/release/v0.9.0.md +++ /dev/null @@ -1,61 +0,0 @@ -category: release -version: 0.9.0 -date: Fri Jul 20 11:37:15 PDT 2012 -title: Version 0.9.0 (Unstable) -slug: version-0-9-0-unstable - -2012.07.20, Version 0.9.0 (Unstable) - -* punycode: update to v1.1.1 (Mathias Bynens) - -* c-ares: upgrade to 1.9.0 (Saúl Ibarra Corretgé) - -* dns: ignore rogue DNS servers reported by windows (Saúl Ibarra Corretgé) - -* unix: speed up uv_async_send() (Ben Noordhuis) - -* darwin: get cpu model correctly on mac (Xidorn Quan) - -* nextTick: Handle tick callbacks before any other I/O (isaacs) - -* Enable color customization of `util.inspect` (Pavel Lang) - -* tls: Speed and memory improvements (Fedor Indutny) - -* readline: Use one history item for reentered line (Vladimir Beloborodov) - -* Fix #3521 Make process.env more like a regular Object (isaacs) - - -Source Code: http://nodejs.org/dist/v0.9.0/node-v0.9.0.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.0/node-v0.9.0.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.0/node-v0.9.0-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.0/x64/node-v0.9.0-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.0/x64/ - -Other release files: http://nodejs.org/dist/v0.9.0/ - -Website: http://nodejs.org/docs/v0.9.0/ - -Documentation: http://nodejs.org/docs/v0.9.0/api/ - -Shasums: - -``` -4d6881934f5e41da651b478f914f71543d21d3cc node-v0.9.0-x86.msi -ec00cc6f0830f64cd9e8246a299abf9a2a6ed73e node-v0.9.0.pkg -912d0eb3139b8f6f99199dae5ec1ecb300ed9c9b node-v0.9.0.tar.gz -7e56dddbb1d3e243549db7182f1bf2dd4518eaae node.exe -31718ad3e0de9b0ea6c207966a13d4bafaf9ef64 node.exp -0738b4d91de4c87cdee2547d83144668cb232c24 node.lib -baca86ec3c12a5261abb940cd8107bdeb40713cc node.pdb -cf3892596a7d2a27a63672b537b06b8828125fe9 x64/node-v0.9.0-x64.msi -cad4bf9b2be85476d1a897ea17b3f927ec49c96a x64/node.exe -29ea3654f7728efef6fa046943ded57af42b91f3 x64/node.exp -1dfa57b111d5942b4fe701b625176eae73c82d82 x64/node.lib -9093b2120f8adf0236f965982e4a32697af2af5d x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.1.md b/doc/blog/release/v0.9.1.md deleted file mode 100644 index dcc0bb0a7..000000000 --- a/doc/blog/release/v0.9.1.md +++ /dev/null @@ -1,116 +0,0 @@ -version: 0.9.1 -title: Version 0.9.1 (Unstable) -category: release -slug: node-v0-9-1-unstable -date: 2012-08-28T22:33:45.659Z - -2012.08.28, Version 0.9.1 (Unstable) - -* buffer: Add Buffer.isEncoding(enc) to test for valid encoding values (isaacs) - -* Raise UV_ECANCELED on premature close. (Ben Noordhuis) - -* Remove c-ares from libuv, move to a top-level node dependency (Bert Belder) - -* ref/unref for all HandleWraps, timers, servers, and sockets (Timothy J Fontaine) - -* addon: remove node-waf, superseded by node-gyp (Ben Noordhuis) - -* child_process: emit error on exec failure (Ben Noordhuis) - -* cluster: do not use internal server API (Andreas Madsen) - -* constants: add O_DIRECT (Ian Babrou) - -* crypto: add sync interface to crypto.pbkdf2() (Ben Noordhuis) - -* darwin: emulate fdatasync() (Fedor Indutny) - -* dgram: make .bind() always asynchronous (Ben Noordhuis) - -* events: Make emitter.listeners() side-effect free (isaacs, Joe Andaverde) - -* fs: Throw early on invalid encoding args (isaacs) - -* fs: fix naming of truncate/ftruncate functions (isaacs) - -* http: bubble up parser errors to ClientRequest (Brian White) - -* linux: improve cpuinfo parser on ARM and MIPS (Ben Noordhuis) - -* net: add support for IPv6 addresses ending in :: (Josh Erickson) - -* net: support Server.listen(Pipe) (Andreas Madsen) - -* node: don't scan add-on for "init" symbol (Ben Noordhuis) - -* remove process.uvCounters() (Ben Noordhuis) - -* repl: console writes to repl rather than process stdio (Nathan Rajlich) - -* timers: implement setImmediate (Timothy J Fontaine) - -* tls: fix segfault in pummel/test-tls-ci-reneg-attack (Ben Noordhuis) - -* tools: Move gyp addon tools to node-gyp (Nathan Rajlich) - -* unix: preliminary signal handler support (Ben Noordhuis) - -* unix: remove dependency on ev_child (Ben Noordhuis) - -* unix: work around darwin bug, don't poll() on pipe (Fedor Indutny) - -* util: Formally deprecate util.pump() (Ben Noordhuis) - -* windows: make active and closing handle state independent (Bert Belder) - -* windows: report spawn errors to the exit callback (Bert Belder) - -* windows: signal handling support with uv_signal_t (Bert Belder) - - -Source Code: http://nodejs.org/dist/v0.9.1/node-v0.9.1.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.1/node-v0.9.1.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.1/node-v0.9.1-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.1/x64/node-v0.9.1-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.1/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.1/node-v0.9.1-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.1/node-v0.9.1-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.1/node-v0.9.1-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.1/node-v0.9.1-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.1/ - -Website: http://nodejs.org/docs/v0.9.1/ - -Documentation: http://nodejs.org/docs/v0.9.1/api/ - -Shasums: - -``` -b86a5b0b2c9a89d08baaeb3d5270a8f247b4ba43 node-v0.9.1-darwin-x64.tar.gz -800af9d15a4b65e624351bb94dedc3b7eb322b86 node-v0.9.1-darwin-x86.tar.gz -a7ea43b0db472ca84dc9838960dae57ff0abaa72 node-v0.9.1-linux-x64.tar.gz -89c4be492a946eefa45aa87d16787875aa0f2dff node-v0.9.1-linux-x86.tar.gz -6495d2814541e945dba5941b8d3facf2a61dc55d node-v0.9.1-sunos-x64.tar.gz -05ea83ba4d648f5b949833bb28d69e6eeebabb78 node-v0.9.1-sunos-x86.tar.gz -3ccf1ac2fea7f2d05bcaed590bc54ee61c982fbb node-v0.9.1-x86.msi -bd0ede40e4681b16088284fe6a18ae3a5c5a3795 node-v0.9.1.tar.gz -159470a999ef23fa940ad3c54265053c3d2a4332 node.exe -02472e388a44b91e2644178a0fe011354fcd361e node.exp -c6d6ce22be4b47ad022d82dd91ebd4c040742fee node.lib -7b4cec8b4106d90a077388fe483fdbb13119dcb1 node.pdb -a5fbf5e22c7623a9206abc6608d084ff53c7c4c9 x64/node-v0.9.1-x64.msi -9755685a9d7bea6dc63d3260829c26c5b0430a7a x64/node.exe -621f177733647848f7f667926fe4f498a1f50c97 x64/node.exp -5877dffbf012c458dab88f3392af59cb33720d2f x64/node.lib -dc513ce5c16771dcfab9c1777d5949252290b412 x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.10.md b/doc/blog/release/v0.9.10.md deleted file mode 100644 index d0454bf55..000000000 --- a/doc/blog/release/v0.9.10.md +++ /dev/null @@ -1,84 +0,0 @@ -category: release -date: Tue Feb 19 14:00:08 PST 2013 -slug: node-v0-9-10-unstable -title: Node v0.9.10 (Unstable) -version: 0.9.10 - -2013.02.19, Version 0.9.10 (Unstable) - -* V8: Upgrade to 3.15.11.15 - -* npm: Upgrade to 1.2.12 - -* fs: Change default WriteStream config, increase perf (isaacs) - -* process: streamlining tick callback logic (Trevor Norris) - -* stream_wrap, udp_wrap: add read-only fd property (Ben Noordhuis) - -* buffer: accept negative indices in Buffer#slice() (Ben Noordhuis) - -* tls: Cycle data when underlying socket drains (isaacs) - -* stream: read(0) should not always trigger _read(n,cb) (isaacs) - -* stream: Empty strings/buffers do not signal EOF any longer (isaacs) - -* crypto: improve cipher/decipher error messages (Ben Noordhuis) - -* net: Respect the 'readable' flag on sockets (isaacs) - -* net: don't suppress ECONNRESET (Ben Noordhuis) - -* typed arrays: copy Buffer in typed array constructor (Ben Noordhuis) - -* typed arrays: make DataView throw on non-ArrayBuffer (Ben Noordhuis) - -* windows: MSI installer enhancements (Scott Blomquist, Jim Schubert) - - -Source Code: http://nodejs.org/dist/v0.9.10/node-v0.9.10.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.10/node-v0.9.10.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.10/node-v0.9.10-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.10/x64/node-v0.9.10-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.10/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.10/node-v0.9.10-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.10/node-v0.9.10-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.10/node-v0.9.10-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.10/node-v0.9.10-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.10/ - -Website: http://nodejs.org/docs/v0.9.10/ - -Documentation: http://nodejs.org/docs/v0.9.10/api/ - -Shasums: -``` -813d5f42b156b7d64f00b86e13d26ada3ef352e5 node-v0.9.10-darwin-x64.tar.gz -99dbe66fd0fc176fb3459ffcf62212dcb27bef10 node-v0.9.10-darwin-x86.tar.gz -3a5a465238cbdbdac9786c204fd27be61ce7159a node-v0.9.10-linux-x64.tar.gz -3340ac206ec1a1f827c954efdfa1351dcfe9f419 node-v0.9.10-linux-x86.tar.gz -b920b2e57c6df1e080966fdeccbfd1b384b156d4 node-v0.9.10-sunos-x64.tar.gz -9c1744352bb1bc71f48f8aea1aff6aeefe35a394 node-v0.9.10-sunos-x86.tar.gz -f1daaafc330cc9993a3a6f7ca8b9cc870b49e75c node-v0.9.10-x86.msi -2b6c70f57c1513e8f5151785b1ac263565983918 node-v0.9.10.pkg -265542c15cf939b7c71a545758d835ed44d791d3 node-v0.9.10.tar.gz -653f24d53f411217d57ed18d73921ff4721f00dd node.exe -7d62da67a7b33628d7d90c9d5037cf564dfc5ce4 node.exp -cfebbcd81db602b2f051328a9924e19ca2cb6235 node.lib -a31694cb9e03d13a616f3cc634852d8dc98e69b8 node.pdb -5f94c1cc9301a8b85082fee7549aa376aedd8ec5 x64/node-v0.9.10-x64.msi -7716c01ce60f7c65100cc405726badf8476afebd x64/node.exe -121d4a721968ba4631d29de07e5d6c326d259b4b x64/node.exp -17f651000f6b0c840efe539ae5257cb894481c49 x64/node.lib -d04242a5ec3a3104931ec8de6a846a8f7746b1fd x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.11.md b/doc/blog/release/v0.9.11.md deleted file mode 100644 index ee4b28b6a..000000000 --- a/doc/blog/release/v0.9.11.md +++ /dev/null @@ -1,88 +0,0 @@ -date: Fri Mar 1 11:17:40 PST 2013 -version: 0.9.11 -category: release -title: Node v0.9.11 (Unstable) -slug: node-v0-9-11-unstable - -2013.03.01, Version 0.9.11 (Unstable) - -* V8: downgrade 3.14.5 - -* openssl: update to 1.0.1e - -* darwin: Make process.title work properly (Ben Noordhuis) - -* fs: Support mode/flag options to read/append/writeFile (isaacs) - -* stream: _read() no longer takes a callback (isaacs) - -* stream: Add stream.unshift(chunk) (isaacs) - -* stream: remove lowWaterMark feature (isaacs) - -* net: omit superfluous 'connect' event (Ben Noordhuis) - -* build, windows: disable SEH (Ben Noordhuis) - -* core: remove errno global (Ben Noordhuis) - -* core: Remove the nextTick for running the main file (isaacs) - -* core: Mark exit() calls with status codes (isaacs) - -* core: Fix debug signal handler race condition lock (isaacs) - -* crypto: clear error stack (Ben Noordhuis) - -* test: optionally set common.PORT via env variable (Timothy J Fontaine) - -* path: Throw TypeError on non-string args to path.resolve/join (isaacs, Arianit Uka) - -* crypto: fix uninitialized memory access in openssl (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.9.11/node-v0.9.11.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.11/node-v0.9.11.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.11/node-v0.9.11-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.11/x64/node-v0.9.11-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.11/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.11/node-v0.9.11-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.11/node-v0.9.11-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.11/node-v0.9.11-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.11/node-v0.9.11-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.11/ - -Website: http://nodejs.org/docs/v0.9.11/ - -Documentation: http://nodejs.org/docs/v0.9.11/api/ - -Shasums: -``` -2e11c53449523642f1b3f2cad9726d032ebf0a1b node-v0.9.11-darwin-x64.tar.gz -6a8c18185d67ff50979a143b9e100d56b35aedde node-v0.9.11-darwin-x86.tar.gz -16a95dfc6974ba3562801d9f7bb9e2fa0c001d32 node-v0.9.11-linux-x64.tar.gz -4711aae106edf9a2bf9f644b08db1b608e9829c1 node-v0.9.11-linux-x86.tar.gz -897c21d0fc59faebbdf515e0dfee27551386c4af node-v0.9.11-sunos-x64.tar.gz -09c2b469ef984237bbd606d78f523d1c8b92e680 node-v0.9.11-sunos-x86.tar.gz -81627efd5c591f636147100e2e95bbbb17fd0290 node-v0.9.11-x86.msi -a0e91028c7fd091db1667ccf9dba6216ee321e98 node-v0.9.11.pkg -66370601eb824305b12c7f3e5b2a5e8ca94f1209 node-v0.9.11.tar.gz -db08f56a8258dd8a6a525595a023ad9eb72603e6 node.exe -759fe57cbceeee5820c7de176b6ef8c2a5af7fab node.exp -299f0f8aebbc755b37fc6b40e463cb455a5bb1c6 node.lib -f12b3dc557ae16834ae3a793d768e251d1ba5db3 node.pdb -807520a39d6f7518e53da796fa1ca62316219146 x64/node-v0.9.11-x64.msi -e27a6adc077629ae9a367b4a5cb7fb31853863d3 x64/node.exe -fdcf8ccea3b2c5e3f4f99fa606715e1e27a96acc x64/node.exp -fa0db53aac8d97bab3566c7d80fceb8e148c6d0d x64/node.lib -e24cf62376b8439ae40b84d37c55ab23fbad4e47 x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.12.md b/doc/blog/release/v0.9.12.md deleted file mode 100644 index 5de3974c1..000000000 --- a/doc/blog/release/v0.9.12.md +++ /dev/null @@ -1,107 +0,0 @@ -date: Wed Mar 6 13:51:00 PST 2013 -version: 0.9.12 -category: release -title: Node v0.9.12 (Unstable) -slug: node-v0-9-12-unstable - -As of this release, Node v0.9 is finally performing faster than v0.8 -on HTTP, file system, and TLS benchmarks. - -Unless there are serious problems found, v0.10.0 will be released on -Monday, 2013.03.11, along with more details about the benchmark -results and the plans for what comes next. - -Please consider this a v0.10 Release Candidate. Use it in your -programs. It is as stable as 0.9 is going to get. - ----- - -2013.03.06, Version 0.9.12 (Unstable) - -* stream: Allow strings in Readable.push/unshift (isaacs) - -* stream: Remove bufferSize option (isaacs) - -* stream: Increase highWaterMark on large reads (isaacs) - -* stream: _write: takes an encoding argument (isaacs) - -* stream: _transform: remove output() method, provide encoding (isaacs) - -* stream: Don't require read(0) to emit 'readable' event (isaacs) - -* node: Add --throw-deprecation (isaacs) - -* http: fix multiple timeout events (Eugene Girshov) - -* http: More useful setTimeout API on server (isaacs) - -* net: use close callback, not process.nextTick (Ben Noordhuis) - -* net: Provide better error when writing after FIN (isaacs) - -* dns: Support NAPTR queries (Pavel Lang) - -* dns: fix ReferenceError in resolve() error path (Xidorn Quan) - -* child_process: handle ENOENT correctly on Windows (Scott Blomquist) - -* cluster: Rename destroy() to kill(signal=SIGTERM) (isaacs) - -* build: define nightly tag external to build system (Timothy J Fontaine) - -* build: make msi build work when spaces are present in the path (Bert Belder) - -* build: fix msi build issue with WiX 3.7/3.8 (Raymond Feng) - -* repl: make compatible with domains (Dave Olszewski) - -* events: Code cleanup and performance improvements (Trevor Norris) - - -Source Code: http://nodejs.org/dist/v0.9.12/node-v0.9.12.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.12/node-v0.9.12.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.12/node-v0.9.12-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.12/x64/node-v0.9.12-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.12/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.12/node-v0.9.12-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.12/node-v0.9.12-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.12/node-v0.9.12-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.12/node-v0.9.12-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.12/ - -Website: http://nodejs.org/docs/v0.9.12/ - -Documentation: http://nodejs.org/docs/v0.9.12/api/ - -Shasums: - -``` -caa171a35f7eb36fd585f4e16dbf1c60f9d056af node-v0.9.12-darwin-x64.tar.gz -ffd98e60cdb630c4239c3d94e89b5ba84fb8d234 node-v0.9.12-darwin-x86.tar.gz -85c008721b33872085c3af6253b6e92a6587a467 node-v0.9.12-linux-x64.tar.gz -cc3d50b8ba0474f1907959aae5dfa5e64801bc6b node-v0.9.12-linux-x86.tar.gz -bcedc7c18f9984ea8873752672a09622e56008e1 node-v0.9.12-sunos-x64.tar.gz -4a7e2baf41fc994044c204a9c90eb894b60ee4c3 node-v0.9.12-sunos-x86.tar.gz -0f7c4f600768736c0e7107e7da33a748a4e2d61e node-v0.9.12-x86.msi -a9e610225a6cad24923a7242eba97ab1577f3886 node-v0.9.12.pkg -2353d3e5c6518f75202b74236fa9d8eeecd26ca3 node-v0.9.12.tar.gz -9be76f46fbfc66a84fbd02210b6422f14d5dd7eb node.exe -1f528fdf910036bb791fc6031e2dc9aff300f7eb node.exp -6aec59165f64fea2e89b6ec4ddbf55ab630b318f node.lib -fd575f13dc714fdeb64f814e67db9ef5d142e7f8 node.pdb -442dae32457159a579eb44da12c7c5f182c1ae4c x64/node-v0.9.12-x64.msi -8dc7f6fec9172a5e606ca1b6b3520178313caa29 x64/node.exe -f441fb3807930ee658a105db97ec61a2b5e331d4 x64/node.exp -f8b3880e5fa00151343bf0000f324ea9e96155a7 x64/node.lib -7adb54566301d39866e93506ffc9391870f9c644 x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.2.md b/doc/blog/release/v0.9.2.md deleted file mode 100644 index f12d0cf57..000000000 --- a/doc/blog/release/v0.9.2.md +++ /dev/null @@ -1,95 +0,0 @@ -title: Version 0.9.2 (Unstable) -category: release -version: 0.9.2 -date: Mon Sep 17 18:25:53 PDT 2012 -slug: node-v0-9-2-unstable - -2012.09.17, Version 0.9.2 (Unstable) - -* http_parser: upgrade to ad3b631 - -* openssl: upgrade 1.0.1c - -* darwin: use FSEvents to watch directory changes (Fedor Indutny) - -* unix: support missing API on NetBSD (Shigeki Ohtsu) - -* unix: fix EMFILE busy loop (Ben Noordhuis) - -* windows: un-break writable tty handles (Bert Belder) - -* windows: map WSAESHUTDOWN to UV_EPIPE (Bert Belder) - -* windows: make spawn with custom environment work again (Bert Belder) - -* windows: map ERROR_DIRECTORY to UV_ENOENT (Bert Belder) - -* tls, https: validate server certificate by default (Ben Noordhuis) - -* tls, https: throw exception on missing key/cert (Ben Noordhuis) - -* tls: async session storage (Fedor Indutny) - -* installer: don't install header files (Ben Noordhuis) - -* buffer: implement Buffer.prototype.toJSON() (Nathan Rajlich) - -* buffer: added support for writing NaN and Infinity (koichik) - -* http: make http.ServerResponse emit 'end' (Ben Noordhuis) - -* build: ./configure --ninja (Ben Noordhuis, Timothy J Fontaine) - -* installer: fix --without-npm (Ben Noordhuis) - -* cli: make -p equivalent to -pe (Ben Noordhuis) - -* url: Go much faster by using Url class (isaacs) - - -Source Code: http://nodejs.org/dist/v0.9.2/node-v0.9.2.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.2/node-v0.9.2.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.2/node-v0.9.2-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.2/x64/node-v0.9.2-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.2/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.2/node-v0.9.2-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.2/node-v0.9.2-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.2/node-v0.9.2-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.2/node-v0.9.2-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.2/ - -Website: http://nodejs.org/docs/v0.9.2/ - -Documentation: http://nodejs.org/docs/v0.9.2/api/ - -Shasums: - -``` -3d1bb82013cbefd199abedaf0fe91d18579939b5 node-v0.9.2-darwin-x64.tar.gz -0a8e43e13ae6ce13ee3c8bb281d9a26aacc3ba3c node-v0.9.2-darwin-x86.tar.gz -c5c2708d796d0e37c5a401af39bfa17c9c3b67c0 node-v0.9.2-linux-x64.tar.gz -0d0a09b34b74f2c9f310f044cd142d0b80885c22 node-v0.9.2-linux-x86.tar.gz -0bcc9a23e601cd8bef42a2e250d918ccb03b3f5b node-v0.9.2-sunos-x64.tar.gz -7827998ec5ca442f26f824f46b51f33d0c9bbbb7 node-v0.9.2-sunos-x86.tar.gz -ed1c7d8a966c786969e3b4f68081cc5b3c753a03 node-v0.9.2-x86.msi -e1a1270d3f2a398738a363c68e8f30fd47dd5eb6 node-v0.9.2.pkg -09dd5e2135ab67ee9544f2b6ce0c5ab0e95b02b8 node-v0.9.2.tar.gz -8bfd33550b0115f71aed15a0c114a13cd573e10b node.exe -3484b1c61442bd2ca7e00d06c61ad7fa6f61acad node.exp -37dcaa77234b63a3ce3cecdea27041b7565698cc node.lib -52abfb1b09f6facb0cda7c2e27b1bb48f8e75404 node.pdb -c4c3f87c5dd7a0d36d682fb449cc6a8a245a4789 x64/node-v0.9.2-x64.msi -d60fb389deada9eb753948bedb84b2f797424a93 x64/node.exe -04190c31210b2bc7ee80679167920567c166db75 x64/node.exp -dfb5a231905da844279bf86984813440e152becf x64/node.lib -d5c5e26395e5c714efd4855505dcf0a31c57e22e x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.3.md b/doc/blog/release/v0.9.3.md deleted file mode 100644 index 47e3140aa..000000000 --- a/doc/blog/release/v0.9.3.md +++ /dev/null @@ -1,87 +0,0 @@ -category: release -version: v0.9.3 -date: Wed Oct 24 10:04:08 PDT 2012 -slug: node-v0.9.3 -title: Node v0.9.3 (Unstable) - -2012.10.24, Version 0.9.3 (Unstable) - -* V8: Upgrade to 3.13.7.4 - -* crypto: Default to buffers instead of binary strings (isaacs, Fedor Indutny) - -* crypto: add getHashes() and getCiphers() (Ben Noordhuis) - -* unix: add custom thread pool, remove libeio (Ben Noordhuis) - -* util: make `inspect()` accept an "options" argument (Nathan Rajlich) - -* https: fix renegotation attack protection (Ben Noordhuis) - -* cluster: make 'listening' handler see actual port (Aaditya Bhatia) - -* windows: use USERPROFILE to get the user's home dir (Bert Belder) - -* path: add platform specific path delimiter (Paul Serby) - -* http: add response.headersSent property (Pavel Lang) - -* child_process: make .fork()'d child auto-exit (Ben Noordhuis) - -* events: add 'removeListener' event (Ben Noordhuis) - -* string_decoder: Add 'end' method, do base64 properly (isaacs) - -* buffer: include encoding value in exception when invalid (Ricky Ng-Adam) - -* http: make http.ServerResponse no longer emit 'end' (isaacs) - -* streams: fix pipe is destructed by 'end' from destination (koichik) - - -Source Code: http://nodejs.org/dist/v0.9.3/node-v0.9.3.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.3/node-v0.9.3.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.3/node-v0.9.3-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.3/x64/node-v0.9.3-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.3/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.3/node-v0.9.3-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.3/node-v0.9.3-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.3/node-v0.9.3-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.3/node-v0.9.3-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.3/ - -Website: http://nodejs.org/docs/v0.9.3/ - -Documentation: http://nodejs.org/docs/v0.9.3/api/ - -Shasums: - -``` -188b3ffacdc4342dc3c34e7ea8374acc3e186df0 node-v0.9.3-darwin-x64.tar.gz -94ae90f06a5bf72bb6efa8053c0beefde21f8bd7 node-v0.9.3-darwin-x86.tar.gz -ccb065fe242f15ffe35ecd7b22db33d11d6a5951 node-v0.9.3-linux-x64.tar.gz -0febfb1c37a3560b0140f7f952042aa4b4712974 node-v0.9.3-linux-x86.tar.gz -4362fdfefa0ed2985045883cea51ab802555c24c node-v0.9.3-sunos-x64.tar.gz -f43b6ce2a5da3bb384f6c115826cd2fea5f4bc2c node-v0.9.3-sunos-x86.tar.gz -ff6a7f8ff1a6d1af299a2702e09eec2cdfef474a node-v0.9.3-x86.msi -d47f953ee97047e1202350db2b11fb880ce2809b node-v0.9.3.pkg -34b7406e1da49bf0f0967e5a084157fdf8735078 node-v0.9.3.tar.gz -d0829f57b8460807cf58b2154b16176ef68189b1 node.exe -76007380d1f5cefd772b5890cd64f409ba85893e node.exp -fbe95014f9f4e2c5a38bc67b75511683f4a17fa9 node.lib -8c405af98ce922bf9bd82d29723aa343f3ca5488 node.pdb -04c1dce1188f4c52adfda0bc8219c478ed6553a8 x64/node-v0.9.3-x64.msi -fe6af3bd1405ecdef826a31a7c1333819aab4f3b x64/node.exe -abc9afb5ac40276346072f85601bd1a9e5135856 x64/node.exp -41622dce275f0f0f740485cca8d86ba3e63c884e x64/node.lib -8c34040ba4aa916d13c8313514cf93f99f5e3e34 x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.4.md b/doc/blog/release/v0.9.4.md deleted file mode 100644 index edefe0dd3..000000000 --- a/doc/blog/release/v0.9.4.md +++ /dev/null @@ -1,97 +0,0 @@ -date: Fri Dec 21 12:30:15 PST 2012 -version: 0.9.4 -category: release -slug: node-v0-9-4-unstable -title: Node v0.9.4 (Unstable) - -2012.12.21, Version 0.9.4 (Unstable) - -* streams: Update all streaming interfaces to use new classes (isaacs) - -* node: remove idle gc (Ben Noordhuis) - -* http: protect against response splitting attacks (Bert Belder) - -* fs: Raise error when null bytes detected in paths (isaacs) - -* fs: fix 'object is not a function' callback errors (Ben Noordhuis) - -* fs: add autoClose=true option to fs.createReadStream (Farid Neshat) - -* process: add getgroups(), setgroups(), initgroups() (Ben Noordhuis) - -* openssl: optimized asm code on x86 and x64 (Bert Belder) - -* crypto: fix leak in GetPeerCertificate (Fedor Indutny) - -* add systemtap support (Jan Wynholds) - -* windows: add ETW and PerfCounters support (Scott Blomquist) - -* windows: fix normalization of UNC paths (Bert Belder) - -* crypto: fix ssl error handling (Sergey Kholodilov) - -* node: remove eio-emul.h (Ben Noordhuis) - -* os: add os.endianness() function (Nathan Rajlich) - -* readline: don't emit "line" events with a trailing 'n' char (Nathan Rajlich) - -* build: add configure option to generate xcode build files (Timothy J Fontaine) - -* build: allow linking against system libuv, cares, http_parser (Stephen Gallagher) - -* typed arrays: add slice() support to ArrayBuffer (Anthony Pesch) - -* debugger: exit and kill child on SIGTERM or SIGHUP (Fedor Indutny) - -* url: url.format escapes delimiters in path and query (J. Lee Coltrane) - - -Source Code: http://nodejs.org/dist/v0.9.4/node-v0.9.4.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.4/node-v0.9.4.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.4/node-v0.9.4-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.4/x64/node-v0.9.4-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.4/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.4/node-v0.9.4-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.4/node-v0.9.4-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.4/node-v0.9.4-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.4/node-v0.9.4-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.4/ - -Website: http://nodejs.org/docs/v0.9.4/ - -Documentation: http://nodejs.org/docs/v0.9.4/api/ - -Shasums: - -``` -7919d5fa63583c9a38a8ade1e977809b53476f7f node-v0.9.4-darwin-x64.tar.gz -82eb2f39c61b14be8a9d2c1b6ba624030ab3ddbe node-v0.9.4-darwin-x86.tar.gz -34cd2f6bed15d4d7d28944575b7098f4500651e2 node-v0.9.4-linux-x64.tar.gz -bf5da5432a5d80343e1d53c57b242283be11c97f node-v0.9.4-linux-x86.tar.gz -6eebcf27a545d598c0ffa8056d7d5c83add5746c node-v0.9.4-sunos-x64.tar.gz -1c2e28389b34a0e51f5ad2a1c09677f2941765b1 node-v0.9.4-sunos-x86.tar.gz -4d7b4dfd150f17dac787400e74fc469b3432f3a2 node-v0.9.4-x86.msi -20ceaafeb6d4ecf5d2f37d3d825d47cc81927dd6 node-v0.9.4.pkg -30b3f8dee0b2ace3d83c200eeffc6f450d3b4366 node-v0.9.4.tar.gz -a5b4304f4a50ac3385577f7833890ca6f44301c0 node.exe -5b960053a6bddfd10cf6408ea1581b7237512248 node.exp -f1aaac71a21e7a0c884211957e5d79bed1deb1d3 node.lib -73016ab15ee7ee6f6363391d3e41a698ed764e65 node.pdb -5a624fc9a5dac85a6f00945ccc2d31d9b8a51499 x64/node-v0.9.4-x64.msi -fe738e969f9b050b7b1675ecf3cda567021e121b x64/node.exe -d32c7ea441ad0d24cd2fd2b4932d2924a95f25ec x64/node.exp -753f7fadc501a1b86d94af23710137f6e93c5cff x64/node.lib -a707ef46e6483f40a30c85c037eeadbf9e5923b8 x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.5.md b/doc/blog/release/v0.9.5.md deleted file mode 100644 index 53632205a..000000000 --- a/doc/blog/release/v0.9.5.md +++ /dev/null @@ -1,82 +0,0 @@ -category: release -version: 0.9.5 -date: Sun Dec 30 01:19:51 UTC 2012 -slug: node-v0-9-5-unstable -title: Node v0.9.5 (Unstable) - -2012.12.30, Version 0.9.5 (Unstable) - -* assert: improve support for new execution contexts (lukebayes) - -* domain: use camelCase instead of snake_case (isaacs) - -* domain: Do not use uncaughtException handler (isaacs) - -* fs: make 'end' work with ReadStream without 'start' (Ben Noordhuis) - -* https: optimize createConnection() (Ryunosuke SATO) - -* buffer: speed up base64 encoding by 20% (Ben Noordhuis) - -* doc: Colorize API stabilitity index headers in docs (Luke Arduini) - -* net: socket.readyState corrections (bentaber) - -* http: Performance enhancements for http under streams2 (isaacs) - -* stream: fix to emit end event on http.ClientResponse (Shigeki Ohtsu) - -* stream: fix event handler leak in readstream pipe and unpipe (Andreas Madsen) - -* build: Support ./configure --tag switch (Maciej Małecki) - -* repl: don't touch `require.cache` (Nathan Rajlich) - -* node: Emit 'exit' event when exiting for an uncaught exception (isaacs) - - -Source Code: http://nodejs.org/dist/v0.9.5/node-v0.9.5.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.5/node-v0.9.5.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.5/node-v0.9.5-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.5/x64/node-v0.9.5-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.5/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.5/node-v0.9.5-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.5/node-v0.9.5-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.5/node-v0.9.5-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.5/node-v0.9.5-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.5/ - -Website: http://nodejs.org/docs/v0.9.5/ - -Documentation: http://nodejs.org/docs/v0.9.5/api/ - -Shasums: - -``` -d44535e086c3f0fe47152b9323189c18a488d995 node-v0.9.5-darwin-x64.tar.gz -b588332e38e3ddd0424b18d14a3c6c65c5cad6f6 node-v0.9.5-darwin-x86.tar.gz -17b07641b59bc56582e68db6bd52c1b41bb06a5e node-v0.9.5-linux-x64.tar.gz -89656e3dc094a6fa4244a03ac85e9b08b7443a50 node-v0.9.5-linux-x86.tar.gz -bf84b80ea80b4cb20767d4b3f276979f0f3d8866 node-v0.9.5-sunos-x64.tar.gz -4f98560e55db63f323b6f75b22538d96b199892c node-v0.9.5-sunos-x86.tar.gz -7ed38be34e5377f45e8906c4d887de262c1925e2 node-v0.9.5-x86.msi -a1f1322fcaa5535ae830f3242bcdd213388357cc node-v0.9.5.tar.gz -94c22b744945e9bc8b3f9fd31991cb6b87f727ce node.exe -e809779c8071abf05650fbb47e207140829dc62c node.exp -cec09944297546185070c809a78931839e3c2695 node.lib -5a3a4f3de4b8bf4209ecc2e6d40418d6a7e8fcac node.pdb -55c986c14a72081757002f8df43272b20f024c57 x64/node-v0.9.5-x64.msi -55514dd925a9b24cb3925f89facbec5efb2a99aa x64/node.exe -920e2d3319eac8a3356023a1cb8c61f139f80398 x64/node.exp -e072006328dacce920e4951596e457e58e6310d0 x64/node.lib -633816d865155148129ca21399e411f1240b2cce x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.6.md b/doc/blog/release/v0.9.6.md deleted file mode 100644 index 21f94563f..000000000 --- a/doc/blog/release/v0.9.6.md +++ /dev/null @@ -1,87 +0,0 @@ -title: Node v0.9.6 (Unstable) -slug: node-v0-9-6-unstable -version: 0.9.6 -category: release -date: Fri Jan 11 11:23:56 PST 2013 - -2013.01.11, Version 0.9.6 (Unstable) - -* V8: update to 3.15.11.5 - -* node: remove ev-emul.h (Ben Noordhuis) - -* path: make basename and extname ignore trailing slashes (Bert Belder) - -* typed arrays: fix sunos signed/unsigned char issue (Ben Noordhuis) - -* child_process: Fix {stdio:'inherit'} regression (Ben Noordhuis) - -* child_process: Fix pipe() from child stdio streams (Maciej Małecki) - -* child_process: make fork() execPath configurable (Bradley Meck) - -* stream: Add readable.push(chunk) method (isaacs) - -* dtrace: x64 ustack helper (Fedor Indutny) - -* repl: fix floating point number parsing (Nirk Niggler) - -* repl: allow overriding builtins (Ben Noordhuis) - -* net: add localAddress and localPort to Socket (James Hight) - -* fs: make pool size coincide with ReadStream bufferSize (Shigeki Ohtsu) - -* typed arrays: implement load and store swizzling (Dean McNamee) - -* windows: fix perfctr crash on XP and 2003 (Scott Blomquist) - -* dgram: fix double implicit bind error (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.9.6/node-v0.9.6.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.6/node-v0.9.6.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.6/node-v0.9.6-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.6/x64/node-v0.9.6-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.6/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.6/node-v0.9.6-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.6/node-v0.9.6-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.6/node-v0.9.6-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.6/node-v0.9.6-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.6/ - -Website: http://nodejs.org/docs/v0.9.6/ - -Documentation: http://nodejs.org/docs/v0.9.6/api/ - -Shasums: - -``` -31ef1e0d875232c85ecde0bc84ddf19cf6cd63f7 node-v0.9.6-darwin-x64.tar.gz -62d5f6f2b39e87eb1f86da0423b6ec45180cd986 node-v0.9.6-darwin-x86.tar.gz -e3cb0989c8262349659424ea2f534c8afe12f93c node-v0.9.6-linux-x64.tar.gz -ff4b68f274a52038fbd04a4ef143e1076ae71db9 node-v0.9.6-linux-x86.tar.gz -59ebb5e5c02c9e40a7a3cc2d8f554f2d722048eb node-v0.9.6-sunos-x64.tar.gz -714b88c5f34bb0adad2d73b6d76fa423d14c29b8 node-v0.9.6-sunos-x86.tar.gz -3ecc617efcae5274c3a1e3452e8fb0646a3e6afc node-v0.9.6-x86.msi -d865d044cc1e9379998aa6c3d34dbe2824e41b5e node-v0.9.6.pkg -650d7c50e29ce7ab428de0617ad315063a53ea1a node-v0.9.6.tar.gz -94b10c6945ec78af6d9b90fc083f97adfa44473f node.exe -0b0eceee083ca9cfdc8c24fbdfe92f7ee25938c2 node.exp -9af3ceee0be869e866b2f516dc2b17690e442739 node.lib -7dfbdf0ac378e67cfa5aff550f057c31f8f92d38 node.pdb -02f27f503a16850a66f7e6fe8732bfa5fcbe311f x64/node-v0.9.6-x64.msi -3f5990602e7268413602dd54a4d019b3330630ae x64/node.exe -836a7be49bd7ed5f1794775d0c20e75f327b067d x64/node.exp -e5e3abed1da31d94525f8731e2d67f0e19b20304 x64/node.lib -b61c1a7a5786a38864943bb3d4c78859d0430d7a x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.7.md b/doc/blog/release/v0.9.7.md deleted file mode 100644 index 7174f59c5..000000000 --- a/doc/blog/release/v0.9.7.md +++ /dev/null @@ -1,81 +0,0 @@ -category: release -version: 0.9.7 -date: Fri Jan 18 11:38:32 PST 2013 -title: Node v0.9.7 (Unstable) -slug: node-v0-9-7-unstable - -2013.01.18, Version 0.9.7 (Unstable) - -* V8: Upgrade to 3.15.11.7 - -* npm: Upgrade to 1.2.2 - -* punycode: Upgrade to 1.2.0 (Mathias Bynens) - -* repl: make built-in modules available by default (Felix Böhm) - -* windows: add support for '_Total' perf counters (Scott Blomquist) - -* cluster: make --prof work for workers (Ben Noordhuis) - -* child_process: do not keep list of sent sockets (Fedor Indutny) - -* tls: Follow RFC6125 more strictly (Fedor Indutny) - -* buffer: floating point read/write improvements (Trevor Norris) - -* TypedArrays: Improve dataview perf without endian param (Dean McNamee) - -* module: assert require() called with a non-empty string (Felix Böhm, James Campos) - -* stdio: Set readable/writable flags properly (isaacs) - -* stream: Properly handle large reads from push-streams (isaacs) - - -Source Code: http://nodejs.org/dist/v0.9.7/node-v0.9.7.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.7/node-v0.9.7.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.7/node-v0.9.7-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.7/x64/node-v0.9.7-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.7/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.7/node-v0.9.7-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.7/node-v0.9.7-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.7/node-v0.9.7-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.7/node-v0.9.7-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.7/ - -Website: http://nodejs.org/docs/v0.9.7/ - -Documentation: http://nodejs.org/docs/v0.9.7/api/ - -Shasums: - -``` -fa5771999205beae787e56bbffa3be3c496dbb3e node-v0.9.7-darwin-x64.tar.gz -3790a0323e82598d9286470a3ca8b079b25d815c node-v0.9.7-darwin-x86.tar.gz -70da0da05a2d76dfba389b413112aa1c31289114 node-v0.9.7-linux-x64.tar.gz -b7448f020820302a6c648744a9ba4b6e1979fbf8 node-v0.9.7-linux-x86.tar.gz -a0148c804c37ecbcfd4039213e469ba2757b6125 node-v0.9.7-sunos-x64.tar.gz -121cd6fe2fbab0ca20644256914433bfa02ca6c4 node-v0.9.7-sunos-x86.tar.gz -8938d57fc9cff896bb13901a43b5cff989785a23 node-v0.9.7-x86.msi -23b86861de7c6111311f869c722431cf84d93761 node-v0.9.7.pkg -527a86ee094f7ed77967eda3dff4b2aff3f29384 node-v0.9.7.tar.gz -5231f327979f900d4ba927f2e63e67635001268c node.exe -6a78465d3f6e34aab82a529839c522abbab715ac node.exp -d814bd0733ba22a3cd9c086d34c68706d6c77663 node.lib -5c9df4dcf16c9baafce9b6982907ada586e878a2 node.pdb -f49f1e0706ef38facba45af75cfdf44678b21f5a x64/node-v0.9.7-x64.msi -13f9ee5c81b89bf77c5bfe46993905de4e3384d7 x64/node.exe -3f9c67381a7f2b3fc2f6c14b66036dde02de2820 x64/node.exp -cac98eebe21aeb05741a2fec6e2c7eaf5bb111a6 x64/node.lib -563932b95c08ebdb923358cd8b68ee17ac7ad781 x64/node.pdb -``` diff --git a/doc/blog/release/v0.9.8.md b/doc/blog/release/v0.9.8.md deleted file mode 100644 index 47d74630b..000000000 --- a/doc/blog/release/v0.9.8.md +++ /dev/null @@ -1,76 +0,0 @@ -category: release -date: Thu Jan 24 10:28:53 PST 2013 -version: 0.9.8 -title: Node v0.9.8 (Unstable) -slug: node-v0-9-8-unstable - -2013.01.24, Version 0.9.8 (Unstable) - -* npm: Upgrade to v1.2.3 - -* V8: Upgrade to 3.15.11.10 - -* streams: Support objects other than Buffers (Jake Verbaten) - -* buffer: remove float write range checks (Trevor Norris) - -* http: close connection on 304/204 responses with chunked encoding (Ben Noordhuis) - -* build: fix build with dtrace support on FreeBSD (Fedor Indutny) - -* console: Support formatting options in trace() (isaacs) - -* domain: empty stack on all exceptions (Dave Olszewski) - -* unix, windows: make uv_*_bind() error codes consistent (Andrius Bentkus) - -* linux: add futimes() fallback (Ben Noordhuis) - - -Source Code: http://nodejs.org/dist/v0.9.8/node-v0.9.8.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.8/node-v0.9.8.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.8/node-v0.9.8-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.8/x64/node-v0.9.8-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.8/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.8/node-v0.9.8-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.8/node-v0.9.8-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.8/node-v0.9.8-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.8/node-v0.9.8-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.8/ - -Website: http://nodejs.org/docs/v0.9.8/ - -Documentation: http://nodejs.org/docs/v0.9.8/api/ - -Shasums: - -``` -30bbd1df69be189afca34d808932f5417986d966 node-v0.9.8-darwin-x64.tar.gz -e9e2e9477836e22a2e8242ddbc73400a2a5fac43 node-v0.9.8-darwin-x86.tar.gz -fddaef3c084121f21d466a29f1117a844761a4a6 node-v0.9.8-linux-arm-pi.tar.gz -0ec573b26722c45abf8db1c865f8169d49244877 node-v0.9.8-linux-x64.tar.gz -b5227fb14eaad8f0c3c4fbc97b30292dcc34046b node-v0.9.8-linux-x86.tar.gz -1d846eba7dc3c02c19d82915bfccba4efb77d54c node-v0.9.8-sunos-x64.tar.gz -e06c6b965d44084ef355d80b10d99f23005bdac7 node-v0.9.8-sunos-x86.tar.gz -4ba7fcefbd0d9cc83427500f4d71fa5ed0e82bb8 node-v0.9.8-x86.msi -c92303e41c45aef6959b6a70285cdd6be30ef0b4 node-v0.9.8.pkg -ce337f1f7baca56954412fbeaa25b4f9ea4c8528 node-v0.9.8.tar.gz -474b4afd7b8696edaf240f1710084c3c7e48a00c node.exe -22044cb9cf46570d9a41cc830eda962e57331da7 node.exp -3b612ca0692f8764dd722092d0ae6e5e2c6ae5fd node.lib -7b6e50f83202781bf827b554957d097f4ae66c46 node.pdb -c67b8047392e591434169c5d367ff2356ae640fd x64/node-v0.9.8-x64.msi -474b4afd7b8696edaf240f1710084c3c7e48a00c x64/node.exe -22044cb9cf46570d9a41cc830eda962e57331da7 x64/node.exp -3b612ca0692f8764dd722092d0ae6e5e2c6ae5fd x64/node.lib -7b6e50f83202781bf827b554957d097f4ae66c46 x64/node.pdb -``` diff --git a/doc/blog/release/version-0-6-11-stable.md b/doc/blog/release/version-0-6-11-stable.md deleted file mode 100644 index 4c19a1499..000000000 --- a/doc/blog/release/version-0-6-11-stable.md +++ /dev/null @@ -1,64 +0,0 @@ -version: 0.6.11 -title: Version 0.6.11 (stable) -author: Isaac Schlueter -date: Fri Feb 17 2012 13:32:55 GMT-0800 (PST) -status: publish -category: release -slug: version-0-6-11-stable - -<p>2012.02.17 Version 0.6.11 (stable) - -</p> -<ul> -<li><p>http: allow multiple WebSocket RFC6455 headers (Einar Otto Stangvik)</p> -</li> -<li><p>http: allow multiple WWW-Authenticate headers (Ben Noordhuis)</p> -</li> -<li><p>windows: support unicode argv and environment variables (Bert Belder)</p> -</li> -<li><p>tls: mitigate session renegotiation attacks (Ben Noordhuis)</p> -</li> -<li><p>tcp, pipe: don't assert on uv_accept() errors (Ben Noordhuis)</p> -</li> -<li><p>tls: Allow establishing secure connection on the existing socket (koichik)</p> -</li> -<li><p>dgram: handle close of dgram socket before DNS lookup completes (Seth Fitzsimmons)</p> -</li> -<li><p>windows: Support half-duplex pipes (Igor Zinkovsky)</p> -</li> -<li><p>build: disable omit-frame-pointer on solaris systems (Dave Pacheco)</p> -</li> -<li><p>debugger: fix --debug-brk (Ben Noordhuis)</p> -</li> -<li><p>net: fix large file downloads failing (koichik)</p> -</li> -<li><p>fs: fix ReadStream failure to read from existing fd (Christopher Jeffrey)</p> -</li> -<li><p>net: destroy socket on DNS error (Stefan Rusu)</p> -</li> -<li><p>dtrace: add missing translator (Dave Pacheco)</p> -</li> -<li><p>unix: don't flush tty on switch to raw mode (Ben Noordhuis)</p> -</li> -<li><p>windows: reset brightness when reverting to default text color (Bert Belder)</p> -</li> -<li><p>npm: update to 1.1.1</p> - -<p>- Update which, fstream, mkdirp, request, and rimraf<br>- Fix #2123 Set path properly for lifecycle scripts on windows<br>- Mark the root as seen, so we don't recurse into it. Fixes #1838. (Martin Cooper)</p> - -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.11/node-v0.6.11.tar.gz">http://nodejs.org/dist/v0.6.11/node-v0.6.11.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.11/node-v0.6.11.msi">http://nodejs.org/dist/v0.6.11/node-v0.6.11.msi</a> - -</p> -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.11/node-v0.6.11.pkg">http://nodejs.org/dist/v0.6.11/node-v0.6.11.pkg</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.11/">http://nodejs.org/docs/v0.6.11/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.11/api/">http://nodejs.org/docs/v0.6.11/api/</a> -</p> diff --git a/doc/blog/release/version-0-6-12-stable.md b/doc/blog/release/version-0-6-12-stable.md deleted file mode 100644 index 73e85eec3..000000000 --- a/doc/blog/release/version-0-6-12-stable.md +++ /dev/null @@ -1,66 +0,0 @@ -version: 0.6.12 -title: Version 0.6.12 (stable) -author: Isaac Schlueter -date: Fri Mar 02 2012 13:22:49 GMT-0800 (PST) -status: publish -category: release -slug: version-0-6-12-stable - -<p>2012.03.02 Version 0.6.12 (stable) - -</p> -<ul> -<li><p>Upgrade V8 to 3.6.6.24</p> -</li> -<li><p>dtrace ustack helper improvements (Dave Pacheco)</p> -</li> -<li><p>API Documentation refactor (isaacs)</p> -</li> -<li><p>#2827 net: fix race write() before and after connect() (koichik)</p> -</li> -<li><p>#2554 #2567 throw if fs args for 'start' or 'end' are strings (AJ ONeal)</p> -</li> -<li><p>punycode: Update to v1.0.0 (Mathias Bynens)</p> -</li> -<li><p>Make a fat binary for the OS X pkg (isaacs)</p> -</li> -<li><p>Fix hang on accessing process.stdin (isaacs)</p> -</li> -<li><p>repl: make tab completion work on non-objects (Nathan Rajlich)</p> -</li> -<li><p>Fix fs.watch on OS X (Ben Noordhuis)</p> -</li> -<li><p>Fix #2515 nested setTimeouts cause premature process exit (Ben Noordhuis)</p> -</li> -<li><p>windows: fix time conversion in stat (Igor Zinkovsky)</p> -</li> -<li><p>windows: fs: handle EOF in read (Brandon Philips)</p> -</li> -<li><p>windows: avoid IOCP short-circuit on non-ifs lsps (Igor Zinkovsky)</p> -</li> -<li><p>Upgrade npm to 1.1.4 (isaacs)</p> -<p> -- windows fixes<br> -- Bundle nested bundleDependencies properly<br> -- install: support --save with url install targets<br> -- shrinkwrap: behave properly with url-installed modules<br> -- support installing uncompressed tars or single file modules from urls etc.<br> -- don't run make clean on rebuild<br> -- support HTTPS-over-HTTP proxy tunneling<br> -</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.12/node-v0.6.12.tar.gz">http://nodejs.org/dist/v0.6.12/node-v0.6.12.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.12/node-v0.6.12.msi">http://nodejs.org/dist/v0.6.12/node-v0.6.12.msi</a> - -</p> -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.12/node-v0.6.12.pkg">http://nodejs.org/dist/v0.6.12/node-v0.6.12.pkg</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.12/">http://nodejs.org/docs/v0.6.12/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.12/api/">http://nodejs.org/docs/v0.6.12/api/</a> -</p> diff --git a/doc/blog/release/version-0-6-13-stable.md b/doc/blog/release/version-0-6-13-stable.md deleted file mode 100644 index 356c0ae7d..000000000 --- a/doc/blog/release/version-0-6-13-stable.md +++ /dev/null @@ -1,50 +0,0 @@ -version: 0.6.13 -title: Version 0.6.13 (stable) -author: Isaac Schlueter -date: Thu Mar 15 2012 10:37:02 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-6-13-stable - -<p>2012.03.15 Version 0.6.13 (stable) - -</p> -<ul> -<li><p>Windows: Many libuv test fixes (Bert Belder)</p> -</li> -<li><p>Windows: avoid uv_guess_handle crash in when fd < 0 (Bert Belder)</p> -</li> -<li><p>Map EBUSY and ENOTEMPTY errors (Bert Belder)</p> -</li> -<li><p>Windows: include syscall in fs errors (Bert Belder)</p> -</li> -<li><p>Fix fs.watch ENOSYS on Linux kernel version mismatch (Ben Noordhuis)</p> -</li> -<li><p>Update npm to 1.1.9</p> -<p> -- upgrade node-gyp to 0.3.5 (Nathan Rajlich)<br> -- Fix isaacs/npm#2249 Add cache-max and cache-min configs<br> -- Properly redirect across https/http registry requests<br> -- log config usage if undefined key in set function (Kris Windham)<br> -- Add support for os/cpu fields in package.json (Adam Blackburn)<br> -- Automatically node-gyp packages containing a binding.gyp<br> -- Fix failures unpacking in UNC shares<br> -- Never create un-listable directories<br> -- Handle cases where an optionalDependency fails to build -</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.13/node-v0.6.13.tar.gz">http://nodejs.org/dist/v0.6.13/node-v0.6.13.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.13/node-v0.6.13.msi">http://nodejs.org/dist/v0.6.13/node-v0.6.13.msi</a> - -</p> -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.6.13/node-v0.6.13.pkg">http://nodejs.org/dist/v0.6.13/node-v0.6.13.pkg</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.13/">http://nodejs.org/docs/v0.6.13/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.13/api/">http://nodejs.org/docs/v0.6.13/api/</a> -</p> diff --git a/doc/blog/release/version-0-6-14-stable.md b/doc/blog/release/version-0-6-14-stable.md deleted file mode 100644 index 96877a2aa..000000000 --- a/doc/blog/release/version-0-6-14-stable.md +++ /dev/null @@ -1,55 +0,0 @@ -version: 0.6.14 -title: Version 0.6.14 (stable) -author: Isaac Schlueter -date: Fri Mar 23 2012 11:22:22 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-6-14-stable - -<p>2012.03.22 Version 0.6.14 (stable) - -</p> -<ul> -<li><p>net: don't crash when queued write fails (Igor Zinkovsky)</p> -</li> -<li><p>sunos: fix EMFILE on process.memoryUsage() (Bryan Cantrill)</p> -</li> -<li><p>crypto: fix compile-time error with openssl 0.9.7e (Ben Noordhuis)</p> -</li> -<li><p>unix: ignore ECONNABORTED errors from accept() (Ben Noordhuis)</p> -</li> -<li><p>Add UV_ENOSPC and mappings to it (Bert Belder)</p> -</li> -<li><p>http-parser: Fix response body is not read (koichik)</p> -</li> -<li><p>Upgrade npm to 1.1.12</p> -<p> -- upgrade node-gyp to 0.3.7<br> -- work around AV-locked directories on Windows<br> -- Fix isaacs/npm#2293 Don't try to 'uninstall' /<br> -- Exclude symbolic links from packages.<br> -- Fix isaacs/npm#2275 Spurious 'unresolvable cycle' error.<br> -- Exclude/include dot files as if they were normal files -</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.14/node-v0.6.14.tar.gz">http://nodejs.org/dist/v0.6.14/node-v0.6.14.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.14/node-v0.6.14.msi">http://nodejs.org/dist/v0.6.14/node-v0.6.14.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.6.14/x64/">http://nodejs.org/dist/v0.6.14/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.6.14/node-v0.6.14.pkg">http://nodejs.org/dist/v0.6.14/node-v0.6.14.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.6.14/">http://nodejs.org/dist/v0.6.14/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.14/">http://nodejs.org/docs/v0.6.14/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.14/api/">http://nodejs.org/docs/v0.6.14/api/</a> -</p> diff --git a/doc/blog/release/version-0-6-15-stable.md b/doc/blog/release/version-0-6-15-stable.md deleted file mode 100644 index 5fa6bcf58..000000000 --- a/doc/blog/release/version-0-6-15-stable.md +++ /dev/null @@ -1,53 +0,0 @@ -version: 0.6.15 -title: Version 0.6.15 (stable) -author: Isaac Schlueter -date: Mon Apr 09 2012 10:39:18 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-6-15-stable - -<p>2012.04.09 Version 0.6.15 (stable) - -</p> -<ul> -<li><p>Update npm to 1.1.16</p> -</li> -<li><p>Show licenses in binary installers.</p> -</li> -<li><p>unix: add uv_fs_read64, uv_fs_write64 and uv_fs_ftruncate64 (Ben Noordhuis)</p> -</li> -<li><p>add 64bit offset fs functions (Igor Zinkovsky)</p> -</li> -<li><p>windows: don't report ENOTSOCK when attempting to bind an udp handle twice (Bert Belder)</p> -</li> -<li><p>windows: backport pipe-connect-to-file fixes from master (Bert Belder)</p> -</li> -<li><p>windows: never call fs event callbacks after closing the watcher (Bert Belder)</p> -</li> -<li><p>fs.readFile: don't make the callback before the fd is closed (Bert Belder)</p> -</li> -<li><p>windows: use 64bit offsets for uv_fs apis (Igor Zinkovsky)</p> -</li> -<li><p>Fix #2061: segmentation fault on OS X due to stat size mismatch (Ben Noordhuis)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.15/node-v0.6.15.tar.gz">http://nodejs.org/dist/v0.6.15/node-v0.6.15.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.15/node-v0.6.15.msi">http://nodejs.org/dist/v0.6.15/node-v0.6.15.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.6.15/x64/">http://nodejs.org/dist/v0.6.15/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.6.15/node-v0.6.15.pkg">http://nodejs.org/dist/v0.6.15/node-v0.6.15.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.6.15/">http://nodejs.org/dist/v0.6.15/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.15/">http://nodejs.org/docs/v0.6.15/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.15/api/">http://nodejs.org/docs/v0.6.15/api/</a> -</p> diff --git a/doc/blog/release/version-0-6-16-stable.md b/doc/blog/release/version-0-6-16-stable.md deleted file mode 100644 index 051a23af1..000000000 --- a/doc/blog/release/version-0-6-16-stable.md +++ /dev/null @@ -1,59 +0,0 @@ -version: 0.6.16 -title: Version 0.6.16 (stable) -author: Isaac Schlueter -date: Mon Apr 30 2012 11:13:50 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-6-16-stable - -<p>2012.04.30 Version 0.6.16 (stable) - -</p> -<ul> -<li><p>Upgrade V8 to 3.6.6.25</p> -</li> -<li><p>Upgrade npm to 1.1.18</p> -</li> -<li><p>Windows: add mappings for UV_ENOENT (Bert Belder)</p> -</li> -<li><p>linux: add IN_MOVE_SELF to inotify event mask (Ben Noordhuis)</p> -</li> -<li><p>unix: call pipe handle connection cb on accept() error (Ben Noordhuis)</p> -</li> -<li><p>unix: handle EWOULDBLOCK (Ben Noordhuis)</p> -</li> -<li><p>map EWOULDBLOCK to UV_EAGAIN (Ben Noordhuis)</p> -</li> -<li><p>Map ENOMEM to UV_ENOMEM (isaacs)</p> -</li> -<li><p>Child process: support the <code>gid</code> and <code>uid</code> options (Bert Belder)</p> -</li> -<li><p>test: cluster: add worker death event test (Ben Noordhuis)</p> -</li> -<li><p>typo in node_http_parser (isaacs)</p> -</li> -<li><p>http_parser: Eat CRLF between requests, even on connection:close. (Ben Noordhuis)</p> -</li> -<li><p>don't check return value of unsetenv (Ben Noordhuis)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.16/node-v0.6.16.tar.gz">http://nodejs.org/dist/v0.6.16/node-v0.6.16.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.16/node-v0.6.16.msi">http://nodejs.org/dist/v0.6.16/node-v0.6.16.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.6.16/x64/">http://nodejs.org/dist/v0.6.16/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.6.16/node-v0.6.16.pkg">http://nodejs.org/dist/v0.6.16/node-v0.6.16.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.6.16/">http://nodejs.org/dist/v0.6.16/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.16/">http://nodejs.org/docs/v0.6.16/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.16/api/">http://nodejs.org/docs/v0.6.16/api/</a> -</p> diff --git a/doc/blog/release/version-0-6-17-stable.md b/doc/blog/release/version-0-6-17-stable.md deleted file mode 100644 index 321244354..000000000 --- a/doc/blog/release/version-0-6-17-stable.md +++ /dev/null @@ -1,47 +0,0 @@ -version: 0.6.17 -title: Version 0.6.17 (stable) -author: Isaac Schlueter -date: Fri May 04 2012 13:33:12 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-6-17-stable - -<p>2012.05.04 Version 0.6.17 (stable) - -</p> -<ul> -<li><p>Upgrade npm to 1.1.21</p> -</li> -<li><p>uv: Add support for EROFS errors (Ben Noordhuis, Maciej Małecki)</p> -</li> -<li><p>uv: Add support for EIO and ENOSPC errors (Fedor Indutny)</p> -</li> -<li><p>windows: Add support for EXDEV errors (Bert Belder)</p> -</li> -<li><p>http: Fix client memory leaks (isaacs, Vincent Voyer)</p> -</li> -<li><p>fs: fix file descriptor leak in sync functions (Ben Noordhuis)</p> -</li> -<li><p>fs: fix ReadStream / WriteStream double close bug (Ben Noordhuis)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.17/node-v0.6.17.tar.gz">http://nodejs.org/dist/v0.6.17/node-v0.6.17.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.17/node-v0.6.17.msi">http://nodejs.org/dist/v0.6.17/node-v0.6.17.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.6.17/x64/">http://nodejs.org/dist/v0.6.17/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.6.17/node-v0.6.17.pkg">http://nodejs.org/dist/v0.6.17/node-v0.6.17.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.6.17/">http://nodejs.org/dist/v0.6.17/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.17/">http://nodejs.org/docs/v0.6.17/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.17/api/">http://nodejs.org/docs/v0.6.17/api/</a> -</p> diff --git a/doc/blog/release/version-0-6-18-stable.md b/doc/blog/release/version-0-6-18-stable.md deleted file mode 100644 index 13714d9c2..000000000 --- a/doc/blog/release/version-0-6-18-stable.md +++ /dev/null @@ -1,59 +0,0 @@ -version: 0.6.18 -title: Version 0.6.18 (stable) -author: Isaac Schlueter -date: Tue May 15 2012 10:06:13 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-6-18-stable - -<p>2012.05.15 Version 0.6.18 (stable) - -</p> -<ul> -<li><p>windows: skip GetFileAttributes call when opening a file (Bert Belder)</p> -</li> -<li><p>crypto: add PKCS12/PFX support (Sambasiva Suda)</p> -</li> -<li><p>#3240: child_process: delete NODE_CHANNEL_FD from env in spawn (Ben Noordhuis)</p> -</li> -<li><p>windows: add test for path.normalize with UNC paths (Bert Belder)</p> -</li> -<li><p>windows: make path.normalize convert all slashes to backslashes (Bert Belder)</p> -</li> -<li><p>fs: Automatically close FSWatcher on error (Bert Belder)</p> -</li> -<li><p>#3258: fs.ReadStream.pause() emits duplicate data event (koichik)</p> -</li> -<li><p>pipe_wrap: don't assert() on pipe accept errors (Ben Noordhuis)</p> -</li> -<li><p>Better exception output for module load and process.nextTick (Felix Geisendörfer)</p> -</li> -<li><p>zlib: fix error reporting (Ben Noordhuis)</p> -</li> -<li><p>http: Don't destroy on timeout (isaacs)</p> -</li> -<li><p>#3231: http: Don't try to emit error on a null'ed req object (isaacs)</p> -</li> -<li><p>#3236: http: Refactor ClientRequest.onSocket (isaacs)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.6.18/node-v0.6.18.tar.gz">http://nodejs.org/dist/v0.6.18/node-v0.6.18.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.6.18/node-v0.6.18.msi">http://nodejs.org/dist/v0.6.18/node-v0.6.18.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.6.18/x64/">http://nodejs.org/dist/v0.6.18/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.6.18/node-v0.6.18.pkg">http://nodejs.org/dist/v0.6.18/node-v0.6.18.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.6.18/">http://nodejs.org/dist/v0.6.18/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.6.18/">http://nodejs.org/docs/v0.6.18/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.6.18/api/">http://nodejs.org/docs/v0.6.18/api/</a> -</p> diff --git a/doc/blog/release/version-0-7-10-unstable.md b/doc/blog/release/version-0-7-10-unstable.md deleted file mode 100644 index 7fe8a4244..000000000 --- a/doc/blog/release/version-0-7-10-unstable.md +++ /dev/null @@ -1,86 +0,0 @@ -version: 0.7.10 -title: Version 0.7.10 (unstable) -author: Isaac Schlueter -date: Mon Jun 11 2012 09:00:25 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-7-10-unstable - -<p>2012.06.11, Version 0.7.10 (unstable) - -</p> -<p>This is the second-to-last release on the 0.7 branch. Version 0.8.0 -will be released some time next week. As other even-numbered Node -releases before it, the v0.8.x releases will maintain API and binary -compatibility. - -</p> -<p>The major changes are detailed in -<a href="https://github.com/joyent/node/wiki/API-changes-between-v0.6-and-v0.8">https://github.com/joyent/node/wiki/API-changes-between-v0.6-and-v0.8</a> - -</p> -<p>Please try out this release. There will be very few changes between -this and the v0.8.x release family. This is the last chance to comment -on the API before it is locked down for stability. - - -</p> -<ul> -<li><p>Roll V8 back to 3.9.24.31</p> -</li> -<li><p>build: x64 target should always pass -m64 (Robert Mustacchi)</p> -</li> -<li><p>add NODE_EXTERN to node::Start (Joel Brandt)</p> -</li> -<li><p>repl: Warn about running npm commands (isaacs)</p> -</li> -<li><p>slab_allocator: fix crash in dtor if V8 is dead (Ben Noordhuis)</p> -</li> -<li><p>slab_allocator: fix leak of Persistent handles (Shigeki Ohtsu)</p> -</li> -<li><p>windows/msi: add node.js prompt to startmenu (Jeroen Janssen)</p> -</li> -<li><p>windows/msi: fix adding node to PATH (Jeroen Janssen)</p> -</li> -<li><p>windows/msi: add start menu links when installing (Jeroen Janssen)</p> -</li> -<li><p>windows: don't install x64 version into the 'program files (x86)' folder (Matt Gollob)</p> -</li> -<li><p>domain: Fix #3379 domain.intercept no longer passes error arg to cb (Marc Harter)</p> -</li> -<li><p>fs: make callbacks run in global context (Ben Noordhuis)</p> -</li> -<li><p>fs: enable fs.realpath on windows (isaacs)</p> -</li> -<li><p>child_process: expose UV_PROCESS_DETACHED as options.detached (Charlie McConnell)</p> -</li> -<li><p>child_process: new stdio API for .spawn() method (Fedor Indutny)</p> -</li> -<li><p>child_process: spawn().ref() and spawn().unref() (Fedor Indutny)</p> -</li> -<li><p>Upgrade npm to 1.1.25</p> -</li> -<ul><li>Enable npm link on windows</li> -<li>Properly remove sh-shim on Windows</li> -<li>Abstract out registry client and logger</li></ul> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.7.10/node-v0.7.10.tar.gz">http://nodejs.org/dist/v0.7.10/node-v0.7.10.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.10/node-v0.7.10.msi">http://nodejs.org/dist/v0.7.10/node-v0.7.10.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.7.10/x64/">http://nodejs.org/dist/v0.7.10/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.7.10/node-v0.7.10.pkg">http://nodejs.org/dist/v0.7.10/node-v0.7.10.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.7.10/">http://nodejs.org/dist/v0.7.10/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.7.10/">http://nodejs.org/docs/v0.7.10/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.10/api/">http://nodejs.org/docs/v0.7.10/api/</a> -</p> diff --git a/doc/blog/release/version-0-7-11-unstable.md b/doc/blog/release/version-0-7-11-unstable.md deleted file mode 100644 index 8e5373289..000000000 --- a/doc/blog/release/version-0-7-11-unstable.md +++ /dev/null @@ -1,80 +0,0 @@ -version: 0.7.11 -title: Version 0.7.11 (unstable) -author: Isaac Schlueter -date: Fri Jun 15 2012 12:45:20 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-7-11-unstable - -<p>This is the most stable 0.7 release yet. Please try it out. - -</p> -<p>Version 0.8 will be out very soon. You can follow the remaining issues -on the github issue tracker. - -</p> -<p><a href="https://github.com/joyent/node/issues?milestone=10&state=open">https://github.com/joyent/node/issues?milestone=10&state=open</a> - -</p> -<p>2012.06.15, Version 0.7.11 (unstable) - -</p> -<ul> -<li><p>V8: Upgrade to v3.11.10</p> -</li> -<li><p>npm: Upgrade to 1.1.26</p> -</li> -<li><p>doc: Improve cross-linking in API docs markdown (Ben Kelly)</p> -</li> -<li><p>Fix #3425: removeAllListeners should delete array (Reid Burke)</p> -</li> -<li><p>cluster: don't silently drop messages when the write queue gets big (Bert Belder)</p> -</li> -<li><p>Add Buffer.concat method (isaacs)</p> -</li> -<li><p>windows: make symlinks tolerant to forward slashes (Bert Belder)</p> -</li> -<li><p>build: Add node.d and node.1 to installer (isaacs)</p> -</li> -<li><p>cluster: rename worker.unqiueID to worker.id (Andreas Madsen)</p> -</li> -<li><p>Windows: Enable ETW events on Windows for existing DTrace probes. (Igor Zinkovsky)</p> -</li> -<li><p>test: bundle node-weak in test/gc so that it doesn't need to be downloaded (Nathan Rajlich)</p> -</li> -<li><p>Make many tests pass on Windows (Bert Belder)</p> -</li> -<li><p>Fix #3388 Support listening on file descriptors (isaacs)</p> -</li> -<li><p>Fix #3407 Add os.tmpDir() (isaacs)</p> -</li> -<li><p>Unbreak the snapshotted build on Windows (Bert Belder)</p> -</li> -<li><p>Clean up child_process.kill throws (Bert Belder)</p> -</li> -<li><p>crypto: make cipher/decipher accept buffer args (Ben Noordhuis)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.7.11/node-v0.7.11.tar.gz">http://nodejs.org/dist/v0.7.11/node-v0.7.11.tar.gz</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.7.11/node-v0.7.11.pkg">http://nodejs.org/dist/v0.7.11/node-v0.7.11.pkg</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.11/node-v0.7.11-x86.msi">http://nodejs.org/dist/v0.7.11/node-v0.7.11-x86.msi</a> - -</p> -<p>Windows x64 Installer: <a href="http://nodejs.org/dist/v0.7.11/node-v0.7.11-x64.msi">http://nodejs.org/dist/v0.7.11/node-v0.7.11-x64.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.7.11/x64/">http://nodejs.org/dist/v0.7.11/x64/</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.7.11/">http://nodejs.org/dist/v0.7.11/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.7.11/">http://nodejs.org/docs/v0.7.11/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.11/api/">http://nodejs.org/docs/v0.7.11/api/</a> -</p> diff --git a/doc/blog/release/version-0-7-12.md b/doc/blog/release/version-0-7-12.md deleted file mode 100644 index 15514fa5c..000000000 --- a/doc/blog/release/version-0-7-12.md +++ /dev/null @@ -1,56 +0,0 @@ -version: 0.7.12 -title: Version 0.7.12 -author: Isaac Schlueter -date: Tue Jun 19 2012 16:31:09 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-7-12 - -<p>2012.06.19, Version 0.7.12 (unstable) </p> -<p>This is the last release on the 0.7 branch. Version 0.8.0 will be released some time later this week, barring any major problems. </p> -<p>As with other even-numbered Node releases before it, the v0.8.x releases will maintain API and binary compatibility. </p> -<p>The major changes between v0.6 and v0.8 are detailed in <a href="https://github.com/joyent/node/wiki/API-changes-between-v0.6-and-v0.8">https://github.com/joyent/node/wiki/API-changes-between-v0.6-and-v0.8</a> </p> -<p>Please try out this release. There will be very virtually no changes between this and the v0.8.x release family. This is the last chance to comment before it is locked down for stability. The API is effectively frozen now. </p> -<p>This version adds backwards-compatible shims for binary addons that use libeio and libev directly. If you find that binary modules that could compile on v0.6 can not compile on this version, please let us know. Note that libev is officially deprecated in v0.8, and will be removed in v0.9. You should be porting your modules to use libuv as soon as possible. </p> -<p>V8 is on 3.11.10 currently, and will remain on the V8 3.11.x branch for the duration of Node v0.8.x. </p> -<ul> <li><p>npm: Upgrade to 1.1.30<br> - Improved 'npm init'<br> - Fix the 'cb never called' error from 'oudated' and 'update'<br> - Add --save-bundle|-B config<br> - Fix isaacs/npm#2465: Make npm script and windows shims cygwin-aware<br> - Fix isaacs/npm#2452 Use --save(-dev|-optional) in npm rm<br> - <code>logstream</code> option to replace removed <code>logfd</code> (Rod Vagg)<br> - Read default descriptions from README.md files </p> - </li> <li><p>Shims to support deprecated <code>ev_*</code> and <code>eio_*</code> methods (Ben Noordhuis)</p> - </li> <li><p>#3118 net.Socket: Delay pause/resume until after connect (isaacs)</p> - </li> <li><p>#3465 Add ./configure --no-ifaddrs flag (isaacs)</p> - </li> <li><p>child_process: add .stdin stream to forks (Fedor Indutny)</p> - </li> <li><p>build: fix <code>make install DESTDIR=/path</code> (Ben Noordhuis)</p> - </li> <li><p>tls: fix off-by-one error in renegotiation check (Ben Noordhuis)</p> - </li> <li><p>crypto: Fix diffie-hellman key generation UTF-8 errors (Fedor Indutny)</p> - </li> <li><p>node: change the constructor name of process from EventEmitter to process (Andreas Madsen)</p> - </li> <li><p>net: Prevent property access throws during close (Reid Burke)</p> - </li> <li><p>querystring: improved speed and code cleanup (Felix Böhm)</p> - </li> <li><p>sunos: fix assertion errors breaking fs.watch() (Fedor Indutny)</p> - </li> <li><p>unix: stat: detect sub-second changes (Ben Noordhuis)</p> - </li> <li><p>add stat() based file watcher (Ben Noordhuis)</p> - </li> </ul> <p>Source Code: <a href="http://nodejs.org/dist/v0.7.12/node-v0.7.12.tar.gz">http://nodejs.org/dist/v0.7.12/node-v0.7.12.tar.gz</a> </p> - <p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.7.12/node-v0.7.12.pkg">http://nodejs.org/dist/v0.7.12/node-v0.7.12.pkg</a> </p> - <p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.12/node-v0.7.12-x86.msi">http://nodejs.org/dist/v0.7.12/node-v0.7.12-x86.msi</a> </p> - <p>Windows x64 Installer: <a href="http://nodejs.org/dist/v0.7.12/x64/node-v0.7.12-x64.msi">http://nodejs.org/dist/v0.7.12/x64/node-v0.7.12-x64.msi</a> </p> - <p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.7.12/x64/">http://nodejs.org/dist/v0.7.12/x64/</a> </p> - <p>Other release files: <a href="http://nodejs.org/dist/v0.7.12/">http://nodejs.org/dist/v0.7.12/</a> </p> - <p>Website: <a href="http://nodejs.org/docs/v0.7.12/">http://nodejs.org/docs/v0.7.12/</a> </p> - <p>Documentation: <a href="http://nodejs.org/docs/v0.7.12/api/">http://nodejs.org/docs/v0.7.12/api/</a> </p> - -<h2>Shasums</h2> - -<pre>ded6a2197b1149b594eb45fea921e8538ba442aa blog.html -dfabff0923d4b4f1d53bd9831514c1ac8c4b1876 email.md -be313d35511e6d7e43cae5fa2b18f3e0d2275ba1 node-v0.7.12-x86.msi -8f7ba0c8283e3863de32fd5c034f5b599c78f830 node-v0.7.12.pkg -cb570abacbf4eb7e23c3d2620d00dd3080d9c19d node-v0.7.12.tar.gz -e13a6edfcba1c67ffe794982dd20a222ce8ce40f node.exe -20906ad76a43eca52795b2a089654a105e11c1e6 node.exp -acbcbb87b6f7f2af34a3ed0abe6131d9e7a237af node.lib -4013d5b25fe36ae4245433b972818686cd9a2205 node.pdb -6c0a7a2e8ee360e2800156293fb2f6a5c1a57382 npm-1.1.30.tgz -9d23e42e8260fa20001d5618d2583a62792bf63f npm-1.1.30.zip -840157b2d6f7389ba70b07fc9ddc048b92c501cc x64/node-v0.7.12-x64.msi -862d42706c21ea83bf73cd827101f0fe598b0cf7 x64/node.exe -de0af95fac083762f99c875f91bab830dc030f71 x64/node.exp -3122bd886dfb96f3b41846cef0bdd7e97326044a x64/node.lib -e0fa4e42cd19cadf8179e492ca606b7232bbc018 x64/node.pdb</pre> diff --git a/doc/blog/release/version-0-7-4-unstable.md b/doc/blog/release/version-0-7-4-unstable.md deleted file mode 100644 index 38d6615c0..000000000 --- a/doc/blog/release/version-0-7-4-unstable.md +++ /dev/null @@ -1,50 +0,0 @@ -version: 0.7.4 -title: Node v0.7.4 (unstable) -author: Isaac Schlueter -date: Wed Feb 15 2012 11:38:35 GMT-0800 (PST) -status: publish -category: release -slug: version-0-7-4-unstable - -<p>2012.02.14, Version 0.7.4 (unstable) - -</p> -<ul> -<li><p>Upgrade V8 to 3.9.5</p> -</li> -<li><p>Upgrade npm to 1.1.1</p> -</li> -<li><p>build: Detect host_arch better (Karl Skomski)</p> -</li> -<li><p>debugger: export <code>debug_port</code> to <code>process</code> (Fedor Indutny)</p> -</li> -<li><p>api docs: CSS bug fixes (isaacs)</p> -</li> -<li><p>build: use -fPIC for native addons on UNIX (Nathan Rajlich)</p> -</li> -<li><p>Re-add top-level v8::Locker (Marcel Laverdet)</p> -</li> -<li><p>Move images out of the dist tarballs (isaacs)</p> -</li> -<li><p>libuv: Remove uv_export and uv_import (Ben Noordhuis)</p> -</li> -<li><p>build: Support x64 build on Windows (Igor Zinkovsky)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.7.4/node-v0.7.4.tar.gz">http://nodejs.org/dist/v0.7.4/node-v0.7.4.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.4/node-v0.7.4.msi">http://nodejs.org/dist/v0.7.4/node-v0.7.4.msi</a> - -</p> -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.7.4/node-v0.7.4.pkg">http://nodejs.org/dist/v0.7.4/node-v0.7.4.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.7.4/">http://nodejs.org/dist/v0.7.4/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.7.4/">http://nodejs.org/docs/v0.7.4/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.4/api/">http://nodejs.org/docs/v0.7.4/api/</a> -</p> diff --git a/doc/blog/release/version-0-7-5-unstable.md b/doc/blog/release/version-0-7-5-unstable.md deleted file mode 100644 index 88bd70778..000000000 --- a/doc/blog/release/version-0-7-5-unstable.md +++ /dev/null @@ -1,62 +0,0 @@ -version: 0.7.5 -title: Version 0.7.5 (unstable) -author: Isaac Schlueter -date: Thu Feb 23 2012 14:45:21 GMT-0800 (PST) -status: publish -category: release -slug: version-0-7-5-unstable - -<p>2012.02.23, Version 0.7.5 (unstable) - -</p> -<ul> -<li><p>startup speed improvements (Maciej Małecki)</p> -</li> -<li><p>crypto: add function getDiffieHellman() (Tomasz Buchert)</p> -</li> -<li><p>buffer: support decoding of URL-safe base64 (Ben Noordhuis)</p> -</li> -<li><p>Make QueryString.parse() even faster (Brian White)</p> -</li> -<li><p>url: decode url entities in auth section (Ben Noordhuis)</p> -</li> -<li><p>http: support PURGE request method (Ben Noordhuis)</p> -</li> -<li><p>http: Generate Date headers on responses (Mark Nottingham)</p> -</li> -<li><p>Fix #2762: Add callback to close function. (Mikeal Rogers)</p> -</li> -<li><p>dgram: fix out-of-bound memory read (Ben Noordhuis)</p> -</li> -<li><p>repl: add automatic loading of built-in libs (Brandon Benvie)</p> -</li> -<li><p>repl: remove double calls where possible (Fedor Indutny)</p> -</li> -<li><p>Readline improvements. Related: #2737 #2756 (Colton Baker)</p> -</li> -<li><p>build: disable -fomit-frame-pointer on solaris (Dave Pacheco)</p> -</li> -<li><p>build: arch detection improvements (Nathan Rajlich)</p> -</li> -<li><p>build: Make a fat binary for the OS X <code>make pkg</code>. (Nathan Rajlich)</p> -</li> -<li><p>jslint src/ and lib/ on 'make test' (isaacs)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.7.5/node-v0.7.5.tar.gz">http://nodejs.org/dist/v0.7.5/node-v0.7.5.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.5/node-v0.7.5.msi">http://nodejs.org/dist/v0.7.5/node-v0.7.5.msi</a> - -</p> -<p>Macintosh Installer: <a href="http://nodejs.org/dist/v0.7.5/node-v0.7.5.pkg">http://nodejs.org/dist/v0.7.5/node-v0.7.5.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.7.5/">http://nodejs.org/dist/v0.7.5/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.7.5/">http://nodejs.org/docs/v0.7.5/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.5/api/">http://nodejs.org/docs/v0.7.5/api/</a> -</p> diff --git a/doc/blog/release/version-0-7-6-unstable.md b/doc/blog/release/version-0-7-6-unstable.md deleted file mode 100644 index 1bac491e6..000000000 --- a/doc/blog/release/version-0-7-6-unstable.md +++ /dev/null @@ -1,72 +0,0 @@ -version: 0.7.6 -title: Version 0.7.6 (unstable) -author: Isaac Schlueter -date: Tue Mar 13 2012 14:12:30 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-7-6-unstable - -<p>2012.03.13, Version 0.7.6 (unstable) - -</p> -<ul> -<li><p>Upgrade v8 to 3.9.17</p> -</li> -<li><p>Upgrade npm to 1.1.8</p> -<p> -- Add support for os/cpu fields in package.json (Adam Blackburn)<br> -- Automatically node-gyp packages containing a binding.gyp<br> -- Fix failures unpacking in UNC shares<br> -- Never create un-listable directories<br> -- Handle cases where an optionalDependency fails to build<br> -</p> -</li> -<li><p>events: newListener emit correct fn when using 'once' (Roly Fentanes)</p> -</li> -<li><p>url: Ignore empty port component (Łukasz Walukiewicz)</p> -</li> -<li><p>module: replace 'children' array (isaacs)</p> -</li> -<li><p>tls: parse multiple values of a key in ssl certificate (Sambasiva Suda)</p> -</li> -<li><p>cluster: support passing of named pipes (Ben Noordhuis)</p> -</li> -<li><p>Windows: include syscall in fs errors (Bert Belder)</p> -</li> -<li><p>http: #2888 Emit end event only once (Igor Zinkovsky)</p> -</li> -<li><p>readline: add multiline support (Rlidwka)</p> -</li> -<li><p>process: add <code>process.hrtime()</code> (Nathan Rajlich)</p> -</li> -<li><p>net, http, https: add localAddress option (Dmitry Nizovtsev)</p> -</li> -<li><p>addon improvements (Nathan Rajlich)</p> -</li> -<li><p>build improvements (Ben Noordhuis, Sadique Ali, T.C. Hollingsworth, Nathan Rajlich)</p> -</li> -<li><p>add support for "SEARCH" request methods (Nathan Rajlich)</p> -</li> -<li><p>expose the zlib and http_parser version in process.versions (Nathan Rajlich)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.7.6/node-v0.7.6.tar.gz">http://nodejs.org/dist/v0.7.6/node-v0.7.6.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.6/node-v0.7.6.msi">http://nodejs.org/dist/v0.7.6/node-v0.7.6.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.7.6/x64/">http://nodejs.org/dist/v0.7.6/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.7.6/node-v0.7.6.pkg">http://nodejs.org/dist/v0.7.6/node-v0.7.6.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.7.6/">http://nodejs.org/dist/v0.7.6/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.7.6/">http://nodejs.org/docs/v0.7.6/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.6/api/">http://nodejs.org/docs/v0.7.6/api/</a> -</p> diff --git a/doc/blog/release/version-0-7-7-unstable.md b/doc/blog/release/version-0-7-7-unstable.md deleted file mode 100644 index 1336096e4..000000000 --- a/doc/blog/release/version-0-7-7-unstable.md +++ /dev/null @@ -1,71 +0,0 @@ -version: 0.7.7 -title: Version 0.7.7 (unstable) -author: Isaac Schlueter -date: Fri Mar 30 2012 11:56:19 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-7-7-unstable - -<p>2012.03.30, Version 0.7.7 (unstable) - -</p> -<ul> -<li><p>Upgrade V8 to 3.9.24.7</p> -</li> -<li><p>Upgrade npm to 1.1.15</p> -</li> -<li><p>Handle Emoji characters properly (Erik Corry, Bert Belder)</p> -</li> -<li><p>readline: migrate ansi/vt100 logic from tty to readline (Nathan Rajlich)</p> -</li> -<li><p>readline: Fix multiline handling (Alex Kocharin)</p> -</li> -<li><p>add a -i/--interactive flag to force the REPL (Nathan Rajlich)</p> -</li> -<li><p>debugger: add breakOnException command (Fedor Indutny)</p> -</li> -<li><p>cluster: kill workers when master dies (Andreas Madsen)</p> -</li> -<li><p>cluster: add graceful disconnect support (Andreas Madsen)</p> -</li> -<li><p>child_process: Separate 'close' event from 'exit' (Charlie McConnell)</p> -</li> -<li><p>typed arrays: add Uint8ClampedArray (Mikael Bourges-Sevenier)</p> -</li> -<li><p>buffer: Fix byte alignment issues (Ben Noordhuis, Erik Lundin)</p> -</li> -<li><p>tls: fix CryptoStream.setKeepAlive() (Shigeki Ohtsu)</p> -</li> -<li><p>Expose http parse error codes (Felix Geisendörfer)</p> -</li> -<li><p>events: don't delete the listeners array (Ben Noordhuis, Nathan Rajlich)</p> -</li> -<li><p>process: add process.config to view node's ./configure settings (Nathan Rajlich)</p> -</li> -<li><p>process: process.execArgv to see node's arguments (Micheil Smith)</p> -</li> -<li><p>process: fix process.title setter (Ben Noordhuis)</p> -</li> -<li><p>timers: handle negative or non-numeric timeout values (Ben Noordhuis)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.7.7/node-v0.7.7.tar.gz">http://nodejs.org/dist/v0.7.7/node-v0.7.7.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.7/node-v0.7.7.msi">http://nodejs.org/dist/v0.7.7/node-v0.7.7.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.7.7/x64/">http://nodejs.org/dist/v0.7.7/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.7.7/node-v0.7.7.pkg">http://nodejs.org/dist/v0.7.7/node-v0.7.7.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.7.7/">http://nodejs.org/dist/v0.7.7/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.7.7/">http://nodejs.org/docs/v0.7.7/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.7/api/">http://nodejs.org/docs/v0.7.7/api/</a> -</p> diff --git a/doc/blog/release/version-0-7-8-unstable.md b/doc/blog/release/version-0-7-8-unstable.md deleted file mode 100644 index 8dfac6fc7..000000000 --- a/doc/blog/release/version-0-7-8-unstable.md +++ /dev/null @@ -1,71 +0,0 @@ -version: 0.7.8 -title: Version 0.7.8 (unstable) -author: Isaac Schlueter -date: Wed Apr 18 2012 10:39:02 GMT-0700 (PDT) -status: publish -category: release -slug: version-0-7-8-unstable - -<p>2012.04.18, Version 0.7.8, (unstable) - -</p> -<ul> -<li><p>Upgrade V8 to 3.9.24.9</p> -</li> -<li><p>Upgrade OpenSSL to 1.0.0f</p> -</li> -<li><p>Upgrade npm to 1.1.18</p> -</li> -<li><p>Show licenses in Binary installers</p> -</li> -<li><p>Domains (isaacs)</p> -</li> -<li><p>readline: rename "end" to "close" (Nathan Rajlich)</p> -</li> -<li><p>tcp: make getsockname() return address family as string (Shigeki Ohtsu)</p> -</li> -<li><p>http, https: fix .setTimeout() (ssuda)</p> -</li> -<li><p>os: add cross platform EOL character (Mustansir Golawala)</p> -</li> -<li><p>typed arrays: unexport SizeOfArrayElementForType() (Aaron Jacobs)</p> -</li> -<li><p>net: honor 'enable' flag in .setNoDelay() (Ben Noordhuis)</p> -</li> -<li><p>child_process: emit error when .kill fails (Andreas Madsen)</p> -</li> -<li><p>gyp: fix 'argument list too long' build error (Ben Noordhuis)</p> -</li> -<li><p>fs.WriteStream: Handle modifications to fs.open (isaacs)</p> -</li> -<li><p>repl, readline: Handle newlines better (Nathan Rajlich, Nathan Friedly)</p> -</li> -<li><p>build: target OSX 10.5 when building on darwin (Nathan Rajlich)</p> -</li> -<li><p>Fix #3052 Handle errors properly in zlib (isaacs)</p> -</li> -<li><p>build: add support for DTrace and postmortem (Dave Pacheco)</p> -</li> -<li><p>core: add reusable Slab allocator (Ben Noordhuis)</p> -</li> -</ul> -<p>Source Code: <a href="http://nodejs.org/dist/v0.7.8/node-v0.7.8.tar.gz">http://nodejs.org/dist/v0.7.8/node-v0.7.8.tar.gz</a> - -</p> -<p>Windows Installer: <a href="http://nodejs.org/dist/v0.7.8/node-v0.7.8.msi">http://nodejs.org/dist/v0.7.8/node-v0.7.8.msi</a> - -</p> -<p>Windows x64 Files: <a href="http://nodejs.org/dist/v0.7.8/x64/">http://nodejs.org/dist/v0.7.8/x64/</a> - -</p> -<p>Macintosh Installer (Universal): <a href="http://nodejs.org/dist/v0.7.8/node-v0.7.8.pkg">http://nodejs.org/dist/v0.7.8/node-v0.7.8.pkg</a> - -</p> -<p>Other release files: <a href="http://nodejs.org/dist/v0.7.8/">http://nodejs.org/dist/v0.7.8/</a> - -</p> -<p>Website: <a href="http://nodejs.org/docs/v0.7.8/">http://nodejs.org/docs/v0.7.8/</a> - -</p> -<p>Documentation: <a href="http://nodejs.org/docs/v0.7.8/api/">http://nodejs.org/docs/v0.7.8/api/</a> -</p> diff --git a/doc/blog/v0.9.9.md b/doc/blog/v0.9.9.md deleted file mode 100644 index d8f8bf0a0..000000000 --- a/doc/blog/v0.9.9.md +++ /dev/null @@ -1,78 +0,0 @@ -date: Thu Feb 7 10:32:17 PST 2013 -title: Node v0.9.9 (Unstable) -version: 0.9.9 -category: release -slug: node-v0-9-9-unstable - -2013.02.07, Version 0.9.9 (Unstable) - -* tls: port CryptoStream to streams2 (Fedor Indutny) - -* typed arrays: only share ArrayBuffer backing store (Ben Noordhuis) - -* stream: make Writable#end() accept a callback function (Nathan Rajlich) - -* buffer: optimize 'hex' handling (Ben Noordhuis) - -* dns, cares: don't filter NOTIMP, REFUSED, SERVFAIL (Ben Noordhuis) - -* readline: treat bare \r as a line ending (isaacs) - -* readline: make \r\n emit one 'line' event (Ben Noordhuis) - -* cluster: support datagram sockets (Bert Belder) - -* stream: Correct Transform class backpressure (isaacs) - -* addon: Pass module object to NODE_MODULE init function (isaacs, Rod Vagg) - -* buffer: slow buffer copy compatibility fix (Trevor Norris) - -* Add bytesWritten to tls.CryptoStream (Andy Burke) - - -Source Code: http://nodejs.org/dist/v0.9.9/node-v0.9.9.tar.gz - -Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.9/node-v0.9.9.pkg - -Windows Installer: http://nodejs.org/dist/v0.9.9/node-v0.9.9-x86.msi - -Windows x64 Installer: http://nodejs.org/dist/v0.9.9/x64/node-v0.9.9-x64.msi - -Windows x64 Files: http://nodejs.org/dist/v0.9.9/x64/ - -Linux 32-bit Binary: http://nodejs.org/dist/v0.9.9/node-v0.9.9-linux-x86.tar.gz - -Linux 64-bit Binary: http://nodejs.org/dist/v0.9.9/node-v0.9.9-linux-x64.tar.gz - -Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.9/node-v0.9.9-sunos-x86.tar.gz - -Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.9/node-v0.9.9-sunos-x64.tar.gz - -Other release files: http://nodejs.org/dist/v0.9.9/ - -Website: http://nodejs.org/docs/v0.9.9/ - -Documentation: http://nodejs.org/docs/v0.9.9/api/ - -Shasums: -``` -643c26c2fc0c9ddeee99d346af86a022e6b470bc node-v0.9.9-darwin-x64.tar.gz -f3ffeb08ceab15fd24a33c8d1974be952177b623 node-v0.9.9-darwin-x86.tar.gz -63d6ce5e4333a0cd203753a3153998076baa23a7 node-v0.9.9-linux-x64.tar.gz -f1008b823b6010bd3ed3fd4f422eac3af5bd61da node-v0.9.9-linux-x86.tar.gz -679b09328f1a0c3225286a891bb5b4de131777d6 node-v0.9.9-sunos-x64.tar.gz -4253f2e976a05ee6ea6ecc3b583e942b812d0b86 node-v0.9.9-sunos-x86.tar.gz -0436ee0e57d12d5fc53914f9157521427d016629 node-v0.9.9-x86.msi -8a98bc39e9c99a1a1dad6f38a47f56eeb9ad6ecd node-v0.9.9.pkg -af1deb80c79f256b319a727f8593740ff99cdbc8 node-v0.9.9.tar.gz -ab3db4d6ffab88bb1babdddd96ca8d2c6caf4625 node.exe -56f5a3c72992463435f6649b31da81fd679e91ae node.exp -e77f0097ce66317fc255b8e1642eaa675c190267 node.lib -5ff7b6d7f1001383b4bd97e1315c67e7b223477d node.pdb -5b4dcf545eace51a4cae58e9c42b73604f6eb0f9 x64/node-v0.9.9-x64.msi -43fd59cf0df5bdf21690a43a68a8f16160e28ec6 x64/node.exe -b4845d2318dd5b1030eeca02703d7f19ebf2ef15 x64/node.exp -2726441e5ff354bc51a841fa9a5a193d39831ac0 x64/node.lib -df9083c37cf13109326df30df01e9692238ac381 x64/node.pdb -``` diff --git a/doc/blog/video/bert-belder-libuv-lxjs-2012.md b/doc/blog/video/bert-belder-libuv-lxjs-2012.md deleted file mode 100644 index 75aefe144..000000000 --- a/doc/blog/video/bert-belder-libuv-lxjs-2012.md +++ /dev/null @@ -1,13 +0,0 @@ -title: Bert Belder - libuv at LXJS 2012 -slug: bert-belder-libuv-lxjs-2012 -category: video -date: Sun Sep 30 10:28:45 PDT 2012 - -Node core committer Bert Belder gave a talk at -[LXJS](http://2012.lxjs.org/). If you are interested in how Node does -asynchronous I/O across platforms, then you should definitely watch -this video. - -<iframe width="640" height="360" -src="http://www.youtube.com/embed/nGn60vDSxQ4" frameborder="0" -allowfullscreen></iframe> diff --git a/doc/blog/video/bryan-cantrill-instrumenting-the-real-time-web.md b/doc/blog/video/bryan-cantrill-instrumenting-the-real-time-web.md deleted file mode 100644 index fa982135d..000000000 --- a/doc/blog/video/bryan-cantrill-instrumenting-the-real-time-web.md +++ /dev/null @@ -1,42 +0,0 @@ -title: Bryan Cantrill: Instrumenting the Real Time Web -author: Isaac Schlueter -date: Tue May 08 2012 10:00:34 GMT-0700 (PDT) -status: publish -category: video -slug: bryan-cantrill-instrumenting-the-real-time-web - -Bryan Cantrill, VP of Engineering at Joyent, describes the challenges of instrumenting a distributed, dynamic, highly virtualized system -- and what their experiences taught them about the problem, the technologies used to tackle it, and promising approaches. - -This talk was given at Velocity Conf in 2011. - -<table><tr><td align="center"> -<iframe width="640" height="360" -src="http://www.youtube.com/embed/F5jCXdTYJYc" frameborder="0" -allowfullscreen></iframe> - - <div style="width:425px" id="__ss_8332407"> - <strong style="display:block;margin:12px 0 4px"><a href= - "http://www.slideshare.net/bcantrill/instrumenting-the-realtime-web" - title="Instrumenting the real-time web" target= - "_blank">Instrumenting the real-time web</a></strong> - <object id="__sse8332407" width="425" height="355"> - <param name="movie" value= - "http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=velocity-110616190636-phpapp02&stripped_title=instrumenting-the-realtime-web&userName=bcantrill"> - <param name="allowFullScreen" value="true"> - <param name="allowScriptAccess" value="always"> - <param name="wmode" value="transparent"> - <embed name="__sse8332407" src= - "http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=velocity-110616190636-phpapp02&stripped_title=instrumenting-the-realtime-web&userName=bcantrill" - type="application/x-shockwave-flash" allowscriptaccess= - "always" allowfullscreen="true" wmode="transparent" width= - "425" height="355"> - </object> - - <div style="padding:5px 0 12px"> - View more <a href="http://www.slideshare.net/" target= - "_blank">presentations</a> from <a href= - "http://www.slideshare.net/bcantrill" target= - "_blank">bcantrill</a> - </div> - </div> -</td></td></table> diff --git a/doc/blog/video/welcome-to-the-node-blog.md b/doc/blog/video/welcome-to-the-node-blog.md deleted file mode 100644 index 3ac398583..000000000 --- a/doc/blog/video/welcome-to-the-node-blog.md +++ /dev/null @@ -1,13 +0,0 @@ -title: Welcome to the Node blog -author: ryandahl -date: Thu Mar 17 2011 20:17:12 GMT-0700 (PDT) -status: publish -category: video -slug: welcome-to-the-node-blog - -Since Livejournal is disintegrating into Russian spam, I'm moving my technical blog to http://blog.nodejs.org/. I hope to do frequent small posts about what's going on in Node development and include posts from other core Node developers. Please subscribe to the RSS feed. - -To avoid making this post completely devoid of content, here is a new video from a talk I gave at the SF PHP group tastefully produced by <A href="http://marakana.com/forums/java/general/278.html">Marakana</a>: -<iframe width="640" height="360" -src="http://www.youtube.com/embed/jo_B4LTHi3I" frameborder="0" -allowfullscreen></iframe> diff --git a/doc/blog/vulnerability/http-server-pipeline-flood-dos.md b/doc/blog/vulnerability/http-server-pipeline-flood-dos.md deleted file mode 100644 index e4a607d7a..000000000 --- a/doc/blog/vulnerability/http-server-pipeline-flood-dos.md +++ /dev/null @@ -1,37 +0,0 @@ -title: DoS Vulnerability (fixed in Node v0.8.26 and v0.10.21) -date: Tue Oct 22 10:42:10 PDT 2013 -slug: cve-2013-4450-http-server-pipeline-flood-dos -category: vulnerability - -Node.js is vulnerable to a denial of service attack when a client -sends many pipelined HTTP requests on a single connection, and the -client does not read the responses from the connection. - -We recommend that anyone using Node.js v0.8 or v0.10 to run HTTP -servers in production please update as soon as possible. - -* v0.10.21 <http://blog.nodejs.org/2013/10/18/node-v0-10-21-stable/> -* v0.8.26 <http://blog.nodejs.org/2013/10/18/node-v0-8-26-maintenance/> - -This is fixed in Node.js by pausing both the socket and the HTTP -parser whenever the downstream writable side of the socket is awaiting -a drain event. In the attack scenario, the socket will eventually -time out, and be destroyed by the server. If the "attacker" is not -malicious, but merely sends a lot of requests and reacts to them -slowly, then the throughput on that connection will be reduced to what -the client can handle. - -There is no change to program semantics, and except in the -pathological cases described, no changes to behavior. - -If upgrading is not possible, then putting an HTTP proxy in front of -the Node.js server can mitigate the vulnerability, but only if the -proxy parses HTTP and is not itself vulnerable to a pipeline flood -DoS. - -For example, nginx will prevent the attack (since it closes -connections after 100 pipelined requests by default), but HAProxy in -raw TCP mode will not (since it proxies the TCP connection without -regard for HTTP semantics). - -This addresses CVE-2013-4450. diff --git a/doc/blog/vulnerability/http-server-security-vulnerability-please-upgrade-to-0-6-17.md b/doc/blog/vulnerability/http-server-security-vulnerability-please-upgrade-to-0-6-17.md deleted file mode 100644 index b64858d09..000000000 --- a/doc/blog/vulnerability/http-server-security-vulnerability-please-upgrade-to-0-6-17.md +++ /dev/null @@ -1,45 +0,0 @@ -title: HTTP Server Security Vulnerability: Please upgrade to 0.6.17 -author: Isaac Schlueter -date: Mon May 07 2012 10:02:01 GMT-0700 (PDT) -status: publish -category: vulnerability -slug: http-server-security-vulnerability-please-upgrade-to-0-6-17 - -<h2>tl;dr</h2> - -<ul><li><p>A carefully crafted attack request can cause the contents of the HTTP parser's buffer to be appended to the attacking request's header, making it appear to come from the attacker. Since it is generally safe to echo back contents of a request, this can allow an attacker to get an otherwise correctly designed server to divulge information about other requests. It is theoretically possible that it could enable header-spoofing attacks, though such an attack has not been demonstrated.</li> -<li>Versions affected: All versions of the 0.5/0.6 branch prior to 0.6.17, and all versions of the 0.7 branch prior to 0.7.8. Versions in the 0.4 branch are not affected.</li> -<li>Fix: Upgrade to <a href="http://blog.nodejs.org/2012/05/04/version-0-6-17-stable/">v0.6.17</a>, or apply the fix in <a href="https://github.com/joyent/node/commit/c9a231d">c9a231d</a> to your system.</li></ul> - -<h2>Details</h2> - -<p>A few weeks ago, Matthew Daley found a security vulnerability in Node's HTTP implementation, and thankfully did the responsible thing and reported it to us via email. He explained it quite well, so I'll quote him here:</p> -<blockquote> -<p>There is a vulnerability in node's `http_parser` binding which allows information disclosure to a remote attacker: - -</p> -<p>In node::StringPtr::Update, an attempt is made at an optimization on certain inputs (`node_http_parser.cc`, line 151). The intent is that if the current string pointer plus the current string size is equal to the incoming string pointer, the current string size is just increased to match, as the incoming string lies just beyond the current string pointer. However, the check to see whether or not this can be done is incorrect; "size" is used whereas "size_" should be used. Therefore, an attacker can call Update with a string of certain length and cause the current string to have other data appended to it. In the case of HTTP being parsed out of incoming socket data, this can be incoming data from other sockets. - -</p> -<p>Normally node::StringPtr::Save, which is called after each execution of `http_parser`, would stop this from being exploitable as it converts strings to non-optimizable heap-based strings. However, this is not done to 0-length strings. An attacker can therefore exploit the mistake by making Update set a 0-length string, and then Update past its boundary, so long as it is done in one `http_parser` execution. This can be done with an HTTP header with empty value, followed by a continuation with a value of certain length. - -</p> -<p>The <a href="https://gist.github.com/2628868">attached files</a> demonstrate the issue: </p> -<pre><code>$ ./node ~/stringptr-update-poc-server.js & -[1] 11801 -$ ~/stringptr-update-poc-client.py -HTTP/1.1 200 OK -Content-Type: text/plain -Date: Wed, 18 Apr 2012 00:05:11 GMT -Connection: close -Transfer-Encoding: chunked - -64 -X header: - This is private data, perhaps an HTTP request with a Cookie in it. -0</code></pre> -</blockquote> -<p>The fix landed on <a href="https://github.com/joyent/node/commit/7b3fb22">7b3fb22</a> and <a href="https://github.com/joyent/node/commit/c9a231d">c9a231d</a>, for master and v0.6, respectively. The innocuous commit message does not give away the security implications, precisely because we wanted to get a fix out before making a big deal about it. </p> -<p>The first releases with the fix are v0.7.8 and 0.6.17. So now is a good time to make a big deal about it. </p> -<p>If you are using node version 0.6 in production, please upgrade to at least <a href="http://blog.nodejs.org/2012/05/04/version-0-6-17-stable/">v0.6.17</a>, or at least apply the fix in <a href="https://github.com/joyent/node/commit/c9a231d">c9a231d</a> to your system. (Version 0.6.17 also fixes some other important bugs, and is without doubt the most stable release of Node 0.6 to date, so it's a good idea to upgrade anyway.) </p> -<p>I'm extremely grateful that Matthew took the time to report the problem to us with such an elegant explanation, and in such a way that we had a reasonable amount of time to fix the issue before making it public. </p> diff --git a/doc/cla.html b/doc/cla.html deleted file mode 100644 index 337720bca..000000000 --- a/doc/cla.html +++ /dev/null @@ -1,193 +0,0 @@ -<html> -<head> - <style media="all"> - pre { - background: #f2f2f2; - padding: 1em; - } - - body { - max-width: 40em; - padding: 3em; - } - ol { - } - - li { - padding: 0; - margin: 1em; - } - - </style> - <style media="print"> - body { - max-width: 1000em; - padding: 1em; - } - pre { - background: #fff; - padding: 1em; - } - iframe { display: none; } - #signelectronically { display: none; } - </style> -</head> - -<body> - -<h1>NodeJS</h1> -<h2>Contributor License Agreement ("Agreement")</h2> - - -<p> -Thank you for your interest in the NodeJS open source -project being administered by Joyent, Inc , dba NodeJS -("NodeJS"). The form of license below is a document that -clarifies the terms under which You, the person listed -below, may contribute software, bug fixes, configuration -changes, documentation, or any other materials that you send -to us related to the Project (each a "Contribution") to the -project. We appreciate your participation in our project, -and your help in improving the project, so we want you to -understand what will be done with the Contributions. This -license is for your protection as well as the protection of -NodeJS and its licensees; it does not change your rights to -use your own Contributions for any other purpose. Please -complete the following information about you and the -Contributions and sign electronically by filling out the form -below. - -<p> -If you have questions about these terms, please contact us -at legal@joyent.com. - - -<h3>Corporate Contributions:</h3> - -<p> -If you are employed as a software engineer, or if your -employer is in the business of developing software, or -otherwise may claim rights in the Contributions, please -provide information about your employer's policy on -contributing to open source projects, including the name of -the supervisor to contact in connection with such -contributions. - - -<h3>You and NodeJS agree:</h3> - -<ol> - -<li> -You grant us the ability to use the Contributions in any -way. You hereby grant to NodeJS, a non-exclusive, -irrevocable, worldwide, royalty-free, sublicenseable, -transferable license under all of Your relevant intellectual -property rights (including copyright, patent, and any other -rights), to use, copy, prepare derivative works of, -distribute and publicly perform and display the -Contributions on any licensing terms, including without -limitation: (a) open source licenses like the GNU General -Public License (GPL), the GNU Lesser General Public License -(LGPL), the Common Public License, or the Berkeley Software -Distribution license (BSD); and (b) binary, proprietary, or -commercial licenses. Except for the licenses granted -herein, You reserve all right, title, and interest in and to -the Contribution. - -<li> -You are able to grant us these rights. You represent -that You are legally entitled to grant the above license. -If Your employer has rights to intellectual property that -You create, You represent that You have received permission -to make the Contributions on behalf of that employer, or -that Your employer has waived such rights for the -Contributions. - -<li> -The Contributions are your original work. You represent -that the Contributions are Your original works of -authorship, and to Your knowledge, no other person claims, -or has the right to claim, any right in any invention or -patent related to the Contributions. You also represent -that You are not legally obligated, whether by entering into -an agreement or otherwise, in any way that conflicts with -the terms of this license. For example, if you have signed -an agreement requiring you to assign the intellectual -property rights in the Contributions to an employer or -customer, that would conflict with the terms of this -license. - -<li> -We determine the code that is in our project. You -understand that the decision to include the Contribution in -any project or source repository is entirely that of NodeJS, -and this agreement does not guarantee that the Contributions -will be included in any product. - -<li> -No Implied Warranties. NodeJS acknowledges that, except -as explicitly described in this Agreement, the Contribution -is provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR -CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, -INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR -CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR -FITNESS FOR A PARTICULAR PURPOSE. -</ol> - -</div> - - -<h2 id="signelectronically">Sign Electronically</h2> - -<iframe - src="http://spreadsheets.google.com/embeddedform?formkey=dFhpTW5kWUtUVG1DTUpHOGR5U2VXNXc6MQ" - width="760" height="1240" frameborder="0" marginheight="0" - marginwidth="0">Loading...</iframe> - - -<p>As an alternative to electronic signing, you may also print -the document and send the original to: - -<p> -Joyent, Inc <br/> -One Embarcadero Center, 9th Floor<br/> -San Francisco, CA 94111<br/> -U.S.A. - -<p> -Scanned agreements may also be emailed in PDF format to -legal@joyent.com. You should also keep a copy for your own -records. - -<pre> -Full name: _________________________________________________ - -Mailing Address: ___________________________________________ - -____________________________________________________________ - -Country: _________________________________________________ - -Telephone: _________________________________________________ - -Facsimile: _________________________________________________ - -E-Mail: _________________________________________________ - -Employer: _________________________________________________ - -Employer Contact: ________________________________________ - -Employer Open Source Contribution Policy: _________________ - -____________________________________________________________ - -____________________________________________________________ - -Please sign: _______________________________________________ - -Date: ______________________________________________________ -</pre> -</body> -</html> diff --git a/doc/community/index.html b/doc/community/index.html deleted file mode 100644 index 8882276a9..000000000 --- a/doc/community/index.html +++ /dev/null @@ -1,263 +0,0 @@ -<!doctype html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <link type="image/x-icon" rel="icon" href="../favicon.ico"> - <link type="image/x-icon" rel="shortcut icon" href="../favicon.ico"> - <link rel="stylesheet" href="../pipe.css"> - <link rel="stylesheet" href="../sh_vim-dark.css"> - <link rel="alternate" - type="application/rss+xml" - title="node blog" - href="http://feeds.feedburner.com/nodejs/123123123"> - <title>node.js</title> - </head> - - <body class="int" id="community"> - <div id="intro" class="interior"> - <a href="/" title="Go back to the home page"> - <img id="logo" src="http://nodejs.org/images/logo.png" alt="node.js"> - </a> - </div> - - <div id="content" class="clearfix"> - <div id="column2" class="interior"> - <ul> - <li><a href="/" class="home">Home</a></li> - <li><a href="/download/" class="download">Download</a></li> - <li><a href="/about/" class="about">About</a></li> - <li><a href="http://npmjs.org/" class="npm">npm Registry</a></li> - <li><a href="http://nodejs.org/api/" class="docs">Docs</a></li> - <li><a href="http://blog.nodejs.org" class="blog">Blog</a></li> - <li><a href="/community/" class="community current">Community</a></li> - <li><a href="/logos/" class="logos">Logos</a></li> - <li><a href="http://jobs.nodejs.org/" class="jobs">Jobs</a></li> - </ul> - <p class="twitter"><a href="http://twitter.com/nodejs">@nodejs</a></p> - </div> - - <div id="column1" class="interior"> - <p> - Node's most valuable feature is the friendly and colorful - community of developers. There are many places where this group - congregates on the internet. This page attempts to highlight the - best forums. - </p> - - <div class="row clearfix"> - <div class="block"> - <h2 class="documentation">Documentation</h2> - <p> - <a href="http://nodejs.org/api">Official API docs</a> detail the - Node API. - </p> - <p> - <a href="http://nodeschool.io">NodeSchool.io</a> will teach you - Node.js concepts via interactive command-line games. - </p> - <p> - <a href= - "http://stackoverflow.com/questions/tagged/node.js">Stack - Overflow node.js tag</a> collects new information every day. - </p> - <p> - <a href="http://docs.nodejitsu.com/">docs.nodejitsu.com</a> - answers many of the common problems people come across. - </p> - <p> - <a href="http://howtonode.org/">How To Node</a> has a growing - number of useful tutorials. - </p> - </div> - - <div class="block"> - <h2 class="github">GitHub</h2> - <p> - All development takes place at - <a href="http://github.com/joyent/node" - >github.com/joyent/node</a>. This is where discussion - regarding core development occurs. - </p> - <p>If you are interested in contributing to Node.js, please - first read the <a - href="https://github.com/joyent/node/blob/master/CONTRIBUTING.md#readme">contribution - guide</a>. - </p> - </div> - </div> - - <div class="row clearfix"> - <div class="block"> - <h2 class="mailing">Discussion</h2> - <p> - The <a href="http://groups.google.com/group/nodejs">mailing - list</a> is used for announcements and discussion about Node. - </p> - <p> - The <a href="https://github.com/joyent/node/issues">github - issues list</a> is the place for discussion of Node.js core - features - </p> - <p> - Many <a href="https://github.com/joyent/node/wiki/Node-Users">Node - users</a> are active on <a href="https://twitter.com/">Twitter</a> - as well. - </p> - </div> - - <div class="block"> - <h2 class="periodicals">Periodicals</h2> - <p> - <a href="http://nodeweekly.com/">Node.js Weekly</a> is an email - list that gathers up the latest events and news from around the - Node.js community. - </p> - <p> - <a href="http://planetnodejs.com">Planet Node</a> is an - aggregator of Node developer blogs. - </p> - <p> - <a href="http://nodeup.com/">NodeUp</a> is a podcast covering - the latest Node news in the community. - </p> - - <p> - <a href="http://nodejsreactions.tumblr.com">NodeJS Reactions</a> - captures the Node.js experience in the form of animated GIFs. - </p> - </div> - </div> - - <div class="row clearfix"> - <div class="block"> - <h2 class="conferences">Real Life Events</h2> - <p> - <a href="http://nodemeatspace.com/">Node Meatspace</a> is a - webpage listing upcoming meetups and events in different - places. - </p> - - <p> - <a href="http://www.nodeconf.com/">NodeConf</a> conferences are - the main event in the United States; they are organized by - <a href="http://www.mikealrogers.com/">Mikeal Rogers</a>. - </p> - - <p> - <a href="http://nodeconfeu.com/">NodeConf EU</a> is a Node - conference in Europe, organized by Cian O'Maiden. - </p> - - <p> - <a href="http://nodefest.jp/">NodeFest (東京Node学園祭)</a> is - organized by the <a href="http://nodejs.jp">Node.js Japan user - group</a>. - </p> - - <p> - <a href="http://nodecamp.de/">NodeCamp.de</a> in Cologne, - Germany is organized by <a href="railslove.de">Rails Love</a>. - </p> - - <p> - An <a href="http://nodejsconf.it/">Italian Node.js - Conference</a> exists as well. - </p> - - <p> - <a href="http://nodesummit.com/">Node Summit</a> is a conference - in San Francisco focusing on the adoption of Node in larger - companies. - </p> - - <p> - <a href="http://jsconf.com/">JSConf</a> organizes the main - JavaScript conferences. - </p> - </div> - - <div class="block"> - <h2 class="localized">Localized Sites</h2> - <p> - <code>nodejs.org</code> does not maintain any translations into - other languages. However there are community websites in various - languages with mailing lists and translations of the website. - </p> - <p> - <a class="australia" href="http://nodejs.org.au/">nodejs.org.au</a> Australian Node.js blog & developers listing<br> - <a class="brasil" href="http://www.nodebr.com/">NodeBR.com</a> Brazilian community of Node.js<br> - <a class="china" href="http://cnodejs.org">CNodeJS.org</a> Chinese community<br> - <a class="france" href="https://plus.google.com/communities/113346206415381691435">FR . Node.js</a> Google+ Community of Node.js French users<br> - <a class="hong-kong" href="http://nodejs.hk">HKNoJ</a> Hong Kong community<br> - <a class="iran" href="http://nodejs.ir">nodejs.ir</a> Iran group in Persian<br> - <a class="israel" href="http://nodejs.co.il">nodejs.co.il</a> Israeli wiki<br> - <a class="japan" href="http://nodejs.jp/">nodejs.jp</a> Japan user group<br> - <a class="korea" href="http://nodejskr.org">OctoberSkyJs</a> Korea Node.js community<br> - <a class="new-zealand" href="http://nodejs.geek.nz/">nodejs.geek.nz</a> Node.js site for Kiwis<br> - <a class="russia" href="http://nodejs.ru/">nodejs.ru</a> Russian blog.<br> - <a class="serbia" href="http://nodejs.rs/">nodejs.rs</a> Serbian Node.js community website - <a class="spain" href="http://nodehispano.com">Node Hispano</a> Spanish language community<br> - <a class="spain" href="http://www.nodejs.es">Node.js Español</a> Node.js in Spanish<br> - <a class="taiwain" href="http://nodejs.tw">nodejs.tw</a> Taiwan community<br> - <a class="turkey" href="http://www.nodejstr.com/">Node.js Türkiye</a> Node.js in Turkish<br> - <a class="vietnam" href="http://nodejs.vn/">Node.js Viet Nam</a> Node.js in Vietnamese<br> - </p> - </div> - </div> - - <div class="row clearfix"> - <div class="block"> - <h2 class="irc">IRC</h2> - <p> - For real-time chat about Node development go to - <code>irc.freenode.net</code> in the <code>#node.js</code> - channel with an <a href="http://www.mirc.com">IRC</a> - <a href="http://colloquy.info/">client</a> or connect in your web - browser to the channel using - <a href="http://webchat.freenode.net/?channels=node.js"> - freenode's WebChat</a>. - </p> - </div> - </div> - - <p> - <a href="http://notinventedhe.re/on/2011-7-26"> - <img src="http://nodejs.org/images/not-invented-here.png" width="100%"> - </a> - </p> - </div> - </div> - - <div id="footer"> - <a href="http://joyent.com" class="joyent-logo">Joyent</a> - <ul class="clearfix"> - <li><a href="/">Node.js</a></li> - <li><a href="/download/">Download</a></li> - <li><a href="/about/">About</a></li> - <li><a href="http://npmjs.org/">npm Registry</a></li> - <li><a href="http://nodejs.org/api/">Docs</a></li> - <li><a href="http://blog.nodejs.org">Blog</a></li> - <li><a href="/community/">Community</a></li> - <li><a href="/logos/">Logos</a></li> - <li><a href="http://jobs.nodejs.org/">Jobs</a></li> - <li><a href="http://twitter.com/nodejs" class="twitter">@nodejs</a></li> - </ul> - - <p> - Copyright <a href="http://joyent.com/">Joyent, Inc</a>, Node.js is a - <a href="/trademark-policy.pdf">trademark</a> of Joyent, Inc. View - <a href="https://raw.github.com/joyent/node/__VERSION__/LICENSE">license</a>. - </p> - </div> - - <script type="text/javascript"> - window._gaq = [['_setAccount', 'UA-10874194-2'], ['_trackPageview']]; - (function(d, t) { - var g = d.createElement(t), - s = d.getElementsByTagName(t)[0]; - g.src = '//www.google-analytics.com/ga.js'; - s.parentNode.insertBefore(g, s); - }(document, 'script')); - </script> - </body> -</html> diff --git a/doc/download/index.html b/doc/download/index.html deleted file mode 100644 index 48c02badf..000000000 --- a/doc/download/index.html +++ /dev/null @@ -1,190 +0,0 @@ -<!doctype html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <link type="image/x-icon" rel="icon" href="../favicon.ico"> - <link type="image/x-icon" rel="shortcut icon" href="../favicon.ico"> - <link rel="stylesheet" href="../pipe.css"> - <link rel="stylesheet" href="../sh_vim-dark.css"> - <link rel="alternate" - type="application/rss+xml" - title="node blog" - href="http://feeds.feedburner.com/nodejs/123123123"> - <title>node.js</title> - </head> - <body class="int" id="download-page"> - <div id="intro" class="interior"> - <a href="/" title="Go back to the home page"> - <img id="logo" src="http://nodejs.org/images/logo.png" alt="node.js"> - </a> - </div> - <div id="content" class="clearfix"> - <div id="column2" class="interior"> - <ul> - <li><a href="/" class="home">Home</a></li> - <li><a href="/download/" class="download current">Download</a></li> - <li><a href="/about/" class="about">About</a></li> - <li><a href="http://npmjs.org/" class="npm">npm Registry</a></li> - <li><a href="http://nodejs.org/api/" class="docs">Docs</a></li> - <li><a href="http://blog.nodejs.org" class="blog">Blog</a></li> - <li><a href="/community/" class="community">Community</a></li> - <li><a href="/logos/" class="logos">Logos</a></li> - <li><a href="http://jobs.nodejs.org/" class="jobs">Jobs</a></li> - </ul> - <p class="twitter"><a href="http://twitter.com/nodejs">@nodejs</a></p> - </div> - <div id="column1" class="interior row"> - <div class="interior row"> - <p> - Download the Node.js source code or a pre-built installer for your platform, and start developing today. - </p> - <p>Current version: <b>__VERSION__</b></p> - </div> - - <div class="interior row"> - <div id="installers"> - <ul> - <li> - <a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-x86.msi"> - <img src="http://nodejs.org/images/platform-icon-win.png" - height=50 width=45 alt=""> - Windows Installer - <small>node-__VERSION__-x86.msi</small> - </a> - </li> - <li> - <a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__.pkg"> - <img src="http://nodejs.org/images/platform-icon-osx.png" - height=50 width=45 alt=""> - Macintosh Installer - <small>node-__VERSION__.pkg</small> - </a> - </li> - <li id="source"> - <a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__.tar.gz"> - <img src="http://nodejs.org/images/platform-icon-generic.png" - height=50 width=45 alt=""> - Source Code - <small>node-__VERSION__.tar.gz</small> - </a> - </li> - </ul> - </div> - - <table style="font-size:14px"> - <tr> - <th>Windows Installer (.msi)</th> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-x86.msi">32-bit</a></td> - <td><a href="http://nodejs.org/dist/__VERSION__/x64/node-__VERSION__-x64.msi">64-bit</a></td> - </tr> - - <tr> - <th>Windows Binary (.exe)</th> - <td><a href="http://nodejs.org/dist/__VERSION__/node.exe">32-bit</a></td> - <td><a href="http://nodejs.org/dist/__VERSION__/x64/node.exe">64-bit</a></td> - </tr> - - <tr> - <th>Mac OS X Installer (.pkg)</th> - <td colspan=2><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__.pkg">Universal</a></td> - </tr> - - <tr> - <th>Mac OS X Binaries (.tar.gz)</strong></th> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-darwin-x86.tar.gz">32-bit</a></td> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-darwin-x64.tar.gz">64-bit</a></td> - </tr> - - <!-- TODO Uncomment when we have these - <tr> - <th>Linux Installer (.deb)</th> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-linux-x86.deb">32-bit</a></td> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-linux-x64.deb">64-bit</a></td> - </tr> - - <tr> - <th>Linux Installer (.rpm)</th> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-linux-x86.rpm">32-bit</a></td> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-linux-x64.rpm">64-bit</a></td> - </tr> - --> - - <tr> - <th>Linux Binaries (.tar.gz)</th> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-linux-x86.tar.gz">32-bit</a></td> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-linux-x64.tar.gz">64-bit</a></td> - </tr> - - <tr> - <th>SunOS Binaries (.tar.gz)</th> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-sunos-x86.tar.gz">32-bit</a></td> - <td><a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__-sunos-x64.tar.gz">64-bit</a></td> - </tr> - - <tr> - <th>Source Code</th> - <td colspan=2> - <a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__.tar.gz">node-__VERSION__.tar.gz</a> - </td> - </tr> - </table> - <p> - Note: Python 2.6 or 2.7 is required to build from source tarballs. - </p> - - <h2 style="margin-top:1em" id=other-info>Other Info</h2> - <ul> - <li><a href="http://nodejs.org/dist/__VERSION__/SHASUMS.txt">Shasums</a></li> - <li><a href="https://raw.github.com/joyent/node/__VERSION__/ChangeLog">Change Log</a></li> - - <li><a href="http://nodejs.org/docs/__VERSION__/api/">Documentation</a></li> - - <li><a href="https://github.com/joyent/node">Git Repository</a></li> - <li><a href="https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager">Installing from package managers</a> - - <li><a href="http://nodejs.org/dist/__VERSION__">Other release files</a></li> - <li><a href="http://nodejs.org/dist/">Other releases</a></li> - <li><a href="http://jenkins.nodejs.org/html/nightlies.html">Nightly builds</a></li> - </ul> - </div> - - <div class="interior row"> - <h2 id="license">License</h2> - <p> - Node.js is released under the MIT - license, and bundles other liberally licensed OSS components. - <a - href="https://raw.github.com/joyent/node/__VERSION__/LICENSE">Download the license</a></p> - </div> - </div> - </div> - - <div id="footer"> - <a href="http://joyent.com" class="joyent-logo">Joyent</a> - <ul class="clearfix"> - <li><a href="/">Node.js</a></li> - <li><a href="/download/">Download</a></li> - <li><a href="/about/">About</a></li> - <li><a href="http://npmjs.org/">npm Registry</a></li> - <li><a href="http://nodejs.org/api/">Docs</a></li> - <li><a href="http://blog.nodejs.org">Blog</a></li> - <li><a href="/community/">Community</a></li> - <li><a href="/logos/">Logos</a></li> - <li><a href="http://jobs.nodejs.org/">Jobs</a></li> - <!-- <li><a hrfe="http://twitter.com/nodejs" class="twitter">@nodejs</a></li> --> - </ul> - - <p>Copyright <a href="http://joyent.com/">Joyent, Inc</a>, Node.js is a <a href="/trademark-policy.pdf">trademark</a> of Joyent, Inc. View <a href="https://raw.github.com/joyent/node/__VERSION__/LICENSE">license</a>.</p> - </div> - - <script> - window._gaq = [['_setAccount', 'UA-10874194-2'], ['_trackPageview']]; - (function(d, t) { - var g = d.createElement(t), - s = d.getElementsByTagName(t)[0]; - g.src = '//www.google-analytics.com/ga.js'; - s.parentNode.insertBefore(g, s); - }(document, 'script')); - </script> - </body> -</html> diff --git a/doc/favicon.ico b/doc/favicon.ico Binary files differdeleted file mode 100644 index 03eaff0b5..000000000 --- a/doc/favicon.ico +++ /dev/null diff --git a/doc/full-white-stripe.jpg b/doc/full-white-stripe.jpg Binary files differdeleted file mode 100644 index 9b990aeff..000000000 --- a/doc/full-white-stripe.jpg +++ /dev/null diff --git a/doc/images/anchor.png b/doc/images/anchor.png Binary files differdeleted file mode 100644 index 1ed163ee1..000000000 --- a/doc/images/anchor.png +++ /dev/null diff --git a/doc/images/close-downloads.png b/doc/images/close-downloads.png Binary files differdeleted file mode 100644 index ba72523f7..000000000 --- a/doc/images/close-downloads.png +++ /dev/null diff --git a/doc/images/community-icons.png b/doc/images/community-icons.png Binary files differdeleted file mode 100644 index b3d58f0f1..000000000 --- a/doc/images/community-icons.png +++ /dev/null diff --git a/doc/images/download-logo.png b/doc/images/download-logo.png Binary files differdeleted file mode 100644 index 253235f4c..000000000 --- a/doc/images/download-logo.png +++ /dev/null diff --git a/doc/images/ebay-logo.png b/doc/images/ebay-logo.png Binary files differdeleted file mode 100644 index 8a51935dd..000000000 --- a/doc/images/ebay-logo.png +++ /dev/null diff --git a/doc/images/footer-logo-alt.png b/doc/images/footer-logo-alt.png Binary files differdeleted file mode 100644 index e6d9c2390..000000000 --- a/doc/images/footer-logo-alt.png +++ /dev/null diff --git a/doc/images/footer-logo.png b/doc/images/footer-logo.png Binary files differdeleted file mode 100644 index 19a4eaadc..000000000 --- a/doc/images/footer-logo.png +++ /dev/null diff --git a/doc/images/forkme.png b/doc/images/forkme.png Binary files differdeleted file mode 100644 index be10e2109..000000000 --- a/doc/images/forkme.png +++ /dev/null diff --git a/doc/images/home-icons.png b/doc/images/home-icons.png Binary files differdeleted file mode 100644 index 421dfdaf1..000000000 --- a/doc/images/home-icons.png +++ /dev/null diff --git a/doc/images/icons-interior.png b/doc/images/icons-interior.png Binary files differdeleted file mode 100644 index 6b3d483dc..000000000 --- a/doc/images/icons-interior.png +++ /dev/null diff --git a/doc/images/icons.png b/doc/images/icons.png Binary files differdeleted file mode 100644 index 421dfdaf1..000000000 --- a/doc/images/icons.png +++ /dev/null diff --git a/doc/images/joyent-logo_orange_nodeorg-01.png b/doc/images/joyent-logo_orange_nodeorg-01.png Binary files differdeleted file mode 100644 index 1b977395b..000000000 --- a/doc/images/joyent-logo_orange_nodeorg-01.png +++ /dev/null diff --git a/doc/images/linkedin-logo.png b/doc/images/linkedin-logo.png Binary files differdeleted file mode 100644 index 1c79cf4ac..000000000 --- a/doc/images/linkedin-logo.png +++ /dev/null diff --git a/doc/images/logo-light.png b/doc/images/logo-light.png Binary files differdeleted file mode 100644 index 898fcecc9..000000000 --- a/doc/images/logo-light.png +++ /dev/null diff --git a/doc/images/logo.png b/doc/images/logo.png Binary files differdeleted file mode 100644 index ef3494efa..000000000 --- a/doc/images/logo.png +++ /dev/null diff --git a/doc/images/logos/monitor.png b/doc/images/logos/monitor.png Binary files differdeleted file mode 100644 index 18c804e2d..000000000 --- a/doc/images/logos/monitor.png +++ /dev/null diff --git a/doc/images/logos/node-favicon.png b/doc/images/logos/node-favicon.png Binary files differdeleted file mode 100644 index 3802fced9..000000000 --- a/doc/images/logos/node-favicon.png +++ /dev/null diff --git a/doc/images/logos/nodejs-1024x768.png b/doc/images/logos/nodejs-1024x768.png Binary files differdeleted file mode 100644 index e571c091d..000000000 --- a/doc/images/logos/nodejs-1024x768.png +++ /dev/null diff --git a/doc/images/logos/nodejs-1280x1024.png b/doc/images/logos/nodejs-1280x1024.png Binary files differdeleted file mode 100644 index 00f65d0de..000000000 --- a/doc/images/logos/nodejs-1280x1024.png +++ /dev/null diff --git a/doc/images/logos/nodejs-1440x900.png b/doc/images/logos/nodejs-1440x900.png Binary files differdeleted file mode 100644 index 4b818cc68..000000000 --- a/doc/images/logos/nodejs-1440x900.png +++ /dev/null diff --git a/doc/images/logos/nodejs-1920x1200.png b/doc/images/logos/nodejs-1920x1200.png Binary files differdeleted file mode 100644 index 6b31fecf4..000000000 --- a/doc/images/logos/nodejs-1920x1200.png +++ /dev/null diff --git a/doc/images/logos/nodejs-2560x1440.png b/doc/images/logos/nodejs-2560x1440.png Binary files differdeleted file mode 100644 index ba46b7704..000000000 --- a/doc/images/logos/nodejs-2560x1440.png +++ /dev/null diff --git a/doc/images/logos/nodejs-black.eps b/doc/images/logos/nodejs-black.eps Binary files differdeleted file mode 100644 index e3186994f..000000000 --- a/doc/images/logos/nodejs-black.eps +++ /dev/null diff --git a/doc/images/logos/nodejs-black.png b/doc/images/logos/nodejs-black.png Binary files differdeleted file mode 100644 index a7c6d63db..000000000 --- a/doc/images/logos/nodejs-black.png +++ /dev/null diff --git a/doc/images/logos/nodejs-dark.eps b/doc/images/logos/nodejs-dark.eps Binary files differdeleted file mode 100644 index 11c230db1..000000000 --- a/doc/images/logos/nodejs-dark.eps +++ /dev/null diff --git a/doc/images/logos/nodejs-dark.png b/doc/images/logos/nodejs-dark.png Binary files differdeleted file mode 100644 index 56094a9b4..000000000 --- a/doc/images/logos/nodejs-dark.png +++ /dev/null diff --git a/doc/images/logos/nodejs-green.eps b/doc/images/logos/nodejs-green.eps Binary files differdeleted file mode 100644 index 362ac37d8..000000000 --- a/doc/images/logos/nodejs-green.eps +++ /dev/null diff --git a/doc/images/logos/nodejs-green.png b/doc/images/logos/nodejs-green.png Binary files differdeleted file mode 100644 index ee8a2fb55..000000000 --- a/doc/images/logos/nodejs-green.png +++ /dev/null diff --git a/doc/images/logos/nodejs-light.eps b/doc/images/logos/nodejs-light.eps Binary files differdeleted file mode 100644 index 2317313e4..000000000 --- a/doc/images/logos/nodejs-light.eps +++ /dev/null diff --git a/doc/images/logos/nodejs.png b/doc/images/logos/nodejs.png Binary files differdeleted file mode 100644 index df49579bb..000000000 --- a/doc/images/logos/nodejs.png +++ /dev/null diff --git a/doc/images/microsoft-logo.png b/doc/images/microsoft-logo.png Binary files differdeleted file mode 100644 index 1a58d1076..000000000 --- a/doc/images/microsoft-logo.png +++ /dev/null diff --git a/doc/images/not-invented-here.png b/doc/images/not-invented-here.png Binary files differdeleted file mode 100644 index 5d4efa053..000000000 --- a/doc/images/not-invented-here.png +++ /dev/null diff --git a/doc/images/platform-icon-generic.png b/doc/images/platform-icon-generic.png Binary files differdeleted file mode 100644 index 90fc36a08..000000000 --- a/doc/images/platform-icon-generic.png +++ /dev/null diff --git a/doc/images/platform-icon-osx.png b/doc/images/platform-icon-osx.png Binary files differdeleted file mode 100644 index 0bd6582c4..000000000 --- a/doc/images/platform-icon-osx.png +++ /dev/null diff --git a/doc/images/platform-icon-win.png b/doc/images/platform-icon-win.png Binary files differdeleted file mode 100644 index 828259861..000000000 --- a/doc/images/platform-icon-win.png +++ /dev/null diff --git a/doc/images/platform-icons.png b/doc/images/platform-icons.png Binary files differdeleted file mode 100644 index d6624a5a6..000000000 --- a/doc/images/platform-icons.png +++ /dev/null diff --git a/doc/images/ryan-speaker.jpg b/doc/images/ryan-speaker.jpg Binary files differdeleted file mode 100644 index c0f626344..000000000 --- a/doc/images/ryan-speaker.jpg +++ /dev/null diff --git a/doc/images/sponsored.png b/doc/images/sponsored.png Binary files differdeleted file mode 100644 index e7564e169..000000000 --- a/doc/images/sponsored.png +++ /dev/null diff --git a/doc/images/twitter-bird.png b/doc/images/twitter-bird.png Binary files differdeleted file mode 100644 index b619b2a0d..000000000 --- a/doc/images/twitter-bird.png +++ /dev/null diff --git a/doc/images/yahoo-logo.png b/doc/images/yahoo-logo.png Binary files differdeleted file mode 100644 index 689d21b71..000000000 --- a/doc/images/yahoo-logo.png +++ /dev/null diff --git a/doc/index.html b/doc/index.html deleted file mode 100644 index c38631653..000000000 --- a/doc/index.html +++ /dev/null @@ -1,199 +0,0 @@ -<!doctype html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <link type="image/x-icon" rel="icon" href="favicon.ico"> - <link type="image/x-icon" rel="shortcut icon" href="favicon.ico"> - <link rel="stylesheet" href="pipe.css"> - <link rel="stylesheet" href="sh_vim-dark.css"> - <link rel="alternate" - type="application/rss+xml" - title="node blog" - href="http://feeds.feedburner.com/nodejs/123123123"> - <title>node.js</title> - </head> - <body id="front"> - <div id="intro"> - <img id="logo" src="http://nodejs.org/images/logo.png" alt="node.js"> - - <p>Node.js is a platform built on <a - href="http://code.google.com/p/v8/">Chrome's JavaScript runtime</a> - for easily building fast, scalable network applications. Node.js - uses an event-driven, non-blocking I/O model that makes it - lightweight and efficient, perfect for data-intensive real-time - applications that run across distributed devices.</p> - - <p>Current Version: __VERSION__</p> - - <div class=buttons> - <a href="http://nodejs.org/dist/__VERSION__/node-__VERSION__.tar.gz" class="button downloadbutton" id="downloadbutton">INSTALL</a> - - <a href="download/" class=button id="all-dl-options">Downloads</a - ><a href="api/" class="button" id="docsbutton">API Docs</a> - </div> - - <a href="http://github.com/joyent/node"><img class="forkme" src="http://nodejs.org/images/forkme.png" alt="Fork me on GitHub"></a> - </div> - - <div id="quotes" class="clearfix"> - <h2>Node.js in the Industry</h2> - <ul> - <li class="microsoft"><img src="http://nodejs.org/images/microsoft-logo.png" height=34> - <p>Node gives Azure users the first end-to-end JavaScript - experience for the development of a whole new class of real-time - applications. - <br> - <a href="https://www.windowsazure.com/en-us/develop/nodejs">Claudio Caldato</a> - <br> - <span>Principal Program Manager, Microsoft Open Technologies, Inc.</span></p> - </li> - - <li class="ebay"><img src="http://nodejs.org/images/ebay-logo.png" height=34> - <p>Node’s evented I/O model freed us from worrying about locking - and concurrency issues that are common with multithreaded async - I/O. - <br> - <a href="http://www.ebaytechblog.com/2011/11/30/announcing-ql-io/">Subbu Allamarju</a> - <br> - <span>Principal Member, Technical Staff</span></p></li> - - <li class="linkedin"><img src="http://nodejs.org/images/linkedin-logo.png" height=34> - <p>On the server side, our entire mobile software stack is - completely built in Node. One reason was scale. The second is - Node showed us huge performance gains. - <br> - <a href="http://venturebeat.com/2011/08/16/linkedin-node/">Kiran Prasad</a> - <br> - <span>Director of Engineering, Mobile</span></p></li> - - <li class="yahoo"><img src="http://nodejs.org/images/yahoo-logo.png" height=34> - <p>Node.js is the execution core of Manhattan. Allowing - developers to build one code base using one language – that is - the nirvana for developers. - <br> - <a href="http://developer.yahoo.com/blogs/ydn/posts/2011/11/yahoo-announces-cocktails-%E2%80%93-shaken-not-stirred/">Renaud Waldura</a> - <br> - <span>Sr. Product Manger, Cocktail</span></p></li> - </ul> - </div> - - <div id="content" class="clearfix"> - <div id="column1"> - <h2>An example: Webserver</h2> - <p>This simple web server written in Node responds with "Hello World" for every request.</p> - <pre> -var http = require('http'); -http.createServer(function (req, res) { - res.writeHead(200, {'Content-Type': 'text/plain'}); - res.end('Hello World\n'); -}).listen(1337, '127.0.0.1'); -console.log('Server running at http://127.0.0.1:1337/');</pre> - - <p>To run the server, put the code into a file - <code>example.js</code> and execute it with the - <code>node</code> program from the command line:</p> - <pre class="sh_none"> -% node example.js -Server running at http://127.0.0.1:1337/</pre> - - <p>Here is an example of a simple TCP server which listens on port 1337 and echoes whatever you send it:</p> - - <pre> -var net = require('net'); - -var server = net.createServer(function (socket) { - socket.write('Echo server\r\n'); - socket.pipe(socket); -}); - -server.listen(1337, '127.0.0.1');</pre> - - <!-- <p>Ready to dig in? <a href="">Download the latest version</a> of node.js or learn how other organizations are <a href="">using the technology</a>.</p> --> - </div> - <div id="column2"> - <h2>Featured</h2> - <a href="http://www.youtube.com/watch?v=jo_B4LTHi3I"><img src="http://nodejs.org/images/ryan-speaker.jpg"></a> - A guided introduction to Node - - <h2>Explore Node.js</h2> - <ul id="explore"> - <li><a href="about/" class="explore">About</a><br><span>Technical overview</span></li> - <li><a href="http://npmjs.org/" class="explore">npm Registry</a><br><span>Modules, resources and more</span></li> - <li><a href="http://nodejs.org/api/" class="explore">Documentation</a><br><span>API Specifications</span></li> - <li><a href="http://blog.nodejs.org" class="explore">Node.js Blog</a><br><span>Insight, perspective and events</span></li> - <li><a href="community/" class="explore">Community</a><br><span>Mailing lists, blogs, and more</span></li> - <li><a href="logos/" class="explore">Logos</a><br><span>Logo and desktop background</span></li> - <li><a href="http://jobs.nodejs.org/" class="explore">Jobs</a><br><ol class="jobs"><!-- JOBS --><!-- JOBS --></ol></li> - </ul> - </div> -</div> - - <div id="footer"> - <a href="http://joyent.com" class="joyent-logo">Joyent</a> - <ul class="clearfix"> - <li><a href="/">Node.js</a></li> - <li><a href="/download/">Download</a></li> - <li><a href="/about/">About</a></li> - <li><a href="http://npmjs.org/">npm Registry</a></li> - <li><a href="http://nodejs.org/api/">Docs</a></li> - <li><a href="http://blog.nodejs.org">Blog</a></li> - <li><a href="/community/">Community</a></li> - <li><a href="/logos/">Logos</a></li> - <li><a href="http://jobs.nodejs.org/">Jobs</a></li> - <!-- <li><a hrfe="http://twitter.com/nodejs" class="twitter">@nodejs</a></li> --> - </ul> - - <p>Copyright <a href="http://joyent.com/">Joyent, Inc</a>, Node.js is a <a href="/trademark-policy.pdf">trademark</a> of Joyent, Inc. View <a href="https://raw.github.com/joyent/node/__VERSION__/LICENSE">license</a>.</p> - </div> - - - <script src="sh_main.js"></script> - <script src="sh_javascript.min.js"></script> - <script>highlight(undefined, undefined, 'pre');</script> - - <script> - window._gaq = [['_setAccount', 'UA-10874194-2'], ['_trackPageview']]; - (function(d, t) { - var g = d.createElement(t), - s = d.getElementsByTagName(t)[0]; - g.src = '//www.google-analytics.com/ga.js'; - s.parentNode.insertBefore(g, s); - }(document, 'script')); - ;(function(d,n) { - var os = n.platform.match(/(Win|Mac|Linux)/); - var x = n.userAgent.match(/x86_64|Win64|WOW64/) || - n.cpuClass === 'x64' ? 'x64' : 'x86'; - var base = 'http://nodejs.org/dist/__VERSION__/'; - var href = 'node-__VERSION__.tar.gz'; - var db = d.getElementById('downloadbutton'); - var d2; - switch (os && os[1]) { - case 'Mac': - href = 'node-__VERSION__.pkg'; - break; - case 'Win': - href = 'node-__VERSION__-' + x + '.msi'; - if (x === 'x64') href = 'x64/' + href; - break; - - // TODO uncomment when we have these - // case 'Linux': - // // two buttons: .deb and .rpm - // href = 'node-__VERSION__-' + x + '.rpm'; - // var d2 = document.createElement('a'); - // d2.href = base + 'node-__VERSION__-' + x + '.deb'; - // d2.className = 'button downloadbutton'; - // d2.innerHTML = 'INSTALL .deb'; - // db.innerHTML = 'INSTALL .rpm'; - // db.parentNode.insertBefore(d2, db); - // break; - } - - db.href = base + href; - // if there's one download option, then download it at #download - if (location.hash === '#download' && !d2) - location.replace(b.href); - })(document,navigator); - </script> - </body> -</html> diff --git a/doc/logos/index.html b/doc/logos/index.html deleted file mode 100644 index be0559252..000000000 --- a/doc/logos/index.html +++ /dev/null @@ -1,93 +0,0 @@ -<!doctype html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <link type="image/x-icon" rel="icon" href="../favicon.ico"> - <link type="image/x-icon" rel="shortcut icon" href="../favicon.ico"> - <link rel="stylesheet" href="../pipe.css"> - <link rel="stylesheet" href="../sh_vim-dark.css"> - <link rel="alternate" - type="application/rss+xml" - title="node blog" - href="http://feeds.feedburner.com/nodejs/123123123"> - <title>node.js</title> - </head> - <body class="int" id="logos"> - <div id="intro" class="interior"> - <a href="/" title="Go back to the home page"> - <img id="logo" src="http://nodejs.org/logo.png" alt="node.js"> - </a> - </div> - <div id="content" class="clearfix"> - <div id="column2" class="interior"> - <ul> - <li><a href="/" class="home">Home</a></li> - <li><a href="/#download" class="download">Download</a></li> - <li><a href="/about/" class="about">About</a></li> - <li><a href="http://npmjs.org/" class="npm">npm Registry</a></li> - <li><a href="http://nodejs.org/api/" class="docs">Docs</a></li> - <li><a href="http://blog.nodejs.org" class="blog">Blog</a></li> - <li><a href="/community/" class="community">Community</a></li> - <li><a href="/logos/" class="logos current">Logos</a></li> - <li><a href="http://jobs.nodejs.org/" class="jobs">Jobs</a></li> - </ul> - <p class="twitter"><a href="http://twitter.com/nodejs">@nodejs</a></p> - - </div> - - <div id="column1" class="interior"> - <h2>Logo Downloads</h2> - <table border="0" cellspacing="0" cellpadding="10"> - <tr> - <td bgcolor="#FFFFFF"><a href="http://nodejs.org/images/logos/nodejs-light.eps"><img src="http://nodejs.org/images/logos/nodejs.png" alt="Node.js dark" width="212" height="114" border="0"></a></td> - <td bgcolor="#46483E"><a href="http://nodejs.org/images/logos/nodejs-dark.eps"><img src="http://nodejs.org/images/logos/nodejs-dark.png" alt="Node.js dark" width="212" height="114" border="0"></a></td> - </tr> - <tr> - <td><a href="http://nodejs.org/images/logos/nodejs-light.eps">Node.js standard EPS</a></td> - <td><a href="http://nodejs.org/images/logos/nodejs-dark.eps">Node.js reversed EPS</a></td> - </tr> - <tr> - <td bgcolor="#8BC84B"><a href="http://nodejs.org/images/logos/nodejs-green.eps"><img src="http://nodejs.org/images/logos/nodejs-green.png" alt="Node.js dark" width="212" height="114" border="0"></a><a href="http://nodejs.org/images/logos/nodejs-dark.eps"></a></td> - <td bgcolor="#ffffff"><a href="http://nodejs.org/images/logos/nodejs-black.eps"><img src="http://nodejs.org/images/logos/nodejs-black.png" alt="Node.js dark" width="212" height="114" border="0"></a></td> - </tr> - <tr> - <td><a href="http://nodejs.org/images/logos/nodejs-green.eps">Node.js bright EPS</a></td> - <td><a href="http://nodejs.org/images/logos/nodejs-black.eps">Node.js 1 color EPS</a></td> - </tr> - </table> - <h2>Desktop Background</h2> - <p><img src="http://nodejs.org/images/logos/monitor.png" width="525" height="398" alt="Screensavers"></p> - <p>Select your screen resolution:<a href="http://nodejs.org/images/logos/nodejs-1024x768.png"><br> - <span class="desktops">1024 x 768</span></a><span class="desktops"> | <a href="http://nodejs.org/images/logos/nodejs-1280x1024.png">1280 x 1024</a> | <a href="http://nodejs.org/images/logos/nodejs-1440x900.png">1440 x 900</a> | <a href="http://nodejs.org/images/logos/nodejs-1920x1200.png">1920 x 1200</a> | <a href="http://nodejs.org/images/logos/nodejs-2560x1440.png">2560 x 1440</a></span></p> - - </div> -</div> - <div id="footer"> - <a href="http://joyent.com" class="joyent-logo">Joyent</a> - <ul class="clearfix"> - <li><a href="/">Node.js</a></li> - <li><a href="/#download">Download</a></li> - <li><a href="/about/">About</a></li> - <li><a href="http://npmjs.org/">npm Registry</a></li> - <li><a href="http://nodejs.org/api/">Docs</a></li> - <li><a href="http://blog.nodejs.org">Blog</a></li> - <li><a href="/community/">Community</a></li> - <li><a href="/logos/">Logos</a></li> - <li><a href="http://jobs.nodejs.org/">Jobs</a></li> - <li><a href="http://twitter.com/nodejs" class="twitter">@nodejs</a></li> - </ul> - - <p>Copyright <a href="http://joyent.com/">Joyent, Inc</a>., Node.js is a <a href="/trademark-policy.pdf">trademark of Joyent, Inc</a>., <a href="https://raw.github.com/joyent/node/__VERSION__/LICENSE">View License</a></p> - </div> - - <script> - window._gaq = [['_setAccount', 'UA-10874194-2'], ['_trackPageview']]; - (function(d, t) { - var g = d.createElement(t), - s = d.getElementsByTagName(t)[0]; - g.src = '//www.google-analytics.com/ga.js'; - s.parentNode.insertBefore(g, s); - }(document, 'script')); - </script> -</body> -</html> diff --git a/doc/mac_osx_nodejs_installer_logo.png b/doc/mac_osx_nodejs_installer_logo.png Binary files differdeleted file mode 100644 index 8570d914f..000000000 --- a/doc/mac_osx_nodejs_installer_logo.png +++ /dev/null diff --git a/doc/node.1 b/doc/node.1 deleted file mode 100644 index a381dcf33..000000000 --- a/doc/node.1 +++ /dev/null @@ -1,448 +0,0 @@ -.TH NODE.JS "1" "2010" "" "" - - -.SH "NAME" -node \- Server-side JavaScript - -.SH SYNOPSIS - - -.B node -[ -.B \-v -] -[ -.B \-\-debug -| -.B \-\-debug-brk -] -[ -.B \-\-v8-options -] -.br - [ -.B \-e -.I command -| -.I script.js -] -[ -.I arguments -] - -Execute without arguments to start the REPL. - - -.SH DESCRIPTION - -Node is a set of libraries for javascript which allows -it to be used outside of the browser. It is primarily -focused on creating simple, easy to build network clients -and servers. - - -.SH OPTIONS - - -v, --version print node's version - - -e, --eval script evaluate script - - -p, --print print result of --eval - - -i, --interactive always enter the REPL even if stdin - does not appear to be a terminal - - --no-deprecation silence deprecation warnings - - --trace-deprecation show stack traces on deprecations - - --throw-deprecation throw errors on deprecations - - --v8-options print v8 command line options - - --max-stack-size=val set max v8 stack size (bytes) - - -.SH ENVIRONMENT VARIABLES - -.IP NODE_PATH -\':\'\-separated list of directories prefixed to the module search path. - -.IP NODE_MODULE_CONTEXTS -If set to 1 then modules will load in their own global contexts. - -.IP NODE_DISABLE_COLORS -If set to 1 then colors will not be used in the REPL. - -.SH V8 OPTIONS - - --use_strict (enforce strict mode) - type: bool default: false - --es5_readonly (activate correct semantics for inheriting readonliness) - type: bool default: false - --es52_globals (activate new semantics for global var declarations) - type: bool default: false - --harmony_typeof (enable harmony semantics for typeof) - type: bool default: false - --harmony_scoping (enable harmony block scoping) - type: bool default: false - --harmony_modules (enable harmony modules (implies block scoping)) - type: bool default: false - --harmony_proxies (enable harmony proxies) - type: bool default: false - --harmony_collections (enable harmony collections (sets, maps, and weak maps)) - type: bool default: false - --harmony (enable all harmony features (except typeof)) - type: bool default: false - --packed_arrays (optimizes arrays that have no holes) - type: bool default: false - --smi_only_arrays (tracks arrays with only smi values) - type: bool default: true - --clever_optimizations (Optimize object size, Array shift, DOM strings and string +) - type: bool default: true - --unbox_double_arrays (automatically unbox arrays of doubles) - type: bool default: true - --string_slices (use string slices) - type: bool default: true - --crankshaft (use crankshaft) - type: bool default: true - --hydrogen_filter (optimization filter) - type: string default: - --use_range (use hydrogen range analysis) - type: bool default: true - --eliminate_dead_phis (eliminate dead phis) - type: bool default: true - --use_gvn (use hydrogen global value numbering) - type: bool default: true - --use_canonicalizing (use hydrogen instruction canonicalizing) - type: bool default: true - --use_inlining (use function inlining) - type: bool default: true - --max_inlined_source_size (maximum source size in bytes considered for a single inlining) - type: int default: 600 - --max_inlined_nodes (maximum number of AST nodes considered for a single inlining) - type: int default: 196 - --max_inlined_nodes_cumulative (maximum cumulative number of AST nodes considered for inlining) - type: int default: 196 - --loop_invariant_code_motion (loop invariant code motion) - type: bool default: true - --collect_megamorphic_maps_from_stub_cache (crankshaft harvests type feedback from stub cache) - type: bool default: true - --hydrogen_stats (print statistics for hydrogen) - type: bool default: false - --trace_hydrogen (trace generated hydrogen to file) - type: bool default: false - --trace_phase (trace generated IR for specified phases) - type: string default: Z - --trace_inlining (trace inlining decisions) - type: bool default: false - --trace_alloc (trace register allocator) - type: bool default: false - --trace_all_uses (trace all use positions) - type: bool default: false - --trace_range (trace range analysis) - type: bool default: false - --trace_gvn (trace global value numbering) - type: bool default: false - --trace_representation (trace representation types) - type: bool default: false - --stress_pointer_maps (pointer map for every instruction) - type: bool default: false - --stress_environments (environment for every instruction) - type: bool default: false - --deopt_every_n_times (deoptimize every n times a deopt point is passed) - type: int default: 0 - --trap_on_deopt (put a break point before deoptimizing) - type: bool default: false - --deoptimize_uncommon_cases (deoptimize uncommon cases) - type: bool default: true - --polymorphic_inlining (polymorphic inlining) - type: bool default: true - --use_osr (use on-stack replacement) - type: bool default: true - --array_bounds_checks_elimination (perform array bounds checks elimination) - type: bool default: false - --array_index_dehoisting (perform array index dehoisting) - type: bool default: false - --trace_osr (trace on-stack replacement) - type: bool default: false - --stress_runs (number of stress runs) - type: int default: 0 - --optimize_closures (optimize closures) - type: bool default: true - --inline_construct (inline constructor calls) - type: bool default: true - --inline_arguments (inline functions with arguments object) - type: bool default: true - --loop_weight (loop weight for representation inference) - type: int default: 1 - --optimize_for_in (optimize functions containing for-in loops) - type: bool default: true - --experimental_profiler (enable all profiler experiments) - type: bool default: true - --watch_ic_patching (profiler considers IC stability) - type: bool default: false - --frame_count (number of stack frames inspected by the profiler) - type: int default: 1 - --self_optimization (primitive functions trigger their own optimization) - type: bool default: false - --direct_self_opt (call recompile stub directly when self-optimizing) - type: bool default: false - --retry_self_opt (re-try self-optimization if it failed) - type: bool default: false - --count_based_interrupts (trigger profiler ticks based on counting instead of timing) - type: bool default: false - --interrupt_at_exit (insert an interrupt check at function exit) - type: bool default: false - --weighted_back_edges (weight back edges by jump distance for interrupt triggering) - type: bool default: false - --interrupt_budget (execution budget before interrupt is triggered) - type: int default: 5900 - --type_info_threshold (percentage of ICs that must have type info to allow optimization) - type: int default: 15 - --self_opt_count (call count before self-optimization) - type: int default: 130 - --trace_opt_verbose (extra verbose compilation tracing) - type: bool default: false - --debug_code (generate extra code (assertions) for debugging) - type: bool default: false - --code_comments (emit comments in code disassembly) - type: bool default: false - --enable_sse2 (enable use of SSE2 instructions if available) - type: bool default: true - --enable_sse3 (enable use of SSE3 instructions if available) - type: bool default: true - --enable_sse4_1 (enable use of SSE4.1 instructions if available) - type: bool default: true - --enable_cmov (enable use of CMOV instruction if available) - type: bool default: true - --enable_rdtsc (enable use of RDTSC instruction if available) - type: bool default: true - --enable_sahf (enable use of SAHF instruction if available (X64 only)) - type: bool default: true - --enable_vfp3 (enable use of VFP3 instructions if available - this implies enabling ARMv7 instructions (ARM only)) - type: bool default: true - --enable_armv7 (enable use of ARMv7 instructions if available (ARM only)) - type: bool default: true - --enable_fpu (enable use of MIPS FPU instructions if available (MIPS only)) - type: bool default: true - --expose_natives_as (expose natives in global object) - type: string default: NULL - --expose_debug_as (expose debug in global object) - type: string default: NULL - --expose_gc (expose gc extension) - type: bool default: false - --expose_externalize_string (expose externalize string extension) - type: bool default: false - --stack_trace_limit (number of stack frames to capture) - type: int default: 10 - --builtins_in_stack_traces (show built-in functions in stack traces) - type: bool default: false - --disable_native_files (disable builtin natives files) - type: bool default: false - --inline_new (use fast inline allocation) - type: bool default: true - --stack_trace_on_abort (print a stack trace if an assertion failure occurs) - type: bool default: true - --trace (trace function calls) - type: bool default: false - --mask_constants_with_cookie (use random jit cookie to mask large constants) - type: bool default: true - --lazy (use lazy compilation) - type: bool default: true - --trace_opt (trace lazy optimization) - type: bool default: false - --trace_opt_stats (trace lazy optimization statistics) - type: bool default: false - --opt (use adaptive optimizations) - type: bool default: true - --always_opt (always try to optimize functions) - type: bool default: false - --prepare_always_opt (prepare for turning on always opt) - type: bool default: false - --trace_deopt (trace deoptimization) - type: bool default: false - --min_preparse_length (minimum length for automatic enable preparsing) - type: int default: 1024 - --always_full_compiler (try to use the dedicated run-once backend for all code) - type: bool default: false - --trace_bailout (print reasons for falling back to using the classic V8 backend) - type: bool default: false - --compilation_cache (enable compilation cache) - type: bool default: true - --cache_prototype_transitions (cache prototype transitions) - type: bool default: true - --trace_debug_json (trace debugging JSON request/response) - type: bool default: false - --debugger_auto_break (automatically set the debug break flag when debugger commands are in the queue) - type: bool default: true - --enable_liveedit (enable liveedit experimental feature) - type: bool default: true - --break_on_abort (always cause a debug break before aborting) - type: bool default: true - --stack_size (default size of stack region v8 is allowed to use (in kBytes)) - type: int default: 984 - --max_stack_trace_source_length (maximum length of function source code printed in a stack trace.) - type: int default: 300 - --always_inline_smi_code (always inline smi code in non-opt code) - type: bool default: false - --max_new_space_size (max size of the new generation (in kBytes)) - type: int default: 0 - --max_old_space_size (max size of the old generation (in Mbytes)) - type: int default: 0 - --max_executable_size (max size of executable memory (in Mbytes)) - type: int default: 0 - --gc_global (always perform global GCs) - type: bool default: false - --gc_interval (garbage collect after <n> allocations) - type: int default: -1 - --trace_gc (print one trace line following each garbage collection) - type: bool default: false - --trace_gc_nvp (print one detailed trace line in name=value format after each garbage collection) - type: bool default: false - --print_cumulative_gc_stat (print cumulative GC statistics in name=value format on exit) - type: bool default: false - --trace_gc_verbose (print more details following each garbage collection) - type: bool default: false - --trace_fragmentation (report fragmentation for old pointer and data pages) - type: bool default: false - --collect_maps (garbage collect maps from which no objects can be reached) - type: bool default: true - --flush_code (flush code that we expect not to use again before full gc) - type: bool default: true - --incremental_marking (use incremental marking) - type: bool default: true - --incremental_marking_steps (do incremental marking steps) - type: bool default: true - --trace_incremental_marking (trace progress of the incremental marking) - type: bool default: false - --use_idle_notification (Use idle notification to reduce memory footprint.) - type: bool default: true - --send_idle_notification (Send idle notification between stress runs.) - type: bool default: false - --use_ic (use inline caching) - type: bool default: true - --native_code_counters (generate extra code for manipulating stats counters) - type: bool default: false - --always_compact (Perform compaction on every full GC) - type: bool default: false - --lazy_sweeping (Use lazy sweeping for old pointer and data spaces) - type: bool default: true - --never_compact (Never perform compaction on full GC - testing only) - type: bool default: false - --compact_code_space (Compact code space on full non-incremental collections) - type: bool default: true - --cleanup_code_caches_at_gc (Flush inline caches prior to mark compact collection and flush code caches in maps during mark compact cycle.) - type: bool default: true - --random_seed (Default seed for initializing random generator (0, the default, means to use system random).) - type: int default: 0 - --use_verbose_printer (allows verbose printing) - type: bool default: true - --allow_natives_syntax (allow natives syntax) - type: bool default: false - --trace_sim (Trace simulator execution) - type: bool default: false - --check_icache (Check icache flushes in ARM and MIPS simulator) - type: bool default: false - --stop_sim_at (Simulator stop after x number of instructions) - type: int default: 0 - --sim_stack_alignment (Stack alignment in bytes in simulator (4 or 8, 8 is default)) - type: int default: 8 - --trace_exception (print stack trace when throwing exceptions) - type: bool default: false - --preallocate_message_memory (preallocate some memory to build stack traces.) - type: bool default: false - --randomize_hashes (randomize hashes to avoid predictable hash collisions (with snapshots this option cannot override the baked-in seed)) - type: bool default: true - --hash_seed (Fixed seed to use to hash property keys (0 means random)(with snapshots this option cannot override the baked-in seed)) - type: int default: 0 - --preemption (activate a 100ms timer that switches between V8 threads) - type: bool default: false - --regexp_optimization (generate optimized regexp code) - type: bool default: true - --testing_bool_flag (testing_bool_flag) - type: bool default: true - --testing_int_flag (testing_int_flag) - type: int default: 13 - --testing_float_flag (float-flag) - type: float default: 2.500000 - --testing_string_flag (string-flag) - type: string default: Hello, world! - --testing_prng_seed (Seed used for threading test randomness) - type: int default: 42 - --testing_serialization_file (file in which to serialize heap) - type: string default: /tmp/serdes - --help (Print usage message, including flags, on console) - type: bool default: true - --dump_counters (Dump counters on exit) - type: bool default: false - --debugger (Enable JavaScript debugger) - type: bool default: false - --remote_debugger (Connect JavaScript debugger to the debugger agent in another process) - type: bool default: false - --debugger_agent (Enable debugger agent) - type: bool default: false - --debugger_port (Port to use for remote debugging) - type: int default: 5858 - --map_counters (Map counters to a file) - type: string default: - --js_arguments (Pass all remaining arguments to the script. Alias for "--".) - type: arguments default: - --debug_compile_events (Enable debugger compile events) - type: bool default: true - --debug_script_collected_events (Enable debugger script collected events) - type: bool default: true - --gdbjit (enable GDBJIT interface (disables compacting GC)) - type: bool default: false - --gdbjit_full (enable GDBJIT interface for all code objects) - type: bool default: false - --gdbjit_dump (dump elf objects with debug info to disk) - type: bool default: false - --gdbjit_dump_filter (dump only objects containing this substring) - type: string default: - --force_marking_deque_overflows (force overflows of marking deque by reducing its size to 64 words) - type: bool default: false - --stress_compaction (stress the GC compactor to flush out bugs (implies --force_marking_deque_overflows)) - type: bool default: false - --log (Minimal logging (no API, code, GC, suspect, or handles samples).) - type: bool default: false - --log_all (Log all events to the log file.) - type: bool default: false - --log_runtime (Activate runtime system %Log call.) - type: bool default: false - --log_api (Log API events to the log file.) - type: bool default: false - --log_code (Log code events to the log file without profiling.) - type: bool default: false - --log_gc (Log heap samples on garbage collection for the hp2ps tool.) - type: bool default: false - --log_handles (Log global handle events.) - type: bool default: false - --log_snapshot_positions (log positions of (de)serialized objects in the snapshot.) - type: bool default: false - --log_suspect (Log suspect operations.) - type: bool default: false - --prof (Log statistical profiling information (implies --log-code).) - type: bool default: false - --prof_auto (Used with --prof, starts profiling automatically) - type: bool default: true - --prof_lazy (Used with --prof, only does sampling and logging when profiler is active (implies --noprof_auto).) - type: bool default: false - --prof_browser_mode (Used with --prof, turns on browser-compatible mode for profiling.) - type: bool default: true - --log_regexp (Log regular expression execution.) - type: bool default: false - --sliding_state_window (Update sliding state window counters.) - type: bool default: false - --logfile (Specify the name of the log file.) - type: string default: v8.log - --ll_prof (Enable low-level linux profiler.) - type: bool default: false - -.SH RESOURCES AND DOCUMENTATION - -See the website for documentation http://nodejs.org/ - -Mailing list: http://groups.google.com/group/nodejs - -IRC: irc.freenode.net #node.js diff --git a/doc/pipe.css b/doc/pipe.css deleted file mode 100644 index b03d82065..000000000 --- a/doc/pipe.css +++ /dev/null @@ -1,668 +0,0 @@ -html { - -webkit-font-smoothing: antialiased; - -webkit-text-stroke: .1px; -} - -body { - background: #46483e; - color: #eee; - font-size: 12px; - line-height: 180%; - font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Verdana, Tahoma, sans-serif; - margin: 0; - padding-top: 40px; - border-top: 6px #8cc84b solid; -} - -body.alt { - background: white; - color: #46483e; -} - -body.int { - padding-top: 49px; -} - -img { - border: 0; -} - -ul { - margin: 0px; - padding: 0px; -} - -@media all and (min-height: 650px) { - #toc { - position: fixed; - } -} - -#toctitle { - display: none; -} - -h1, h2, h3, h4 { - color: #d2d8ba; - font-family: Helvetica, Arial, sans-serif; - margin-top: 2em; - margin-right: 0; - margin-bottom: 10px; - margin-left: 0; - text-transform: uppercase; -} - -h1 { - font-family: Georgia, FreeSerif, Times, serif; - font-size: 30px; - line-height: 36px; - text-transform: none; - color: #669900; - font-weight: normal; - margin: 15px 0 11px; -} - -h2 { - font-size: 12px; - font-weight: normal; -} - -h1 code, h2 code, h3 code, h4 code, -h1 a, h2 a, h3 a, h4 a { - color: inherit; - font-size: inherit; -} - -#intro { - width: 775px; - margin: 0 auto; - text-align: center; - color: #d2d8ba; -} - -#intro p { - width: 680px; - line-height: 180%; - padding-top: 30px; - margin: 0 auto; - font-size: 14px; -} - -#intro.interior #logo { - margin-left: -298px; -} - -#intro p.version { - padding-top: 10px; - font-size: 12px; -} - -#intro .buttons { - height: auto; - overflow: hidden; - _zoom: 1; - width: 300px; - margin: 0 auto; -} - -#intro .button { - font-family: helvetica,arial,sans-serif; - font-size: 12px; - line-height: 36px; - -webkit-text-transform: uppercase; - -moz-text-transform: uppercase; - text-transform: uppercase; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - - -webkit-transition: .2s all ease-in-out; - -moz-transition: .2s all ease-in-out; - transition: .2s all ease-in-out; - - margin: 10px 4px; - display: inline-block; - color: #46483e; - background-color: #9a9f8b; - width: 96px; -} - -#intro .forkme { - position: absolute; - top: 0; - right: 0; - border: 0; -} - -#intro .button:hover { - text-decoration: none; - background-color: #aab293; -} - -#intro #docsbutton { - clear: left; -} - -#intro .downloadbutton { - background-color: #8BC84B; - width: 200px; - font-size: 14px; - font-weight: bold; - display: block; - margin: 30px auto 0px auto; -} - -#intro .downloadbutton:hover { - background-color: #73a53e; -} - -#quotes { - text-align: center; - width: 100%; - background-color: #33342d; - margin-top: 40px; - padding-top: 20px; - padding-bottom: 20px; -} - -#quotes h2 { - margin-top: 0; -} - -#quotes ul { - display: block; - width: 775px; - margin: 0 auto; - padding-top: 20px; -} - -#quotes ul li { - display: block; - text-align: left; - width: 180px; - float: left; - padding-right: 15px; - font-size: 11px; -} - -#quotes ul li:last-child { - padding-right: 0; -} - -#quotes ul li p span { - font-size: 10px; -} - -#quotes ul li p { - color: #D2D8BA -} - -#content { - width: 775px; - margin: 0 auto; - overflow: visible; - clear: both; - display: block; -} - -.int #content { - width: 953px; -} - -#column1 { - width: 460px; - float: left; -} - -#content p, -#content ul { - font-size: 14px; - line-height: 24px; -} - -#content ul { - margin-top: 1em; -} - -#content table { - font-size: 14px; - line-height: 24px; - width: 100%; -} - -#download-page #installers { - width: 600px; - display: table; - margin-bottom: 1em; -} - -#download-page #installers ul { - width: auto; - text-align: center; - margin: 0 auto; - display: table-row; - width: 600px; -} - -#download-page #installers ul img { - display: block; - margin: 0 auto; -} - -#download-page #installers ul a { - display: block; - width: 100%; - text-decoration: none; - font-size: 16px; - padding-top: 1em; -} - -#download-page #installers ul a:hover, -#download-page #installers ul a:active { - background: #666; - color: #8cc84b; -} - -#download-page #installers ul li { - width: 33%; - display: table-cell; -} - -#download-page #installers a small { - font-size: 10px; - display: block; - color: #eee; -} - -#download-page #content th { - text-align: left; - width: 33%; -} - -#download-page #content table { - table-collapse: separate; -} - -#download-page #content td, -#download-page #content th { - border: 1px solid #666; -} - -#download-page #content td a { - display: block; - height: 100%; - width: 100%; - text-align: center; -} - -#download-page #content td a:hover, -#download-page #content td a:active { - background: #666; - color: #8cc84b; -} - -#front #content p { - font-size: 12px; -} - -#content h1 + p { - font-size: 18px; - line-height: 30px; - color: #46483e; - font-family: Georgia, FreeSerif, Times, serif; -} - -#column2 { - width: 260px; - float: right; -} - -#column1.interior { - width: 600px; - float: right; - padding-top: 11px; - font-size: 18px; - padding-right: 150px; -} - -#column2.interior { - width: 140px; - float: left; - margin-top: -54px; - overflow: visible; -} - -#column2.interior ul { - margin-left: 0; -} - -#column2.interior li { - list-style-type: none; -} - -#column2.interior li a { - display: block; - padding: 0 0 0 35px; - color: #878b78; - text-transform: uppercase; - text-decoration: none; - font-size: 11px; - line-height: 23px; -} - -#column2.interior li a.home { background: url(http://nodejs.org/images/icons-interior.png) no-repeat -156px 3px; } -#column2.interior li a.download { background: url(http://nodejs.org/images/icons-interior.png) no-repeat -156px -21px; } -#column2.interior li a.about { background: url(http://nodejs.org/images/icons-interior.png) no-repeat -156px -45px; } -#column2.interior li a.npm { background: url(http://nodejs.org/images/icons-interior.png) no-repeat -156px -69px; } -#column2.interior li a.docs { background: url(http://nodejs.org/images/icons-interior.png) no-repeat -156px -93px; } -#column2.interior li a.blog { background: url(http://nodejs.org/images/icons-interior.png) no-repeat -156px -117px; } -#column2.interior li a.community { background: url(http://nodejs.org/images/icons-interior.png) no-repeat -156px -141px; } -#column2.interior li a.logos { background: url(http://nodejs.org/images/icons-interior.png) no-repeat -156px -165px; } -#column2.interior li a.jobs { background: url(http://nodejs.org/images/icons-interior.png) no-repeat -156px -189px; } - -#column2.interior li a.home.current { background-position: 2px 3px; } -#column2.interior li a.download.current { background-position: 2px -21px; } -#column2.interior li a.about.current { background-position: 2px -45px; } -#column2.interior li a.npm.current { background-position: 2px -69px; } -#column2.interior li a.docs.current { background-position: 2px -93px; } -#column2.interior li a.blog.current { background-position: 2px -117px; } -#column2.interior li a.community.current { background-position: 2px -141px; } -#column2.interior li a.logos.current { background-position: 2px -165px; } -#column2.interior li a.jobs.current { background-position: 2px -189px; } - -#column2.interior li a.home:hover { background-position: -331px 3px; } -#column2.interior li a.download:hover { background-position: -331px -21px; } -#column2.interior li a.about:hover { background-position: -331px -45px; } -#column2.interior li a.npm:hover { background-position: -331px -69px; } -#column2.interior li a.docs:hover { background-position: -331px -93px; } -#column2.interior li a.blog:hover { background-position: -331px -117px; } -#column2.interior li a.community:hover { background-position: -331px -141px; } -#column2.interior li a.logos:hover { background-position: -331px -165px; } -#column2.interior li a.jobs:hover { background-position: -331px -189px; } - -#column2.interior li a.current { - color: #8cc84b; - font-weight: bold; -} - -#column2.interior li a:hover { - color: #000000; - text-decoration: none; -} - -#column2.interior li + li { - border-top: 1px solid #c1c7ac; - border-top: 1px solid #65675c; -} -.alt #column2.interior li + li { - border-top: 1px solid #c1c7ac; -} - -#column2.interior p.twitter { - padding-top: 20px; -} - -#column2.interior p.twitter a { - background: url(http://nodejs.org/images/twitter-bird.png) no-repeat 0 4px; - padding-left: 37px; -} - -.row { - padding-top: 10px; - padding-bottom: 10px; -} - -.row + .row { - border-top: 1px solid #626557; -} - -.row h2 { - font-size: 24px; - color: white; - text-transform: none; - font-family: Georgia, FreeSerif, Times, serif; - background: url(http://nodejs.org/images/community-icons.png) no-repeat; - padding-left: 45px; - padding-top: 6px; - padding-bottom: 10px; - margin-top: 10px; -} - -.row h2.github { background-position: left -92px; } -.row h2.mailing { background-position: left -308px; } -.row h2.periodicals { background-position: left -198px; padding-top: 9px; margin-top: 7px; } -.row h2.conferences { background-position: left -522px; } -.row h2.localized { background-position: left -414px; } -.row h2.irc { background-position: left -626px; } -.row h2.installers { background-position: left -522px; } - -.block { - width: 280px; - float: left; -} - -.block + .block { - margin-left: 20px; - width: 300px; -} - -#content .block p { - font-size: 13px; - line-height: 21px; -} - -#explore { - background: url(http://nodejs.org/images/home-icons.png) no-repeat left 17px; -} - -#explore li { - font-size: 12px; - list-style-type: none; - color: #d2d8ba; - line-height: 14px; - padding: 10px 0 10px 40px; - border-top: 1px solid #626557; -} - -#explore li span { -} - -#explore li a.explore { - text-transform: uppercase; -} - -#explore ol.jobs { - padding: 0; -} - -#explore ol.jobs li { - display: inline; - padding: 0; - border: none; -} - -#explore ol.jobs li:after { - content: ', '; -} - -#explore ol.jobs li:last-child:after { - content: ''; -} - -#footer { - width: 942px; - margin: 150px auto 55px auto; - padding: 0; -} - -#footer .joyent-logo { - display:block; - position:absolute; - overflow:hidden; - text-indent:-999em; - height:100px; - width:190px; - z-index:999; -} - -#footer p { - font-size: 11px; - line-height: 1em; - padding: 0 0 0 195px; - color: #666; - font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Verdana, Tahoma, sans-serif; -} - -#front #footer { - width: 775px; - margin: 50px auto 30px auto; - padding-top: 15px; -} - -#front #footer ul { - margin-right: 0; - padding-right: 0; -} - -#footer a { - text-decoration: none; - border: none; - color: #690; -} - -#footer a:hover { - color: #000; -} - -#front #footer a:hover { - color: #fff; -} - -#footer p a { - border-bottom: 1px dotted #690; - color: #878b78; -} - -#footer ul { - background: url(http://nodejs.org/images/footer-logo.png) left 17px no-repeat; - border-top: 1px solid #626557; - border-color: #90918b; - padding-top: 23px; - padding-left: 195px; - height: 26px; - margin-right: 137px; -} - -.alt #footer ul { - background-image: url(http://nodejs.org/images/footer-logo-alt.png); -} - -#footer ul li { - list-style-type: none; - float: left; - font-size: 12px; - margin: 0 !important; - height: 12px; -} - -#footer ul li a { - margin: 0; - padding: 0 6px 0 0; - display: block; - height: 12px; - line-height: 12px; -} - -#footer ul li + li { - margin-left: 3px; -} - -#footer ul li + li a { - padding: 0 6px 0 6px; - border-left: 1px solid #878b78; -} - -#footer ul li a.twitter { - background: url(http://nodejs.org/images/twitter-bird.png) no-repeat 5px 0px; - padding-left: 25px; -} - -pre, tt, code { - color: #d2d8ba; - font-size: 14px; - line-height: 22px; - font-family: Monaco, Consolas, "Lucida Console", monospace; - margin: 0; padding: 0; -} - -#front pre, #front tt, #front code { - font-size: 12px; - line-height: 22px; -} - -pre { - padding-left: 1em; - margin-left: -1em; - border-left-width: 1px; - border-left-style: solid; - border-left-color: #626557; -} - -.alt pre { - font-size: 14px; - margin-left: 0; - border-left: 2px solid #dadad7; - background-color: #f4f4f2; - color: #46483e; - padding: 1em 1.5em; - line-height: 2em; -} - -.alt code { - color: #996633; -} - -dd { - margin: 1em 0; - margin-left: 1em; -} - -a { - color: #690; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -.alt a { - background-color: #eff2db; - padding: 0 2px; -} - -.alt #intro a, -.alt #footer a { - background-color: transparent; -} - -.highlight { - background: #733; - padding: 0.2em 0; -} -.desktops { - font-size: 12px; -} - -.release { - margin: 0 0 0 2em; -} - -/* simpler clearfix */ -.clearfix:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} diff --git a/doc/robots.txt b/doc/robots.txt deleted file mode 100644 index 1f6fa9b16..000000000 --- a/doc/robots.txt +++ /dev/null @@ -1,6 +0,0 @@ -User-Agent: * -Disallow: /dist/ -Disallow: /docs/ -Allow: /dist/latest/ -Allow: /dist/latest/docs/api/ -Allow: /api/ diff --git a/doc/rss.xml b/doc/rss.xml deleted file mode 100644 index a96aa78f7..000000000 --- a/doc/rss.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<rss version="2.0" - xmlns:content="http://purl.org/rss/1.0/modules/content/" - xmlns:wfw="http://wellformedweb.org/CommentAPI/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:atom="http://www.w3.org/2005/Atom" - xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" - xmlns:slash="http://purl.org/rss/1.0/modules/slash/" - xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/" - > - -<channel> - <title>Node.js Blog</title> - <atom:link href="http://blog.nodejs.org<%= uri %>" rel="self" type="application/rss+xml" /> - <link>http://blog.nodejs.org/</link> - <description>The Blog about Node.js</description> - <lastBuildDate><%= new Date().toUTCString() %></lastBuildDate> - <language>en</language> - <sy:updatePeriod>weekly</sy:updatePeriod> - <sy:updateFrequency>1</sy:updateFrequency> - <generator>http://nodejs.org/</generator> - <image> - <url>http://nodejs.org/images/logo-light.png</url> - <title>Node.js</title> - <link>http://blog.nodejs.org/</link> - </image> - <% - posts.forEach(function(post) { - %> - <item> - <title><%= post.title %></title> - <link>http://blog.nodejs.org<%= post.permalink %></link> - <pubDate><%= post.date.toUTCString() %></pubDate> - <dc:creator><%= post.author %></dc:creator> - <category><![CDATA[<%= post.category %>]]></category> - - <guid isPermaLink="true">http://blog.nodejs.org<%= post.permalink %></guid> - <description><![CDATA[<%- post.content %>]]></description> - <content:encoded><![CDATA[<%- post.content %>]]></content:encoded> - </item> - <% - }); - %> -</channel> -</rss> diff --git a/doc/thin-white-stripe.jpg b/doc/thin-white-stripe.jpg Binary files differdeleted file mode 100644 index 8dc3d4ae8..000000000 --- a/doc/thin-white-stripe.jpg +++ /dev/null diff --git a/doc/trademark-policy.pdf b/doc/trademark-policy.pdf Binary files differdeleted file mode 100644 index 0fc73e73e..000000000 --- a/doc/trademark-policy.pdf +++ /dev/null diff --git a/doc/v0.4_announcement.html b/doc/v0.4_announcement.html deleted file mode 100644 index 7d68376bc..000000000 --- a/doc/v0.4_announcement.html +++ /dev/null @@ -1,98 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <style type="text/css"> - ul { - padding: 0; - margin: 0; - } - </style> - <link type="image/x-icon" rel="icon" href="favicon.ico" /> - <link type="image/x-icon" rel="shortcut icon" href="favicon.ico" /> - <link type="text/css" rel="stylesheet" href="pipe.css" /> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <title>node v0.4 announcement</title> - </head> - <body> - <h2>Second Stable Branch of Node released</h2> - - <p> - <a - href="https://github.com/ry/node/wiki/Migrating-from-v0.2-to-v0.3">Wiki - page detailing API changes between v0.4 and v0.2</a> - - <p> - Major changes since v0.2: - - <ul> - <li> Major overhaul of TLS/SSL system. Previously the binding to - OpenSSL was heavily interwoven into the socket code. This binding was - reworked to present each connection as a pair of "streams" instead: a - duplex encrypted stream and a duplex cleartext stream. The encrypted - stream is piped to a raw TCP socket using the general purpose - <code>Stream.prototype.pipe()</code> method. Functionality was - enhanced and API simplified. - - <li>Simpler HTTP client API with connection pools. - - <li> Cheaper <code>Buffer</code> allocation. Node uses - <code>Buffer</code> objects in many places - it was noticed that they - were relatively slow to allocate and difficult to garbage collect. The - implementation changed to use pure javascript objects instead of - an <code>ObjectWrap</code> which improved performance. - - <li> With a good amount of experience now, some modifications to the - module loading system were made to better support package managers. - In particular, npm was forced to resort to deep symlinks and "shim" - modules to work around missing features in <code>require()</code>. The main - changes are: - <ol> - <li><code>require()</code> calls realpath. That is, - it resolves symbolic links. This allows symlinked modules to make - relative requires. - - <li><code>require()</code> now has a primitive understanding of - <code>package.json</code>. It looks for the <code>main</code> - script. This allows <code>require()</code> to work on package - directories directly. - - <li>A specially named directory, <code>node_modules/</code>, is - searched in the current directory for any modules. This will - hopefully encourage programmers to bundle modules rather than - rely on a global namespace. - </ol> - Read more about these features in <a - href="https://github.com/ry/node/blob/01a864a29d64119054401784cd9255c3a813bdbc/doc/api/modules.markdown">the - module documentation</a>. - - <li> A half-complete but good start a native windows build with MinGW - is underway by Bert Builder. Build instructions can be found <a - href="https://github.com/ry/node/wiki/Building-node.js-on-mingw">on - the wiki</a>. - - <li> Node upgraded to the latest version of V8, <code>v3.1.2</code>. - This includes much work including V8's new compilation infrastructure - and a GDB plugin on Linux. - Read <a - href="https://github.com/ry/node/blob/583f2e599962f2664dbaafa0ae98a8d6c1242441/deps/v8/ChangeLog">the - full V8 ChangeLog</a>. - - <li>A new built-in client for V8's debugger was added to Node. It is - still very primitive but usable for simple task. There is a <a - href="http://vimeo.com/19465332">small introduction video</a> and - some <a - href="https://github.com/ry/node/blob/01a864a29d64119054401784cd9255c3a813bdbc/doc/api/debugger.markdown">documentation</a>. - - <li>An <code>os</code> module was added by Brian White which exposes - a lot of basic but useful system information: <code>os.cpus(), - os.freemem(), os.totalmem(), os.loadavg()</code> - - <li> And, of course, many of bug fixes. See the - <a - href="https://github.com/ry/node/blob/01a864a29d64119054401784cd9255c3a813bdbc/ChangeLog">full - changelog</a>. - - </ul> - - </body> -</html> diff --git a/tools/blog/README.md b/tools/blog/README.md deleted file mode 100644 index 52a3be7fd..000000000 --- a/tools/blog/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# node-blog-gen - -Generates the node blog from the markdown files in doc/blog/. - - diff --git a/tools/blog/generate.js b/tools/blog/generate.js deleted file mode 100644 index fa101dc0d..000000000 --- a/tools/blog/generate.js +++ /dev/null @@ -1,270 +0,0 @@ -#!/usr/bin/env node -var fs = require('fs'); -var marked = require('marked'); -var mkdirp = require('mkdirp'); -var glob = require('glob'); -var ejs = require('ejs'); -var path = require('path'); -var semver = require('semver'); - -var input = path.resolve(process.argv[2]); -var output = path.resolve(process.argv[3]); -var template = path.resolve(process.argv[4]); -var rssTemplate = path.resolve(process.argv[5]); - -var config = { - postsPerPage: 4 -}; - -console.error("argv=%j", process.argv) - -fs.readFile(template, 'utf8', function(er, contents) { - if (er) throw er; - template = ejs.compile(contents, template); - template.filename = 'index.html'; - fs.readFile(rssTemplate, 'utf8', function(er, contents) { - if (er) throw er; - rssTemplate = ejs.compile(contents, rssTemplate); - rssTemplate.filename = 'index.xml'; - readInput(); - }); -}); - -function readInput() { - glob(input + '/**/*.md', function(er, files) { - if (er) throw er; - readFiles(files); - }); -} - -function readFiles(files) { - var n = files.length; - var data = { files: {}, feeds: {}, posts: {}}; - - files.forEach(function(file) { - fs.readFile(file, 'utf8', next(file)); - }); - - function next(file) { return function(er, contents) { - if (er) throw er; - if (contents) { - contents = parseFile(file, contents); - if (contents) { - data.files[file] = contents - } - } - if (--n === 0) { - buildOutput(data); - } - }} -} - -function parseFile(file, contents) { - var c = contents.split('\n\n'); - var head = c.shift(); - c = c.join('\n\n'); - var post = head.split('\n').reduce(function(set, kv) { - kv = kv.split(':'); - var key = kv.shift().trim(); - var val = kv.join(':').trim(); - set[key] = val; - return set; - }, {}); - if (post.status && post.status !== 'publish') return null; - post.body = c; - post.src = file; - return post; -} - -function buildPermalinks(data) { - Object.keys(data.files).forEach(function(k) { - data.posts[k] = buildPermalink(k, data.files[k]); - }); -} - -function buildPermalink(key, post) { - var data = {}; - data.pageid = post.slug; - data.title = post.title; - data.content = post.content = marked.parse(post.body); - - // Fix for chjj/marked#56 - data.content = post.content = data.content - .replace(/<a href="([^"]+)<\/a>">\1<\/a>/g, '$1'); - - data.post = post; - - if (!post.date) throw new Error('post date is required ' + post.src); - else post.date = new Date(post.date); - var d = post.date; - - var y = d.getYear() + 1900; - var m = d.getMonth() + 1; - if (m < 10) m = '0' + m; - var d = d.getDate(); - if (d < 10) d = '0' + d; - var uri = '/' + y + '/' + m + '/' + d + '/' + post.slug + '/'; - post.data = data; - post.uri = uri; - - post.permalink = data.permalink = uri; - return data; -} - -function writeFile(uri, data, templ) { - if (!templ) templ = template; - if (data.uri) - data.uri = path.join(data.uri); - uri = path.join(uri); - var contents = templ(data); - var outdir = path.join(output, uri); - mkdirp(outdir, function(er) { - if (er) throw er; - var file = path.resolve(outdir, templ.filename); - fs.writeFile(file, contents, 'utf8', function(er) { - if (er) throw er; - console.log('wrote: ', data.pageid, path.relative(process.cwd(), file)); - }); - }); -} - -// sort in reverse chronological order -// prune out any releases that are not the most recent on their branch. -function buildFeeds(data) { - // first, sort by date. - var posts = Object.keys(data.posts).map(function(k) { - return data.posts[k].post; - }).sort(function(a, b) { - a = a.date.getTime(); - b = b.date.getTime(); - return (a === b) ? 0 : a > b ? -1 : 1; - }) - - // separate release posts by release families. - var releases = posts.reduce(function(releases, post) { - if (post.category !== 'release') return releases; - var ver = semver.parse(post.version); - if (!ver) return; - var major = +ver[1]; - var minor = +ver[2]; - var patch = +ver[3]; - var family = [major, minor]; - ver = [major, minor, patch, post]; - if (family[1] % 2) family[1]++; - family = family.join('.'); - post.family = family; - releases[family] = releases[family] || []; - releases[family].push(post); - return releases; - }, {}); - - // separate by categories. - var categories = posts.reduce(function(categories, post) { - if (!post.category) return categories; - if (!categories[post.category]) { - categories[post.category] = []; - } - categories[post.category].push(post); - return categories; - }, {}); - - // paginate categories. - for (var cat in categories) { - categories[cat] = paginate(categories[cat], cat); - } - - // show all posts in main feed. - var main = posts; - - // add previous/next based on main feed. - main.forEach(function (post, i, posts) { - post.next = posts[i - 1]; - post.prev = posts[i + 1]; - }) - - // paginate each feed. - main = paginate(main, ''); - - // put previous/next links on orphaned old releases so you can get back - for (var family in releases) { - releases[family].forEach(function(post, i, family) { - if (!post.next) post.next = family[i - 1]; - if (!post.next) post.next = family[0].next; - // if (!post.next) post.next = family[0]; - - if (!post.prev) post.prev = family[i + 1]; - if (!post.prev) post.prev = family[0].prev; - }); - // paginate - releases[family] = paginate(releases[family], 'release-' + family); - } - - // paginate - data.feeds = { - main: main, - categories: categories, - releases: releases - }; -} - -function paginate(set, title) { - var pp = config.postsPerPage || 5 - var pages = []; - for (var i = 0; i < set.length; i += pp) { - pages.push(set.slice(i, i + pp)); - } - var id = title.replace(/[^a-zA-Z0-9.]+/g, '-'); - return { id: id || 'index', pageid: id, posts: set, pages: pages, title: title }; -} - -function writePermalinks(data) { - Object.keys(data.posts).forEach(function(k) { - var post = data.posts[k]; - writeFile(post.permalink, post); - }); -} - -function writeFeeds(data) { - writeFeed(data.feeds.main); - - for (var feed in data.feeds.categories) { - writeFeed(data.feeds.categories[feed]); - } - for (var feed in data.feeds.releases) { - writeFeed(data.feeds.releases[feed]); - } -} - -function writeFeed(feed) { - var title = feed.title; - feed.pages.forEach(function(page, p, pages) { - writePaginated(feed.title, page, p, pages.length, feed.id); - }); -} - -function writePaginated(title, posts, p, total, id) { - var uri = '/' + encodeURIComponent(title) + '/'; - var d = { - title: title, - page: p, - posts: posts, - total: total, - paginated: true, - pageid: id + '-' + p, - uri: uri - }; - if (p === 0) { - writeFile(uri, d); - writeFile('/feed' + uri, d, rssTemplate); - } - writeFile(uri + p, d); - writeFile('/feed' + uri + p, d, rssTemplate); -} - -function buildOutput(data) { - buildPermalinks(data); - buildFeeds(data); - writePermalinks(data); - writeFeeds(data); -} - diff --git a/tools/blog/node_modules/ejs/.gitmodules b/tools/blog/node_modules/ejs/.gitmodules deleted file mode 100644 index e69de29bb..000000000 --- a/tools/blog/node_modules/ejs/.gitmodules +++ /dev/null diff --git a/tools/blog/node_modules/ejs/.npmignore b/tools/blog/node_modules/ejs/.npmignore deleted file mode 100644 index 020ddac2c..000000000 --- a/tools/blog/node_modules/ejs/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -# ignore any vim files: -*.sw[a-z] -vim/.netrwhist -node_modules diff --git a/tools/blog/node_modules/ejs/History.md b/tools/blog/node_modules/ejs/History.md deleted file mode 100644 index 75dc16f51..000000000 --- a/tools/blog/node_modules/ejs/History.md +++ /dev/null @@ -1,98 +0,0 @@ - -0.7.1 / 2012-03-26 -================== - - * Fixed exception when using express in production caused by typo. [slaskis] - -0.7.0 / 2012-03-24 -================== - - * Added newline consumption support (`-%>`) [whoatemydomain] - -0.6.1 / 2011-12-09 -================== - - * Fixed `ejs.renderFile()` - -0.6.0 / 2011-12-09 -================== - - * Changed: you no longer need `{ locals: {} }` - -0.5.0 / 2011-11-20 -================== - - * Added express 3.x support - * Added ejs.renderFile() - * Added 'json' filter - * Fixed tests for 0.5.x - -0.4.3 / 2011-06-20 -================== - - * Fixed stacktraces line number when used multiline js expressions [Octave] - -0.4.2 / 2011-05-11 -================== - - * Added client side support - -0.4.1 / 2011-04-21 -================== - - * Fixed error context - -0.4.0 / 2011-04-21 -================== - - * Added; ported jade's error reporting to ejs. [slaskis] - -0.3.1 / 2011-02-23 -================== - - * Fixed optional `compile()` options - -0.3.0 / 2011-02-14 -================== - - * Added 'json' filter [Yuriy Bogdanov] - * Use exported version of parse function to allow monkey-patching [Anatoliy Chakkaev] - -0.2.1 / 2010-10-07 -================== - - * Added filter support - * Fixed _cache_ option. ~4x performance increase - -0.2.0 / 2010-08-05 -================== - - * Added support for global tag config - * Added custom tag support. Closes #5 - * Fixed whitespace bug. Closes #4 - -0.1.0 / 2010-08-04 -================== - - * Faster implementation [ashleydev] - -0.0.4 / 2010-08-02 -================== - - * Fixed single quotes for content outside of template tags. [aniero] - * Changed; `exports.compile()` now expects only "locals" - -0.0.3 / 2010-07-15 -================== - - * Fixed single quotes - -0.0.2 / 2010-07-09 -================== - - * Fixed newline preservation - -0.0.1 / 2010-07-09 -================== - - * Initial release diff --git a/tools/blog/node_modules/ejs/Makefile b/tools/blog/node_modules/ejs/Makefile deleted file mode 100644 index 14b93049d..000000000 --- a/tools/blog/node_modules/ejs/Makefile +++ /dev/null @@ -1,23 +0,0 @@ - -SRC = $(shell find lib -name "*.js" -type f) -UGLIFY_FLAGS = --no-mangle - -all: ejs.min.js - -test: - @./node_modules/.bin/mocha \ - --ui exports - -ejs.js: $(SRC) - @node support/compile.js $^ - -ejs.min.js: ejs.js - @uglifyjs $(UGLIFY_FLAGS) $< > $@ \ - && du ejs.min.js \ - && du ejs.js - -clean: - rm -f ejs.js - rm -f ejs.min.js - -.PHONY: test
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/Readme.md b/tools/blog/node_modules/ejs/Readme.md deleted file mode 100644 index 8e398fd20..000000000 --- a/tools/blog/node_modules/ejs/Readme.md +++ /dev/null @@ -1,151 +0,0 @@ - -# EJS - -Embedded JavaScript templates. - -## Installation - - $ npm install ejs - -## Features - - * Complies with the [Express](http://expressjs.com) view system - * Static caching of intermediate JavaScript - * Unbuffered code for conditionals etc `<% code %>` - * Escapes html by default with `<%= code %>` - * Unescaped buffering with `<%- code %>` - * Supports tag customization - * Filter support for designer-friendly templates - * Client-side support - * Newline slurping with `<% code -%>` or `<% -%>` or `<%= code -%>` or `<%- code -%>` - -## Example - - <% if (user) { %> - <h2><%= user.name %></h2> - <% } %> - -## Usage - - ejs.compile(str, options); - // => Function - - ejs.render(str, options); - // => str - -## Options - - - `cache` Compiled functions are cached, requires `filename` - - `filename` Used by `cache` to key caches - - `scope` Function execution context - - `debug` Output generated function body - - `open` Open tag, defaulting to "<%" - - `close` Closing tag, defaulting to "%>" - - * All others are template-local variables - -## Custom tags - -Custom tags can also be applied globally: - - var ejs = require('ejs'); - ejs.open = '{{'; - ejs.close = '}}'; - -Which would make the following a valid template: - - <h1>{{= title }}</h1> - -## Filters - -EJS conditionally supports the concept of "filters". A "filter chain" -is a designer friendly api for manipulating data, without writing JavaScript. - -Filters can be applied by supplying the _:_ modifier, so for example if we wish to take the array `[{ name: 'tj' }, { name: 'mape' }, { name: 'guillermo' }]` and output a list of names we can do this simply with filters: - -Template: - - <p><%=: users | map:'name' | join %></p> - -Output: - - <p>Tj, Mape, Guillermo</p> - -Render call: - - ejs.render(str, { - users: [ - { name: 'tj' }, - { name: 'mape' }, - { name: 'guillermo' } - ] - }); - -Or perhaps capitalize the first user's name for display: - - <p><%=: users | first | capitalize %></p> - -## Filter list - -Currently these filters are available: - - - first - - last - - capitalize - - downcase - - upcase - - sort - - sort_by:'prop' - - size - - length - - plus:n - - minus:n - - times:n - - divided_by:n - - join:'val' - - truncate:n - - truncate_words:n - - replace:pattern,substitution - - prepend:val - - append:val - - map:'prop' - - reverse - - get:'prop' - -## Adding filters - - To add a filter simply add a method to the `.filters` object: - -```js -ejs.filters.last = function(obj) { - return obj[obj.length - 1]; -}; -``` - -## client-side support - - include `./ejs.js` or `./ejs.min.js` and `require("ejs").compile(str)`. - -## License - -(The MIT License) - -Copyright (c) 2009-2010 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/blog/node_modules/ejs/benchmark.js b/tools/blog/node_modules/ejs/benchmark.js deleted file mode 100644 index 7b267e160..000000000 --- a/tools/blog/node_modules/ejs/benchmark.js +++ /dev/null @@ -1,14 +0,0 @@ - - -var ejs = require('./lib/ejs'), - str = '<% if (foo) { %><p><%= foo %></p><% } %>', - times = 50000; - -console.log('rendering ' + times + ' times'); - -var start = new Date; -while (times--) { - ejs.render(str, { cache: true, filename: 'test', locals: { foo: 'bar' }}); -} - -console.log('took ' + (new Date - start) + 'ms');
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/ejs.js b/tools/blog/node_modules/ejs/ejs.js deleted file mode 100644 index b0fa93b12..000000000 --- a/tools/blog/node_modules/ejs/ejs.js +++ /dev/null @@ -1,567 +0,0 @@ - -// CommonJS require() - -function require(p){ - if ('fs' == p) return {}; - var path = require.resolve(p) - , mod = require.modules[path]; - if (!mod) throw new Error('failed to require "' + p + '"'); - if (!mod.exports) { - mod.exports = {}; - mod.call(mod.exports, mod, mod.exports, require.relative(path)); - } - return mod.exports; - } - -require.modules = {}; - -require.resolve = function (path){ - var orig = path - , reg = path + '.js' - , index = path + '/index.js'; - return require.modules[reg] && reg - || require.modules[index] && index - || orig; - }; - -require.register = function (path, fn){ - require.modules[path] = fn; - }; - -require.relative = function (parent) { - return function(p){ - if ('.' != p.substr(0, 1)) return require(p); - - var path = parent.split('/') - , segs = p.split('/'); - path.pop(); - - for (var i = 0; i < segs.length; i++) { - var seg = segs[i]; - if ('..' == seg) path.pop(); - else if ('.' != seg) path.push(seg); - } - - return require(path.join('/')); - }; - }; - - -require.register("ejs.js", function(module, exports, require){ - -/*! - * EJS - * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('./utils') - , fs = require('fs'); - -/** - * Library version. - */ - -exports.version = '0.6.1'; - -/** - * Filters. - * - * @type Object - */ - -var filters = exports.filters = require('./filters'); - -/** - * Intermediate js cache. - * - * @type Object - */ - -var cache = {}; - -/** - * Clear intermediate js cache. - * - * @api public - */ - -exports.clearCache = function(){ - cache = {}; -}; - -/** - * Translate filtered code into function calls. - * - * @param {String} js - * @return {String} - * @api private - */ - -function filtered(js) { - return js.substr(1).split('|').reduce(function(js, filter){ - var parts = filter.split(':') - , name = parts.shift() - , args = parts.shift() || ''; - if (args) args = ', ' + args; - return 'filters.' + name + '(' + js + args + ')'; - }); -}; - -/** - * Re-throw the given `err` in context to the - * `str` of ejs, `filename`, and `lineno`. - * - * @param {Error} err - * @param {String} str - * @param {String} filename - * @param {String} lineno - * @api private - */ - -function rethrow(err, str, filename, lineno){ - var lines = str.split('\n') - , start = Math.max(lineno - 3, 0) - , end = Math.min(lines.length, lineno + 3); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' >> ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'ejs') + ':' - + lineno + '\n' - + context + '\n\n' - + err.message; - - throw err; -} - -/** - * Parse the given `str` of ejs, returning the function body. - * - * @param {String} str - * @return {String} - * @api public - */ - -var parse = exports.parse = function(str, options){ - var options = options || {} - , open = options.open || exports.open || '<%' - , close = options.close || exports.close || '%>'; - - var buf = [ - "var buf = [];" - , "\nwith (locals) {" - , "\n buf.push('" - ]; - - var lineno = 1; - - for (var i = 0, len = str.length; i < len; ++i) { - if (str.slice(i, open.length + i) == open) { - i += open.length - - var prefix, postfix, line = '__stack.lineno=' + lineno; - switch (str.substr(i, 1)) { - case '=': - prefix = "', escape((" + line + ', '; - postfix = ")), '"; - ++i; - break; - case '-': - prefix = "', (" + line + ', '; - postfix = "), '"; - ++i; - break; - default: - prefix = "');" + line + ';'; - postfix = "; buf.push('"; - } - - var end = str.indexOf(close, i) - , js = str.substring(i, end) - , start = i - , n = 0; - - while (~(n = js.indexOf("\n", n))) n++, lineno++; - if (js.substr(0, 1) == ':') js = filtered(js); - buf.push(prefix, js, postfix); - i += end - start + close.length - 1; - - } else if (str.substr(i, 1) == "\\") { - buf.push("\\\\"); - } else if (str.substr(i, 1) == "'") { - buf.push("\\'"); - } else if (str.substr(i, 1) == "\r") { - buf.push(" "); - } else if (str.substr(i, 1) == "\n") { - buf.push("\\n"); - lineno++; - } else { - buf.push(str.substr(i, 1)); - } - } - - buf.push("');\n}\nreturn buf.join('');"); - return buf.join(''); -}; - -/** - * Compile the given `str` of ejs into a `Function`. - * - * @param {String} str - * @param {Object} options - * @return {Function} - * @api public - */ - -var compile = exports.compile = function(str, options){ - options = options || {}; - - var input = JSON.stringify(str) - , filename = options.filename - ? JSON.stringify(options.filename) - : 'undefined'; - - // Adds the fancy stack trace meta info - str = [ - 'var __stack = { lineno: 1, input: ' + input + ', filename: ' + filename + ' };', - rethrow.toString(), - 'try {', - exports.parse(str, options), - '} catch (err) {', - ' rethrow(err, __stack.input, __stack.filename, __stack.lineno);', - '}' - ].join("\n"); - - if (options.debug) console.log(str); - var fn = new Function('locals, filters, escape', str); - return function(locals){ - return fn.call(this, locals, filters, utils.escape); - } -}; - -/** - * Render the given `str` of ejs. - * - * Options: - * - * - `locals` Local variables object - * - `cache` Compiled functions are cached, requires `filename` - * - `filename` Used by `cache` to key caches - * - `scope` Function execution context - * - `debug` Output generated function body - * - `open` Open tag, defaulting to "<%" - * - `close` Closing tag, defaulting to "%>" - * - * @param {String} str - * @param {Object} options - * @return {String} - * @api public - */ - -exports.render = function(str, options){ - var fn - , options = options || {}; - - if (options.cache) { - if (options.filename) { - fn = cache[options.filename] || (cache[options.filename] = compile(str, options)); - } else { - throw new Error('"cache" option requires "filename".'); - } - } else { - fn = compile(str, options); - } - - options.__proto__ = options.locals; - return fn.call(options.scope, options); -}; - -/** - * Render an EJS file at the given `path` and callback `fn(err, str)`. - * - * @param {String} path - * @param {Object|Function} options or callback - * @param {Function} fn - * @api public - */ - -exports.renderFile = function(path, options, fn){ - var key = path + ':string'; - - if ('function' == typeof options) { - fn = options, options = {}; - } - - options.filename = path; - - try { - var str = options.cache - ? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8')) - : fs.readFileSync(path, 'utf8'); - - fn(null, exports.render(str, options)); - } catch (err) { - fn(err); - } -}; - -// express support - -exports.__express = exports.renderFile; - -/** - * Expose to require(). - */ - -if (require.extensions) { - require.extensions['.ejs'] = function(module, filename) { - source = require('fs').readFileSync(filename, 'utf-8'); - module._compile(compile(source, {}), filename); - }; -} else if (require.registerExtension) { - require.registerExtension('.ejs', function(src) { - return compile(src, {}); - }); -} - -}); // module: ejs.js - -require.register("filters.js", function(module, exports, require){ - -/*! - * EJS - Filters - * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * First element of the target `obj`. - */ - -exports.first = function(obj) { - return obj[0]; -}; - -/** - * Last element of the target `obj`. - */ - -exports.last = function(obj) { - return obj[obj.length - 1]; -}; - -/** - * Capitalize the first letter of the target `str`. - */ - -exports.capitalize = function(str){ - str = String(str); - return str[0].toUpperCase() + str.substr(1, str.length); -}; - -/** - * Downcase the target `str`. - */ - -exports.downcase = function(str){ - return String(str).toLowerCase(); -}; - -/** - * Uppercase the target `str`. - */ - -exports.upcase = function(str){ - return String(str).toUpperCase(); -}; - -/** - * Sort the target `obj`. - */ - -exports.sort = function(obj){ - return Object.create(obj).sort(); -}; - -/** - * Sort the target `obj` by the given `prop` ascending. - */ - -exports.sort_by = function(obj, prop){ - return Object.create(obj).sort(function(a, b){ - a = a[prop], b = b[prop]; - if (a > b) return 1; - if (a < b) return -1; - return 0; - }); -}; - -/** - * Size or length of the target `obj`. - */ - -exports.size = exports.length = function(obj) { - return obj.length; -}; - -/** - * Add `a` and `b`. - */ - -exports.plus = function(a, b){ - return Number(a) + Number(b); -}; - -/** - * Subtract `b` from `a`. - */ - -exports.minus = function(a, b){ - return Number(a) - Number(b); -}; - -/** - * Multiply `a` by `b`. - */ - -exports.times = function(a, b){ - return Number(a) * Number(b); -}; - -/** - * Divide `a` by `b`. - */ - -exports.divided_by = function(a, b){ - return Number(a) / Number(b); -}; - -/** - * Join `obj` with the given `str`. - */ - -exports.join = function(obj, str){ - return obj.join(str || ', '); -}; - -/** - * Truncate `str` to `len`. - */ - -exports.truncate = function(str, len){ - str = String(str); - return str.substr(0, len); -}; - -/** - * Truncate `str` to `n` words. - */ - -exports.truncate_words = function(str, n){ - var str = String(str) - , words = str.split(/ +/); - return words.slice(0, n).join(' '); -}; - -/** - * Replace `pattern` with `substitution` in `str`. - */ - -exports.replace = function(str, pattern, substitution){ - return String(str).replace(pattern, substitution || ''); -}; - -/** - * Prepend `val` to `obj`. - */ - -exports.prepend = function(obj, val){ - return Array.isArray(obj) - ? [val].concat(obj) - : val + obj; -}; - -/** - * Append `val` to `obj`. - */ - -exports.append = function(obj, val){ - return Array.isArray(obj) - ? obj.concat(val) - : obj + val; -}; - -/** - * Map the given `prop`. - */ - -exports.map = function(arr, prop){ - return arr.map(function(obj){ - return obj[prop]; - }); -}; - -/** - * Reverse the given `obj`. - */ - -exports.reverse = function(obj){ - return Array.isArray(obj) - ? obj.reverse() - : String(obj).split('').reverse().join(''); -}; - -/** - * Get `prop` of the given `obj`. - */ - -exports.get = function(obj, prop){ - return obj[prop]; -}; - -/** - * Packs the given `obj` into json string - */ -exports.json = function(obj){ - return JSON.stringify(obj); -}; -}); // module: filters.js - -require.register("utils.js", function(module, exports, require){ - -/*! - * EJS - * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/"/g, '"'); -}; - -}); // module: utils.js diff --git a/tools/blog/node_modules/ejs/ejs.min.js b/tools/blog/node_modules/ejs/ejs.min.js deleted file mode 100644 index b87881320..000000000 --- a/tools/blog/node_modules/ejs/ejs.min.js +++ /dev/null @@ -1,2 +0,0 @@ -// CommonJS require() -function require(p){if("fs"==p)return{};var path=require.resolve(p),mod=require.modules[path];if(!mod)throw new Error('failed to require "'+p+'"');mod.exports||(mod.exports={},mod.call(mod.exports,mod,mod.exports,require.relative(path)));return mod.exports}require.modules={},require.resolve=function(path){var orig=path,reg=path+".js",index=path+"/index.js";return require.modules[reg]&®||require.modules[index]&&index||orig},require.register=function(path,fn){require.modules[path]=fn},require.relative=function(parent){return function(p){if("."!=p.substr(0,1))return require(p);var path=parent.split("/"),segs=p.split("/");path.pop();for(var i=0;i<segs.length;i++){var seg=segs[i];".."==seg?path.pop():"."!=seg&&path.push(seg)}return require(path.join("/"))}},require.register("ejs.js",function(module,exports,require){var utils=require("./utils"),fs=require("fs");exports.version="0.6.1";var filters=exports.filters=require("./filters"),cache={};exports.clearCache=function(){cache={}};function filtered(js){return js.substr(1).split("|").reduce(function(js,filter){var parts=filter.split(":"),name=parts.shift(),args=parts.shift()||"";args&&(args=", "+args);return"filters."+name+"("+js+args+")"})}function rethrow(err,str,filename,lineno){var lines=str.split("\n"),start=Math.max(lineno-3,0),end=Math.min(lines.length,lineno+3),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" >> ":" ")+curr+"| "+line}).join("\n");err.path=filename,err.message=(filename||"ejs")+":"+lineno+"\n"+context+"\n\n"+err.message;throw err}var parse=exports.parse=function(str,options){var options=options||{},open=options.open||exports.open||"<%",close=options.close||exports.close||"%>",buf=["var buf = [];","\nwith (locals) {","\n buf.push('"],lineno=1;for(var i=0,len=str.length;i<len;++i)if(str.slice(i,open.length+i)==open){i+=open.length;var prefix,postfix,line="__stack.lineno="+lineno;switch(str.substr(i,1)){case"=":prefix="', escape(("+line+", ",postfix=")), '",++i;break;case"-":prefix="', ("+line+", ",postfix="), '",++i;break;default:prefix="');"+line+";",postfix="; buf.push('"}var end=str.indexOf(close,i),js=str.substring(i,end),start=i,n=0;while(~(n=js.indexOf("\n",n)))n++,lineno++;js.substr(0,1)==":"&&(js=filtered(js)),buf.push(prefix,js,postfix),i+=end-start+close.length-1}else str.substr(i,1)=="\\"?buf.push("\\\\"):str.substr(i,1)=="'"?buf.push("\\'"):str.substr(i,1)=="\r"?buf.push(" "):str.substr(i,1)=="\n"?(buf.push("\\n"),lineno++):buf.push(str.substr(i,1));buf.push("');\n}\nreturn buf.join('');");return buf.join("")},compile=exports.compile=function(str,options){options=options||{};var input=JSON.stringify(str),filename=options.filename?JSON.stringify(options.filename):"undefined";str=["var __stack = { lineno: 1, input: "+input+", filename: "+filename+" };",rethrow.toString(),"try {",exports.parse(str,options),"} catch (err) {"," rethrow(err, __stack.input, __stack.filename, __stack.lineno);","}"].join("\n"),options.debug&&console.log(str);var fn=new Function("locals, filters, escape",str);return function(locals){return fn.call(this,locals,filters,utils.escape)}};exports.render=function(str,options){var fn,options=options||{};if(options.cache)if(options.filename)fn=cache[options.filename]||(cache[options.filename]=compile(str,options));else throw new Error('"cache" option requires "filename".');else fn=compile(str,options);options.__proto__=options.locals;return fn.call(options.scope,options)},exports.renderFile=function(path,options,fn){var key=path+":string";"function"==typeof options&&(fn=options,options={}),options.filename=path;try{var str=options.cache?exports.cache[key]||(exports.cache[key]=fs.readFileSync(path,"utf8")):fs.readFileSync(path,"utf8");fn(null,exports.render(str,options))}catch(err){fn(err)}},exports.__express=exports.renderFile,require.extensions?require.extensions[".ejs"]=function(module,filename){source=require("fs").readFileSync(filename,"utf-8"),module._compile(compile(source,{}),filename)}:require.registerExtension&&require.registerExtension(".ejs",function(src){return compile(src,{})})}),require.register("filters.js",function(module,exports,require){exports.first=function(obj){return obj[0]},exports.last=function(obj){return obj[obj.length-1]},exports.capitalize=function(str){str=String(str);return str[0].toUpperCase()+str.substr(1,str.length)},exports.downcase=function(str){return String(str).toLowerCase()},exports.upcase=function(str){return String(str).toUpperCase()},exports.sort=function(obj){return Object.create(obj).sort()},exports.sort_by=function(obj,prop){return Object.create(obj).sort(function(a,b){a=a[prop],b=b[prop];if(a>b)return 1;if(a<b)return-1;return 0})},exports.size=exports.length=function(obj){return obj.length},exports.plus=function(a,b){return Number(a)+Number(b)},exports.minus=function(a,b){return Number(a)-Number(b)},exports.times=function(a,b){return Number(a)*Number(b)},exports.divided_by=function(a,b){return Number(a)/Number(b)},exports.join=function(obj,str){return obj.join(str||", ")},exports.truncate=function(str,len){str=String(str);return str.substr(0,len)},exports.truncate_words=function(str,n){var str=String(str),words=str.split(/ +/);return words.slice(0,n).join(" ")},exports.replace=function(str,pattern,substitution){return String(str).replace(pattern,substitution||"")},exports.prepend=function(obj,val){return Array.isArray(obj)?[val].concat(obj):val+obj},exports.append=function(obj,val){return Array.isArray(obj)?obj.concat(val):obj+val},exports.map=function(arr,prop){return arr.map(function(obj){return obj[prop]})},exports.reverse=function(obj){return Array.isArray(obj)?obj.reverse():String(obj).split("").reverse().join("")},exports.get=function(obj,prop){return obj[prop]},exports.json=function(obj){return JSON.stringify(obj)}}),require.register("utils.js",function(module,exports,require){exports.escape=function(html){return String(html).replace(/&(?!\w+;)/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}})
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/examples/client.html b/tools/blog/node_modules/ejs/examples/client.html deleted file mode 100644 index 51ce0b4ce..000000000 --- a/tools/blog/node_modules/ejs/examples/client.html +++ /dev/null @@ -1,24 +0,0 @@ -<html> - <head> - <script src="../ejs.js"></script> - <script id="users" type="text/template"> - <% if (names.length) { %> - <ul> - <% names.forEach(function(name){ %> - <li><%= name %></li> - <% }) %> - </ul> - <% } %> - </script> - <script> - onload = function(){ - var users = document.getElementById('users').innerHTML; - var names = ['loki', 'tobi', 'jane']; - var html = require('ejs').render(users, { names: names }); - document.body.innerHTML = html; - } - </script> - </head> - <body> - </body> -</html>
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/examples/list.ejs b/tools/blog/node_modules/ejs/examples/list.ejs deleted file mode 100644 index d571330ae..000000000 --- a/tools/blog/node_modules/ejs/examples/list.ejs +++ /dev/null @@ -1,7 +0,0 @@ -<% if (names.length) { %> - <ul> - <% names.forEach(function(name){ %> - <li><%= name %></li> - <% }) %> - </ul> -<% } %>
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/examples/list.js b/tools/blog/node_modules/ejs/examples/list.js deleted file mode 100644 index ec614ed62..000000000 --- a/tools/blog/node_modules/ejs/examples/list.js +++ /dev/null @@ -1,14 +0,0 @@ - -/** - * Module dependencies. - */ - -var ejs = require('../') - , fs = require('fs') - , str = fs.readFileSync(__dirname + '/list.ejs', 'utf8'); - -var ret = ejs.render(str, { - names: ['foo', 'bar', 'baz'] -}); - -console.log(ret);
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/index.js b/tools/blog/node_modules/ejs/index.js deleted file mode 100644 index 20bf71a3f..000000000 --- a/tools/blog/node_modules/ejs/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -module.exports = require('./lib/ejs');
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/lib/ejs.js b/tools/blog/node_modules/ejs/lib/ejs.js deleted file mode 100644 index e87b98ea5..000000000 --- a/tools/blog/node_modules/ejs/lib/ejs.js +++ /dev/null @@ -1,298 +0,0 @@ - -/*! - * EJS - * Copyright(c) 2012 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('./utils') - , fs = require('fs'); - -/** - * Library version. - */ - -exports.version = '0.7.1'; - -/** - * Filters. - * - * @type Object - */ - -var filters = exports.filters = require('./filters'); - -/** - * Intermediate js cache. - * - * @type Object - */ - -var cache = {}; - -/** - * Clear intermediate js cache. - * - * @api public - */ - -exports.clearCache = function(){ - cache = {}; -}; - -/** - * Translate filtered code into function calls. - * - * @param {String} js - * @return {String} - * @api private - */ - -function filtered(js) { - return js.substr(1).split('|').reduce(function(js, filter){ - var parts = filter.split(':') - , name = parts.shift() - , args = parts.shift() || ''; - if (args) args = ', ' + args; - return 'filters.' + name + '(' + js + args + ')'; - }); -}; - -/** - * Re-throw the given `err` in context to the - * `str` of ejs, `filename`, and `lineno`. - * - * @param {Error} err - * @param {String} str - * @param {String} filename - * @param {String} lineno - * @api private - */ - -function rethrow(err, str, filename, lineno){ - var lines = str.split('\n') - , start = Math.max(lineno - 3, 0) - , end = Math.min(lines.length, lineno + 3); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' >> ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'ejs') + ':' - + lineno + '\n' - + context + '\n\n' - + err.message; - - throw err; -} - -/** - * Parse the given `str` of ejs, returning the function body. - * - * @param {String} str - * @return {String} - * @api public - */ - -var parse = exports.parse = function(str, options){ - var options = options || {} - , open = options.open || exports.open || '<%' - , close = options.close || exports.close || '%>'; - - var buf = [ - "var buf = [];" - , "\nwith (locals) {" - , "\n buf.push('" - ]; - - var lineno = 1; - - var consumeEOL = false; - for (var i = 0, len = str.length; i < len; ++i) { - if (str.slice(i, open.length + i) == open) { - i += open.length - - var prefix, postfix, line = '__stack.lineno=' + lineno; - switch (str.substr(i, 1)) { - case '=': - prefix = "', escape((" + line + ', '; - postfix = ")), '"; - ++i; - break; - case '-': - prefix = "', (" + line + ', '; - postfix = "), '"; - ++i; - break; - default: - prefix = "');" + line + ';'; - postfix = "; buf.push('"; - } - - var end = str.indexOf(close, i) - , js = str.substring(i, end) - , start = i - , n = 0; - - if ('-' == js[js.length-1]){ - js = js.substring(0, js.length - 2); - consumeEOL = true; - } - - while (~(n = js.indexOf("\n", n))) n++, lineno++; - if (js.substr(0, 1) == ':') js = filtered(js); - buf.push(prefix, js, postfix); - i += end - start + close.length - 1; - - } else if (str.substr(i, 1) == "\\") { - buf.push("\\\\"); - } else if (str.substr(i, 1) == "'") { - buf.push("\\'"); - } else if (str.substr(i, 1) == "\r") { - buf.push(" "); - } else if (str.substr(i, 1) == "\n") { - if (consumeEOL) { - consumeEOL = false; - } else { - buf.push("\\n"); - lineno++; - } - } else { - buf.push(str.substr(i, 1)); - } - } - - buf.push("');\n}\nreturn buf.join('');"); - return buf.join(''); -}; - -/** - * Compile the given `str` of ejs into a `Function`. - * - * @param {String} str - * @param {Object} options - * @return {Function} - * @api public - */ - -var compile = exports.compile = function(str, options){ - options = options || {}; - - var input = JSON.stringify(str) - , filename = options.filename - ? JSON.stringify(options.filename) - : 'undefined'; - - // Adds the fancy stack trace meta info - str = [ - 'var __stack = { lineno: 1, input: ' + input + ', filename: ' + filename + ' };', - rethrow.toString(), - 'try {', - exports.parse(str, options), - '} catch (err) {', - ' rethrow(err, __stack.input, __stack.filename, __stack.lineno);', - '}' - ].join("\n"); - - if (options.debug) console.log(str); - var fn = new Function('locals, filters, escape', str); - return function(locals){ - return fn.call(this, locals, filters, utils.escape); - } -}; - -/** - * Render the given `str` of ejs. - * - * Options: - * - * - `locals` Local variables object - * - `cache` Compiled functions are cached, requires `filename` - * - `filename` Used by `cache` to key caches - * - `scope` Function execution context - * - `debug` Output generated function body - * - `open` Open tag, defaulting to "<%" - * - `close` Closing tag, defaulting to "%>" - * - * @param {String} str - * @param {Object} options - * @return {String} - * @api public - */ - -exports.render = function(str, options){ - var fn - , options = options || {}; - - if (options.cache) { - if (options.filename) { - fn = cache[options.filename] || (cache[options.filename] = compile(str, options)); - } else { - throw new Error('"cache" option requires "filename".'); - } - } else { - fn = compile(str, options); - } - - options.__proto__ = options.locals; - return fn.call(options.scope, options); -}; - -/** - * Render an EJS file at the given `path` and callback `fn(err, str)`. - * - * @param {String} path - * @param {Object|Function} options or callback - * @param {Function} fn - * @api public - */ - -exports.renderFile = function(path, options, fn){ - var key = path + ':string'; - - if ('function' == typeof options) { - fn = options, options = {}; - } - - options.filename = path; - - try { - var str = options.cache - ? cache[key] || (cache[key] = fs.readFileSync(path, 'utf8')) - : fs.readFileSync(path, 'utf8'); - - fn(null, exports.render(str, options)); - } catch (err) { - fn(err); - } -}; - -// express support - -exports.__express = exports.renderFile; - -/** - * Expose to require(). - */ - -if (require.extensions) { - require.extensions['.ejs'] = function(module, filename) { - source = require('fs').readFileSync(filename, 'utf-8'); - module._compile(compile(source, {}), filename); - }; -} else if (require.registerExtension) { - require.registerExtension('.ejs', function(src) { - return compile(src, {}); - }); -} diff --git a/tools/blog/node_modules/ejs/lib/filters.js b/tools/blog/node_modules/ejs/lib/filters.js deleted file mode 100644 index d425c8d89..000000000 --- a/tools/blog/node_modules/ejs/lib/filters.js +++ /dev/null @@ -1,198 +0,0 @@ - -/*! - * EJS - Filters - * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * First element of the target `obj`. - */ - -exports.first = function(obj) { - return obj[0]; -}; - -/** - * Last element of the target `obj`. - */ - -exports.last = function(obj) { - return obj[obj.length - 1]; -}; - -/** - * Capitalize the first letter of the target `str`. - */ - -exports.capitalize = function(str){ - str = String(str); - return str[0].toUpperCase() + str.substr(1, str.length); -}; - -/** - * Downcase the target `str`. - */ - -exports.downcase = function(str){ - return String(str).toLowerCase(); -}; - -/** - * Uppercase the target `str`. - */ - -exports.upcase = function(str){ - return String(str).toUpperCase(); -}; - -/** - * Sort the target `obj`. - */ - -exports.sort = function(obj){ - return Object.create(obj).sort(); -}; - -/** - * Sort the target `obj` by the given `prop` ascending. - */ - -exports.sort_by = function(obj, prop){ - return Object.create(obj).sort(function(a, b){ - a = a[prop], b = b[prop]; - if (a > b) return 1; - if (a < b) return -1; - return 0; - }); -}; - -/** - * Size or length of the target `obj`. - */ - -exports.size = exports.length = function(obj) { - return obj.length; -}; - -/** - * Add `a` and `b`. - */ - -exports.plus = function(a, b){ - return Number(a) + Number(b); -}; - -/** - * Subtract `b` from `a`. - */ - -exports.minus = function(a, b){ - return Number(a) - Number(b); -}; - -/** - * Multiply `a` by `b`. - */ - -exports.times = function(a, b){ - return Number(a) * Number(b); -}; - -/** - * Divide `a` by `b`. - */ - -exports.divided_by = function(a, b){ - return Number(a) / Number(b); -}; - -/** - * Join `obj` with the given `str`. - */ - -exports.join = function(obj, str){ - return obj.join(str || ', '); -}; - -/** - * Truncate `str` to `len`. - */ - -exports.truncate = function(str, len){ - str = String(str); - return str.substr(0, len); -}; - -/** - * Truncate `str` to `n` words. - */ - -exports.truncate_words = function(str, n){ - var str = String(str) - , words = str.split(/ +/); - return words.slice(0, n).join(' '); -}; - -/** - * Replace `pattern` with `substitution` in `str`. - */ - -exports.replace = function(str, pattern, substitution){ - return String(str).replace(pattern, substitution || ''); -}; - -/** - * Prepend `val` to `obj`. - */ - -exports.prepend = function(obj, val){ - return Array.isArray(obj) - ? [val].concat(obj) - : val + obj; -}; - -/** - * Append `val` to `obj`. - */ - -exports.append = function(obj, val){ - return Array.isArray(obj) - ? obj.concat(val) - : obj + val; -}; - -/** - * Map the given `prop`. - */ - -exports.map = function(arr, prop){ - return arr.map(function(obj){ - return obj[prop]; - }); -}; - -/** - * Reverse the given `obj`. - */ - -exports.reverse = function(obj){ - return Array.isArray(obj) - ? obj.reverse() - : String(obj).split('').reverse().join(''); -}; - -/** - * Get `prop` of the given `obj`. - */ - -exports.get = function(obj, prop){ - return obj[prop]; -}; - -/** - * Packs the given `obj` into json string - */ -exports.json = function(obj){ - return JSON.stringify(obj); -};
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/lib/utils.js b/tools/blog/node_modules/ejs/lib/utils.js deleted file mode 100644 index 8d569d6f2..000000000 --- a/tools/blog/node_modules/ejs/lib/utils.js +++ /dev/null @@ -1,23 +0,0 @@ - -/*! - * EJS - * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca> - * MIT Licensed - */ - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/"/g, '"'); -}; -
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/package.json b/tools/blog/node_modules/ejs/package.json deleted file mode 100644 index 0458a4446..000000000 --- a/tools/blog/node_modules/ejs/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "ejs", - "description": "Embedded JavaScript templates", - "version": "0.7.1", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "keywords": [ - "template", - "engine", - "ejs" - ], - "devDependencies": { - "mocha": "*" - }, - "main": "./lib/ejs.js", - "_id": "ejs@0.7.1", - "dist": { - "shasum": "9ed557b7e65f9f1adf5473060d079141ad7e680b" - }, - "_from": "ejs" -} diff --git a/tools/blog/node_modules/ejs/support/compile.js b/tools/blog/node_modules/ejs/support/compile.js deleted file mode 100644 index 95cafc88d..000000000 --- a/tools/blog/node_modules/ejs/support/compile.js +++ /dev/null @@ -1,174 +0,0 @@ - -/** - * Module dependencies. - */ - -var fs = require('fs'); - -/** - * Arguments. - */ - -var args = process.argv.slice(2) - , pending = args.length - , files = {}; - -console.log(''); - -// parse arguments - -args.forEach(function(file){ - var mod = file.replace('lib/', ''); - fs.readFile(file, 'utf8', function(err, js){ - if (err) throw err; - console.log(' \033[90mcompile : \033[0m\033[36m%s\033[0m', file); - files[file] = parse(js); - --pending || compile(); - }); -}); - -/** - * Parse the given `js`. - */ - -function parse(js) { - return parseInheritance(parseConditionals(js)); -} - -/** - * Parse __proto__. - */ - -function parseInheritance(js) { - return js - .replace(/^ *(\w+)\.prototype\.__proto__ * = *(\w+)\.prototype *;?/gm, function(_, child, parent){ - return child + '.prototype = new ' + parent + ';\n' - + child + '.prototype.constructor = '+ child + ';\n'; - }); -} - -/** - * Parse the given `js`, currently supporting: - * - * 'if' ['node' | 'browser'] - * 'end' - * - */ - -function parseConditionals(js) { - var lines = js.split('\n') - , len = lines.length - , buffer = true - , browser = false - , buf = [] - , line - , cond; - - for (var i = 0; i < len; ++i) { - line = lines[i]; - if (/^ *\/\/ *if *(node|browser)/gm.exec(line)) { - cond = RegExp.$1; - buffer = browser = 'browser' == cond; - } else if (/^ *\/\/ *end/.test(line)) { - buffer = true; - browser = false; - } else if (browser) { - buf.push(line.replace(/^( *)\/\//, '$1')); - } else if (buffer) { - buf.push(line); - } - } - - return buf.join('\n'); -} - -/** - * Compile the files. - */ - -function compile() { - var buf = ''; - buf += '\n// CommonJS require()\n\n'; - buf += browser.require + '\n\n'; - buf += 'require.modules = {};\n\n'; - buf += 'require.resolve = ' + browser.resolve + ';\n\n'; - buf += 'require.register = ' + browser.register + ';\n\n'; - buf += 'require.relative = ' + browser.relative + ';\n\n'; - args.forEach(function(file){ - var js = files[file]; - file = file.replace('lib/', ''); - buf += '\nrequire.register("' + file + '", function(module, exports, require){\n'; - buf += js; - buf += '\n}); // module: ' + file + '\n'; - }); - fs.writeFile('ejs.js', buf, function(err){ - if (err) throw err; - console.log(' \033[90m create : \033[0m\033[36m%s\033[0m', 'ejs.js'); - console.log(); - }); -} - -// refactored version of weepy's -// https://github.com/weepy/brequire/blob/master/browser/brequire.js - -var browser = { - - /** - * Require a module. - */ - - require: function require(p){ - if ('fs' == p) return {}; - var path = require.resolve(p) - , mod = require.modules[path]; - if (!mod) throw new Error('failed to require "' + p + '"'); - if (!mod.exports) { - mod.exports = {}; - mod.call(mod.exports, mod, mod.exports, require.relative(path)); - } - return mod.exports; - }, - - /** - * Resolve module path. - */ - - resolve: function(path){ - var orig = path - , reg = path + '.js' - , index = path + '/index.js'; - return require.modules[reg] && reg - || require.modules[index] && index - || orig; - }, - - /** - * Return relative require(). - */ - - relative: function(parent) { - return function(p){ - if ('.' != p.substr(0, 1)) return require(p); - - var path = parent.split('/') - , segs = p.split('/'); - path.pop(); - - for (var i = 0; i < segs.length; i++) { - var seg = segs[i]; - if ('..' == seg) path.pop(); - else if ('.' != seg) path.push(seg); - } - - return require(path.join('/')); - }; - }, - - /** - * Register a module. - */ - - register: function(path, fn){ - require.modules[path] = fn; - } -};
\ No newline at end of file diff --git a/tools/blog/node_modules/ejs/test/ejs.test.js b/tools/blog/node_modules/ejs/test/ejs.test.js deleted file mode 100644 index 54b8d2dac..000000000 --- a/tools/blog/node_modules/ejs/test/ejs.test.js +++ /dev/null @@ -1,329 +0,0 @@ - -/** - * Module dependencies. - */ - -var ejs = require('../') - , assert = require('assert'); - -module.exports = { - 'test .version': function(){ - assert.ok(/^\d+\.\d+\.\d+$/.test(ejs.version), 'Test .version format'); - }, - - 'test html': function(){ - assert.equal('<p>yay</p>', ejs.render('<p>yay</p>')); - }, - - 'test renderFile': function(){ - var html = '<h1>tj</h1>', - str = '<p><%= name %></p>', - options = { name: 'tj', open: '{', close: '}' }; - - ejs.renderFile(__dirname + '/fixtures/user.ejs', options, function(err, res){ - assert.ok(!err); - assert.equal(res, html); - }) - }, - - 'test buffered code': function(){ - var html = '<p>tj</p>', - str = '<p><%= name %></p>', - locals = { name: 'tj' }; - assert.equal(html, ejs.render(str, { locals: locals })); - }, - - 'test unbuffered code': function(){ - var html = '<p>tj</p>', - str = '<% if (name) { %><p><%= name %></p><% } %>', - locals = { name: 'tj' }; - assert.equal(html, ejs.render(str, { locals: locals })); - }, - - 'test `scope` option': function(){ - var html = '<p>tj</p>', - str = '<p><%= this %></p>'; - assert.equal(html, ejs.render(str, { scope: 'tj' })); - }, - - 'test escaping': function(){ - assert.equal('<script>', ejs.render('<%= "<script>" %>')); - assert.equal('<script>', ejs.render('<%- "<script>" %>')); - }, - - 'test newlines': function(){ - var html = '\n<p>tj</p>\n<p>tj@sencha.com</p>', - str = '<% if (name) { %>\n<p><%= name %></p>\n<p><%= email %></p><% } %>', - locals = { name: 'tj', email: 'tj@sencha.com' }; - assert.equal(html, ejs.render(str, { locals: locals })); - }, - - 'test single quotes': function(){ - var html = '<p>WAHOO</p>', - str = "<p><%= up('wahoo') %></p>", - locals = { up: function(str){ return str.toUpperCase(); }}; - assert.equal(html, ejs.render(str, { locals: locals })); - }, - - 'test single quotes in the html': function(){ - var html = '<p>WAHOO that\'s cool</p>', - str = '<p><%= up(\'wahoo\') %> that\'s cool</p>', - locals = { up: function(str){ return str.toUpperCase(); }}; - assert.equal(html, ejs.render(str, { locals: locals })); - }, - - 'test multiple single quotes': function() { - var html = "<p>couldn't shouldn't can't</p>", - str = "<p>couldn't shouldn't can't</p>"; - assert.equal(html, ejs.render(str)); - }, - - 'test single quotes inside tags': function() { - var html = '<p>string</p>', - str = "<p><%= 'string' %></p>"; - assert.equal(html, ejs.render(str)); - }, - - 'test back-slashes in the document': function() { - var html = "<p>backslash: '\\'</p>", - str = "<p>backslash: '\\'</p>"; - assert.equal(html, ejs.render(str)); - }, - - 'test double quotes': function(){ - var html = '<p>WAHOO</p>', - str = '<p><%= up("wahoo") %></p>', - locals = { up: function(str){ return str.toUpperCase(); }}; - assert.equal(html, ejs.render(str, { locals: locals })); - }, - - 'test multiple double quotes': function() { - var html = '<p>just a "test" wahoo</p>', - str = '<p>just a "test" wahoo</p>'; - assert.equal(html, ejs.render(str)); - }, - - 'test pass options as locals': function(){ - var html = '<p>foo</p>', - str = '<p><%="foo"%></p>'; - assert.equal(html, ejs.render(str)); - - var html = '<p>foo</p>', - str = '<p><%=bar%></p>'; - assert.equal(html, ejs.render(str, { bar: 'foo' })); - }, - - 'test whitespace': function(){ - var html = '<p>foo</p>', - str = '<p><%="foo"%></p>'; - assert.equal(html, ejs.render(str)); - - var html = '<p>foo</p>', - str = '<p><%=bar%></p>'; - assert.equal(html, ejs.render(str, { locals: { bar: 'foo' }})); - }, - - 'test custom tags': function(){ - var html = '<p>foo</p>', - str = '<p>{{= "foo" }}</p>'; - - assert.equal(html, ejs.render(str, { - open: '{{', - close: '}}' - })); - - var html = '<p>foo</p>', - str = '<p><?= "foo" ?></p>'; - - assert.equal(html, ejs.render(str, { - open: '<?', - close: '?>' - })); - }, - - 'test custom tags over 2 chars': function(){ - var html = '<p>foo</p>', - str = '<p>{{{{= "foo" }>>}</p>'; - - assert.equal(html, ejs.render(str, { - open: '{{{{', - close: '}>>}' - })); - - var html = '<p>foo</p>', - str = '<p><??= "foo" ??></p>'; - - assert.equal(html, ejs.render(str, { - open: '<??', - close: '??>' - })); - }, - - 'test global custom tags': function(){ - var html = '<p>foo</p>', - str = '<p>{{= "foo" }}</p>'; - ejs.open = '{{'; - ejs.close = '}}'; - assert.equal(html, ejs.render(str)); - delete ejs.open; - delete ejs.close; - }, - - 'test iteration': function(){ - var html = '<p>foo</p>', - str = '<% for (var key in items) { %>' - + '<p><%= items[key] %></p>' - + '<% } %>'; - assert.equal(html, ejs.render(str, { - locals: { - items: ['foo'] - } - })); - - var html = '<p>foo</p>', - str = '<% items.forEach(function(item){ %>' - + '<p><%= item %></p>' - + '<% }) %>'; - assert.equal(html, ejs.render(str, { - locals: { - items: ['foo'] - } - })); - }, - - 'test filter support': function(){ - var html = 'Zab', - str = '<%=: items | reverse | first | reverse | capitalize %>'; - assert.equal(html, ejs.render(str, { - locals: { - items: ['foo', 'bar', 'baz'] - } - })); - }, - - 'test filter argument support': function(){ - var html = 'tj, guillermo', - str = '<%=: users | map:"name" | join:", " %>'; - assert.equal(html, ejs.render(str, { - locals: { - users: [ - { name: 'tj' }, - { name: 'guillermo' } - ] - } - })); - }, - - 'test sort_by filter': function(){ - var html = 'tj', - str = '<%=: users | sort_by:"name" | last | get:"name" %>'; - assert.equal(html, ejs.render(str, { - locals: { - users: [ - { name: 'guillermo' }, - { name: 'tj' }, - { name: 'mape' } - ] - } - })); - }, - - 'test custom filters': function(){ - var html = 'Welcome Tj Holowaychuk', - str = '<%=: users | first | greeting %>'; - - ejs.filters.greeting = function(user){ - return 'Welcome ' + user.first + ' ' + user.last + ''; - }; - - assert.equal(html, ejs.render(str, { - locals: { - users: [ - { first: 'Tj', last: 'Holowaychuk' } - ] - } - })); - }, - - 'test useful stack traces': function(){ - var str = [ - "A little somethin'", - "somethin'", - "<% if (name) { %>", // Failing line - " <p><%= name %></p>", - " <p><%= email %></p>", - "<% } %>" - ].join("\n"); - - try { - ejs.render(str) - } catch (err) { - assert.ok(~err.message.indexOf("name is not defined")); - assert.deepEqual(err.name, "ReferenceError"); - var lineno = parseInt(err.toString().match(/ejs:(\d+)\n/)[1]); - assert.deepEqual(lineno,3, "Error should been thrown on line 3, was thrown on line "+lineno); - } - }, - - 'test useful stack traces multiline': function(){ - var str = [ - "A little somethin'", - "somethin'", - "<% var some = 'pretty';", - " var multiline = 'javascript';", - "%>", - "<% if (name) { %>", // Failing line - " <p><%= name %></p>", - " <p><%= email %></p>", - "<% } %>" - ].join("\n"); - - try { - ejs.render(str) - } catch (err) { - assert.ok(~err.message.indexOf("name is not defined")); - assert.deepEqual(err.name, "ReferenceError"); - var lineno = parseInt(err.toString().match(/ejs:(\d+)\n/)[1]); - assert.deepEqual(lineno, 6, "Error should been thrown on line 3, was thrown on line "+lineno); - } - }, - - 'test slurp' : function() { - var expected = 'me\nhere', - str = 'me<% %>\nhere'; - assert.equal(expected, ejs.render(str)); - - var expected = 'mehere', - str = 'me<% -%>\nhere'; - assert.equal(expected, ejs.render(str)); - - var expected = 'me\nhere', - str = 'me<% -%>\n\nhere'; - assert.equal(expected, ejs.render(str)); - - var expected = 'me inbetween \nhere', - str = 'me <%= x %> \nhere'; - assert.equal(expected, ejs.render(str,{x:'inbetween'})); - - var expected = 'me inbetween here', - str = 'me <%= x -%> \nhere'; - assert.equal(expected, ejs.render(str,{x:'inbetween'})); - - var expected = 'me <p>inbetween</p> here', - str = 'me <%- x -%> \nhere'; - assert.equal(expected, ejs.render(str,{x:'<p>inbetween</p>'})); - - var expected = '\n Hallo 0\n\n Hallo 1\n\n', - str = '<% for(var i in [1,2]) { %>\n' + - ' Hallo <%= i %>\n' + - '<% } %>\n'; - assert.equal(expected, ejs.render(str)); - - var expected = ' Hallo 0\n Hallo 1\n', - str = '<% for(var i in [1,2]) { -%>\n' + - ' Hallo <%= i %>\n' + - '<% } -%>\n'; - assert.equal(expected, ejs.render(str)); - } - -}; diff --git a/tools/blog/node_modules/ejs/test/fixtures/user.ejs b/tools/blog/node_modules/ejs/test/fixtures/user.ejs deleted file mode 100644 index b312b5daa..000000000 --- a/tools/blog/node_modules/ejs/test/fixtures/user.ejs +++ /dev/null @@ -1 +0,0 @@ -<h1>{= name}</h1>
\ No newline at end of file diff --git a/tools/blog/node_modules/glob/.npmignore b/tools/blog/node_modules/glob/.npmignore deleted file mode 100644 index 2af4b71c9..000000000 --- a/tools/blog/node_modules/glob/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.*.swp -test/a/ diff --git a/tools/blog/node_modules/glob/.travis.yml b/tools/blog/node_modules/glob/.travis.yml deleted file mode 100644 index 94cd7f6ba..000000000 --- a/tools/blog/node_modules/glob/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.7 diff --git a/tools/blog/node_modules/glob/LICENCE b/tools/blog/node_modules/glob/LICENCE deleted file mode 100644 index 74489e2e2..000000000 --- a/tools/blog/node_modules/glob/LICENCE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) Isaac Z. Schlueter -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/tools/blog/node_modules/glob/LICENSE b/tools/blog/node_modules/glob/LICENSE deleted file mode 100644 index 0c44ae716..000000000 --- a/tools/blog/node_modules/glob/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) Isaac Z. Schlueter ("Author") -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tools/blog/node_modules/glob/README.md b/tools/blog/node_modules/glob/README.md deleted file mode 100644 index 6e27df620..000000000 --- a/tools/blog/node_modules/glob/README.md +++ /dev/null @@ -1,233 +0,0 @@ -# Glob - -This is a glob implementation in JavaScript. It uses the `minimatch` -library to do its matching. - -## Attention: node-glob users! - -The API has changed dramatically between 2.x and 3.x. This library is -now 100% JavaScript, and the integer flags have been replaced with an -options object. - -Also, there's an event emitter class, proper tests, and all the other -things you've come to expect from node modules. - -And best of all, no compilation! - -## Usage - -```javascript -var glob = require("glob") - -// options is optional -glob("**/*.js", options, function (er, files) { - // files is an array of filenames. - // If the `nonull` option is set, and nothing - // was found, then files is ["**/*.js"] - // er is an error object or null. -}) -``` - -## Features - -Please see the [minimatch -documentation](https://github.com/isaacs/minimatch) for more details. - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` -* [minimatch documentation](https://github.com/isaacs/minimatch) - -## glob(pattern, [options], cb) - -* `pattern` {String} Pattern to be matched -* `options` {Object} -* `cb` {Function} - * `err` {Error | null} - * `matches` {Array<String>} filenames found matching the pattern - -Perform an asynchronous glob search. - -## glob.sync(pattern, [options] - -* `pattern` {String} Pattern to be matched -* `options` {Object} -* return: {Array<String>} filenames found matching the pattern - -Perform a synchronous glob search. - -## Class: glob.Glob - -Create a Glob object by instanting the `glob.Glob` class. - -```javascript -var Glob = require("glob").Glob -var mg = new Glob(pattern, options, cb) -``` - -It's an EventEmitter, and starts walking the filesystem to find matches -immediately. - -### new glob.Glob(pattern, [options], [cb]) - -* `pattern` {String} pattern to search for -* `options` {Object} -* `cb` {Function} Called when an error occurs, or matches are found - * `err` {Error | null} - * `matches` {Array<String>} filenames found matching the pattern - -Note that if the `sync` flag is set in the options, then matches will -be immediately available on the `g.found` member. - -### Properties - -* `minimatch` The minimatch object that the glob uses. -* `options` The options object passed in. -* `error` The error encountered. When an error is encountered, the - glob object is in an undefined state, and should be discarded. -* `aborted` Boolean which is set to true when calling `abort()`. There - is no way at this time to continue a glob search after aborting, but - you can re-use the statCache to avoid having to duplicate syscalls. - -### Events - -* `end` When the matching is finished, this is emitted with all the - matches found. If the `nonull` option is set, and no match was found, - then the `matches` list contains the original pattern. The matches - are sorted, unless the `nosort` flag is set. -* `match` Every time a match is found, this is emitted with the matched. -* `error` Emitted when an unexpected error is encountered, or whenever - any fs error occurs if `options.strict` is set. -* `abort` When `abort()` is called, this event is raised. - -### Methods - -* `abort` Stop the search. - -### Options - -All the options that can be passed to Minimatch can also be passed to -Glob to change pattern matching behavior. Also, some have been added, -or have glob-specific ramifications. - -All options are false by default, unless otherwise noted. - -All options are added to the glob object, as well. - -* `cwd` The current working directory in which to search. Defaults - to `process.cwd()`. -* `root` The place where patterns starting with `/` will be mounted - onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix - systems, and `C:\` or some such on Windows.) -* `nomount` By default, a pattern starting with a forward-slash will be - "mounted" onto the root setting, so that a valid filesystem path is - returned. Set this flag to disable that behavior. -* `mark` Add a `/` character to directory matches. Note that this - requires additional stat calls. -* `nosort` Don't sort the results. -* `stat` Set to true to stat *all* results. This reduces performance - somewhat, and is completely unnecessary, unless `readdir` is presumed - to be an untrustworthy indicator of file existence. It will cause - ELOOP to be triggered one level sooner in the case of cyclical - symbolic links. -* `silent` When an unusual error is encountered - when attempting to read a directory, a warning will be printed to - stderr. Set the `silent` option to true to suppress these warnings. -* `strict` When an unusual error is encountered - when attempting to read a directory, the process will just continue on - in search of other matches. Set the `strict` option to raise an error - in these cases. -* `statCache` A cache of results of filesystem information, to prevent - unnecessary stat calls. While it should not normally be necessary to - set this, you may pass the statCache from one glob() call to the - options object of another, if you know that the filesystem will not - change between calls. (See "Race Conditions" below.) -* `sync` Perform a synchronous glob search. -* `nounique` In some cases, brace-expanded patterns can result in the - same file showing up multiple times in the result set. By default, - this implementation prevents duplicates in the result set. - Set this flag to disable that behavior. -* `nonull` Set to never return an empty set, instead returning a set - containing the pattern itself. This is the default in glob(3). -* `nocase` Perform a case-insensitive match. Note that case-insensitive - filesystems will sometimes result in glob returning results that are - case-insensitively matched anyway, since readdir and stat will not - raise an error. -* `debug` Set to enable debug logging in minimatch and glob. -* `globDebug` Set to enable debug logging in glob, but not minimatch. - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between node-glob and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. **Note that this is different from the way that `**` is -handled by ruby's `Dir` class.** - -If an escaped pattern has no matches, and the `nonull` flag is set, -then glob returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. - -## Windows - -**Please only use forward-slashes in glob expressions.** - -Though windows uses either `/` or `\` as its path separator, only `/` -characters are used by this glob implementation. You must use -forward-slashes **only** in glob expressions. Back-slashes will always -be interpreted as escape characters, not path separators. - -Results from absolute patterns such as `/foo/*` are mounted onto the -root setting using `path.join`. On windows, this will by default result -in `/foo/*` matching `C:\foo\bar.txt`. - -## Race Conditions - -Glob searching, by its very nature, is susceptible to race conditions, -since it relies on directory walking and such. - -As a result, it is possible that a file that exists when glob looks for -it may have been deleted or modified by the time it returns the result. - -As part of its internal implementation, this program caches all stat -and readdir calls that it makes, in order to cut down on system -overhead. However, this also makes it even more susceptible to races, -especially if the statCache object is reused between glob calls. - -Users are thus advised not to use a glob result as a -guarantee of filesystem state in the face of rapid changes. -For the vast majority of operations, this is never a problem. diff --git a/tools/blog/node_modules/glob/examples/g.js b/tools/blog/node_modules/glob/examples/g.js deleted file mode 100644 index be122df00..000000000 --- a/tools/blog/node_modules/glob/examples/g.js +++ /dev/null @@ -1,9 +0,0 @@ -var Glob = require("../").Glob - -var pattern = "test/a/**/[cg]/../[cg]" -console.log(pattern) - -var mg = new Glob(pattern, {mark: true, sync:true}, function (er, matches) { - console.log("matches", matches) -}) -console.log("after") diff --git a/tools/blog/node_modules/glob/examples/usr-local.js b/tools/blog/node_modules/glob/examples/usr-local.js deleted file mode 100644 index 327a425e4..000000000 --- a/tools/blog/node_modules/glob/examples/usr-local.js +++ /dev/null @@ -1,9 +0,0 @@ -var Glob = require("../").Glob - -var pattern = "{./*/*,/*,/usr/local/*}" -console.log(pattern) - -var mg = new Glob(pattern, {mark: true}, function (er, matches) { - console.log("matches", matches) -}) -console.log("after") diff --git a/tools/blog/node_modules/glob/glob.js b/tools/blog/node_modules/glob/glob.js deleted file mode 100644 index 0e7135842..000000000 --- a/tools/blog/node_modules/glob/glob.js +++ /dev/null @@ -1,601 +0,0 @@ -// Approach: -// -// 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern) -// 3. Store matches per-set, then uniq them -// -// PROCESS(pattern) -// Get the first [n] items from pattern that are all strings -// Join these together. This is PREFIX. -// If there is no more remaining, then stat(PREFIX) and -// add to matches if it succeeds. END. -// readdir(PREFIX) as ENTRIES -// If fails, END -// If pattern[n] is GLOBSTAR -// // handle the case where the globstar match is empty -// // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $]) -// // handle other cases. -// for ENTRY in ENTRIES (not dotfiles) -// // attach globstar + tail onto the entry -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $]) -// -// else // not globstar -// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) -// Test ENTRY against pattern[n+1] -// If fails, continue -// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) -// -// Caveat: -// Cache all stats and readdirs results to minimize syscall. Since all -// we ever care about is existence and directory-ness, we can just keep -// `true` for files, and [children,...] for directories, or `false` for -// things that don't exist. - - - -module.exports = glob - -var fs = require("graceful-fs") -, minimatch = require("minimatch") -, Minimatch = minimatch.Minimatch -, inherits = require("inherits") -, EE = require("events").EventEmitter -, path = require("path") -, isDir = {} -, assert = require("assert").ok -, EOF = {} - -function glob (pattern, options, cb) { - if (typeof options === "function") cb = options, options = {} - if (!options) options = {} - - if (typeof options === "number") { - deprecated() - return - } - - var g = new Glob(pattern, options, cb) - return g.sync ? g.found : g -} - -glob.fnmatch = deprecated - -function deprecated () { - throw new Error("glob's interface has changed. Please see the docs.") -} - -glob.sync = globSync -function globSync (pattern, options) { - if (typeof options === "number") { - deprecated() - return - } - - options = options || {} - options.sync = true - return glob(pattern, options) -} - - -glob.Glob = Glob -inherits(Glob, EE) -function Glob (pattern, options, cb) { - if (!(this instanceof Glob)) { - return new Glob(pattern, options, cb) - } - - if (typeof cb === "function") { - this.on("error", cb) - this.on("end", function (matches) { - // console.error("cb with matches", matches) - cb(null, matches) - }) - } - - options = options || {} - - this.maxDepth = options.maxDepth || 1000 - this.maxLength = options.maxLength || Infinity - this.statCache = options.statCache || {} - - this.changedCwd = false - var cwd = process.cwd() - if (!options.hasOwnProperty("cwd")) this.cwd = cwd - else { - this.cwd = options.cwd - this.changedCwd = path.resolve(options.cwd) !== cwd - } - - this.root = options.root || path.resolve(this.cwd, "/") - this.root = path.resolve(this.root) - - this.nomount = !!options.nomount - - if (!pattern) { - throw new Error("must provide pattern") - } - - // base-matching: just use globstar for that. - if (options.matchBase && -1 === pattern.indexOf("/")) { - if (options.noglobstar) { - throw new Error("base matching requires globstar") - } - pattern = "**/" + pattern - } - - this.dot = !!options.dot - this.mark = !!options.mark - this.sync = !!options.sync - this.nounique = !!options.nounique - this.nonull = !!options.nonull - this.nosort = !!options.nosort - this.nocase = !!options.nocase - this.stat = !!options.stat - this.debug = !!options.debug || !!options.globDebug - this.silent = !!options.silent - - var mm = this.minimatch = new Minimatch(pattern, options) - this.options = mm.options - pattern = this.pattern = mm.pattern - - this.error = null - this.aborted = false - - EE.call(this) - - // process each pattern in the minimatch set - var n = this.minimatch.set.length - - // The matches are stored as {<filename>: true,...} so that - // duplicates are automagically pruned. - // Later, we do an Object.keys() on these. - // Keep them as a list so we can fill in when nonull is set. - this.matches = new Array(n) - - this.minimatch.set.forEach(iterator.bind(this)) - function iterator (pattern, i, set) { - this._process(pattern, 0, i, function (er) { - if (er) this.emit("error", er) - if (-- n <= 0) this._finish() - }) - } -} - -Glob.prototype._finish = function () { - assert(this instanceof Glob) - - var nou = this.nounique - , all = nou ? [] : {} - - for (var i = 0, l = this.matches.length; i < l; i ++) { - var matches = this.matches[i] - if (this.debug) console.error("matches[%d] =", i, matches) - // do like the shell, and spit out the literal glob - if (!matches) { - if (this.nonull) { - var literal = this.minimatch.globSet[i] - if (nou) all.push(literal) - else nou[literal] = true - } - } else { - // had matches - var m = Object.keys(matches) - if (nou) all.push.apply(all, m) - else m.forEach(function (m) { - all[m] = true - }) - } - } - - if (!nou) all = Object.keys(all) - - if (!this.nosort) { - all = all.sort(this.nocase ? alphasorti : alphasort) - } - - if (this.mark) { - // at *some* point we statted all of these - all = all.map(function (m) { - var sc = this.statCache[m] - if (!sc) return m - if (m.slice(-1) !== "/" && (Array.isArray(sc) || sc === 2)) { - return m + "/" - } - if (m.slice(-1) === "/") { - return m.replace(/\/$/, "") - } - return m - }, this) - } - - if (this.debug) console.error("emitting end", all) - - EOF = this.found = all - this.emitMatch(EOF) -} - -function alphasorti (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return alphasort(a, b) -} - -function alphasort (a, b) { - return a > b ? 1 : a < b ? -1 : 0 -} - -Glob.prototype.abort = function () { - this.aborted = true - this.emit("abort") -} - -Glob.prototype.pause = function () { - if (this.paused) return - if (this.sync) - this.emit("error", new Error("Can't pause/resume sync glob")) - this.paused = true - this.emit("pause") -} - -Glob.prototype.resume = function () { - if (!this.paused) return - if (this.sync) - this.emit("error", new Error("Can't pause/resume sync glob")) - this.paused = false - this.emit("resume") -} - - -Glob.prototype.emitMatch = function (m) { - if (!this.paused) { - this.emit(m === EOF ? "end" : "match", m) - return - } - - if (!this._emitQueue) { - this._emitQueue = [] - this.once("resume", function () { - var q = this._emitQueue - this._emitQueue = null - q.forEach(function (m) { - this.emitMatch(m) - }, this) - }) - } - - this._emitQueue.push(m) - - //this.once("resume", this.emitMatch.bind(this, m)) -} - - - -Glob.prototype._process = function (pattern, depth, index, cb_) { - assert(this instanceof Glob) - - var cb = function cb (er, res) { - assert(this instanceof Glob) - if (this.paused) { - if (!this._processQueue) { - this._processQueue = [] - this.once("resume", function () { - var q = this._processQueue - this._processQueue = null - q.forEach(function (cb) { cb() }) - }) - } - this._processQueue.push(cb_.bind(this, er, res)) - } else { - cb_.call(this, er, res) - } - }.bind(this) - - if (this.aborted) return cb() - - if (depth > this.maxDepth) return cb() - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === "string") { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // see if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - prefix = pattern.join("/") - this._stat(prefix, function (exists, isDir) { - // either it's there, or it isn't. - // nothing more to do, either way. - if (exists) { - if (prefix.charAt(0) === "/" && !this.nomount) { - prefix = path.join(this.root, prefix) - } - this.matches[index] = this.matches[index] || {} - this.matches[index][prefix] = true - this.emitMatch(prefix) - } - return cb() - }) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's "absolute" like /foo/bar, - // or "relative" like "../baz" - prefix = pattern.slice(0, n) - prefix = prefix.join("/") - break - } - - // get the list of entries. - var read - if (prefix === null) read = "." - else if (isAbsolute(prefix)) { - read = prefix = path.join("/", prefix) - if (this.debug) console.error('absolute: ', prefix, this.root, pattern) - } else read = prefix - - if (this.debug) console.error('readdir(%j)', read, this.cwd, this.root) - return this._readdir(read, function (er, entries) { - if (er) { - // not a directory! - // this means that, whatever else comes after this, it can never match - return cb() - } - - // globstar is special - if (pattern[n] === minimatch.GLOBSTAR) { - // test without the globstar, and with every child both below - // and replacing the globstar. - var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ] - entries.forEach(function (e) { - if (e.charAt(0) === "." && !this.dot) return - // instead of the globstar - s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))) - // below the globstar - s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n))) - }, this) - - // now asyncForEach over this - var l = s.length - , errState = null - s.forEach(function (gsPattern) { - this._process(gsPattern, depth + 1, index, function (er) { - if (errState) return - if (er) return cb(errState = er) - if (--l <= 0) return cb() - }) - }, this) - - return - } - - // not a globstar - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = pattern[n] - if (typeof pn === "string") { - var found = entries.indexOf(pn) !== -1 - entries = found ? entries[pn] : [] - } else { - var rawGlob = pattern[n]._glob - , dotOk = this.dot || rawGlob.charAt(0) === "." - - entries = entries.filter(function (e) { - return (e.charAt(0) !== "." || dotOk) && - (typeof pattern[n] === "string" && e === pattern[n] || - e.match(pattern[n])) - }) - } - - // If n === pattern.length - 1, then there's no need for the extra stat - // *unless* the user has specified "mark" or "stat" explicitly. - // We know that they exist, since the readdir returned them. - if (n === pattern.length - 1 && - !this.mark && - !this.stat) { - entries.forEach(function (e) { - if (prefix) { - if (prefix !== "/") e = prefix + "/" + e - else e = prefix + e - } - if (e.charAt(0) === "/" && !this.nomount) { - e = path.join(this.root, e) - } - - this.matches[index] = this.matches[index] || {} - this.matches[index][e] = true - this.emitMatch(e) - }, this) - return cb.call(this) - } - - - // now test all the remaining entries as stand-ins for that part - // of the pattern. - var l = entries.length - , errState = null - if (l === 0) return cb() // no matches possible - entries.forEach(function (e) { - var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)) - this._process(p, depth + 1, index, function (er) { - if (errState) return - if (er) return cb(errState = er) - if (--l === 0) return cb.call(this) - }) - }, this) - }) - -} - -Glob.prototype._stat = function (f, cb) { - assert(this instanceof Glob) - var abs = f - if (f.charAt(0) === "/") { - abs = path.join(this.root, f) - } else if (this.changedCwd) { - abs = path.resolve(this.cwd, f) - } - if (this.debug) console.error('stat', [this.cwd, f, '=', abs]) - if (f.length > this.maxLength) { - var er = new Error("Path name too long") - er.code = "ENAMETOOLONG" - er.path = f - return this._afterStat(f, abs, cb, er) - } - - if (this.statCache.hasOwnProperty(f)) { - var exists = this.statCache[f] - , isDir = exists && (Array.isArray(exists) || exists === 2) - if (this.sync) return cb.call(this, !!exists, isDir) - return process.nextTick(cb.bind(this, !!exists, isDir)) - } - - if (this.sync) { - var er, stat - try { - stat = fs.statSync(abs) - } catch (e) { - er = e - } - this._afterStat(f, abs, cb, er, stat) - } else { - fs.stat(abs, this._afterStat.bind(this, f, abs, cb)) - } -} - -Glob.prototype._afterStat = function (f, abs, cb, er, stat) { - var exists - assert(this instanceof Glob) - if (er || !stat) { - exists = false - } else { - exists = stat.isDirectory() ? 2 : 1 - } - this.statCache[f] = this.statCache[f] || exists - cb.call(this, !!exists, exists === 2) -} - -Glob.prototype._readdir = function (f, cb) { - assert(this instanceof Glob) - var abs = f - if (f.charAt(0) === "/") { - abs = path.join(this.root, f) - } else if (isAbsolute(f)) { - abs = f - } else if (this.changedCwd) { - abs = path.resolve(this.cwd, f) - } - - if (this.debug) console.error('readdir', [this.cwd, f, abs]) - if (f.length > this.maxLength) { - var er = new Error("Path name too long") - er.code = "ENAMETOOLONG" - er.path = f - return this._afterReaddir(f, abs, cb, er) - } - - if (this.statCache.hasOwnProperty(f)) { - var c = this.statCache[f] - if (Array.isArray(c)) { - if (this.sync) return cb.call(this, null, c) - return process.nextTick(cb.bind(this, null, c)) - } - - if (!c || c === 1) { - // either ENOENT or ENOTDIR - var code = c ? "ENOTDIR" : "ENOENT" - , er = new Error((c ? "Not a directory" : "Not found") + ": " + f) - er.path = f - er.code = code - if (this.debug) console.error(f, er) - if (this.sync) return cb.call(this, er) - return process.nextTick(cb.bind(this, er)) - } - - // at this point, c === 2, meaning it's a dir, but we haven't - // had to read it yet, or c === true, meaning it's *something* - // but we don't have any idea what. Need to read it, either way. - } - - if (this.sync) { - var er, entries - try { - entries = fs.readdirSync(abs) - } catch (e) { - er = e - } - return this._afterReaddir(f, abs, cb, er, entries) - } - - fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb)) -} - -Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) { - assert(this instanceof Glob) - if (entries && !er) { - this.statCache[f] = entries - // if we haven't asked to stat everything for suresies, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. This also gets us one step - // further into ELOOP territory. - if (!this.mark && !this.stat) { - entries.forEach(function (e) { - if (f === "/") e = f + e - else e = f + "/" + e - this.statCache[e] = true - }, this) - } - - return cb.call(this, er, entries) - } - - // now handle errors, and cache the information - if (er) switch (er.code) { - case "ENOTDIR": // totally normal. means it *does* exist. - this.statCache[f] = 1 - return cb.call(this, er) - case "ENOENT": // not terribly unusual - case "ELOOP": - case "ENAMETOOLONG": - case "UNKNOWN": - this.statCache[f] = false - return cb.call(this, er) - default: // some unusual error. Treat as failure. - this.statCache[f] = false - if (this.strict) this.emit("error", er) - if (!this.silent) console.error("glob error", er) - return cb.call(this, er) - } -} - -var isAbsolute = process.platform === "win32" ? absWin : absUnix - -function absWin (p) { - if (absUnix(p)) return true - // pull off the device/UNC bit from a windows path. - // from node's lib/path.js - var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/ - , result = splitDeviceRe.exec(p) - , device = result[1] || '' - , isUnc = device && device.charAt(1) !== ':' - , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute - - return isAbsolute -} - -function absUnix (p) { - return p.charAt(0) === "/" || p === "" -} diff --git a/tools/blog/node_modules/glob/node_modules/graceful-fs/.npmignore b/tools/blog/node_modules/glob/node_modules/graceful-fs/.npmignore deleted file mode 100644 index c2658d7d1..000000000 --- a/tools/blog/node_modules/glob/node_modules/graceful-fs/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/tools/blog/node_modules/glob/node_modules/graceful-fs/LICENSE b/tools/blog/node_modules/glob/node_modules/graceful-fs/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/tools/blog/node_modules/glob/node_modules/graceful-fs/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/blog/node_modules/glob/node_modules/graceful-fs/README.md b/tools/blog/node_modules/glob/node_modules/graceful-fs/README.md deleted file mode 100644 index 7d2e681e3..000000000 --- a/tools/blog/node_modules/glob/node_modules/graceful-fs/README.md +++ /dev/null @@ -1,5 +0,0 @@ -Just like node's `fs` module, but it does an incremental back-off when -EMFILE is encountered. - -Useful in asynchronous situations where one needs to try to open lots -and lots of files. diff --git a/tools/blog/node_modules/glob/node_modules/graceful-fs/graceful-fs.js b/tools/blog/node_modules/glob/node_modules/graceful-fs/graceful-fs.js deleted file mode 100644 index ecbda31a5..000000000 --- a/tools/blog/node_modules/glob/node_modules/graceful-fs/graceful-fs.js +++ /dev/null @@ -1,275 +0,0 @@ -// 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") - -// there is such a thing as TOO graceful. -if (fs.open === gracefulOpen) return - -var queue = [] - , curOpen = 0 - , constants = require("constants") - - -exports = module.exports = fs - - -fs.MIN_MAX_OPEN = 64 -fs.MAX_OPEN = 1024 - -var originalOpen = fs.open - , originalOpenSync = fs.openSync - , originalClose = fs.close - , originalCloseSync = fs.closeSync - - -// prevent EMFILE errors -function OpenReq (path, flags, mode, cb) { - this.path = path - this.flags = flags - this.mode = mode - this.cb = cb -} - -function noop () {} - -fs.open = gracefulOpen - -function gracefulOpen (path, flags, mode, cb) { - if (typeof mode === "function") cb = mode, mode = null - if (typeof cb !== "function") cb = noop - - if (curOpen >= fs.MAX_OPEN) { - queue.push(new OpenReq(path, flags, mode, cb)) - setTimeout(flush) - return - } - open(path, flags, mode, function (er, fd) { - if (er && er.code === "EMFILE" && curOpen > fs.MIN_MAX_OPEN) { - // that was too many. reduce max, get back in queue. - // this should only happen once in a great while, and only - // if the ulimit -n is set lower than 1024. - fs.MAX_OPEN = curOpen - 1 - return fs.open(path, flags, mode, cb) - } - cb(er, fd) - }) -} - -function open (path, flags, mode, cb) { - cb = cb || noop - curOpen ++ - originalOpen.call(fs, path, flags, mode, function (er, fd) { - if (er) { - onclose() - } - - cb(er, fd) - }) -} - -fs.openSync = function (path, flags, mode) { - curOpen ++ - return originalOpenSync.call(fs, path, flags, mode) -} - -function onclose () { - curOpen -- - flush() -} - -function flush () { - while (curOpen < fs.MAX_OPEN) { - var req = queue.shift() - if (!req) break - open(req.path, req.flags || "r", req.mode || 0777, req.cb) - } - if (queue.length === 0) return -} - -fs.close = function (fd, cb) { - cb = cb || noop - originalClose.call(fs, fd, function (er) { - onclose() - cb(er) - }) -} - -fs.closeSync = function (fd) { - onclose() - return originalCloseSync.call(fs, fd) -} - - -// (re-)implement some things that are known busted or missing. - -var constants = require("constants") - -// lchmod, broken prior to 0.6.2 -// back-port the fix here. -if (constants.hasOwnProperty('O_SYMLINK') && - process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { - fs.lchmod = function (path, mode, callback) { - callback = callback || noop - fs.open( path - , constants.O_WRONLY | constants.O_SYMLINK - , mode - , function (err, fd) { - if (err) { - callback(err) - return - } - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - fs.fchmod(fd, mode, function (err) { - fs.close(fd, function(err2) { - callback(err || err2) - }) - }) - }) - } - - fs.lchmodSync = function (path, mode) { - var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) - - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - var err, err2 - try { - var ret = fs.fchmodSync(fd, mode) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } -} - - -// lstat on windows, missing from early 0.5 versions -// replacing with stat isn't quite perfect, but good enough to get by. -if (process.platform === "win32" && !process.binding("fs").lstat) { - fs.lstat = fs.stat - fs.lstatSync = fs.statSync -} - - -// lutimes implementation, or no-op -if (!fs.lutimes) { - if (constants.hasOwnProperty("O_SYMLINK")) { - fs.lutimes = function (path, at, mt, cb) { - fs.open(path, constants.O_SYMLINK, function (er, fd) { - cb = cb || noop - if (er) return cb(er) - fs.futimes(fd, at, mt, function (er) { - fs.close(fd, function (er2) { - return cb(er || er2) - }) - }) - }) - } - - fs.lutimesSync = function (path, at, mt) { - var fd = fs.openSync(path, constants.O_SYMLINK) - , err - , err2 - , ret - - try { - var ret = fs.futimesSync(fd, at, mt) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } - - } else if (fs.utimensat && constants.hasOwnProperty("AT_SYMLINK_NOFOLLOW")) { - // maybe utimensat will be bound soonish? - fs.lutimes = function (path, at, mt, cb) { - fs.utimensat(path, at, mt, constants.AT_SYMLINK_NOFOLLOW, cb) - } - - fs.lutimesSync = function (path, at, mt) { - return fs.utimensatSync(path, at, mt, constants.AT_SYMLINK_NOFOLLOW) - } - - } else { - fs.lutimes = function (_a, _b, _c, cb) { process.nextTick(cb) } - fs.lutimesSync = function () {} - } -} - - -// https://github.com/isaacs/node-graceful-fs/issues/4 -// Chown should not fail on einval or eperm if non-root. - -fs.chown = chownFix(fs.chown) -fs.fchown = chownFix(fs.fchown) -fs.lchown = chownFix(fs.lchown) - -fs.chownSync = chownFixSync(fs.chownSync) -fs.fchownSync = chownFixSync(fs.fchownSync) -fs.lchownSync = chownFixSync(fs.lchownSync) - -function chownFix (orig) { - if (!orig) return orig - return function (target, uid, gid, cb) { - return orig.call(fs, target, uid, gid, function (er, res) { - if (chownErOk(er)) er = null - cb(er, res) - }) - } -} - -function chownFixSync (orig) { - if (!orig) return orig - return function (target, uid, gid) { - try { - return orig.call(fs, target, uid, gid) - } catch (er) { - if (!chownErOk(er)) throw er - } - } -} - -function chownErOk (er) { - // if there's no getuid, or if getuid() is something other than 0, - // and the error is EINVAL or EPERM, then just ignore it. - // This specific case is a silent failure in cp, install, tar, - // and most other unix tools that manage permissions. - // When running as root, or if other types of errors are encountered, - // then it's strict. - if (!er || (!process.getuid || process.getuid() !== 0) - && (er.code === "EINVAL" || er.code === "EPERM")) return true -} - - - -// on Windows, A/V software can lock the directory, causing this -// to fail with an EACCES or EPERM if the directory contains newly -// created files. Try again on failure, for up to 1 second. -if (process.platform === "win32") { - var rename_ = fs.rename - fs.rename = function rename (from, to, cb) { - var start = Date.now() - rename_(from, to, function CB (er) { - if (er - && (er.code === "EACCES" || er.code === "EPERM") - && Date.now() - start < 1000) { - return rename_(from, to, CB) - } - cb(er) - }) - } -} diff --git a/tools/blog/node_modules/glob/node_modules/graceful-fs/package.json b/tools/blog/node_modules/glob/node_modules/graceful-fs/package.json deleted file mode 100644 index 36f358483..000000000 --- a/tools/blog/node_modules/glob/node_modules/graceful-fs/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "graceful-fs", - "description": "Just like node's `fs` module, but it does an incremental back-off when EMFILE is encountered.", - "version": "1.1.8", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-graceful-fs.git" - }, - "main": "graceful-fs.js", - "engines": { - "node": ">=0.4.0" - }, - "devDependencies": {}, - "readme": "Just like node's `fs` module, but it does an incremental back-off when\nEMFILE is encountered.\n\nUseful in asynchronous situations where one needs to try to open lots\nand lots of files.\n", - "_id": "graceful-fs@1.1.8", - "_from": "graceful-fs@~1.1.2" -} diff --git a/tools/blog/node_modules/glob/node_modules/graceful-fs/test/open.js b/tools/blog/node_modules/glob/node_modules/graceful-fs/test/open.js deleted file mode 100644 index d05f880c8..000000000 --- a/tools/blog/node_modules/glob/node_modules/graceful-fs/test/open.js +++ /dev/null @@ -1,41 +0,0 @@ -var test = require('tap').test -var fs = require('../graceful-fs.js') - -test('open an existing file works', function (t) { - var start = fs._curOpen - var fd = fs.openSync(__filename, 'r') - t.equal(fs._curOpen, start + 1) - fs.closeSync(fd) - t.equal(fs._curOpen, start) - fs.open(__filename, 'r', function (er, fd) { - if (er) throw er - t.equal(fs._curOpen, start + 1) - fs.close(fd, function (er) { - if (er) throw er - t.equal(fs._curOpen, start) - t.end() - }) - }) -}) - -test('open a non-existing file throws', function (t) { - var start = fs._curOpen - var er - try { - var fd = fs.openSync('this file does not exist', 'r') - } catch (x) { - er = x - } - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - t.equal(fs._curOpen, start) - - fs.open('neither does this file', 'r', function (er, fd) { - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - t.equal(fs._curOpen, start) - t.end() - }) -}) diff --git a/tools/blog/node_modules/glob/node_modules/inherits/README.md b/tools/blog/node_modules/glob/node_modules/inherits/README.md deleted file mode 100644 index b2beaed93..000000000 --- a/tools/blog/node_modules/glob/node_modules/inherits/README.md +++ /dev/null @@ -1,51 +0,0 @@ -A dead simple way to do inheritance in JS. - - var inherits = require("inherits") - - function Animal () { - this.alive = true - } - Animal.prototype.say = function (what) { - console.log(what) - } - - inherits(Dog, Animal) - function Dog () { - Dog.super.apply(this) - } - Dog.prototype.sniff = function () { - this.say("sniff sniff") - } - Dog.prototype.bark = function () { - this.say("woof woof") - } - - inherits(Chihuahua, Dog) - function Chihuahua () { - Chihuahua.super.apply(this) - } - Chihuahua.prototype.bark = function () { - this.say("yip yip") - } - - // also works - function Cat () { - Cat.super.apply(this) - } - Cat.prototype.hiss = function () { - this.say("CHSKKSS!!") - } - inherits(Cat, Animal, { - meow: function () { this.say("miao miao") } - }) - Cat.prototype.purr = function () { - this.say("purr purr") - } - - - var c = new Chihuahua - assert(c instanceof Chihuahua) - assert(c instanceof Dog) - assert(c instanceof Animal) - -The actual function is laughably small. 10-lines small. diff --git a/tools/blog/node_modules/glob/node_modules/inherits/inherits.js b/tools/blog/node_modules/glob/node_modules/inherits/inherits.js deleted file mode 100644 index 061b39620..000000000 --- a/tools/blog/node_modules/glob/node_modules/inherits/inherits.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = inherits - -function inherits (c, p, proto) { - proto = proto || {} - var e = {} - ;[c.prototype, proto].forEach(function (s) { - Object.getOwnPropertyNames(s).forEach(function (k) { - e[k] = Object.getOwnPropertyDescriptor(s, k) - }) - }) - c.prototype = Object.create(p.prototype, e) - c.super = p -} - -//function Child () { -// Child.super.call(this) -// console.error([this -// ,this.constructor -// ,this.constructor === Child -// ,this.constructor.super === Parent -// ,Object.getPrototypeOf(this) === Child.prototype -// ,Object.getPrototypeOf(Object.getPrototypeOf(this)) -// === Parent.prototype -// ,this instanceof Child -// ,this instanceof Parent]) -//} -//function Parent () {} -//inherits(Child, Parent) -//new Child diff --git a/tools/blog/node_modules/glob/node_modules/inherits/package.json b/tools/blog/node_modules/glob/node_modules/inherits/package.json deleted file mode 100644 index 6435eb6e6..000000000 --- a/tools/blog/node_modules/glob/node_modules/inherits/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "inherits", - "description": "A dead simple way to do inheritance in JS.", - "version": "1.0.0", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented" - ], - "main": "./inherits.js", - "repository": { - "type": "git", - "url": "https://github.com/isaacs/inherits" - }, - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "readme": "A dead simple way to do inheritance in JS.\n\n var inherits = require(\"inherits\")\n\n function Animal () {\n this.alive = true\n }\n Animal.prototype.say = function (what) {\n console.log(what)\n }\n\n inherits(Dog, Animal)\n function Dog () {\n Dog.super.apply(this)\n }\n Dog.prototype.sniff = function () {\n this.say(\"sniff sniff\")\n }\n Dog.prototype.bark = function () {\n this.say(\"woof woof\")\n }\n\n inherits(Chihuahua, Dog)\n function Chihuahua () {\n Chihuahua.super.apply(this)\n }\n Chihuahua.prototype.bark = function () {\n this.say(\"yip yip\")\n }\n\n // also works\n function Cat () {\n Cat.super.apply(this)\n }\n Cat.prototype.hiss = function () {\n this.say(\"CHSKKSS!!\")\n }\n inherits(Cat, Animal, {\n meow: function () { this.say(\"miao miao\") }\n })\n Cat.prototype.purr = function () {\n this.say(\"purr purr\")\n }\n\n\n var c = new Chihuahua\n assert(c instanceof Chihuahua)\n assert(c instanceof Dog)\n assert(c instanceof Animal)\n\nThe actual function is laughably small. 10-lines small.\n", - "_id": "inherits@1.0.0", - "_from": "inherits@1" -} diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/.travis.yml b/tools/blog/node_modules/glob/node_modules/minimatch/.travis.yml deleted file mode 100644 index f1d0f13c8..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/LICENSE b/tools/blog/node_modules/glob/node_modules/minimatch/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/README.md b/tools/blog/node_modules/glob/node_modules/minimatch/README.md deleted file mode 100644 index 6fd07d2e9..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/README.md +++ /dev/null @@ -1,218 +0,0 @@ -# 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. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```javascript -var minimatch = require("minimatch") - -minimatch("bar.foo", "*.foo") // true! -minimatch("bar.foo", "*.bar") // false! -``` - -## Features - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` - -### Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between minimatch and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. **Note that this is different from the way that `**` is -handled by ruby's `Dir` class.** - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. - - -## Minimatch Class - -Create a minimatch object by instanting the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require("minimatch").Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -* `pattern` The original pattern the minimatch object represents. -* `options` The options supplied to the constructor. -* `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -* `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -* `negate` True if the pattern is negated. -* `comment` True if the pattern is a comment. -* `empty` True if the pattern is `""`. - -### Methods - -* `makeRe` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -* `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -* `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. - -All other methods are internal, and will be called as necessary. - -## Functions - -The top-level exported function has a `cache` property, which is an LRU -cache set to store 100 items. So, calling these methods repeatedly -with the same pattern and options will use the same Minimatch object, -saving the cost of parsing it multiple times. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, "*.js", { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) -``` - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself. When set, an empty list is returned if there are -no matches. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/minimatch.js b/tools/blog/node_modules/glob/node_modules/minimatch/minimatch.js deleted file mode 100644 index 00873594b..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/minimatch.js +++ /dev/null @@ -1,1052 +0,0 @@ -;(function (require, exports, module, platform) { - -if (module) module.exports = minimatch -else exports.minimatch = minimatch - -if (!require) { - require = function (id) { - switch (id) { - case "path": return { basename: function (f) { - f = f.split(/[\/\\]/) - var e = f.pop() - if (!e) e = f.pop() - return e - }} - case "lru-cache": return function LRUCache () { - // not quite an LRU, but still space-limited. - var cache = {} - var cnt = 0 - this.set = function (k, v) { - cnt ++ - if (cnt >= 100) cache = {} - cache[k] = v - } - this.get = function (k) { return cache[k] } - } - } - } -} - -minimatch.Minimatch = Minimatch - -var LRU = require("lru-cache") - , cache = minimatch.cache = new LRU(100) - , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} - -var path = require("path") - // any single thing other than / - // don't need to escape / when using new RegExp() - , qmark = "[^/]" - - // * => any number of characters - , star = qmark + "*?" - - // ** when dots are allowed. Anything goes, except .. and . - // not (^ or / followed by one or two dots followed by $ or /), - // followed by anything, any number of times. - , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?" - - // not a ^ or / followed by a dot, - // followed by anything, any number of times. - , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?" - - // characters that need to be escaped in RegExp. - , reSpecials = charSet("().*{}+?[]^$\\!") - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split("").reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.monkeyPatch = monkeyPatch -function monkeyPatch () { - var desc = Object.getOwnPropertyDescriptor(String.prototype, "match") - var orig = desc.value - desc.value = function (p) { - if (p instanceof Minimatch) return p.match(this) - return orig.call(this, p) - } - Object.defineProperty(String.prototype, desc) -} - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - - -function minimatch (p, pattern, options) { - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { - return false - } - - // "" only matches "" - if (pattern.trim() === "") return p === "" - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options, cache) - } - - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - pattern = pattern.trim() - - // lru storage. - // these things aren't particularly big, but walking down the string - // and turning it into a regexp can get pretty costly. - var cacheKey = pattern + "\n" + Object.keys(options).filter(function (k) { - return options[k] - }).join(":") - var cached = minimatch.cache.get(cacheKey) - if (cached) return cached - minimatch.cache.set(cacheKey, this) - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) console.error(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - if (options.debug) console.error(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - if (options.debug) console.error(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return -1 === s.indexOf(false) - }) - - if (options.debug) console.error(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - , negate = false - , options = this.options - , negateOffset = 0 - - if (options.nonegate) return - - for ( var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === "!" - ; i ++) { - negate = !negate - negateOffset ++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return new Minimatch(pattern, options).braceExpand() -} - -Minimatch.prototype.braceExpand = braceExpand -function braceExpand (pattern, options) { - options = options || this.options - pattern = typeof pattern === "undefined" - ? this.pattern : pattern - - if (typeof pattern === "undefined") { - throw new Error("undefined pattern") - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - var escaping = false - - // examples and comments refer to this crazy pattern: - // a{b,c{d,e},{f,g}h}x{y,z} - // expected: - // abxy - // abxz - // acdxy - // acdxz - // acexy - // acexz - // afhxy - // afhxz - // aghxy - // aghxz - - // everything before the first \{ is just a prefix. - // So, we pluck that off, and work with the rest, - // and then prepend it to everything we find. - if (pattern.charAt(0) !== "{") { - // console.error(pattern) - var prefix = null - for (var i = 0, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - // console.error(i, c) - if (c === "\\") { - escaping = !escaping - } else if (c === "{" && !escaping) { - prefix = pattern.substr(0, i) - break - } - } - - // actually no sets, all { were escaped. - if (prefix === null) { - // console.error("no sets") - return [pattern] - } - - var tail = braceExpand(pattern.substr(i), options) - return tail.map(function (t) { - return prefix + t - }) - } - - // now we have something like: - // {b,c{d,e},{f,g}h}x{y,z} - // walk through the set, expanding each part, until - // the set ends. then, we'll expand the suffix. - // If the set only has a single member, then'll put the {} back - - // first, handle numeric sets, since they're easier - var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/) - if (numset) { - // console.error("numset", numset[1], numset[2]) - var suf = braceExpand(pattern.substr(numset[0].length), options) - , start = +numset[1] - , end = +numset[2] - , inc = start > end ? -1 : 1 - , set = [] - for (var i = start; i != (end + inc); i += inc) { - // append all the suffixes - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - set.push(i + suf[ii]) - } - } - return set - } - - // ok, walk through the set - // We hope, somewhat optimistically, that there - // will be a } at the end. - // If the closing brace isn't found, then the pattern is - // interpreted as braceExpand("\\" + pattern) so that - // the leading \{ will be interpreted literally. - var i = 1 // skip the \{ - , depth = 1 - , set = [] - , member = "" - , sawEnd = false - , escaping = false - - function addMember () { - set.push(member) - member = "" - } - - // console.error("Entering for") - FOR: for (i = 1, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - // console.error("", i, c) - - if (escaping) { - escaping = false - member += "\\" + c - } else { - switch (c) { - case "\\": - escaping = true - continue - - case "{": - depth ++ - member += "{" - continue - - case "}": - depth -- - // if this closes the actual set, then we're done - if (depth === 0) { - addMember() - // pluck off the close-brace - i ++ - break FOR - } else { - member += c - continue - } - - case ",": - if (depth === 1) { - addMember() - } else { - member += c - } - continue - - default: - member += c - continue - } // switch - } // else - } // for - - // now we've either finished the set, and the suffix is - // pattern.substr(i), or we have *not* closed the set, - // and need to escape the leading brace - if (depth !== 0) { - // console.error("didn't close", pattern) - return braceExpand("\\" + pattern, options) - } - - // x{y,z} -> ["xy", "xz"] - // console.error("set", set) - // console.error("suffix", pattern.substr(i)) - var suf = braceExpand(pattern.substr(i), options) - // ["b", "c{d,e}","{f,g}h"] -> - // [["b"], ["cd", "ce"], ["fh", "gh"]] - var addBraces = set.length === 1 - // console.error("set pre-expanded", set) - set = set.map(function (p) { - return braceExpand(p, options) - }) - // console.error("set expanded", set) - - - // [["b"], ["cd", "ce"], ["fh", "gh"]] -> - // ["b", "cd", "ce", "fh", "gh"] - set = set.reduce(function (l, r) { - return l.concat(r) - }) - - if (addBraces) { - set = set.map(function (s) { - return "{" + s + "}" - }) - } - - // now attach the suffixes. - var ret = [] - for (var i = 0, l = set.length; i < l; i ++) { - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - ret.push(set[i] + suf[ii]) - } - } - return ret -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === "**") return GLOBSTAR - if (pattern === "") return "" - - var re = "" - , hasMagic = false - , escaping = false - // ? => one single character - , patternListStack = [] - , plType - , stateChar - , inClass = false - , reClassStart = -1 - , classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - , patternStart = pattern.charAt(0) === "." ? "" // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))" - : "(?!\\.)" - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case "*": - re += star - hasMagic = true - break - case "?": - re += qmark - hasMagic = true - break - default: - re += "\\"+stateChar - break - } - stateChar = false - } - } - - for ( var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i ++ ) { - - if (options.debug) { - console.error("%s\t%s %s %j", pattern, i, re, c) - } - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += "\\" + c - escaping = false - continue - } - - SWITCH: switch (c) { - case "/": - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case "\\": - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case "?": - case "*": - case "+": - case "@": - case "!": - if (options.debug) { - console.error("%s\t%s %s %j <-- stateChar", pattern, i, re, c) - } - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - if (c === "!" && i === classStart + 1) c = "^" - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case "(": - if (inClass) { - re += "(" - continue - } - - if (!stateChar) { - re += "\\(" - continue - } - - plType = stateChar - patternListStack.push({ type: plType - , start: i - 1 - , reStart: re.length }) - // negation is (?:(?!js)[^/]*) - re += stateChar === "!" ? "(?:(?!" : "(?:" - stateChar = false - continue - - case ")": - if (inClass || !patternListStack.length) { - re += "\\)" - continue - } - - hasMagic = true - re += ")" - plType = patternListStack.pop().type - // negation is (?:(?!js)[^/]*) - // The others are (?:<pattern>)<type> - switch (plType) { - case "!": - re += "[^/]*?)" - break - case "?": - case "+": - case "*": re += plType - case "@": break // the default anyway - } - continue - - case "|": - if (inClass || !patternListStack.length || escaping) { - re += "\\|" - escaping = false - continue - } - - re += "|" - continue - - // these are mostly the same in regexp and glob - case "[": - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += "\\" + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case "]": - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += "\\" + c - escaping = false - continue - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === "^" && inClass)) { - re += "\\" - } - - re += c - - } // switch - } // for - - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // 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 = pattern.substr(classStart + 1) - , sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + "\\[" + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - var pl - while (pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + 3) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = "\\" - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + "|" - }) - - // console.error("tail=%j\n %s", tail, tail) - var t = pl.type === "*" ? star - : pl.type === "?" ? qmark - : "\\" + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) - + t + "\\(" - + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += "\\\\" - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case ".": - case "[": - case "(": addPatternStart = true - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== "" && hasMagic) re = "(?=.)" + re - - if (addPatternStart) re = patternStart + re - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [ re, hasMagic ] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? "i" : "" - , regExp = new RegExp("^" + re + "$", flags) - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) return this.regexp = false - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - , flags = options.nocase ? "i" : "" - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === "string") ? regExpEscape(p) - : p._src - }).join("\\\/") - }).join("|") - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = "^" + re + "$" - - // can match anything, as long as it's not this. - if (this.negate) re = "^(?!" + re + ").*$" - - try { - return this.regexp = new RegExp(re, flags) - } catch (ex) { - return this.regexp = false - } -} - -minimatch.match = function (list, pattern, options) { - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - // console.error("match", f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === "" - - if (f === "/" && partial) return true - - var options = this.options - - // windows: need to use /, not \ - // On other platforms, \ is a valid (albeit bad) filename char. - if (platform === "win32") { - f = f.split("\\").join("/") - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - if (options.debug) { - console.error(this.pattern, "split", f) - } - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - // console.error(this.pattern, "set", set) - - for (var i = 0, l = set.length; i < l; i ++) { - var pattern = set[i] - var hit = this.matchOne(f, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - if (options.debug) { - console.error("matchOne", - { "this": this - , file: file - , pattern: pattern }) - } - - if (options.matchBase && pattern.length === 1) { - file = path.basename(file.join("/")).split("/") - } - - if (options.debug) { - console.error("matchOne", file.length, pattern.length) - } - - for ( var fi = 0 - , pi = 0 - , fl = file.length - , pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi ++, pi ++ ) { - - if (options.debug) { - console.error("matchOne loop") - } - var p = pattern[pi] - , f = file[fi] - - if (options.debug) { - console.error(pattern, p, f) - } - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - , pr = pi + 1 - if (pr === pl) { - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for ( ; fi < fl; fi ++) { - if (file[fi] === "." || file[fi] === ".." || - (!options.dot && file[fi].charAt(0) === ".")) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - WHILE: while (fr < fl) { - var swallowee = file[fr] - if (swallowee === "." || swallowee === ".." || - (!options.dot && swallowee.charAt(0) === ".")) { - // console.error("dot detected!") - break WHILE - } - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - // found a match. - return true - } else { - // ** swallows a segment, and continue. - fr ++ - } - } - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - // console.error("\n>>> no match, partial?", file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === "string") { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - if (options.debug) { - console.error("string match", p, f, hit) - } - } else { - hit = f.match(p) - if (options.debug) { - console.error("pattern match", p, f, hit) - } - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === "") - return emptyFileEnd - } - - // should be unreachable. - throw new Error("wtf?") -} - - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, "$1") -} - - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") -} - -})( typeof require === "function" ? require : null, - this, - typeof module === "object" ? module : null, - typeof process === "object" ? process.platform : "win32" - ) diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore deleted file mode 100644 index 07e6e472c..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/AUTHORS b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/AUTHORS deleted file mode 100644 index d8e20616e..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/AUTHORS +++ /dev/null @@ -1,5 +0,0 @@ -# Authors, sorted by whether or not they are me -Isaac Z. Schlueter <i@izs.me> -Carlos Brito Lage <carlos@carloslage.net> -Marko Mikulicic <marko.mikulicic@isti.cnr.it> -Trent Mick <trentm@gmail.com> diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md deleted file mode 100644 index f342b519b..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# lru cache - -A cache object that deletes the least-recently-used items. - -Usage: - - var LRU = require("lru-cache") - , cache = LRU(10, // max length. default = Infinity - // calculate how "big" each item is - // - // defaults to function(){return 1}, ie, just limit - // the item count, without any knowledge as to their - // relative size. - function (item) { return item.length }) - - cache.set("key", "value") - cache.get("key") // "value" - - cache.reset() // empty the cache - -If you put more stuff in it, then items will fall out. - -If you try to put an oversized thing in it, then it'll fall out right -away. - -RTFS for more info. diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js deleted file mode 100644 index 1bd4e5864..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +++ /dev/null @@ -1,156 +0,0 @@ -;(function () { // closure for web browsers - -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) -} - -function naiveLength () { return 1 } - -function LRUCache (maxLength, lengthCalculator) { - if (!(this instanceof LRUCache)) { - return new LRUCache(maxLength, lengthCalculator) - } - - if (typeof lengthCalculator !== "function") { - lengthCalculator = naiveLength - } - if (!maxLength || !(typeof maxLength === "number") || maxLength <= 0 ) { - maxLength = Infinity - } - - - var cache = {} // hash of items by key - , lruList = {} // list of items in order of use recency - , lru = 0 // least recently used - , mru = 0 // most recently used - , length = 0 // number of items in the list - , itemCount = 0 - - - // resize the cache when the maxLength changes. - Object.defineProperty(this, "maxLength", - { set : function (mL) { - if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity - maxLength = mL - // if it gets above double maxLength, trim right away. - // otherwise, do it whenever it's convenient. - if (length > maxLength) trim() - } - , get : function () { return maxLength } - , enumerable : true - }) - - // resize the cache when the lengthCalculator changes. - Object.defineProperty(this, "lengthCalculator", - { set : function (lC) { - if (typeof lC !== "function") { - lengthCalculator = naiveLength - length = itemCount - Object.keys(cache).forEach(function (key) { - cache[key].length = 1 - }) - } else { - lengthCalculator = lC - length = 0 - Object.keys(cache).forEach(function (key) { - cache[key].length = lengthCalculator(cache[key].value) - length += cache[key].length - }) - } - - if (length > maxLength) trim() - } - , get : function () { return lengthCalculator } - , enumerable : true - }) - - Object.defineProperty(this, "length", - { get : function () { return length } - , enumerable : true - }) - - - Object.defineProperty(this, "itemCount", - { get : function () { return itemCount } - , enumerable : true - }) - - this.reset = function () { - cache = {} - lruList = {} - lru = 0 - mru = 0 - length = 0 - itemCount = 0 - } - - // Provided for debugging/dev purposes only. No promises whatsoever that - // this API stays stable. - this.dump = function () { - return cache - } - - this.set = function (key, value) { - if (hOP(cache, key)) { - this.get(key) - cache[key].value = value - return - } - - var hit = {key:key, value:value, lu:mru++, length:lengthCalculator(value)} - - // oversized objects fall out of cache automatically. - if (hit.length > maxLength) return - - length += hit.length - lruList[hit.lu] = cache[key] = hit - itemCount ++ - - if (length > maxLength) trim() - } - - this.get = function (key) { - if (!hOP(cache, key)) return - var hit = cache[key] - delete lruList[hit.lu] - if (hit.lu === lru) lruWalk() - hit.lu = mru ++ - lruList[hit.lu] = hit - return hit.value - } - - this.del = function (key) { - if (!hOP(cache, key)) return - var hit = cache[key] - delete cache[key] - delete lruList[hit.lu] - if (hit.lu === lru) lruWalk() - length -= hit.length - itemCount -- - } - - function lruWalk () { - // lru has been deleted, hop up to the next hit. - lru = Object.keys(lruList)[0] - } - - function trim () { - if (length <= maxLength) return - var prune = Object.keys(lruList) - for (var i = 0; i < prune.length && length > maxLength; i ++) { - length -= lruList[prune[i]].length - delete cache[ lruList[prune[i]].key ] - delete lruList[prune[i]] - } - lruWalk() - } -} - -})() diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json deleted file mode 100644 index ff3059126..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "lru-cache", - "description": "A cache object that deletes the least-recently-used items.", - "version": "1.1.0", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "scripts": { - "test": "tap test" - }, - "main": "lib/lru-cache.js", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-lru-cache.git" - }, - "devDependencies": { - "tap": "" - }, - "license": { - "type": "MIT", - "url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE" - }, - "contributors": [ - { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - { - "name": "Carlos Brito Lage", - "email": "carlos@carloslage.net" - }, - { - "name": "Marko Mikulicic", - "email": "marko.mikulicic@isti.cnr.it" - }, - { - "name": "Trent Mick", - "email": "trentm@gmail.com" - } - ], - "readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\nUsage:\n\n var LRU = require(\"lru-cache\")\n , cache = LRU(10, // max length. default = Infinity\n // calculate how \"big\" each item is\n //\n // defaults to function(){return 1}, ie, just limit\n // the item count, without any knowledge as to their\n // relative size.\n function (item) { return item.length })\n\n cache.set(\"key\", \"value\")\n cache.get(\"key\") // \"value\"\n\n cache.reset() // empty the cache\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\nRTFS for more info.\n", - "_id": "lru-cache@1.1.0", - "_from": "lru-cache@~1" -} diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js deleted file mode 100644 index 6af0edf6c..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/lru-cache/test/basic.js +++ /dev/null @@ -1,171 +0,0 @@ -var test = require("tap").test - , LRU = require("../") - -test("basic", function (t) { - var cache = new LRU(10) - cache.set("key", "value") - t.equal(cache.get("key"), "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.length, 1) - t.equal(cache.maxLength, 10) - t.end() -}) - -test("least recently set", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.get("a") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), "A") - t.end() -}) - -test("del", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.del("a") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("maxLength", function (t) { - var cache = new LRU(3) - - // test changing the maxLength, verify that the LRU items get dropped. - cache.maxLength = 100 - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - cache.maxLength = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - - // now remove the maxLength restriction, and try again. - cache.maxLength = "hello" - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - // should trigger an immediate resize - cache.maxLength = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - t.end() -}) - -test("reset", function (t) { - var cache = new LRU(10) - cache.set("a", "A") - cache.set("b", "B") - cache.reset() - t.equal(cache.length, 0) - t.equal(cache.maxLength, 10) - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), undefined) - t.end() -}) - - -// Note: `<cache>.dump()` is a debugging tool only. No guarantees are made -// about the format/layout of the response. -test("dump", function (t) { - var cache = new LRU(10) - var d = cache.dump(); - t.equal(Object.keys(d).length, 0, "nothing in dump for empty cache") - cache.set("a", "A") - var d = cache.dump() // { a: { key: "a", value: "A", lu: 0 } } - t.ok(d.a) - t.equal(d.a.key, "a") - t.equal(d.a.value, "A") - t.equal(d.a.lu, 0) - - cache.set("b", "B") - cache.get("b") - d = cache.dump() - t.ok(d.b) - t.equal(d.b.key, "b") - t.equal(d.b.value, "B") - t.equal(d.b.lu, 2) - - t.end() -}) - - -test("basic with weighed length", function (t) { - var cache = new LRU(100, function (item) { return item.size } ) - cache.set("key", {val: "value", size: 50}) - t.equal(cache.get("key").val, "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.lengthCalculator(cache.get("key")), 50) - t.equal(cache.length, 50) - t.equal(cache.maxLength, 100) - t.end() -}) - - -test("weighed length item too large", function (t) { - var cache = new LRU(10, function (item) { return item.size } ) - t.equal(cache.maxLength, 10) - - // should fall out immediately - cache.set("key", {val: "value", size: 50}) - - t.equal(cache.length, 0) - t.equal(cache.get("key"), undefined) - t.end() -}) - -test("least recently set with weighed length", function (t) { - var cache = new LRU(8, function (item) { return item.length }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.set("d", "DDDD") - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("c"), "CCC") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten with weighed length", function (t) { - var cache = new LRU(8, function (item) { return item.length }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.get("a") - cache.get("b") - cache.set("d", "DDDD") - t.equal(cache.get("c"), undefined) - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("b"), "BB") - t.equal(cache.get("a"), "A") - t.end() -}) diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE deleted file mode 100644 index 0c44ae716..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) Isaac Z. Schlueter ("Author") -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md deleted file mode 100644 index 7e365129e..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# sigmund - -Quick and dirty signatures for Objects. - -This is like a much faster `deepEquals` comparison, which returns a -string key suitable for caches and the like. - -## Usage - -```javascript -function doSomething (someObj) { - var key = sigmund(someObj, maxDepth) // max depth defaults to 10 - var cached = cache.get(key) - if (cached) return cached) - - var result = expensiveCalculation(someObj) - cache.set(key, result) - return result -} -``` - -The resulting key will be as unique and reproducible as calling -`JSON.stringify` or `util.inspect` on the object, but is much faster. -In order to achieve this speed, some differences are glossed over. -For example, the object `{0:'foo'}` will be treated identically to the -array `['foo']`. - -Also, just as there is no way to summon the soul from the scribblings -of a cocain-addled psychoanalyst, there is no way to revive the object -from the signature string that sigmund gives you. In fact, it's -barely even readable. - -As with `sys.inspect` and `JSON.stringify`, larger objects will -produce larger signature strings. - -Because sigmund is a bit less strict than the more thorough -alternatives, the strings will be shorter, and also there is a -slightly higher chance for collisions. For example, these objects -have the same signature: - - var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} - var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -Like a good Freudian, sigmund is most effective when you already have -some understanding of what you're looking for. It can help you help -yourself, but you must be willing to do some work as well. - -Cycles are handled, and cyclical objects are silently omitted (though -the key is included in the signature output.) - -The second argument is the maximum depth, which defaults to 10, -because that is the maximum object traversal depth covered by most -insurance carriers. diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js deleted file mode 100644 index 5acfd6d90..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/bench.js +++ /dev/null @@ -1,283 +0,0 @@ -// different ways to id objects -// use a req/res pair, since it's crazy deep and cyclical - -// sparseFE10 and sigmund are usually pretty close, which is to be expected, -// since they are essentially the same algorithm, except that sigmund handles -// regular expression objects properly. - - -var http = require('http') -var util = require('util') -var sigmund = require('./sigmund.js') -var sreq, sres, creq, cres, test - -http.createServer(function (q, s) { - sreq = q - sres = s - sres.end('ok') - this.close(function () { setTimeout(function () { - start() - }, 200) }) -}).listen(1337, function () { - creq = http.get({ port: 1337 }) - creq.on('response', function (s) { cres = s }) -}) - -function start () { - test = [sreq, sres, creq, cres] - // test = sreq - // sreq.sres = sres - // sreq.creq = creq - // sreq.cres = cres - - for (var i in exports.compare) { - console.log(i) - var hash = exports.compare[i]() - console.log(hash) - console.log(hash.length) - console.log('') - } - - require('bench').runMain() -} - -function customWs (obj, md, d) { - d = d || 0 - var to = typeof obj - if (to === 'undefined' || to === 'function' || to === null) return '' - if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '') - - if (Array.isArray(obj)) { - return obj.map(function (i, _, __) { - return customWs(i, md, d + 1) - }).reduce(function (a, b) { return a + b }, '') - } - - var keys = Object.keys(obj) - return keys.map(function (k, _, __) { - return k + ':' + customWs(obj[k], md, d + 1) - }).reduce(function (a, b) { return a + b }, '') -} - -function custom (obj, md, d) { - d = d || 0 - var to = typeof obj - if (to === 'undefined' || to === 'function' || to === null) return '' - if (d > md || !obj || to !== 'object') return '' + obj - - if (Array.isArray(obj)) { - return obj.map(function (i, _, __) { - return custom(i, md, d + 1) - }).reduce(function (a, b) { return a + b }, '') - } - - var keys = Object.keys(obj) - return keys.map(function (k, _, __) { - return k + ':' + custom(obj[k], md, d + 1) - }).reduce(function (a, b) { return a + b }, '') -} - -function sparseFE2 (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - Object.keys(v).forEach(function (k, _, __) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') return - var to = typeof v[k] - if (to === 'function' || to === 'undefined') return - soFar += k + ':' - ch(v[k], depth + 1) - }) - soFar += '}' - } - ch(obj, 0) - return soFar -} - -function sparseFE (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - Object.keys(v).forEach(function (k, _, __) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') return - var to = typeof v[k] - if (to === 'function' || to === 'undefined') return - soFar += k - ch(v[k], depth + 1) - }) - } - ch(obj, 0) - return soFar -} - -function sparse (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k - ch(v[k], depth + 1) - } - } - ch(obj, 0) - return soFar -} - -function noCommas (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k + ':' - ch(v[k], depth + 1) - } - soFar += '}' - } - ch(obj, 0) - return soFar -} - - -function flatten (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k + ':' - ch(v[k], depth + 1) - soFar += ',' - } - soFar += '}' - } - ch(obj, 0) - return soFar -} - -exports.compare = -{ - // 'custom 2': function () { - // return custom(test, 2, 0) - // }, - // 'customWs 2': function () { - // return customWs(test, 2, 0) - // }, - 'JSON.stringify (guarded)': function () { - var seen = [] - return JSON.stringify(test, function (k, v) { - if (typeof v !== 'object' || !v) return v - if (seen.indexOf(v) !== -1) return undefined - seen.push(v) - return v - }) - }, - - 'flatten 10': function () { - return flatten(test, 10) - }, - - // 'flattenFE 10': function () { - // return flattenFE(test, 10) - // }, - - 'noCommas 10': function () { - return noCommas(test, 10) - }, - - 'sparse 10': function () { - return sparse(test, 10) - }, - - 'sparseFE 10': function () { - return sparseFE(test, 10) - }, - - 'sparseFE2 10': function () { - return sparseFE2(test, 10) - }, - - sigmund: function() { - return sigmund(test, 10) - }, - - - // 'util.inspect 1': function () { - // return util.inspect(test, false, 1, false) - // }, - // 'util.inspect undefined': function () { - // util.inspect(test) - // }, - // 'util.inspect 2': function () { - // util.inspect(test, false, 2, false) - // }, - // 'util.inspect 3': function () { - // util.inspect(test, false, 3, false) - // }, - // 'util.inspect 4': function () { - // util.inspect(test, false, 4, false) - // }, - // 'util.inspect Infinity': function () { - // util.inspect(test, false, Infinity, false) - // } -} - -/** results -**/ diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json deleted file mode 100644 index 92a63e961..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "sigmund", - "version": "1.0.0", - "description": "Quick and dirty signatures for Objects.", - "main": "sigmund.js", - "directories": { - "test": "test" - }, - "dependencies": {}, - "devDependencies": { - "tap": "~0.3.0" - }, - "scripts": { - "test": "tap test/*.js", - "bench": "node bench.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/sigmund" - }, - "keywords": [ - "object", - "signature", - "key", - "data", - "psychoanalysis" - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "license": "BSD", - "readme": "# sigmund\n\nQuick and dirty signatures for Objects.\n\nThis is like a much faster `deepEquals` comparison, which returns a\nstring key suitable for caches and the like.\n\n## Usage\n\n```javascript\nfunction doSomething (someObj) {\n var key = sigmund(someObj, maxDepth) // max depth defaults to 10\n var cached = cache.get(key)\n if (cached) return cached)\n\n var result = expensiveCalculation(someObj)\n cache.set(key, result)\n return result\n}\n```\n\nThe resulting key will be as unique and reproducible as calling\n`JSON.stringify` or `util.inspect` on the object, but is much faster.\nIn order to achieve this speed, some differences are glossed over.\nFor example, the object `{0:'foo'}` will be treated identically to the\narray `['foo']`.\n\nAlso, just as there is no way to summon the soul from the scribblings\nof a cocain-addled psychoanalyst, there is no way to revive the object\nfrom the signature string that sigmund gives you. In fact, it's\nbarely even readable.\n\nAs with `sys.inspect` and `JSON.stringify`, larger objects will\nproduce larger signature strings.\n\nBecause sigmund is a bit less strict than the more thorough\nalternatives, the strings will be shorter, and also there is a\nslightly higher chance for collisions. For example, these objects\nhave the same signature:\n\n var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}\n var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}\n\nLike a good Freudian, sigmund is most effective when you already have\nsome understanding of what you're looking for. It can help you help\nyourself, but you must be willing to do some work as well.\n\nCycles are handled, and cyclical objects are silently omitted (though\nthe key is included in the signature output.)\n\nThe second argument is the maximum depth, which defaults to 10,\nbecause that is the maximum object traversal depth covered by most\ninsurance carriers.\n", - "readmeFilename": "README.md", - "_id": "sigmund@1.0.0", - "_from": "sigmund@~1.0.0" -} diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js deleted file mode 100644 index 82c7ab8ce..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/sigmund.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = sigmund -function sigmund (subject, maxSessions) { - maxSessions = maxSessions || 10; - var notes = []; - var analysis = ''; - var RE = RegExp; - - function psychoAnalyze (subject, session) { - if (session > maxSessions) return; - - if (typeof subject === 'function' || - typeof subject === 'undefined') { - return; - } - - if (typeof subject !== 'object' || !subject || - (subject instanceof RE)) { - analysis += subject; - return; - } - - if (notes.indexOf(subject) !== -1 || session === maxSessions) return; - - notes.push(subject); - analysis += '{'; - Object.keys(subject).forEach(function (issue, _, __) { - // pseudo-private values. skip those. - if (issue.charAt(0) === '_') return; - var to = typeof subject[issue]; - if (to === 'function' || to === 'undefined') return; - analysis += issue; - psychoAnalyze(subject[issue], session + 1); - }); - } - psychoAnalyze(subject, 0); - return analysis; -} - -// vim: set softtabstop=4 shiftwidth=4: diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js b/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js deleted file mode 100644 index 50c53a13e..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/node_modules/sigmund/test/basic.js +++ /dev/null @@ -1,24 +0,0 @@ -var test = require('tap').test -var sigmund = require('../sigmund.js') - - -// occasionally there are duplicates -// that's an acceptable edge-case. JSON.stringify and util.inspect -// have some collision potential as well, though less, and collision -// detection is expensive. -var hash = '{abc/def/g{0h1i2{jkl' -var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} -var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -var obj3 = JSON.parse(JSON.stringify(obj1)) -obj3.c = /def/ -obj3.g[2].cycle = obj3 -var cycleHash = '{abc/def/g{0h1i2{jklcycle' - -test('basic', function (t) { - t.equal(sigmund(obj1), hash) - t.equal(sigmund(obj2), hash) - t.equal(sigmund(obj3), cycleHash) - t.end() -}) - diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/package.json b/tools/blog/node_modules/glob/node_modules/minimatch/package.json deleted file mode 100644 index b42082dcd..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "minimatch", - "description": "A minimal matching utility.", - "version": "0.2.5", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "main": "minimatch.js", - "scripts": { - "test": "tap test" - }, - "engines": { - "node": "*" - }, - "dependencies": { - "lru-cache": "~1" - }, - "devDependencies": { - "tap": "" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" - } - ], - "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nEventually, it will replace the C binding in node-glob.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n### Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not. **Note that this is different from the way that `**` is\nhandled by ruby's `Dir` class.**\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n\n\n## Minimatch Class\n\nCreate a minimatch object by instanting the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n Each row in the\n array corresponds to a brace-expanded pattern. Each item in the row\n corresponds to a single path-part. For example, the pattern\n `{a,b/c}/d` would expand to a set of patterns like:\n\n [ [ a, d ]\n , [ b, c, d ] ]\n\n If a portion of the pattern doesn't have any \"magic\" in it\n (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n will be left as a string rather than converted to a regular\n expression.\n\n* `regexp` Created by the `makeRe` method. A single regular expression\n expressing the entire pattern. This is useful in cases where you wish\n to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n filename, and match it against a single row in the `regExpSet`. This\n method is mainly for internal use, but is exposed so that it can be\n used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n## Functions\n\nThe top-level exported function has a `cache` property, which is an LRU\ncache set to store 100 items. So, calling these methods repeatedly\nwith the same pattern and options will use the same Minimatch object,\nsaving the cost of parsing it multiple times.\n\n### minimatch(path, pattern, options)\n\nMain export. Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`. Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob. If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself. When set, an empty list is returned if there are\nno matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes. For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n", - "_id": "minimatch@0.2.5", - "_from": "minimatch@0.2" -} diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/test/basic.js b/tools/blog/node_modules/glob/node_modules/minimatch/test/basic.js deleted file mode 100644 index cf1778a57..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/test/basic.js +++ /dev/null @@ -1,273 +0,0 @@ -// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test -// -// TODO: Some of these tests do very bad things with backslashes, and will -// most likely fail badly on windows. They should probably be skipped. - -var tap = require("tap") - , globalBefore = Object.keys(global) - , mm = require("../") - , files = [ "a", "b", "c", "d", "abc" - , "abd", "abe", "bb", "bcd" - , "ca", "cb", "dd", "de" - , "bdir/", "bdir/cfile"] - , next = files.concat([ "a-b", "aXb" - , ".x", ".y" ]) - -tap.test("basic tests", function (t) { - var start = Date.now() - - // [ pattern, [matches], MM opts, files, TAP opts] - ; [ "http://www.bashcookbook.com/bashinfo" + - "/source/bash-1.14.7/tests/glob-test" - , ["a*", ["a", "abc", "abd", "abe"]] - , ["X*", ["X*"], {nonull: true}] - - // allow null glob expansion - , ["X*", []] - - // isaacs: Slightly different than bash/sh/ksh - // \\* is not un-escaped to literal "*" in a failed match, - // but it does make it get treated as a literal star - , ["\\*", ["\\*"], {nonull: true}] - , ["\\**", ["\\**"], {nonull: true}] - , ["\\*\\*", ["\\*\\*"], {nonull: true}] - - , ["b*/", ["bdir/"]] - , ["c*", ["c", "ca", "cb"]] - , ["**", files] - - , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] - , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] - - , "legendary larry crashes bashes" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] - - , "character classes" - , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] - , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", - "bdir/", "ca", "cb", "dd", "de"]] - , ["a*[^c]", ["abd", "abe"]] - , function () { files.push("a-b", "aXb") } - , ["a[X-]b", ["a-b", "aXb"]] - , function () { files.push(".x", ".y") } - , ["[^a-c]*", ["d", "dd", "de"]] - , function () { files.push("a*b/", "a*b/ooo") } - , ["a\\*b/*", ["a*b/ooo"]] - , ["a\\*?/*", ["a*b/ooo"]] - , ["*\\\\!*", [], {null: true}, ["echo !7"]] - , ["*\\!*", ["echo !7"], null, ["echo !7"]] - , ["*.\\*", ["r.*"], null, ["r.*"]] - , ["a[b]c", ["abc"]] - , ["a[\\b]c", ["abc"]] - , ["a?c", ["abc"]] - , ["a\\*c", [], {null: true}, ["abc"]] - , ["", [""], { null: true }, [""]] - - , "http://www.opensource.apple.com/source/bash/bash-23/" + - "bash/tests/glob-test" - , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } - , ["*/man*/bash.*", ["man/man1/bash.1"]] - , ["man/man1/bash.1", ["man/man1/bash.1"]] - , ["a***c", ["abc"], null, ["abc"]] - , ["a*****?c", ["abc"], null, ["abc"]] - , ["?*****??", ["abc"], null, ["abc"]] - , ["*****??", ["abc"], null, ["abc"]] - , ["?*****?c", ["abc"], null, ["abc"]] - , ["?***?****c", ["abc"], null, ["abc"]] - , ["?***?****?", ["abc"], null, ["abc"]] - , ["?***?****", ["abc"], null, ["abc"]] - , ["*******c", ["abc"], null, ["abc"]] - , ["*******?", ["abc"], null, ["abc"]] - , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["[-abc]", ["-"], null, ["-"]] - , ["[abc-]", ["-"], null, ["-"]] - , ["\\", ["\\"], null, ["\\"]] - , ["[\\\\]", ["\\"], null, ["\\"]] - , ["[[]", ["["], null, ["["]] - , ["[", ["["], null, ["["]] - , ["[*", ["[abc"], null, ["[abc"]] - , "a right bracket shall lose its special meaning and\n" + - "represent itself in a bracket expression if it occurs\n" + - "first in the list. -- POSIX.2 2.8.3.2" - , ["[]]", ["]"], null, ["]"]] - , ["[]-]", ["]"], null, ["]"]] - , ["[a-\z]", ["p"], null, ["p"]] - , ["??**********?****?", [], { null: true }, ["abc"]] - , ["??**********?****c", [], { null: true }, ["abc"]] - , ["?************c****?****", [], { null: true }, ["abc"]] - , ["*c*?**", [], { null: true }, ["abc"]] - , ["a*****c*?**", [], { null: true }, ["abc"]] - , ["a********???*******", [], { null: true }, ["abc"]] - , ["[]", [], { null: true }, ["a"]] - , ["[abc", [], { null: true }, ["["]] - - , "nocase tests" - , ["XYZ", ["xYz"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["ab*", ["ABC"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - - // [ pattern, [matches], MM opts, files, TAP opts] - , "onestar/twostar" - , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] - , ["{/?,*}", ["/a", "bb"], {null: true} - , ["/a", "/b/b", "/a/b/c", "bb"]] - - , "dots should not match unless requested" - , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] - - // .. and . can only match patterns starting with ., - // even when options.dot is set. - , function () { - files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] - } - , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] - , ["a/*/b", ["a/c/b"], {dot:false}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] - - - // this also tests that changing the options needs - // to change the cache key, even if the pattern is - // the same! - , ["**", ["a/b","a/.d",".a/.d"], { dot: true } - , [ ".a/.d", "a/.d", "a/b"]] - - , "paren sets cannot contain slashes" - , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] - - // brace sets trump all else. - // - // invalid glob pattern. fails on bash4 and bsdglob. - // however, in this implementation, it's easier just - // to do the intuitive thing, and let brace-expansion - // actually come before parsing any extglob patterns, - // like the documentation seems to say. - // - // XXX: if anyone complains about this, either fix it - // or tell them to grow up and stop complaining. - // - // bash/bsdglob says this: - // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] - // but we do this instead: - , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] - - // test partial parsing in the presence of comment/negation chars - , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] - , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] - - // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. - , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] - , {} - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] - - - // crazy nested {,,} and *(||) tests. - , function () { - files = [ "a", "b", "c", "d" - , "ab", "ac", "ad" - , "bc", "cb" - , "bc,d", "c,db", "c,d" - , "d)", "(b|c", "*(b|c" - , "b|c", "b|cc", "cb|c" - , "x(a|b|c)", "x(a|c)" - , "(a|b|c)", "(a|c)"] - } - , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] - , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] - // a - // *(b|c) - // *(b|d) - , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] - , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] - - - // test various flag settings. - , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] - , { noext: true } ] - , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} - , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] - , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] - - - // begin channelling Boole and deMorgan... - , "negation tests" - , function () { - files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] - } - - // anything that is NOT a* matches. - , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] - - // anything that IS !a* matches. - , ["!a*", ["!ab", "!abc"], {nonegate: true}] - - // anything that IS a* matches - , ["!!a*", ["a!b"]] - - // anything that is NOT !a* matches - , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] - - // negation nestled within a pattern - , function () { - files = [ "foo.js" - , "foo.bar" - // can't match this one without negative lookbehind. - , "foo.js.js" - , "blar.js" - , "foo." - , "boo.js.boo" ] - } - , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] - - ].forEach(function (c) { - if (typeof c === "function") return c() - if (typeof c === "string") return t.comment(c) - - var pattern = c[0] - , expect = c[1].sort(alpha) - , options = c[2] || {} - , f = c[3] || files - , tapOpts = c[4] || {} - - // options.debug = true - var m = new mm.Minimatch(pattern, options) - var r = m.makeRe() - tapOpts.re = String(r) || JSON.stringify(r) - tapOpts.files = JSON.stringify(f) - tapOpts.pattern = pattern - tapOpts.set = m.set - tapOpts.negated = m.negate - - var actual = mm.match(f, pattern, options) - actual.sort(alpha) - - t.equivalent( actual, expect - , JSON.stringify(pattern) + " " + JSON.stringify(expect) - , tapOpts ) - }) - - t.comment("time=" + (Date.now() - start) + "ms") - t.end() -}) - -tap.test("global leak test", function (t) { - var globalAfter = Object.keys(global) - t.equivalent(globalAfter, globalBefore, "no new globals, please") - t.end() -}) - -function alpha (a, b) { - return a > b ? 1 : -1 -} diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/test/brace-expand.js b/tools/blog/node_modules/glob/node_modules/minimatch/test/brace-expand.js deleted file mode 100644 index 7ee278a27..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/test/brace-expand.js +++ /dev/null @@ -1,33 +0,0 @@ -var tap = require("tap") - , minimatch = require("../") - -tap.test("brace expansion", function (t) { - // [ pattern, [expanded] ] - ; [ [ "a{b,c{d,e},{f,g}h}x{y,z}" - , [ "abxy" - , "abxz" - , "acdxy" - , "acdxz" - , "acexy" - , "acexz" - , "afhxy" - , "afhxz" - , "aghxy" - , "aghxz" ] ] - , [ "a{1..5}b" - , [ "a1b" - , "a2b" - , "a3b" - , "a4b" - , "a5b" ] ] - , [ "a{b}c", ["a{b}c"] ] - ].forEach(function (tc) { - var p = tc[0] - , expect = tc[1] - t.equivalent(minimatch.braceExpand(p), expect, p) - }) - console.error("ending") - t.end() -}) - - diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/test/caching.js b/tools/blog/node_modules/glob/node_modules/minimatch/test/caching.js deleted file mode 100644 index 0fec4b0fa..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/test/caching.js +++ /dev/null @@ -1,14 +0,0 @@ -var Minimatch = require("../minimatch.js").Minimatch -var tap = require("tap") -tap.test("cache test", function (t) { - var mm1 = new Minimatch("a?b") - var mm2 = new Minimatch("a?b") - t.equal(mm1, mm2, "should get the same object") - // the lru should drop it after 100 entries - for (var i = 0; i < 100; i ++) { - new Minimatch("a"+i) - } - mm2 = new Minimatch("a?b") - t.notEqual(mm1, mm2, "cache should have dropped") - t.end() -}) diff --git a/tools/blog/node_modules/glob/node_modules/minimatch/test/defaults.js b/tools/blog/node_modules/glob/node_modules/minimatch/test/defaults.js deleted file mode 100644 index 25f1f601c..000000000 --- a/tools/blog/node_modules/glob/node_modules/minimatch/test/defaults.js +++ /dev/null @@ -1,274 +0,0 @@ -// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test -// -// TODO: Some of these tests do very bad things with backslashes, and will -// most likely fail badly on windows. They should probably be skipped. - -var tap = require("tap") - , globalBefore = Object.keys(global) - , mm = require("../") - , files = [ "a", "b", "c", "d", "abc" - , "abd", "abe", "bb", "bcd" - , "ca", "cb", "dd", "de" - , "bdir/", "bdir/cfile"] - , next = files.concat([ "a-b", "aXb" - , ".x", ".y" ]) - -tap.test("basic tests", function (t) { - var start = Date.now() - - // [ pattern, [matches], MM opts, files, TAP opts] - ; [ "http://www.bashcookbook.com/bashinfo" + - "/source/bash-1.14.7/tests/glob-test" - , ["a*", ["a", "abc", "abd", "abe"]] - , ["X*", ["X*"], {nonull: true}] - - // allow null glob expansion - , ["X*", []] - - // isaacs: Slightly different than bash/sh/ksh - // \\* is not un-escaped to literal "*" in a failed match, - // but it does make it get treated as a literal star - , ["\\*", ["\\*"], {nonull: true}] - , ["\\**", ["\\**"], {nonull: true}] - , ["\\*\\*", ["\\*\\*"], {nonull: true}] - - , ["b*/", ["bdir/"]] - , ["c*", ["c", "ca", "cb"]] - , ["**", files] - - , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] - , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] - - , "legendary larry crashes bashes" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] - - , "character classes" - , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] - , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", - "bdir/", "ca", "cb", "dd", "de"]] - , ["a*[^c]", ["abd", "abe"]] - , function () { files.push("a-b", "aXb") } - , ["a[X-]b", ["a-b", "aXb"]] - , function () { files.push(".x", ".y") } - , ["[^a-c]*", ["d", "dd", "de"]] - , function () { files.push("a*b/", "a*b/ooo") } - , ["a\\*b/*", ["a*b/ooo"]] - , ["a\\*?/*", ["a*b/ooo"]] - , ["*\\\\!*", [], {null: true}, ["echo !7"]] - , ["*\\!*", ["echo !7"], null, ["echo !7"]] - , ["*.\\*", ["r.*"], null, ["r.*"]] - , ["a[b]c", ["abc"]] - , ["a[\\b]c", ["abc"]] - , ["a?c", ["abc"]] - , ["a\\*c", [], {null: true}, ["abc"]] - , ["", [""], { null: true }, [""]] - - , "http://www.opensource.apple.com/source/bash/bash-23/" + - "bash/tests/glob-test" - , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } - , ["*/man*/bash.*", ["man/man1/bash.1"]] - , ["man/man1/bash.1", ["man/man1/bash.1"]] - , ["a***c", ["abc"], null, ["abc"]] - , ["a*****?c", ["abc"], null, ["abc"]] - , ["?*****??", ["abc"], null, ["abc"]] - , ["*****??", ["abc"], null, ["abc"]] - , ["?*****?c", ["abc"], null, ["abc"]] - , ["?***?****c", ["abc"], null, ["abc"]] - , ["?***?****?", ["abc"], null, ["abc"]] - , ["?***?****", ["abc"], null, ["abc"]] - , ["*******c", ["abc"], null, ["abc"]] - , ["*******?", ["abc"], null, ["abc"]] - , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["[-abc]", ["-"], null, ["-"]] - , ["[abc-]", ["-"], null, ["-"]] - , ["\\", ["\\"], null, ["\\"]] - , ["[\\\\]", ["\\"], null, ["\\"]] - , ["[[]", ["["], null, ["["]] - , ["[", ["["], null, ["["]] - , ["[*", ["[abc"], null, ["[abc"]] - , "a right bracket shall lose its special meaning and\n" + - "represent itself in a bracket expression if it occurs\n" + - "first in the list. -- POSIX.2 2.8.3.2" - , ["[]]", ["]"], null, ["]"]] - , ["[]-]", ["]"], null, ["]"]] - , ["[a-\z]", ["p"], null, ["p"]] - , ["??**********?****?", [], { null: true }, ["abc"]] - , ["??**********?****c", [], { null: true }, ["abc"]] - , ["?************c****?****", [], { null: true }, ["abc"]] - , ["*c*?**", [], { null: true }, ["abc"]] - , ["a*****c*?**", [], { null: true }, ["abc"]] - , ["a********???*******", [], { null: true }, ["abc"]] - , ["[]", [], { null: true }, ["a"]] - , ["[abc", [], { null: true }, ["["]] - - , "nocase tests" - , ["XYZ", ["xYz"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["ab*", ["ABC"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - - // [ pattern, [matches], MM opts, files, TAP opts] - , "onestar/twostar" - , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] - , ["{/?,*}", ["/a", "bb"], {null: true} - , ["/a", "/b/b", "/a/b/c", "bb"]] - - , "dots should not match unless requested" - , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] - - // .. and . can only match patterns starting with ., - // even when options.dot is set. - , function () { - files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] - } - , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] - , ["a/*/b", ["a/c/b"], {dot:false}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] - - - // this also tests that changing the options needs - // to change the cache key, even if the pattern is - // the same! - , ["**", ["a/b","a/.d",".a/.d"], { dot: true } - , [ ".a/.d", "a/.d", "a/b"]] - - , "paren sets cannot contain slashes" - , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] - - // brace sets trump all else. - // - // invalid glob pattern. fails on bash4 and bsdglob. - // however, in this implementation, it's easier just - // to do the intuitive thing, and let brace-expansion - // actually come before parsing any extglob patterns, - // like the documentation seems to say. - // - // XXX: if anyone complains about this, either fix it - // or tell them to grow up and stop complaining. - // - // bash/bsdglob says this: - // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] - // but we do this instead: - , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] - - // test partial parsing in the presence of comment/negation chars - , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] - , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] - - // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. - , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] - , {} - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] - - - // crazy nested {,,} and *(||) tests. - , function () { - files = [ "a", "b", "c", "d" - , "ab", "ac", "ad" - , "bc", "cb" - , "bc,d", "c,db", "c,d" - , "d)", "(b|c", "*(b|c" - , "b|c", "b|cc", "cb|c" - , "x(a|b|c)", "x(a|c)" - , "(a|b|c)", "(a|c)"] - } - , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] - , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] - // a - // *(b|c) - // *(b|d) - , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] - , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] - - - // test various flag settings. - , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] - , { noext: true } ] - , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} - , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] - , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] - - - // begin channelling Boole and deMorgan... - , "negation tests" - , function () { - files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] - } - - // anything that is NOT a* matches. - , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] - - // anything that IS !a* matches. - , ["!a*", ["!ab", "!abc"], {nonegate: true}] - - // anything that IS a* matches - , ["!!a*", ["a!b"]] - - // anything that is NOT !a* matches - , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] - - // negation nestled within a pattern - , function () { - files = [ "foo.js" - , "foo.bar" - // can't match this one without negative lookbehind. - , "foo.js.js" - , "blar.js" - , "foo." - , "boo.js.boo" ] - } - , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] - - ].forEach(function (c) { - if (typeof c === "function") return c() - if (typeof c === "string") return t.comment(c) - - var pattern = c[0] - , expect = c[1].sort(alpha) - , options = c[2] || {} - , f = c[3] || files - , tapOpts = c[4] || {} - - // options.debug = true - var Class = mm.defaults(options).Minimatch - var m = new Class(pattern, {}) - var r = m.makeRe() - tapOpts.re = String(r) || JSON.stringify(r) - tapOpts.files = JSON.stringify(f) - tapOpts.pattern = pattern - tapOpts.set = m.set - tapOpts.negated = m.negate - - var actual = mm.match(f, pattern, options) - actual.sort(alpha) - - t.equivalent( actual, expect - , JSON.stringify(pattern) + " " + JSON.stringify(expect) - , tapOpts ) - }) - - t.comment("time=" + (Date.now() - start) + "ms") - t.end() -}) - -tap.test("global leak test", function (t) { - var globalAfter = Object.keys(global) - t.equivalent(globalAfter, globalBefore, "no new globals, please") - t.end() -}) - -function alpha (a, b) { - return a > b ? 1 : -1 -} diff --git a/tools/blog/node_modules/glob/package.json b/tools/blog/node_modules/glob/package.json deleted file mode 100644 index 2fddfd462..000000000 --- a/tools/blog/node_modules/glob/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "name": "glob", - "description": "This is a glob implementation in JavaScript. It uses the `minimatch` library to do its matching.", - "version": "3.1.10", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-glob.git" - }, - "main": "glob.js", - "engines": { - "node": "*" - }, - "dependencies": { - "minimatch": "0.2", - "graceful-fs": "~1.1.2", - "inherits": "1" - }, - "devDependencies": { - "tap": "~0.2.3", - "mkdirp": "0", - "rimraf": "1" - }, - "scripts": { - "test": "tap test/*.js" - }, - "license": "BSD", - "readme": "# Glob\n\nThis is a glob implementation in JavaScript. It uses the `minimatch`\nlibrary to do its matching.\n\n## Attention: node-glob users!\n\nThe API has changed dramatically between 2.x and 3.x. This library is\nnow 100% JavaScript, and the integer flags have been replaced with an\noptions object.\n\nAlso, there's an event emitter class, proper tests, and all the other\nthings you've come to expect from node modules.\n\nAnd best of all, no compilation!\n\n## Usage\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n // files is an array of filenames.\n // If the `nonull` option is set, and nothing\n // was found, then files is [\"**/*.js\"]\n // er is an error object or null.\n})\n```\n\n## Features\n\nPlease see the [minimatch\ndocumentation](https://github.com/isaacs/minimatch) for more details.\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob(pattern, [options], cb)\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* `cb` {Function}\n * `err` {Error | null}\n * `matches` {Array<String>} filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options]\n\n* `pattern` {String} Pattern to be matched\n* `options` {Object}\n* return: {Array<String>} filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instanting the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` {String} pattern to search for\n* `options` {Object}\n* `cb` {Function} Called when an error occurs, or matches are found\n * `err` {Error | null}\n * `matches` {Array<String>} filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `error` The error encountered. When an error is encountered, the\n glob object is in an undefined state, and should be discarded.\n* `aborted` Boolean which is set to true when calling `abort()`. There\n is no way at this time to continue a glob search after aborting, but\n you can re-use the statCache to avoid having to duplicate syscalls.\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n matches found. If the `nonull` option is set, and no match was found,\n then the `matches` list contains the original pattern. The matches\n are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the matched.\n* `error` Emitted when an unexpected error is encountered, or whenever\n any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `abort` Stop the search.\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior. Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the glob object, as well.\n\n* `cwd` The current working directory in which to search. Defaults\n to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n onto. Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n systems, and `C:\\` or some such on Windows.)\n* `nomount` By default, a pattern starting with a forward-slash will be\n \"mounted\" onto the root setting, so that a valid filesystem path is\n returned. Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches. Note that this\n requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results. This reduces performance\n somewhat, and is completely unnecessary, unless `readdir` is presumed\n to be an untrustworthy indicator of file existence. It will cause\n ELOOP to be triggered one level sooner in the case of cyclical\n symbolic links.\n* `silent` When an unusual error is encountered\n when attempting to read a directory, a warning will be printed to\n stderr. Set the `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered\n when attempting to read a directory, the process will just continue on\n in search of other matches. Set the `strict` option to raise an error\n in these cases.\n* `statCache` A cache of results of filesystem information, to prevent\n unnecessary stat calls. While it should not normally be necessary to\n set this, you may pass the statCache from one glob() call to the\n options object of another, if you know that the filesystem will not\n change between calls. (See \"Race Conditions\" below.)\n* `sync` Perform a synchronous glob search.\n* `nounique` In some cases, brace-expanded patterns can result in the\n same file showing up multiple times in the result set. By default,\n this implementation prevents duplicates in the result set.\n Set this flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n containing the pattern itself. This is the default in glob(3).\n* `nocase` Perform a case-insensitive match. Note that case-insensitive\n filesystems will sometimes result in glob returning results that are\n case-insensitively matched anyway, since readdir and stat will not\n raise an error.\n* `debug` Set to enable debug logging in minimatch and glob.\n* `globDebug` Set to enable debug logging in glob, but not minimatch.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated. Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally. This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`. Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything. Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set. This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part. That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not. **Note that this is different from the way that `**` is\nhandled by ruby's `Dir` class.**\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes. For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`. This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern. Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity. Since those two are valid, matching proceeds.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation. You must use\nforward-slashes **only** in glob expressions. Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`. On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead. However, this also makes it even more susceptible to races,\nespecially if the statCache object is reused between glob calls.\n\nUsers are thus advised not to use a glob result as a\nguarantee of filesystem state in the face of rapid changes.\nFor the vast majority of operations, this is never a problem.\n", - "_id": "glob@3.1.10", - "_from": "glob" -} diff --git a/tools/blog/node_modules/glob/test/00-setup.js b/tools/blog/node_modules/glob/test/00-setup.js deleted file mode 100644 index 2b606432a..000000000 --- a/tools/blog/node_modules/glob/test/00-setup.js +++ /dev/null @@ -1,61 +0,0 @@ -// just a little pre-run script to set up the fixtures. -// zz-finish cleans it up - -var mkdirp = require("mkdirp") -var path = require("path") -var i = 0 -var tap = require("tap") -var fs = require("fs") -var rimraf = require("rimraf") - -var files = -[ "a/.abcdef/x/y/z/a" -, "a/abcdef/g/h" -, "a/abcfed/g/h" -, "a/b/c/d" -, "a/bc/e/f" -, "a/c/d/c/b" -, "a/cb/e/f" -] - -var symlinkTo = path.resolve(__dirname, "a/symlink/a/b/c") -var symlinkFrom = "../.." - -files = files.map(function (f) { - return path.resolve(__dirname, f) -}) - -tap.test("remove fixtures", function (t) { - rimraf(path.resolve(__dirname, "a"), function (er) { - t.ifError(er, "remove fixtures") - t.end() - }) -}) - -files.forEach(function (f) { - tap.test(f, function (t) { - var d = path.dirname(f) - mkdirp(d, 0755, function (er) { - if (er) { - t.fail(er) - return t.bailout() - } - fs.writeFile(f, "i like tests", function (er) { - t.ifError(er, "make file") - t.end() - }) - }) - }) -}) - -tap.test("symlinky", function (t) { - var d = path.dirname(symlinkTo) - console.error("mkdirp", d) - mkdirp(d, 0755, function (er) { - t.ifError(er) - fs.symlink(symlinkFrom, symlinkTo, function (er) { - t.ifError(er, "make symlink") - t.end() - }) - }) -}) diff --git a/tools/blog/node_modules/glob/test/bash-comparison.js b/tools/blog/node_modules/glob/test/bash-comparison.js deleted file mode 100644 index fbadc314c..000000000 --- a/tools/blog/node_modules/glob/test/bash-comparison.js +++ /dev/null @@ -1,119 +0,0 @@ -// basic test -// show that it does the same thing by default as the shell. -var tap = require("tap") -, child_process = require("child_process") - -// put more patterns here. -, globs = - [ - "test/a/*/+(c|g)/./d" - ,"test/a/**/[cg]/../[cg]" - ,"test/a/{b,c,d,e,f}/**/g" - ,"test/a/b/**" - ,"test/**/g" - ,"test/a/abc{fed,def}/g/h" - ,"test/a/abc{fed/g,def}/**/" - ,"test/a/abc{fed/g,def}/**///**/" - ,"test/**/a/**/" - ,"test/+(a|b|c)/a{/,bc*}/**" - ,"test/*/*/*/f" - ,"test/**/f" - ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**" - ,"{./*/*,/usr/local/*}" - ,"{/*,*}" // evil owl face! how you taunt me! - ] -, glob = require("../") -, path = require("path") - -// run from the root of the project -// this is usually where you're at anyway, but be sure. -process.chdir(path.resolve(__dirname, "..")) - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} - -globs.forEach(function (pattern) { - var echoOutput - tap.test(pattern, function (t) { - var bashPattern = pattern - , cmd = "shopt -s globstar && " + - "shopt -s extglob && " + - "shopt -s nullglob && " + - // "shopt >&2; " + - "eval \'for i in " + bashPattern + "; do echo $i; done\'" - , cp = child_process.spawn("bash", ["-c",cmd]) - , out = [] - , globResult - cp.stdout.on("data", function (c) { - out.push(c) - }) - cp.stderr.on("data", function (c) { - process.stderr.write(c) - }) - cp.stdout.on("close", function () { - echoOutput = flatten(out) - if (!echoOutput) echoOutput = [] - else { - echoOutput = echoOutput.split(/\r*\n/).map(function (m) { - // Bash is a oddly inconsistent with slashes in the - // the results. This implementation is a bit more - // normalized. Account for this in the test results. - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort) - } - next() - }) - - glob(pattern, function (er, matches) { - // sort and unpark, just to match the shell results - matches = matches.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort) - - t.ifError(er, pattern + " should not error") - globResult = matches - next() - }) - - function next () { - if (!echoOutput || !globResult) return - - t.deepEqual(globResult, echoOutput, "should match shell") - t.end() - } - }) - - tap.test(pattern + " sync", function (t) { - var matches = glob.sync(pattern).map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort) - - t.deepEqual(matches, echoOutput, "should match shell") - t.end() - }) -}) - -function flatten (chunks) { - var s = 0 - chunks.forEach(function (c) { s += c.length }) - var out = new Buffer(s) - s = 0 - chunks.forEach(function (c) { - c.copy(out, s) - s += c.length - }) - - return out.toString().trim() -} diff --git a/tools/blog/node_modules/glob/test/cwd-test.js b/tools/blog/node_modules/glob/test/cwd-test.js deleted file mode 100644 index 352c27efa..000000000 --- a/tools/blog/node_modules/glob/test/cwd-test.js +++ /dev/null @@ -1,55 +0,0 @@ -var tap = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -tap.test("changing cwd and searching for **/d", function (t) { - var glob = require('../') - var path = require('path') - t.test('.', function (t) { - glob('**/d', function (er, matches) { - t.ifError(er) - t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) - t.end() - }) - }) - - t.test('a', function (t) { - glob('**/d', {cwd:path.resolve('a')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'b/c/d', 'c/d' ]) - t.end() - }) - }) - - t.test('a/b', function (t) { - glob('**/d', {cwd:path.resolve('a/b')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'c/d' ]) - t.end() - }) - }) - - t.test('a/b/', function (t) { - glob('**/d', {cwd:path.resolve('a/b/')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'c/d' ]) - t.end() - }) - }) - - t.test('.', function (t) { - glob('**/d', {cwd: process.cwd()}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) - t.end() - }) - }) - - t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() - }) - - t.end() -}) diff --git a/tools/blog/node_modules/glob/test/mark.js b/tools/blog/node_modules/glob/test/mark.js deleted file mode 100644 index fda66f8d2..000000000 --- a/tools/blog/node_modules/glob/test/mark.js +++ /dev/null @@ -1,63 +0,0 @@ -var test = require("tap").test -var glob = require('../') -process.chdir(__dirname) - -test("mark, no / on pattern", function (t) { - glob("a/*", {mark: true}, function (er, results) { - if (er) - throw er - t.same(results, [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/', - 'a/symlink/' ]) - t.end() - }) -}) - -test("mark=false, no / on pattern", function (t) { - glob("a/*", function (er, results) { - if (er) - throw er - t.same(results, [ 'a/abcdef', - 'a/abcfed', - 'a/b', - 'a/bc', - 'a/c', - 'a/cb', - 'a/symlink' ]) - t.end() - }) -}) - -test("mark=true, / on pattern", function (t) { - glob("a/*/", {mark: true}, function (er, results) { - if (er) - throw er - t.same(results, [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/', - 'a/symlink/' ]) - t.end() - }) -}) - -test("mark=false, / on pattern", function (t) { - glob("a/*/", function (er, results) { - if (er) - throw er - t.same(results, [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/', - 'a/symlink/' ]) - t.end() - }) -}) diff --git a/tools/blog/node_modules/glob/test/pause-resume.js b/tools/blog/node_modules/glob/test/pause-resume.js deleted file mode 100644 index 481d1aae4..000000000 --- a/tools/blog/node_modules/glob/test/pause-resume.js +++ /dev/null @@ -1,98 +0,0 @@ -// show that no match events happen while paused. -var tap = require("tap") -, child_process = require("child_process") -// just some gnarly pattern with lots of matches -, pattern = "test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**" -, glob = require("../") -, Glob = glob.Glob -, path = require("path") - -// run from the root of the project -// this is usually where you're at anyway, but be sure. -process.chdir(path.resolve(__dirname, "..")) - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort) -} - -function flatten (chunks) { - var s = 0 - chunks.forEach(function (c) { s += c.length }) - var out = new Buffer(s) - s = 0 - chunks.forEach(function (c) { - c.copy(out, s) - s += c.length - }) - - return out.toString().trim() -} -var bashResults -tap.test("get bash output", function (t) { - var bashPattern = pattern - , cmd = "shopt -s globstar && " + - "shopt -s extglob && " + - "shopt -s nullglob && " + - // "shopt >&2; " + - "eval \'for i in " + bashPattern + "; do echo $i; done\'" - , cp = child_process.spawn("bash", ["-c",cmd]) - , out = [] - , globResult - cp.stdout.on("data", function (c) { - out.push(c) - }) - cp.stderr.on("data", function (c) { - process.stderr.write(c) - }) - cp.stdout.on("close", function () { - bashResults = flatten(out) - if (!bashResults) return t.fail("Didn't get results from bash") - else { - bashResults = cleanResults(bashResults.split(/\r*\n/)) - } - t.ok(bashResults.length, "got some results") - t.end() - }) -}) - -var globResults = [] -tap.test("use a Glob object, and pause/resume it", function (t) { - var g = new Glob(pattern) - , paused = false - , res = [] - - g.on("match", function (m) { - t.notOk(g.paused, "must not be paused") - globResults.push(m) - g.pause() - t.ok(g.paused, "must be paused") - setTimeout(g.resume.bind(g), 1) - }) - - g.on("end", function (matches) { - t.pass("reached glob end") - globResults = cleanResults(globResults) - matches = cleanResults(matches) - t.deepEqual(matches, globResults, - "end event matches should be the same as match events") - - t.deepEqual(matches, bashResults, - "glob matches should be the same as bash results") - - t.end() - }) -}) - diff --git a/tools/blog/node_modules/glob/test/root-nomount.js b/tools/blog/node_modules/glob/test/root-nomount.js deleted file mode 100644 index 3ac5979b0..000000000 --- a/tools/blog/node_modules/glob/test/root-nomount.js +++ /dev/null @@ -1,39 +0,0 @@ -var tap = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -tap.test("changing root and searching for /b*/**", function (t) { - var glob = require('../') - var path = require('path') - t.test('.', function (t) { - glob('/b*/**', { globDebug: true, root: '.', nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, []) - t.end() - }) - }) - - t.test('a', function (t) { - glob('/b*/**', { globDebug: true, root: path.resolve('a'), nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) - t.end() - }) - }) - - t.test('root=a, cwd=a/b', function (t) { - glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b'), nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) - t.end() - }) - }) - - t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() - }) - - t.end() -}) diff --git a/tools/blog/node_modules/glob/test/root.js b/tools/blog/node_modules/glob/test/root.js deleted file mode 100644 index 5ccdd0e94..000000000 --- a/tools/blog/node_modules/glob/test/root.js +++ /dev/null @@ -1,43 +0,0 @@ -var tap = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -tap.test("changing root and searching for /b*/**", function (t) { - var glob = require('../') - var path = require('path') - t.test('.', function (t) { - glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) { - t.ifError(er) - t.like(matches, []) - t.end() - }) - }) - - t.test('a', function (t) { - glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) { - return path.join(path.resolve('a'), m) - })) - t.end() - }) - }) - - t.test('root=a, cwd=a/b', function (t) { - glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) { - return path.join(path.resolve('a'), m) - })) - t.end() - }) - }) - - t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() - }) - - t.end() -}) diff --git a/tools/blog/node_modules/glob/test/zz-cleanup.js b/tools/blog/node_modules/glob/test/zz-cleanup.js deleted file mode 100644 index e085f0fa7..000000000 --- a/tools/blog/node_modules/glob/test/zz-cleanup.js +++ /dev/null @@ -1,11 +0,0 @@ -// remove the fixtures -var tap = require("tap") -, rimraf = require("rimraf") -, path = require("path") - -tap.test("cleanup fixtures", function (t) { - rimraf(path.resolve(__dirname, "a"), function (er) { - t.ifError(er, "removed") - t.end() - }) -}) diff --git a/tools/blog/node_modules/marked/.npmignore b/tools/blog/node_modules/marked/.npmignore deleted file mode 100644 index 3fb773c03..000000000 --- a/tools/blog/node_modules/marked/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.git* -test/ diff --git a/tools/blog/node_modules/marked/LICENSE b/tools/blog/node_modules/marked/LICENSE deleted file mode 100644 index 40597477c..000000000 --- a/tools/blog/node_modules/marked/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011-2012, Christopher Jeffrey (https://github.com/chjj/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/tools/blog/node_modules/marked/Makefile b/tools/blog/node_modules/marked/Makefile deleted file mode 100644 index 76904000b..000000000 --- a/tools/blog/node_modules/marked/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -all: - @cp lib/marked.js marked.js - @uglifyjs -o marked.min.js marked.js - -clean: - @rm marked.js - @rm marked.min.js - -.PHONY: clean all diff --git a/tools/blog/node_modules/marked/README.md b/tools/blog/node_modules/marked/README.md deleted file mode 100644 index c10495ae6..000000000 --- a/tools/blog/node_modules/marked/README.md +++ /dev/null @@ -1,125 +0,0 @@ -# marked - -A full-featured markdown parser and compiler, written in javascript. -Built for speed. - -## Benchmarks - -node v0.4.x - -``` bash -$ node test --bench -marked completed in 12071ms. -showdown (reuse converter) completed in 27387ms. -showdown (new converter) completed in 75617ms. -markdown-js completed in 70069ms. -``` - -node v0.6.x - -``` bash -$ node test --bench -marked completed in 6448ms. -marked (gfm) completed in 7357ms. -marked (pedantic) completed in 6092ms. -discount completed in 7314ms. -showdown (reuse converter) completed in 16018ms. -showdown (new converter) completed in 18234ms. -markdown-js completed in 24270ms. -``` - -__Marked is now faster than Discount, which is written in C.__ - -For those feeling skeptical: These benchmarks run the entire markdown test suite -1000 times. The test suite tests every feature. It doesn't cater to specific -aspects. - -## Install - -``` bash -$ npm install marked -``` - -## Another Javascript Markdown Parser - -The point of marked was to create a markdown compiler where it was possible to -frequently parse huge chunks of markdown without having to worry about -caching the compiled output somehow...or blocking for an unnecesarily long time. - -marked is very concise and still implements all markdown features. It is also -now fully compatible with the client-side. - -marked more or less passes the official markdown test suite in its -entirety. This is important because a surprising number of markdown compilers -cannot pass more than a few tests. It was very difficult to get marked as -compliant as it is. It could have cut corners in several areas for the sake -of performance, but did not in order to be exactly what you expect in terms -of a markdown rendering. In fact, this is why marked could be considered at a -disadvantage in the benchmarks above. - -Along with implementing every markdown feature, marked also implements -[GFM features](http://github.github.com/github-flavored-markdown/). - -## Options - -marked has 4 different switches which change behavior. - -- __pedantic__: Conform to obscure parts of `markdown.pl` as much as possible. - Don't fix any of the original markdown bugs or poor behavior. -- __gfm__: Enable github flavored markdown (enabled by default). -- __sanitize__: Sanitize the output. Ignore any HTML that has been input. -- __highlight__: A callback to highlight code blocks. - -None of the above are mutually exclusive/inclusive. - -## Usage - -``` js -// Set default options -marked.setOptions({ - gfm: true, - pedantic: false, - sanitize: true, - // callback for code highlighter - highlight: function(code, lang) { - if (lang === 'js') { - return javascriptHighlighter(code); - } - return code; - } -}); -console.log(marked('i am using __markdown__.')); -``` - -You also have direct access to the lexer and parser if you so desire. - -``` js -var tokens = marked.lexer(text); -console.log(marked.parser(tokens)); -``` - -``` bash -$ node -> require('marked').lexer('> i am using marked.') -[ { type: 'blockquote_start' }, - { type: 'paragraph', - text: 'i am using marked.' }, - { type: 'blockquote_end' }, - links: {} ] -``` - -## CLI - -``` bash -$ marked -o hello.html -hello world -^D -$ cat hello.html -<p>hello world</p> -``` - -## License - -Copyright (c) 2011-2012, Christopher Jeffrey. (MIT License) - -See LICENSE for more info. diff --git a/tools/blog/node_modules/marked/bin/marked b/tools/blog/node_modules/marked/bin/marked deleted file mode 100755 index c27b9e261..000000000 --- a/tools/blog/node_modules/marked/bin/marked +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env node - -/** - * Marked CLI - * Copyright (c) 2011-2012, Christopher Jeffrey (MIT License) - */ - -var fs = require('fs') - , util = require('util') - , marked = require('../'); - -/** - * Man Page - */ - -var help = function() { - var spawn = require('child_process').spawn; - - var options = { - cwd: process.cwd(), - env: process.env, - setsid: false, - customFds: [0, 1, 2] - }; - - spawn('man', - [__dirname + '/../man/marked.1'], - options); -}; - -/** - * Main - */ - -var main = function(argv) { - var files = [] - , options = {} - , data = '' - , input - , output - , arg - , tokens; - - var getarg = function() { - var arg = argv.shift(); - arg = arg.split('='); - if (arg.length > 1) { - argv.unshift(arg.slice(1).join('=')); - } - return arg[0]; - }; - - while (argv.length) { - arg = getarg(); - switch (arg) { - case '-o': - case '--output': - output = argv.shift(); - break; - case '-i': - case '--input': - input = argv.shift(); - break; - case '-t': - case '--tokens': - tokens = true; - break; - case '--gfm': - options.gfm = true; - break; - case '--sanitize': - options.sanitize = true; - break; - case '--pedantic': - options.pedantic = true; - break; - case '-h': - case '--help': - return help(); - default: - files.push(arg); - break; - } - } - - if (!input) { - if (files.length <= 2) { - var stdin = process.stdin; - - stdin.setEncoding('utf8'); - stdin.resume(); - - stdin.on('data', function(text) { - data += text; - }); - - stdin.on('end', write); - - return; - } - input = files.pop(); - } - - data = fs.readFileSync(input, 'utf8'); - write(); - - function write() { - marked.setOptions(options); - - data = tokens - ? JSON.stringify(marked.lexer(data), null, 2) - : marked(data); - - if (!output) { - process.stdout.write(data + '\n'); - } else { - fs.writeFileSync(output, data); - } - } -}; - -if (!module.parent) { - process.title = 'marked'; - main(process.argv.slice()); -} else { - module.exports = main; -} diff --git a/tools/blog/node_modules/marked/index.js b/tools/blog/node_modules/marked/index.js deleted file mode 100644 index a12f90569..000000000 --- a/tools/blog/node_modules/marked/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/marked'); diff --git a/tools/blog/node_modules/marked/lib/marked.js b/tools/blog/node_modules/marked/lib/marked.js deleted file mode 100644 index 9156bf38b..000000000 --- a/tools/blog/node_modules/marked/lib/marked.js +++ /dev/null @@ -1,791 +0,0 @@ -/** - * marked - A markdown parser (https://github.com/chjj/marked) - * Copyright (c) 2011-2012, Christopher Jeffrey. (MIT Licensed) - */ - -;(function() { - -/** - * Block-Level Grammar - */ - -var block = { - newline: /^\n+/, - code: /^( {4}[^\n]+\n*)+/, - fences: noop, - hr: /^( *[-*_]){3,} *(?:\n+|$)/, - heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, - lheading: /^([^\n]+)\n *(=|-){3,} *\n*/, - blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/, - list: /^( *)(bull) [^\0]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, - html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/, - def: /^ *\[([^\]]+)\]: *([^\s]+)(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, - paragraph: /^([^\n]+\n?(?!body))+\n*/, - text: /^[^\n]+/ -}; - -block.bullet = /(?:[*+-]|\d+\.)/; -block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; -block.item = replace(block.item, 'gm') - (/bull/g, block.bullet) - (); - -block.list = replace(block.list) - (/bull/g, block.bullet) - ('hr', /\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/) - (); - -block.html = replace(block.html) - ('comment', /<!--[^\0]*?-->/) - ('closed', /<(tag)[^\0]+?<\/\1>/) - ('closing', /<tag(?!:\/|@)\b(?:"[^"]*"|'[^']*'|[^'">])*?>/) - (/tag/g, tag()) - (); - -block.paragraph = (function() { - var paragraph = block.paragraph.source - , body = []; - - (function push(rule) { - rule = block[rule] ? block[rule].source : rule; - body.push(rule.replace(/(^|[^\[])\^/g, '$1')); - return push; - }) - ('hr') - ('heading') - ('lheading') - ('blockquote') - ('<' + tag()) - ('def'); - - return new - RegExp(paragraph.replace('body', body.join('|'))); -})(); - -block.normal = { - fences: block.fences, - paragraph: block.paragraph -}; - -block.gfm = { - fences: /^ *``` *(\w+)? *\n([^\0]+?)\s*``` *(?:\n+|$)/, - paragraph: /^/ -}; - -block.gfm.paragraph = replace(block.paragraph) - ('(?!', '(?!' + block.gfm.fences.source.replace(/(^|[^\[])\^/g, '$1') + '|') - (); - -/** - * Block Lexer - */ - -block.lexer = function(src) { - var tokens = []; - - tokens.links = {}; - - src = src - .replace(/\r\n|\r/g, '\n') - .replace(/\t/g, ' '); - - return block.token(src, tokens, true); -}; - -block.token = function(src, tokens, top) { - var src = src.replace(/^ +$/gm, '') - , next - , loose - , cap - , item - , space - , i - , l; - - while (src) { - // newline - if (cap = block.newline.exec(src)) { - src = src.substring(cap[0].length); - if (cap[0].length > 1) { - tokens.push({ - type: 'space' - }); - } - } - - // code - if (cap = block.code.exec(src)) { - src = src.substring(cap[0].length); - cap = cap[0].replace(/^ {4}/gm, ''); - tokens.push({ - type: 'code', - text: !options.pedantic - ? cap.replace(/\n+$/, '') - : cap - }); - continue; - } - - // fences (gfm) - if (cap = block.fences.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'code', - lang: cap[1], - text: cap[2] - }); - continue; - } - - // heading - if (cap = block.heading.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'heading', - depth: cap[1].length, - text: cap[2] - }); - continue; - } - - // lheading - if (cap = block.lheading.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'heading', - depth: cap[2] === '=' ? 1 : 2, - text: cap[1] - }); - continue; - } - - // hr - if (cap = block.hr.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'hr' - }); - continue; - } - - // blockquote - if (cap = block.blockquote.exec(src)) { - src = src.substring(cap[0].length); - - tokens.push({ - type: 'blockquote_start' - }); - - cap = cap[0].replace(/^ *> ?/gm, ''); - - // Pass `top` to keep the current - // "toplevel" state. This is exactly - // how markdown.pl works. - block.token(cap, tokens, top); - - tokens.push({ - type: 'blockquote_end' - }); - - continue; - } - - // list - if (cap = block.list.exec(src)) { - src = src.substring(cap[0].length); - - tokens.push({ - type: 'list_start', - ordered: isFinite(cap[2]) - }); - - // Get each top-level item. - cap = cap[0].match(block.item); - - next = false; - l = cap.length; - i = 0; - - for (; i < l; i++) { - item = cap[i]; - - // Remove the list item's bullet - // so it is seen as the next token. - space = item.length; - item = item.replace(/^ *([*+-]|\d+\.) +/, ''); - - // Outdent whatever the - // list item contains. Hacky. - if (~item.indexOf('\n ')) { - space -= item.length; - item = !options.pedantic - ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') - : item.replace(/^ {1,4}/gm, ''); - } - - // Determine whether item is loose or not. - // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ - // for discount behavior. - loose = next || /\n\n(?!\s*$)/.test(item); - if (i !== l - 1) { - next = item[item.length-1] === '\n'; - if (!loose) loose = next; - } - - tokens.push({ - type: loose - ? 'loose_item_start' - : 'list_item_start' - }); - - // Recurse. - block.token(item, tokens); - - tokens.push({ - type: 'list_item_end' - }); - } - - tokens.push({ - type: 'list_end' - }); - - continue; - } - - // html - if (cap = block.html.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'html', - pre: cap[1] === 'pre', - text: cap[0] - }); - continue; - } - - // def - if (top && (cap = block.def.exec(src))) { - src = src.substring(cap[0].length); - tokens.links[cap[1].toLowerCase()] = { - href: cap[2], - title: cap[3] - }; - continue; - } - - // top-level paragraph - if (top && (cap = block.paragraph.exec(src))) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'paragraph', - text: cap[0] - }); - continue; - } - - // text - if (cap = block.text.exec(src)) { - // Top-level should never reach here. - src = src.substring(cap[0].length); - tokens.push({ - type: 'text', - text: cap[0] - }); - continue; - } - } - - return tokens; -}; - -/** - * Inline Processing - */ - -var inline = { - escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, - autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, - url: noop, - tag: /^<!--[^\0]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, - link: /^!?\[(inside)\]\(href\)/, - reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, - nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, - strong: /^__([^\0]+?)__(?!_)|^\*\*([^\0]+?)\*\*(?!\*)/, - em: /^\b_((?:__|[^\0])+?)_\b|^\*((?:\*\*|[^\0])+?)\*(?!\*)/, - code: /^(`+)([^\0]*?[^`])\1(?!`)/, - br: /^ {2,}\n(?!\s*$)/, - text: /^[^\0]+?(?=[\\<!\[_*`]| {2,}\n|$)/ -}; - -inline._linkInside = /(?:\[[^\]]*\]|[^\]]|\](?=[^\[]*\]))*/; -inline._linkHref = /\s*<?([^\s]*?)>?(?:\s+['"]([^\0]*?)['"])?\s*/; - -inline.link = replace(inline.link) - ('inside', inline._linkInside) - ('href', inline._linkHref) - (); - -inline.reflink = replace(inline.reflink) - ('inside', inline._linkInside) - (); - -inline.normal = { - url: inline.url, - strong: inline.strong, - em: inline.em, - text: inline.text -}; - -inline.pedantic = { - strong: /^__(?=\S)([^\0]*?\S)__(?!_)|^\*\*(?=\S)([^\0]*?\S)\*\*(?!\*)/, - em: /^_(?=\S)([^\0]*?\S)_(?!_)|^\*(?=\S)([^\0]*?\S)\*(?!\*)/ -}; - -inline.gfm = { - url: /^(https?:\/\/[^\s]+[^.,:;"')\]\s])/, - text: /^[^\0]+?(?=[\\<!\[_*`]|https?:\/\/| {2,}\n|$)/ -}; - -/** - * Inline Lexer - */ - -inline.lexer = function(src) { - var out = '' - , links = tokens.links - , link - , text - , href - , cap; - - while (src) { - // escape - if (cap = inline.escape.exec(src)) { - src = src.substring(cap[0].length); - out += cap[1]; - continue; - } - - // autolink - if (cap = inline.autolink.exec(src)) { - src = src.substring(cap[0].length); - if (cap[2] === '@') { - text = cap[1][6] === ':' - ? mangle(cap[1].substring(7)) - : mangle(cap[1]); - href = mangle('mailto:') + text; - } else { - text = escape(cap[1]); - href = text; - } - out += '<a href="' - + href - + '">' - + text - + '</a>'; - continue; - } - - // url (gfm) - if (cap = inline.url.exec(src)) { - src = src.substring(cap[0].length); - text = escape(cap[1]); - href = text; - out += '<a href="' - + href - + '">' - + text - + '</a>'; - continue; - } - - // tag - if (cap = inline.tag.exec(src)) { - src = src.substring(cap[0].length); - out += options.sanitize - ? escape(cap[0]) - : cap[0]; - continue; - } - - // link - if (cap = inline.link.exec(src)) { - src = src.substring(cap[0].length); - out += outputLink(cap, { - href: cap[2], - title: cap[3] - }); - continue; - } - - // reflink, nolink - if ((cap = inline.reflink.exec(src)) - || (cap = inline.nolink.exec(src))) { - src = src.substring(cap[0].length); - link = (cap[2] || cap[1]).replace(/\s+/g, ' '); - link = links[link.toLowerCase()]; - if (!link || !link.href) { - out += cap[0][0]; - src = cap[0].substring(1) + src; - continue; - } - out += outputLink(cap, link); - continue; - } - - // strong - if (cap = inline.strong.exec(src)) { - src = src.substring(cap[0].length); - out += '<strong>' - + inline.lexer(cap[2] || cap[1]) - + '</strong>'; - continue; - } - - // em - if (cap = inline.em.exec(src)) { - src = src.substring(cap[0].length); - out += '<em>' - + inline.lexer(cap[2] || cap[1]) - + '</em>'; - continue; - } - - // code - if (cap = inline.code.exec(src)) { - src = src.substring(cap[0].length); - out += '<code>' - + escape(cap[2], true) - + '</code>'; - continue; - } - - // br - if (cap = inline.br.exec(src)) { - src = src.substring(cap[0].length); - out += '<br>'; - continue; - } - - // text - if (cap = inline.text.exec(src)) { - src = src.substring(cap[0].length); - out += escape(cap[0]); - continue; - } - } - - return out; -}; - -function outputLink(cap, link) { - if (cap[0][0] !== '!') { - return '<a href="' - + escape(link.href) - + '"' - + (link.title - ? ' title="' - + escape(link.title) - + '"' - : '') - + '>' - + inline.lexer(cap[1]) - + '</a>'; - } else { - return '<img src="' - + escape(link.href) - + '" alt="' - + escape(cap[1]) - + '"' - + (link.title - ? ' title="' - + escape(link.title) - + '"' - : '') - + '>'; - } -} - -/** - * Parsing - */ - -var tokens - , token; - -function next() { - return token = tokens.pop(); -} - -function tok() { - switch (token.type) { - case 'space': { - return ''; - } - case 'hr': { - return '<hr>\n'; - } - case 'heading': { - return '<h' - + token.depth - + '>' - + inline.lexer(token.text) - + '</h' - + token.depth - + '>\n'; - } - case 'code': { - if (options.highlight) { - token.code = options.highlight(token.text, token.lang); - if (token.code != null && token.code !== token.text) { - token.escaped = true; - token.text = token.code; - } - } - - if (!token.escaped) { - token.text = escape(token.text, true); - } - - return '<pre><code' - + (token.lang - ? ' class="lang-' - + token.lang - + '"' - : '') - + '>' - + token.text - + '</code></pre>\n'; - } - case 'blockquote_start': { - var body = ''; - - while (next().type !== 'blockquote_end') { - body += tok(); - } - - return '<blockquote>\n' - + body - + '</blockquote>\n'; - } - case 'list_start': { - var type = token.ordered ? 'ol' : 'ul' - , body = ''; - - while (next().type !== 'list_end') { - body += tok(); - } - - return '<' - + type - + '>\n' - + body - + '</' - + type - + '>\n'; - } - case 'list_item_start': { - var body = ''; - - while (next().type !== 'list_item_end') { - body += token.type === 'text' - ? parseText() - : tok(); - } - - return '<li>' - + body - + '</li>\n'; - } - case 'loose_item_start': { - var body = ''; - - while (next().type !== 'list_item_end') { - body += tok(); - } - - return '<li>' - + body - + '</li>\n'; - } - case 'html': { - if (options.sanitize) { - return inline.lexer(token.text); - } - return !token.pre && !options.pedantic - ? inline.lexer(token.text) - : token.text; - } - case 'paragraph': { - return '<p>' - + inline.lexer(token.text) - + '</p>\n'; - } - case 'text': { - return '<p>' - + parseText() - + '</p>\n'; - } - } -} - -function parseText() { - var body = token.text - , top; - - while ((top = tokens[tokens.length-1]) - && top.type === 'text') { - body += '\n' + next().text; - } - - return inline.lexer(body); -} - -function parse(src) { - tokens = src.reverse(); - - var out = ''; - while (next()) { - out += tok(); - } - - tokens = null; - token = null; - - return out; -} - -/** - * Helpers - */ - -function escape(html, encode) { - return html - .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); -} - -function mangle(text) { - var out = '' - , l = text.length - , i = 0 - , ch; - - for (; i < l; i++) { - ch = text.charCodeAt(i); - if (Math.random() > 0.5) { - ch = 'x' + ch.toString(16); - } - out += '&#' + ch + ';'; - } - - return out; -} - -function tag() { - var tag = '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' - + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' - + '|span|br|wbr|ins|del|img)\\b)\\w+'; - - return tag; -} - -function replace(regex, opt) { - regex = regex.source; - opt = opt || ''; - return function self(name, val) { - if (!name) return new RegExp(regex, opt); - regex = regex.replace(name, val.source || val); - return self; - }; -} - -function noop() {} -noop.exec = noop; - -/** - * Marked - */ - -function marked(src, opt) { - setOptions(opt); - return parse(block.lexer(src)); -} - -/** - * Options - */ - -var options - , defaults; - -function setOptions(opt) { - if (!opt) opt = defaults; - if (options === opt) return; - options = opt; - - if (options.gfm) { - block.fences = block.gfm.fences; - block.paragraph = block.gfm.paragraph; - inline.text = inline.gfm.text; - inline.url = inline.gfm.url; - } else { - block.fences = block.normal.fences; - block.paragraph = block.normal.paragraph; - inline.text = inline.normal.text; - inline.url = inline.normal.url; - } - - if (options.pedantic) { - inline.em = inline.pedantic.em; - inline.strong = inline.pedantic.strong; - } else { - inline.em = inline.normal.em; - inline.strong = inline.normal.strong; - } -} - -marked.options = -marked.setOptions = function(opt) { - defaults = opt; - setOptions(opt); - return marked; -}; - -marked.setOptions({ - gfm: true, - pedantic: false, - sanitize: false, - highlight: null -}); - -/** - * Expose - */ - -marked.parser = function(src, opt) { - setOptions(opt); - return parse(src); -}; - -marked.lexer = function(src, opt) { - setOptions(opt); - return block.lexer(src); -}; - -marked.parse = marked; - -if (typeof module !== 'undefined') { - module.exports = marked; -} else { - this.marked = marked; -} - -}).call(function() { - return this || (typeof window !== 'undefined' ? window : global); -}()); diff --git a/tools/blog/node_modules/marked/man/marked.1 b/tools/blog/node_modules/marked/man/marked.1 deleted file mode 100644 index 672e336e8..000000000 --- a/tools/blog/node_modules/marked/man/marked.1 +++ /dev/null @@ -1,49 +0,0 @@ -.ds q \N'34' -.TH marked 1 -.SH NAME -marked \- a javascript markdown parser -.SH SYNOPSIS -.nf -.B marked [\-o output] [\-i input] [\-th] -.fi -.SH DESCRIPTION -.B marked -is a full-featured javascript markdown parser, built for speed. It also includes -multiple GFM features. -.SH OPTIONS -.TP -.BI \-o,\ \-\-output\ [output] -Specify file output. If none is specified, write to stdout. -.TP -.BI \-i,\ \-\-input\ [input] -Specify file input, otherwise use last argument as input file. If no input file -is specified, read from stdin. -.TP -.BI \-t,\ \-\-tokens -Output a token stream instead of html. -.TP -.BI \-\-pedantic -Conform to obscure parts of markdown.pl as much as possible. Don't fix original -markdown bugs. -.TP -.BI \-\-gfm -Enable github flavored markdown. -.TP -.BI \-\-sanitize -Sanitize output. Ignore any HTML input. -.TP -.BI \-h,\ \-\-help -Display help information. -.SH EXAMPLES -.TP -cat in.md | marked > out.html -.TP -echo "hello *world*" | marked -.TP -marked -o out.html in.md -.TP -marked --output="hello world.html" -i in.md -.SH BUGS -Please report any bugs to https://github.com/chjj/marked. -.SH LICENSE -Copyright (c) 2011-2012, Christopher Jeffrey (MIT License) diff --git a/tools/blog/node_modules/marked/package.json b/tools/blog/node_modules/marked/package.json deleted file mode 100644 index 4d7f86612..000000000 --- a/tools/blog/node_modules/marked/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "marked", - "description": "A full-featured markdown parser and compiler, written in javascript. Built for speed.", - "author": { - "name": "Christopher Jeffrey" - }, - "version": "0.2.5", - "main": "./lib/marked.js", - "bin": { - "marked": "./bin/marked" - }, - "man": [ - "./man/marked.1" - ], - "preferGlobal": false, - "repository": { - "type": "git", - "url": "git://github.com/chjj/marked.git" - }, - "homepage": "https://github.com/chjj/marked", - "bugs": { - "url": "http://github.com/chjj/marked/issues" - }, - "keywords": [ - "markdown", - "markup", - "html" - ], - "tags": [ - "markdown", - "markup", - "html" - ], - "readme": "# marked\n\nA full-featured markdown parser and compiler, written in javascript.\nBuilt for speed.\n\n## Benchmarks\n\nnode v0.4.x\n\n``` bash\n$ node test --bench\nmarked completed in 12071ms.\nshowdown (reuse converter) completed in 27387ms.\nshowdown (new converter) completed in 75617ms.\nmarkdown-js completed in 70069ms.\n```\n\nnode v0.6.x\n\n``` bash\n$ node test --bench\nmarked completed in 6448ms.\nmarked (gfm) completed in 7357ms.\nmarked (pedantic) completed in 6092ms.\ndiscount completed in 7314ms.\nshowdown (reuse converter) completed in 16018ms.\nshowdown (new converter) completed in 18234ms.\nmarkdown-js completed in 24270ms.\n```\n\n__Marked is now faster than Discount, which is written in C.__\n\nFor those feeling skeptical: These benchmarks run the entire markdown test suite\n1000 times. The test suite tests every feature. It doesn't cater to specific\naspects.\n\n## Install\n\n``` bash\n$ npm install marked\n```\n\n## Another Javascript Markdown Parser\n\nThe point of marked was to create a markdown compiler where it was possible to\nfrequently parse huge chunks of markdown without having to worry about\ncaching the compiled output somehow...or blocking for an unnecesarily long time.\n\nmarked is very concise and still implements all markdown features. It is also\nnow fully compatible with the client-side.\n\nmarked more or less passes the official markdown test suite in its\nentirety. This is important because a surprising number of markdown compilers\ncannot pass more than a few tests. It was very difficult to get marked as\ncompliant as it is. It could have cut corners in several areas for the sake\nof performance, but did not in order to be exactly what you expect in terms\nof a markdown rendering. In fact, this is why marked could be considered at a\ndisadvantage in the benchmarks above.\n\nAlong with implementing every markdown feature, marked also implements\n[GFM features](http://github.github.com/github-flavored-markdown/).\n\n## Options\n\nmarked has 4 different switches which change behavior.\n\n- __pedantic__: Conform to obscure parts of `markdown.pl` as much as possible.\n Don't fix any of the original markdown bugs or poor behavior.\n- __gfm__: Enable github flavored markdown (enabled by default).\n- __sanitize__: Sanitize the output. Ignore any HTML that has been input.\n- __highlight__: A callback to highlight code blocks.\n\nNone of the above are mutually exclusive/inclusive.\n\n## Usage\n\n``` js\n// Set default options\nmarked.setOptions({\n gfm: true,\n pedantic: false,\n sanitize: true,\n // callback for code highlighter\n highlight: function(code, lang) {\n if (lang === 'js') {\n return javascriptHighlighter(code);\n }\n return code;\n }\n});\nconsole.log(marked('i am using __markdown__.'));\n```\n\nYou also have direct access to the lexer and parser if you so desire.\n\n``` js\nvar tokens = marked.lexer(text);\nconsole.log(marked.parser(tokens));\n```\n\n``` bash\n$ node\n> require('marked').lexer('> i am using marked.')\n[ { type: 'blockquote_start' },\n { type: 'paragraph',\n text: 'i am using marked.' },\n { type: 'blockquote_end' },\n links: {} ]\n```\n\n## CLI\n\n``` bash\n$ marked -o hello.html\nhello world\n^D\n$ cat hello.html\n<p>hello world</p>\n```\n\n## License\n\nCopyright (c) 2011-2012, Christopher Jeffrey. (MIT License)\n\nSee LICENSE for more info.\n", - "_id": "marked@0.2.5", - "dist": { - "shasum": "611829a0ca7735d5728dfa02147f2e61f0776500" - }, - "_from": "marked" -} diff --git a/tools/blog/node_modules/mkdirp/.npmignore b/tools/blog/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347e..000000000 --- a/tools/blog/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log
\ No newline at end of file diff --git a/tools/blog/node_modules/mkdirp/.travis.yml b/tools/blog/node_modules/mkdirp/.travis.yml deleted file mode 100644 index f1d0f13c8..000000000 --- a/tools/blog/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/tools/blog/node_modules/mkdirp/LICENSE b/tools/blog/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb0..000000000 --- a/tools/blog/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/tools/blog/node_modules/mkdirp/README.markdown b/tools/blog/node_modules/mkdirp/README.markdown deleted file mode 100644 index 40de04f71..000000000 --- a/tools/blog/node_modules/mkdirp/README.markdown +++ /dev/null @@ -1,61 +0,0 @@ -mkdirp -====== - -Like `mkdir -p`, but in node.js! - -[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) - -example -======= - -pow.js ------- - var mkdirp = require('mkdirp'); - - mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') - }); - -Output - pow! - -And now /tmp/foo/bar/baz exists, huzzah! - -methods -======= - -var mkdirp = require('mkdirp'); - -mkdirp(dir, mode, cb) ---------------------- - -Create a new directory and any necessary subdirectories at `dir` with octal -permission string `mode`. - -If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -`cb(err, made)` fires with the error or the first directory `made` -that had to be created, if any. - -mkdirp.sync(dir, mode) ----------------------- - -Synchronously create a new directory and any necessary subdirectories at `dir` -with octal permission string `mode`. - -If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -Returns the first directory that had to be created, if any. - -install -======= - -With [npm](http://npmjs.org) do: - - npm install mkdirp - -license -======= - -MIT/X11 diff --git a/tools/blog/node_modules/mkdirp/examples/pow.js b/tools/blog/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212e..000000000 --- a/tools/blog/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/tools/blog/node_modules/mkdirp/index.js b/tools/blog/node_modules/mkdirp/index.js deleted file mode 100644 index 874b31095..000000000 --- a/tools/blog/node_modules/mkdirp/index.js +++ /dev/null @@ -1,94 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, mode, f, made) { - if (typeof mode === 'function' || mode === undefined) { - f = mode; - mode = 0777 & (~process.umask()); - } - if (!made) made = null; - - var cb = f || function () {}; - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - fs.mkdir(p, mode, function (er) { - if (!er) { - made = made || p; - return cb(null, made); - } - switch (er.code) { - case 'ENOENT': - mkdirP(path.dirname(p), mode, function (er, made) { - if (er) cb(er, made); - else mkdirP(p, mode, cb, made); - }); - break; - - case 'EISDIR': - case 'EPERM': - // Operation not permitted or already is a dir. - // This is the error you get when trying to mkdir('c:/') - // on windows, or mkdir('/') on unix. Make sure it's a - // dir by falling through to the EEXIST case. - case 'EROFS': - // a read-only file system. - // However, the dir could already exist, in which case - // the EROFS error will be obscuring a EEXIST! - // Fallthrough to that case. - case 'EEXIST': - fs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original error be the failure reason. - if (er2 || !stat.isDirectory()) cb(er, made) - else cb(null, made); - }); - break; - - default: - cb(er, made); - break; - } - }); -} - -mkdirP.sync = function sync (p, mode, made) { - if (mode === undefined) { - mode = 0777 & (~process.umask()); - } - if (!made) made = null; - - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - try { - fs.mkdirSync(p, mode); - made = made || p; - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - made = sync(path.dirname(p), mode, made); - sync(p, mode, made); - break; - - case 'EEXIST' : - var stat; - try { - stat = fs.statSync(p); - } - catch (err1) { - throw err0; - } - if (!stat.isDirectory()) throw err0; - break; - default : - throw err0 - break; - } - } - - return made; -}; diff --git a/tools/blog/node_modules/mkdirp/package.json b/tools/blog/node_modules/mkdirp/package.json deleted file mode 100644 index a77beded1..000000000 --- a/tools/blog/node_modules/mkdirp/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "mkdirp", - "description": "mkdirp ======", - "version": "0.3.3", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "main": "./index", - "keywords": [ - "mkdir", - "directory" - ], - "repository": { - "type": "git", - "url": "http://github.com/substack/node-mkdirp.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "devDependencies": { - "tap": "~0.2.4" - }, - "license": "MIT/X11", - "engines": { - "node": "*" - }, - "readme": "mkdirp\n======\n\nLike `mkdir -p`, but in node.js!\n\n[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp)\n\nexample\n=======\n\npow.js\n------\n var mkdirp = require('mkdirp');\n \n mkdirp('/tmp/foo/bar/baz', function (err) {\n if (err) console.error(err)\n else console.log('pow!')\n });\n\nOutput\n pow!\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\nmethods\n=======\n\nvar mkdirp = require('mkdirp');\n\nmkdirp(dir, mode, cb)\n---------------------\n\nCreate a new directory and any necessary subdirectories at `dir` with octal\npermission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\n`cb(err, made)` fires with the error or the first directory `made`\nthat had to be created, if any.\n\nmkdirp.sync(dir, mode)\n----------------------\n\nSynchronously create a new directory and any necessary subdirectories at `dir`\nwith octal permission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\nReturns the first directory that had to be created, if any.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n npm install mkdirp\n\nlicense\n=======\n\nMIT/X11\n", - "_id": "mkdirp@0.3.3", - "_from": "mkdirp" -} diff --git a/tools/blog/node_modules/mkdirp/test/chmod.js b/tools/blog/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e9..000000000 --- a/tools/blog/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -test('chmod-pre', function (t) { - var mode = 0744 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.equal(stat && stat.mode & 0777, mode, 'should be 0744'); - t.end(); - }); - }); -}); - -test('chmod', function (t) { - var mode = 0755 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.end(); - }); - }); -}); diff --git a/tools/blog/node_modules/mkdirp/test/clobber.js b/tools/blog/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb709987..000000000 --- a/tools/blog/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -// a file in the way -var itw = ps.slice(0, 3).join('/'); - - -test('clobber-pre', function (t) { - console.error("about to write to "+itw) - fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); - - fs.stat(itw, function (er, stat) { - t.ifError(er) - t.ok(stat && stat.isFile(), 'should be file') - t.end() - }) -}) - -test('clobber', function (t) { - t.plan(2); - mkdirp(file, 0755, function (err) { - t.ok(err); - t.equal(err.code, 'ENOTDIR'); - t.end(); - }); -}); diff --git a/tools/blog/node_modules/mkdirp/test/mkdirp.js b/tools/blog/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c1..000000000 --- a/tools/blog/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('woo', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/tools/blog/node_modules/mkdirp/test/perm.js b/tools/blog/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abbd2..000000000 --- a/tools/blog/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('async perm', function (t) { - t.plan(2); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); - -test('async root perm', function (t) { - mkdirp('/tmp', 0755, function (err) { - if (err) t.fail(err); - t.end(); - }); - t.end(); -}); diff --git a/tools/blog/node_modules/mkdirp/test/perm_sync.js b/tools/blog/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f6090..000000000 --- a/tools/blog/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('sync perm', function (t) { - t.plan(2); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; - - mkdirp.sync(file, 0755); - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }); -}); - -test('sync root perm', function (t) { - t.plan(1); - - var file = '/tmp'; - mkdirp.sync(file, 0755); - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }); -}); diff --git a/tools/blog/node_modules/mkdirp/test/race.js b/tools/blog/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a044763..000000000 --- a/tools/blog/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('race', function (t) { - t.plan(4); - var ps = [ '', 'tmp' ]; - - for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); - } - var file = ps.join('/'); - - var res = 2; - mk(file, function () { - if (--res === 0) t.end(); - }); - - mk(file, function () { - if (--res === 0) t.end(); - }); - - function mk (file, cb) { - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - if (cb) cb(); - } - }) - }) - }); - } -}); diff --git a/tools/blog/node_modules/mkdirp/test/rel.js b/tools/blog/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243a..000000000 --- a/tools/blog/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('rel', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var cwd = process.cwd(); - process.chdir('/tmp'); - - var file = [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - process.chdir(cwd); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/tools/blog/node_modules/mkdirp/test/return.js b/tools/blog/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e561..000000000 --- a/tools/blog/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, '/tmp/' + x); - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, null); - }); - }); -}); diff --git a/tools/blog/node_modules/mkdirp/test/return_sync.js b/tools/blog/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d355..000000000 --- a/tools/blog/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - // Note that this will throw on failure, which will fail the test. - var made = mkdirp.sync(file); - t.equal(made, '/tmp/' + x); - - // making the same file again should have no effect. - made = mkdirp.sync(file); - t.equal(made, null); -}); diff --git a/tools/blog/node_modules/mkdirp/test/root.js b/tools/blog/node_modules/mkdirp/test/root.js deleted file mode 100644 index 97ad7a2f3..000000000 --- a/tools/blog/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,18 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('root', function (t) { - // '/' on unix, 'c:/' on windows. - var file = path.resolve('/'); - - mkdirp(file, 0755, function (err) { - if (err) throw err - fs.stat(file, function (er, stat) { - if (er) throw er - t.ok(stat.isDirectory(), 'target is a directory'); - t.end(); - }) - }); -}); diff --git a/tools/blog/node_modules/mkdirp/test/sync.js b/tools/blog/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 7530cada8..000000000 --- a/tools/blog/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('sync', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file, 0755); - } catch (err) { - t.fail(err); - return t.end(); - } - - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }); - }); -}); diff --git a/tools/blog/node_modules/mkdirp/test/umask.js b/tools/blog/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe22..000000000 --- a/tools/blog/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('implicit mode from umask', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0777 & (~process.umask())); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/tools/blog/node_modules/mkdirp/test/umask_sync.js b/tools/blog/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 35bd5cbbf..000000000 --- a/tools/blog/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('umask sync modes', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file); - } catch (err) { - t.fail(err); - return t.end(); - } - - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, (0777 & (~process.umask()))); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }); - }); -}); diff --git a/tools/blog/node_modules/semver/LICENSE b/tools/blog/node_modules/semver/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/tools/blog/node_modules/semver/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/tools/blog/node_modules/semver/README.md b/tools/blog/node_modules/semver/README.md deleted file mode 100644 index 6fa37a3d8..000000000 --- a/tools/blog/node_modules/semver/README.md +++ /dev/null @@ -1,119 +0,0 @@ -semver(1) -- The semantic versioner for npm -=========================================== - -## Usage - - $ npm install semver - - semver.valid('1.2.3') // true - semver.valid('a.b.c') // false - semver.clean(' =v1.2.3 ') // '1.2.3' - semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true - semver.gt('1.2.3', '9.8.7') // false - semver.lt('1.2.3', '9.8.7') // true - -As a command-line utility: - - $ semver -h - - Usage: semver -v <version> [-r <range>] - Test if version(s) satisfy the supplied range(s), - and sort them. - - Multiple versions or ranges may be supplied. - - Program exits successfully if any valid version satisfies - all supplied ranges, and prints all satisfying versions. - - If no versions are valid, or ranges are not satisfied, - then exits failure. - - Versions are printed in ascending order, so supplying - multiple versions to the utility will just sort them. - -## Versions - -A version is the following things, in this order: - -* a number (Major) -* a period -* a number (minor) -* a period -* a number (patch) -* OPTIONAL: a hyphen, followed by a number (build) -* OPTIONAL: a collection of pretty much any non-whitespace characters - (tag) - -A leading `"="` or `"v"` character is stripped off and ignored. - -## Comparisons - -The ordering of versions is done using the following algorithm, given -two versions and asked to find the greater of the two: - -* If the majors are numerically different, then take the one - with a bigger major number. `2.3.4 > 1.3.4` -* If the minors are numerically different, then take the one - with the bigger minor number. `2.3.4 > 2.2.4` -* If the patches are numerically different, then take the one with the - bigger patch number. `2.3.4 > 2.3.3` -* If only one of them has a build number, then take the one with the - build number. `2.3.4-0 > 2.3.4` -* If they both have build numbers, and the build numbers are numerically - different, then take the one with the bigger build number. - `2.3.4-10 > 2.3.4-9` -* If only one of them has a tag, then take the one without the tag. - `2.3.4 > 2.3.4-beta` -* If they both have tags, then take the one with the lexicographically - larger tag. `2.3.4-beta > 2.3.4-alpha` -* At this point, they're equal. - -## Ranges - -The following range styles are supported: - -* `>1.2.3` Greater than a specific version. -* `<1.2.3` Less than -* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` -* `~1.2.3` := `>=1.2.3 <1.3.0` -* `~1.2` := `>=1.2.0 <2.0.0` -* `~1` := `>=1.0.0 <2.0.0` -* `1.2.x` := `>=1.2.0 <1.3.0` -* `1.x` := `>=1.0.0 <2.0.0` - -Ranges can be joined with either a space (which implies "and") or a -`||` (which implies "or"). - -## Functions - -* valid(v): Return the parsed version, or null if it's not valid. -* inc(v, release): Return the version incremented by the release type - (major, minor, patch, or build), or null if it's not valid. - -### Comparison - -* gt(v1, v2): `v1 > v2` -* gte(v1, v2): `v1 >= v2` -* lt(v1, v2): `v1 < v2` -* lte(v1, v2): `v1 <= v2` -* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent, - even if they're not the exact same string. You already know how to - compare strings. -* neq(v1, v2): `v1 != v2` The opposite of eq. -* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call - the corresponding function above. `"==="` and `"!=="` do simple - string comparison, but are included for completeness. Throws if an - invalid comparison string is provided. -* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if - v2 is greater. Sorts in ascending order if passed to Array.sort(). -* rcompare(v1, v2): The reverse of compare. Sorts an array of versions - in descending order when passed to Array.sort(). - - -### Ranges - -* validRange(range): Return the valid range or null if it's not valid -* satisfies(version, range): Return true if the version satisfies the - range. -* maxSatisfying(versions, range): Return the highest version in the list - that satisfies the range, or null if none of them do. diff --git a/tools/blog/node_modules/semver/bin/semver b/tools/blog/node_modules/semver/bin/semver deleted file mode 100755 index 3e6afb40d..000000000 --- a/tools/blog/node_modules/semver/bin/semver +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env node -// Standalone semver comparison program. -// Exits successfully and prints matching version(s) if -// any supplied version is valid and passes all tests. - -var argv = process.argv.slice(2) - , versions = [] - , range = [] - , gt = [] - , lt = [] - , eq = [] - , semver = require("../semver") - -main() - -function main () { - if (!argv.length) return help() - while (argv.length) { - var a - switch (a = argv.shift()) { - case "-v": case "--version": - versions.push(argv.shift()) - break - case "-r": case "--range": - range.push(argv.shift()) - break - case "-h": case "--help": case "-?": - return help() - default: - versions.push(a) - break - } - } - - versions = versions.filter(semver.valid) - for (var i = 0, l = range.length; i < l ; i ++) { - versions = versions.filter(function (v) { - return semver.satisfies(v, range[i]) - }) - if (!versions.length) return fail() - } - return success(versions) -} - -function fail () { process.exit(1) } - -function success () { - versions.sort(semver.compare) - .map(semver.clean) - .forEach(function (v,i,_) { console.log(v) }) -} - -function help () { - console.log(["Usage: semver -v <version> [-r <range>]" - ,"Test if version(s) satisfy the supplied range(s)," - ,"and sort them." - ,"" - ,"Multiple versions or ranges may be supplied." - ,"" - ,"Program exits successfully if any valid version satisfies" - ,"all supplied ranges, and prints all satisfying versions." - ,"" - ,"If no versions are valid, or ranges are not satisfied," - ,"then exits failure." - ,"" - ,"Versions are printed in ascending order, so supplying" - ,"multiple versions to the utility will just sort them." - ].join("\n")) -} - - diff --git a/tools/blog/node_modules/semver/package.json b/tools/blog/node_modules/semver/package.json deleted file mode 100644 index 6d8940060..000000000 --- a/tools/blog/node_modules/semver/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "semver", - "version": "1.0.14", - "description": "The semantic version parser used by npm.", - "main": "semver.js", - "scripts": { - "test": "tap test.js" - }, - "devDependencies": { - "tap": "0.x >=0.0.4" - }, - "license": { - "type": "MIT", - "url": "https://github.com/isaacs/semver/raw/master/LICENSE" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-semver.git" - }, - "bin": { - "semver": "./bin/semver" - }, - "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n $ npm install semver\n\n semver.valid('1.2.3') // true\n semver.valid('a.b.c') // false\n semver.clean(' =v1.2.3 ') // '1.2.3'\n semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n semver.gt('1.2.3', '9.8.7') // false\n semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n $ semver -h\n\n Usage: semver -v <version> [-r <range>]\n Test if version(s) satisfy the supplied range(s),\n and sort them.\n\n Multiple versions or ranges may be supplied.\n\n Program exits successfully if any valid version satisfies\n all supplied ranges, and prints all satisfying versions.\n\n If no versions are valid, or ranges are not satisfied,\n then exits failure.\n\n Versions are printed in ascending order, so supplying\n multiple versions to the utility will just sort them.\n\n## Versions\n\nA version is the following things, in this order:\n\n* a number (Major)\n* a period\n* a number (minor)\n* a period\n* a number (patch)\n* OPTIONAL: a hyphen, followed by a number (build)\n* OPTIONAL: a collection of pretty much any non-whitespace characters\n (tag)\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Comparisons\n\nThe ordering of versions is done using the following algorithm, given\ntwo versions and asked to find the greater of the two:\n\n* If the majors are numerically different, then take the one\n with a bigger major number. `2.3.4 > 1.3.4`\n* If the minors are numerically different, then take the one\n with the bigger minor number. `2.3.4 > 2.2.4`\n* If the patches are numerically different, then take the one with the\n bigger patch number. `2.3.4 > 2.3.3`\n* If only one of them has a build number, then take the one with the\n build number. `2.3.4-0 > 2.3.4`\n* If they both have build numbers, and the build numbers are numerically\n different, then take the one with the bigger build number.\n `2.3.4-10 > 2.3.4-9`\n* If only one of them has a tag, then take the one without the tag.\n `2.3.4 > 2.3.4-beta`\n* If they both have tags, then take the one with the lexicographically\n larger tag. `2.3.4-beta > 2.3.4-alpha`\n* At this point, they're equal.\n\n## Ranges\n\nThe following range styles are supported:\n\n* `>1.2.3` Greater than a specific version.\n* `<1.2.3` Less than\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n* `~1.2.3` := `>=1.2.3 <1.3.0`\n* `~1.2` := `>=1.2.0 <2.0.0`\n* `~1` := `>=1.0.0 <2.0.0`\n* `1.2.x` := `>=1.2.0 <1.3.0`\n* `1.x` := `>=1.0.0 <2.0.0`\n\nRanges can be joined with either a space (which implies \"and\") or a\n`||` (which implies \"or\").\n\n## Functions\n\n* valid(v): Return the parsed version, or null if it's not valid.\n* inc(v, release): Return the version incremented by the release type\n (major, minor, patch, or build), or null if it's not valid.\n\n### Comparison\n\n* gt(v1, v2): `v1 > v2`\n* gte(v1, v2): `v1 >= v2`\n* lt(v1, v2): `v1 < v2`\n* lte(v1, v2): `v1 <= v2`\n* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,\n even if they're not the exact same string. You already know how to\n compare strings.\n* neq(v1, v2): `v1 != v2` The opposite of eq.\n* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call\n the corresponding function above. `\"===\"` and `\"!==\"` do simple\n string comparison, but are included for completeness. Throws if an\n invalid comparison string is provided.\n* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if\n v2 is greater. Sorts in ascending order if passed to Array.sort().\n* rcompare(v1, v2): The reverse of compare. Sorts an array of versions\n in descending order when passed to Array.sort().\n\n\n### Ranges\n\n* validRange(range): Return the valid range or null if it's not valid\n* satisfies(version, range): Return true if the version satisfies the\n range.\n* maxSatisfying(versions, range): Return the highest version in the list\n that satisfies the range, or null if none of them do.\n", - "_id": "semver@1.0.14", - "_from": "semver" -} diff --git a/tools/blog/node_modules/semver/semver.js b/tools/blog/node_modules/semver/semver.js deleted file mode 100644 index 8090e0c0d..000000000 --- a/tools/blog/node_modules/semver/semver.js +++ /dev/null @@ -1,305 +0,0 @@ -;(function (exports) { // nothing in here is node-specific. - -// See http://semver.org/ -// This implementation is a *hair* less strict in that it allows -// v1.2.3 things, and also tags that don't begin with a char. - -var semver = "\\s*[v=]*\\s*([0-9]+)" // major - + "\\.([0-9]+)" // minor - + "\\.([0-9]+)" // patch - + "(-[0-9]+-?)?" // build - + "([a-zA-Z-][a-zA-Z0-9-\.:]*)?" // tag - , exprComparator = "^((<|>)?=?)\s*("+semver+")$|^$" - , xRangePlain = "[v=]*([0-9]+|x|X|\\*)" - + "(?:\\.([0-9]+|x|X|\\*)" - + "(?:\\.([0-9]+|x|X|\\*)" - + "([a-zA-Z-][a-zA-Z0-9-\.:]*)?)?)?" - , xRange = "((?:<|>)=?)?\\s*" + xRangePlain - , exprSpermy = "(?:~>?)"+xRange - , expressions = exports.expressions = - { parse : new RegExp("^\\s*"+semver+"\\s*$") - , parsePackage : new RegExp("^\\s*([^\/]+)[-@](" +semver+")\\s*$") - , parseRange : new RegExp( - "^\\s*(" + semver + ")\\s+-\\s+(" + semver + ")\\s*$") - , validComparator : new RegExp("^"+exprComparator+"$") - , parseXRange : new RegExp("^"+xRange+"$") - , parseSpermy : new RegExp("^"+exprSpermy+"$") - } - - -Object.getOwnPropertyNames(expressions).forEach(function (i) { - exports[i] = function (str) { - return ("" + (str || "")).match(expressions[i]) - } -}) - -exports.rangeReplace = ">=$1 <=$7" -exports.clean = clean -exports.compare = compare -exports.rcompare = rcompare -exports.satisfies = satisfies -exports.gt = gt -exports.gte = gte -exports.lt = lt -exports.lte = lte -exports.eq = eq -exports.neq = neq -exports.cmp = cmp -exports.inc = inc - -exports.valid = valid -exports.validPackage = validPackage -exports.validRange = validRange -exports.maxSatisfying = maxSatisfying - -exports.replaceStars = replaceStars -exports.toComparators = toComparators - -function stringify (version) { - var v = version - return [v[1]||'', v[2]||'', v[3]||''].join(".") + (v[4]||'') + (v[5]||'') -} - -function clean (version) { - version = exports.parse(version) - if (!version) return version - return stringify(version) -} - -function valid (version) { - if (typeof version !== "string") return null - return exports.parse(version) && version.trim().replace(/^[v=]+/, '') -} - -function validPackage (version) { - if (typeof version !== "string") return null - return version.match(expressions.parsePackage) && version.trim() -} - -// range can be one of: -// "1.0.3 - 2.0.0" range, inclusive, like ">=1.0.3 <=2.0.0" -// ">1.0.2" like 1.0.3 - 9999.9999.9999 -// ">=1.0.2" like 1.0.2 - 9999.9999.9999 -// "<2.0.0" like 0.0.0 - 1.9999.9999 -// ">1.0.2 <2.0.0" like 1.0.3 - 1.9999.9999 -var starExpression = /(<|>)?=?\s*\*/g - , starReplace = "" - , compTrimExpression = new RegExp("((<|>)?=?)\\s*(" - +semver+"|"+xRangePlain+")", "g") - , compTrimReplace = "$1$3" - -function toComparators (range) { - var ret = (range || "").trim() - .replace(expressions.parseRange, exports.rangeReplace) - .replace(compTrimExpression, compTrimReplace) - .split(/\s+/) - .join(" ") - .split("||") - .map(function (orchunk) { - return orchunk - .split(" ") - .map(replaceXRanges) - .map(replaceSpermies) - .map(replaceStars) - .join(" ").trim() - }) - .map(function (orchunk) { - return orchunk - .trim() - .split(/\s+/) - .filter(function (c) { return c.match(expressions.validComparator) }) - }) - .filter(function (c) { return c.length }) - return ret -} - -function replaceStars (stars) { - return stars.trim().replace(starExpression, starReplace) -} - -// "2.x","2.x.x" --> ">=2.0.0- <2.1.0-" -// "2.3.x" --> ">=2.3.0- <2.4.0-" -function replaceXRanges (ranges) { - return ranges.split(/\s+/) - .map(replaceXRange) - .join(" ") -} - -function replaceXRange (version) { - return version.trim().replace(expressions.parseXRange, - function (v, gtlt, M, m, p, t) { - var anyX = !M || M.toLowerCase() === "x" || M === "*" - || !m || m.toLowerCase() === "x" || m === "*" - || !p || p.toLowerCase() === "x" || p === "*" - , ret = v - - if (gtlt && anyX) { - // just replace x'es with zeroes - ;(!M || M === "*" || M.toLowerCase() === "x") && (M = 0) - ;(!m || m === "*" || m.toLowerCase() === "x") && (m = 0) - ;(!p || p === "*" || p.toLowerCase() === "x") && (p = 0) - ret = gtlt + M+"."+m+"."+p+"-" - } else if (!M || M === "*" || M.toLowerCase() === "x") { - ret = "*" // allow any - } else if (!m || m === "*" || m.toLowerCase() === "x") { - // append "-" onto the version, otherwise - // "1.x.x" matches "2.0.0beta", since the tag - // *lowers* the version value - ret = ">="+M+".0.0- <"+(+M+1)+".0.0-" - } else if (!p || p === "*" || p.toLowerCase() === "x") { - ret = ">="+M+"."+m+".0- <"+M+"."+(+m+1)+".0-" - } - //console.error("parseXRange", [].slice.call(arguments), ret) - return ret - }) -} - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceSpermies (version) { - return version.trim().replace(expressions.parseSpermy, - function (v, gtlt, M, m, p, t) { - if (gtlt) throw new Error( - "Using '"+gtlt+"' with ~ makes no sense. Don't do it.") - - if (!M || M.toLowerCase() === "x") { - return "" - } - // ~1 == >=1.0.0- <2.0.0- - if (!m || m.toLowerCase() === "x") { - return ">="+M+".0.0- <"+(+M+1)+".0.0-" - } - // ~1.2 == >=1.2.0- <1.3.0- - if (!p || p.toLowerCase() === "x") { - return ">="+M+"."+m+".0- <"+M+"."+(+m+1)+".0-" - } - // ~1.2.3 == >=1.2.3- <1.3.0- - t = t || "-" - return ">="+M+"."+m+"."+p+t+" <"+M+"."+(+m+1)+".0-" - }) -} - -function validRange (range) { - range = replaceStars(range) - var c = toComparators(range) - return (c.length === 0) - ? null - : c.map(function (c) { return c.join(" ") }).join("||") -} - -// returns the highest satisfying version in the list, or undefined -function maxSatisfying (versions, range) { - return versions - .filter(function (v) { return satisfies(v, range) }) - .sort(compare) - .pop() -} -function satisfies (version, range) { - version = valid(version) - if (!version) return false - range = toComparators(range) - for (var i = 0, l = range.length ; i < l ; i ++) { - var ok = false - for (var j = 0, ll = range[i].length ; j < ll ; j ++) { - var r = range[i][j] - , gtlt = r.charAt(0) === ">" ? gt - : r.charAt(0) === "<" ? lt - : false - , eq = r.charAt(!!gtlt) === "=" - , sub = (!!eq) + (!!gtlt) - if (!gtlt) eq = true - r = r.substr(sub) - r = (r === "") ? r : valid(r) - ok = (r === "") || (eq && r === version) || (gtlt && gtlt(version, r)) - if (!ok) break - } - if (ok) return true - } - return false -} - -// return v1 > v2 ? 1 : -1 -function compare (v1, v2) { - var g = gt(v1, v2) - return g === null ? 0 : g ? 1 : -1 -} - -function rcompare (v1, v2) { - return compare(v2, v1) -} - -function lt (v1, v2) { return gt(v2, v1) } -function gte (v1, v2) { return !lt(v1, v2) } -function lte (v1, v2) { return !gt(v1, v2) } -function eq (v1, v2) { return gt(v1, v2) === null } -function neq (v1, v2) { return gt(v1, v2) !== null } -function cmp (v1, c, v2) { - switch (c) { - case ">": return gt(v1, v2) - case "<": return lt(v1, v2) - case ">=": return gte(v1, v2) - case "<=": return lte(v1, v2) - case "==": return eq(v1, v2) - case "!=": return neq(v1, v2) - case "===": return v1 === v2 - case "!==": return v1 !== v2 - default: throw new Error("Y U NO USE VALID COMPARATOR!? "+c) - } -} - -// return v1 > v2 -function num (v) { - return v === undefined ? -1 : parseInt((v||"0").replace(/[^0-9]+/g, ''), 10) -} -function gt (v1, v2) { - v1 = exports.parse(v1) - v2 = exports.parse(v2) - if (!v1 || !v2) return false - - for (var i = 1; i < 5; i ++) { - v1[i] = num(v1[i]) - v2[i] = num(v2[i]) - if (v1[i] > v2[i]) return true - else if (v1[i] !== v2[i]) return false - } - // no tag is > than any tag, or use lexicographical order. - var tag1 = v1[5] || "" - , tag2 = v2[5] || "" - - // kludge: null means they were equal. falsey, and detectable. - // embarrassingly overclever, though, I know. - return tag1 === tag2 ? null - : !tag1 ? true - : !tag2 ? false - : tag1 > tag2 -} - -function inc (version, release) { - version = exports.parse(version) - if (!version) return null - - var parsedIndexLookup = - { 'major': 1 - , 'minor': 2 - , 'patch': 3 - , 'build': 4 } - var incIndex = parsedIndexLookup[release] - if (incIndex === undefined) return null - - var current = num(version[incIndex]) - version[incIndex] = current === -1 ? 1 : current + 1 - - for (var i = incIndex + 1; i < 5; i ++) { - if (num(version[i]) !== -1) version[i] = "0" - } - - if (version[4]) version[4] = "-" + version[4] - version[5] = "" - - return stringify(version) -} -})(typeof exports === "object" ? exports : semver = {}) diff --git a/tools/blog/node_modules/semver/test.js b/tools/blog/node_modules/semver/test.js deleted file mode 100644 index 65ff8a963..000000000 --- a/tools/blog/node_modules/semver/test.js +++ /dev/null @@ -1,405 +0,0 @@ -var tap = require("tap") - , test = tap.test - , semver = require("./semver.js") - , eq = semver.eq - , gt = semver.gt - , lt = semver.lt - , neq = semver.neq - , cmp = semver.cmp - , gte = semver.gte - , lte = semver.lte - , satisfies = semver.satisfies - , validRange = semver.validRange - , inc = semver.inc - , replaceStars = semver.replaceStars - , toComparators = semver.toComparators - -tap.plan(8) - -test("\ncomparison tests", function (t) { -; [ ["0.0.0", "0.0.0foo"] - , ["0.0.1", "0.0.0"] - , ["1.0.0", "0.9.9"] - , ["0.10.0", "0.9.0"] - , ["0.99.0", "0.10.0"] - , ["2.0.0", "1.2.3"] - , ["v0.0.0", "0.0.0foo"] - , ["v0.0.1", "0.0.0"] - , ["v1.0.0", "0.9.9"] - , ["v0.10.0", "0.9.0"] - , ["v0.99.0", "0.10.0"] - , ["v2.0.0", "1.2.3"] - , ["0.0.0", "v0.0.0foo"] - , ["0.0.1", "v0.0.0"] - , ["1.0.0", "v0.9.9"] - , ["0.10.0", "v0.9.0"] - , ["0.99.0", "v0.10.0"] - , ["2.0.0", "v1.2.3"] - , ["1.2.3", "1.2.3-asdf"] - , ["1.2.3-4", "1.2.3"] - , ["1.2.3-4-foo", "1.2.3"] - , ["1.2.3-5", "1.2.3-5-foo"] - , ["1.2.3-5", "1.2.3-4"] - , ["1.2.3-5-foo", "1.2.3-5-Foo"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')") - t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')") - t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')") - t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')") - t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v1, "==", v1), "cmp('"+v1+"' == '"+v1+"')") - t.ok(cmp(v0, ">=", v1), "cmp('"+v0+"' >= '"+v1+"')") - t.ok(cmp(v1, "<=", v0), "cmp('"+v1+"' <= '"+v0+"')") - t.ok(cmp(v0, "!=", v1), "cmp('"+v0+"' != '"+v1+"')") - }) - t.end() -}) - -test("\nequality tests", function (t) { -; [ ["1.2.3", "v1.2.3"] - , ["1.2.3", "=1.2.3"] - , ["1.2.3", "v 1.2.3"] - , ["1.2.3", "= 1.2.3"] - , ["1.2.3", " v1.2.3"] - , ["1.2.3", " =1.2.3"] - , ["1.2.3", " v 1.2.3"] - , ["1.2.3", " = 1.2.3"] - , ["1.2.3-0", "v1.2.3-0"] - , ["1.2.3-0", "=1.2.3-0"] - , ["1.2.3-0", "v 1.2.3-0"] - , ["1.2.3-0", "= 1.2.3-0"] - , ["1.2.3-0", " v1.2.3-0"] - , ["1.2.3-0", " =1.2.3-0"] - , ["1.2.3-0", " v 1.2.3-0"] - , ["1.2.3-0", " = 1.2.3-0"] - , ["1.2.3-01", "v1.2.3-1"] - , ["1.2.3-01", "=1.2.3-1"] - , ["1.2.3-01", "v 1.2.3-1"] - , ["1.2.3-01", "= 1.2.3-1"] - , ["1.2.3-01", " v1.2.3-1"] - , ["1.2.3-01", " =1.2.3-1"] - , ["1.2.3-01", " v 1.2.3-1"] - , ["1.2.3-01", " = 1.2.3-1"] - , ["1.2.3beta", "v1.2.3beta"] - , ["1.2.3beta", "=1.2.3beta"] - , ["1.2.3beta", "v 1.2.3beta"] - , ["1.2.3beta", "= 1.2.3beta"] - , ["1.2.3beta", " v1.2.3beta"] - , ["1.2.3beta", " =1.2.3beta"] - , ["1.2.3beta", " v 1.2.3beta"] - , ["1.2.3beta", " = 1.2.3beta"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(eq(v0, v1), "eq('"+v0+"', '"+v1+"')") - t.ok(!neq(v0, v1), "!neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v0, "==", v1), "cmp("+v0+"=="+v1+")") - t.ok(!cmp(v0, "!=", v1), "!cmp("+v0+"!="+v1+")") - t.ok(!cmp(v0, "===", v1), "!cmp("+v0+"==="+v1+")") - t.ok(cmp(v0, "!==", v1), "cmp("+v0+"!=="+v1+")") - t.ok(!gt(v0, v1), "!gt('"+v0+"', '"+v1+"')") - t.ok(gte(v0, v1), "gte('"+v0+"', '"+v1+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(lte(v0, v1), "lte('"+v0+"', '"+v1+"')") - }) - t.end() -}) - - -test("\nrange tests", function (t) { -; [ ["1.0.0 - 2.0.0", "1.2.3"] - , ["1.0.0", "1.0.0"] - , [">=*", "0.2.4"] - , ["", "1.0.0"] - , ["*", "1.2.3"] - , ["*", "v1.2.3-foo"] - , [">=1.0.0", "1.0.0"] - , [">=1.0.0", "1.0.1"] - , [">=1.0.0", "1.1.0"] - , [">1.0.0", "1.0.1"] - , [">1.0.0", "1.1.0"] - , ["<=2.0.0", "2.0.0"] - , ["<=2.0.0", "1.9999.9999"] - , ["<=2.0.0", "0.2.9"] - , ["<2.0.0", "1.9999.9999"] - , ["<2.0.0", "0.2.9"] - , [">= 1.0.0", "1.0.0"] - , [">= 1.0.0", "1.0.1"] - , [">= 1.0.0", "1.1.0"] - , ["> 1.0.0", "1.0.1"] - , ["> 1.0.0", "1.1.0"] - , ["<= 2.0.0", "2.0.0"] - , ["<= 2.0.0", "1.9999.9999"] - , ["<= 2.0.0", "0.2.9"] - , ["< 2.0.0", "1.9999.9999"] - , ["<\t2.0.0", "0.2.9"] - , [">=0.1.97", "v0.1.97"] - , [">=0.1.97", "0.1.97"] - , ["0.1.20 || 1.2.4", "1.2.4"] - , [">=0.2.3 || <0.0.1", "0.0.0"] - , [">=0.2.3 || <0.0.1", "0.2.3"] - , [">=0.2.3 || <0.0.1", "0.2.4"] - , ["||", "1.3.4"] - , ["2.x.x", "2.1.3"] - , ["1.2.x", "1.2.3"] - , ["1.2.x || 2.x", "2.1.3"] - , ["1.2.x || 2.x", "1.2.3"] - , ["x", "1.2.3"] - , ["2.*.*", "2.1.3"] - , ["1.2.*", "1.2.3"] - , ["1.2.* || 2.*", "2.1.3"] - , ["1.2.* || 2.*", "1.2.3"] - , ["*", "1.2.3"] - , ["2", "2.1.2"] - , ["2.3", "2.3.1"] - , ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.4.5"] - , ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0 - , ["~1", "1.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "1.2.3"] - , ["~> 1", "1.2.3"] - , ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0 - , ["~ 1.0", "1.0.2"] - , [">=1", "1.0.0"] - , [">= 1", "1.0.0"] - , ["<1.2", "1.1.1"] - , ["< 1.2", "1.1.1"] - , ["1", "1.0.0beta"] - , ["~v0.5.4-pre", "0.5.5"] - , ["~v0.5.4-pre", "0.5.4"] - , ["=0.7.x", "0.7.2"] - , [">=0.7.x", "0.7.2"] - , ["=0.7.x", "0.7.0-asdf"] - , [">=0.7.x", "0.7.0-asdf"] - , ["<=0.7.x", "0.6.2"] - ].forEach(function (v) { - t.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1]) - }) - t.end() -}) - -test("\nnegative range tests", function (t) { -; [ ["1.0.0 - 2.0.0", "2.2.3"] - , ["1.0.0", "1.0.1"] - , [">=1.0.0", "0.0.0"] - , [">=1.0.0", "0.0.1"] - , [">=1.0.0", "0.1.0"] - , [">1.0.0", "0.0.1"] - , [">1.0.0", "0.1.0"] - , ["<=2.0.0", "3.0.0"] - , ["<=2.0.0", "2.9999.9999"] - , ["<=2.0.0", "2.2.9"] - , ["<2.0.0", "2.9999.9999"] - , ["<2.0.0", "2.2.9"] - , [">=0.1.97", "v0.1.93"] - , [">=0.1.97", "0.1.93"] - , ["0.1.20 || 1.2.4", "1.2.3"] - , [">=0.2.3 || <0.0.1", "0.0.3"] - , [">=0.2.3 || <0.0.1", "0.2.2"] - , ["2.x.x", "1.1.3"] - , ["2.x.x", "3.1.3"] - , ["1.2.x", "1.3.3"] - , ["1.2.x || 2.x", "3.1.3"] - , ["1.2.x || 2.x", "1.1.3"] - , ["2.*.*", "1.1.3"] - , ["2.*.*", "3.1.3"] - , ["1.2.*", "1.3.3"] - , ["1.2.* || 2.*", "3.1.3"] - , ["1.2.* || 2.*", "1.1.3"] - , ["2", "1.1.2"] - , ["2.3", "2.4.1"] - , ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.3.9"] - , ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0 - , ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0 - , ["~1", "0.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "2.2.3"] - , ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0 - , ["<1", "1.0.0"] - , [">=1.2", "1.1.1"] - , ["1", "2.0.0beta"] - , ["~v0.5.4-beta", "0.5.4-alpha"] - , ["<1", "1.0.0beta"] - , ["< 1", "1.0.0beta"] - , ["=0.7.x", "0.8.2"] - , [">=0.7.x", "0.6.2"] - , ["<=0.7.x", "0.7.2"] - ].forEach(function (v) { - t.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1]) - }) - t.end() -}) - -test("\nincrement versions test", function (t) { -; [ [ "1.2.3", "major", "2.0.0" ] - , [ "1.2.3", "minor", "1.3.0" ] - , [ "1.2.3", "patch", "1.2.4" ] - , [ "1.2.3", "build", "1.2.3-1" ] - , [ "1.2.3-4", "build", "1.2.3-5" ] - , [ "1.2.3tag", "major", "2.0.0" ] - , [ "1.2.3-tag", "major", "2.0.0" ] - , [ "1.2.3tag", "build", "1.2.3-1" ] - , [ "1.2.3-tag", "build", "1.2.3-1" ] - , [ "1.2.3-4-tag", "build", "1.2.3-5" ] - , [ "1.2.3-4tag", "build", "1.2.3-5" ] - , [ "1.2.3", "fake", null ] - , [ "fake", "major", null ] - ].forEach(function (v) { - t.equal(inc(v[0], v[1]), v[2], "inc("+v[0]+", "+v[1]+") === "+v[2]) - }) - - t.end() -}) - -test("\nreplace stars test", function (t) { -; [ [ "", "" ] - , [ "*", "" ] - , [ "> *", "" ] - , [ "<*", "" ] - , [ " >= *", "" ] - , [ "* || 1.2.3", " || 1.2.3" ] - ].forEach(function (v) { - t.equal(replaceStars(v[0]), v[1], "replaceStars("+v[0]+") === "+v[1]) - }) - - t.end() -}) - -test("\nvalid range test", function (t) { -; [ ["1.0.0 - 2.0.0", ">=1.0.0 <=2.0.0"] - , ["1.0.0", "1.0.0"] - , [">=*", ""] - , ["", ""] - , ["*", ""] - , ["*", ""] - , [">=1.0.0", ">=1.0.0"] - , [">1.0.0", ">1.0.0"] - , ["<=2.0.0", "<=2.0.0"] - , ["1", ">=1.0.0- <2.0.0-"] - , ["<=2.0.0", "<=2.0.0"] - , ["<=2.0.0", "<=2.0.0"] - , ["<2.0.0", "<2.0.0"] - , ["<2.0.0", "<2.0.0"] - , [">= 1.0.0", ">=1.0.0"] - , [">= 1.0.0", ">=1.0.0"] - , [">= 1.0.0", ">=1.0.0"] - , ["> 1.0.0", ">1.0.0"] - , ["> 1.0.0", ">1.0.0"] - , ["<= 2.0.0", "<=2.0.0"] - , ["<= 2.0.0", "<=2.0.0"] - , ["<= 2.0.0", "<=2.0.0"] - , ["< 2.0.0", "<2.0.0"] - , ["< 2.0.0", "<2.0.0"] - , [">=0.1.97", ">=0.1.97"] - , [">=0.1.97", ">=0.1.97"] - , ["0.1.20 || 1.2.4", "0.1.20||1.2.4"] - , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"] - , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"] - , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"] - , ["||", "||"] - , ["2.x.x", ">=2.0.0- <3.0.0-"] - , ["1.2.x", ">=1.2.0- <1.3.0-"] - , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"] - , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"] - , ["x", ""] - , ["2.*.*", null] - , ["1.2.*", null] - , ["1.2.* || 2.*", null] - , ["1.2.* || 2.*", null] - , ["*", ""] - , ["2", ">=2.0.0- <3.0.0-"] - , ["2.3", ">=2.3.0- <2.4.0-"] - , ["~2.4", ">=2.4.0- <2.5.0-"] - , ["~2.4", ">=2.4.0- <2.5.0-"] - , ["~>3.2.1", ">=3.2.1- <3.3.0-"] - , ["~1", ">=1.0.0- <2.0.0-"] - , ["~>1", ">=1.0.0- <2.0.0-"] - , ["~> 1", ">=1.0.0- <2.0.0-"] - , ["~1.0", ">=1.0.0- <1.1.0-"] - , ["~ 1.0", ">=1.0.0- <1.1.0-"] - , ["<1", "<1.0.0-"] - , ["< 1", "<1.0.0-"] - , [">=1", ">=1.0.0-"] - , [">= 1", ">=1.0.0-"] - , ["<1.2", "<1.2.0-"] - , ["< 1.2", "<1.2.0-"] - , ["1", ">=1.0.0- <2.0.0-"] - ].forEach(function (v) { - t.equal(validRange(v[0]), v[1], "validRange("+v[0]+") === "+v[1]) - }) - - t.end() -}) - -test("\ncomparators test", function (t) { -; [ ["1.0.0 - 2.0.0", [[">=1.0.0", "<=2.0.0"]] ] - , ["1.0.0", [["1.0.0"]] ] - , [">=*", [[">=0.0.0-"]] ] - , ["", [[""]]] - , ["*", [[""]] ] - , ["*", [[""]] ] - , [">=1.0.0", [[">=1.0.0"]] ] - , [">=1.0.0", [[">=1.0.0"]] ] - , [">=1.0.0", [[">=1.0.0"]] ] - , [">1.0.0", [[">1.0.0"]] ] - , [">1.0.0", [[">1.0.0"]] ] - , ["<=2.0.0", [["<=2.0.0"]] ] - , ["1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["<=2.0.0", [["<=2.0.0"]] ] - , ["<=2.0.0", [["<=2.0.0"]] ] - , ["<2.0.0", [["<2.0.0"]] ] - , ["<2.0.0", [["<2.0.0"]] ] - , [">= 1.0.0", [[">=1.0.0"]] ] - , [">= 1.0.0", [[">=1.0.0"]] ] - , [">= 1.0.0", [[">=1.0.0"]] ] - , ["> 1.0.0", [[">1.0.0"]] ] - , ["> 1.0.0", [[">1.0.0"]] ] - , ["<= 2.0.0", [["<=2.0.0"]] ] - , ["<= 2.0.0", [["<=2.0.0"]] ] - , ["<= 2.0.0", [["<=2.0.0"]] ] - , ["< 2.0.0", [["<2.0.0"]] ] - , ["<\t2.0.0", [["<2.0.0"]] ] - , [">=0.1.97", [[">=0.1.97"]] ] - , [">=0.1.97", [[">=0.1.97"]] ] - , ["0.1.20 || 1.2.4", [["0.1.20"], ["1.2.4"]] ] - , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ] - , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ] - , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ] - , ["||", [[""], [""]] ] - , ["2.x.x", [[">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.x", [[">=1.2.0-", "<1.3.0-"]] ] - , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["x", [[""]] ] - , ["2.*.*", [[">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.*", [[">=1.2.0-", "<1.3.0-"]] ] - , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["*", [[""]] ] - , ["2", [[">=2.0.0-", "<3.0.0-"]] ] - , ["2.3", [[">=2.3.0-", "<2.4.0-"]] ] - , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ] - , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ] - , ["~>3.2.1", [[">=3.2.1-", "<3.3.0-"]] ] - , ["~1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["~>1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["~> 1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["~1.0", [[">=1.0.0-", "<1.1.0-"]] ] - , ["~ 1.0", [[">=1.0.0-", "<1.1.0-"]] ] - , ["<1", [["<1.0.0-"]] ] - , ["< 1", [["<1.0.0-"]] ] - , [">=1", [[">=1.0.0-"]] ] - , [">= 1", [[">=1.0.0-"]] ] - , ["<1.2", [["<1.2.0-"]] ] - , ["< 1.2", [["<1.2.0-"]] ] - , ["1", [[">=1.0.0-", "<2.0.0-"]] ] - ].forEach(function (v) { - t.equivalent(toComparators(v[0]), v[1], "toComparators("+v[0]+") === "+JSON.stringify(v[1])) - }) - - t.end() -}) diff --git a/tools/blog/templates/index.ejs b/tools/blog/templates/index.ejs deleted file mode 100644 index 0db16e570..000000000 --- a/tools/blog/templates/index.ejs +++ /dev/null @@ -1 +0,0 @@ -This is some ejs |