Skip to content

Instantly share code, notes, and snippets.

@brycehamrick
Created February 18, 2014 19:28
Show Gist options
  • Save brycehamrick/9078130 to your computer and use it in GitHub Desktop.
Save brycehamrick/9078130 to your computer and use it in GitHub Desktop.
hoodie debug
This file has been truncated, but you can view the full file.

.d$b. .d$b. .d$$$$$$b.  .d$$$$$$b. .d$$$$$$b. .d$b..d$$$$$$$$b.
$$$$$..$$$$$.$$$$$$$$$$$b .$$$$$$$$$$$b $$$$$$$$$$b $$$$$$$$$$$$$$$P'
$$$$$$$$$$$$d$$$$$$$$$$$$bd$$$$$$$$$$$$b$$$$$$$$$$$b$$$$$$$$$$$$$$$b.
$$$$$$$$$$$$Q$$$$$$$$$$$$PQ$$$$$$$$$$$$P$$$$$$$$$$$P$$$$$$$$$$$$$$$P'
$$$$$´`$$$$$'$$$$$$$$$$$$''$$$$$$$$$$$$'$$$$$$$$$$P $$$$$$$$$$$$$$$b.
'Q$P' 'Q$P' 'Q$$$$$$P'  'Q$$$$$$P' 'Q$$$$$$$P 'Q$P''Q$$$$$$$$P'

Version: 0.4.8 (node v0.10.25, npm 1.3.24, platform: darwin)
[hoodie] Updated package.json
[hoodie] fetching npm dependencies:
[hoodie] removing .git folder
npm info it worked if it ends with ok
npm verb cli [ '/opt/boxen/nodenv/versions/v0.10.25/bin/node',
npm verb cli '/opt/boxen/nodenv/versions/v0.10.25/bin/npm',
npm verb cli 'install',
npm verb cli '--production',
npm verb cli '--cache-min',
npm verb cli '99999999',
npm verb cli '--loglevel',
npm verb cli 'silly' ]
npm info using npm@1.3.24
npm info using node@v0.10.25
npm WARN package.json hoodapp@1.0.11 No repository field.
npm verb readDependencies using package.json deps
npm verb install where, deps [ '/Users/hamrickb/.hoodie/cache/my-first-hoodie',
npm verb install [ 'hoodie-server',
npm verb install 'hoodie-plugin-appconfig',
npm verb install 'hoodie-plugin-email',
npm verb install 'hoodie-plugin-users' ] ]
npm info preinstall hoodapp@1.0.11
npm verb readDependencies using package.json deps
npm verb already installed skipping hoodie-plugin-email@~0.1.1 /Users/hamrickb/.hoodie/cache/my-first-hoodie
npm verb cache add [ 'hoodie-server@0.9.14', null ]
npm verb cache add name=undefined spec="hoodie-server@0.9.14" args=["hoodie-server@0.9.14",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'hoodie-server@0.9.14',
npm verb parsed url path: 'hoodie-server@0.9.14',
npm verb parsed url href: 'hoodie-server@0.9.14' }
npm verb cache add name="hoodie-server" spec="0.9.14" args=["hoodie-server","0.9.14"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.9.14',
npm verb parsed url path: '0.9.14',
npm verb parsed url href: '0.9.14' }
npm verb addNamed [ 'hoodie-server', '0.9.14' ]
npm verb addNamed [ '0.9.14', '0.9.14' ]
npm verb already installed skipping hoodie-plugin-appconfig@~0.1.0 /Users/hamrickb/.hoodie/cache/my-first-hoodie
npm verb already installed skipping hoodie-plugin-users@0.1.0 /Users/hamrickb/.hoodie/cache/my-first-hoodie
npm sill lockFile 3b6b1d4b-hoodie-server-0-9-14 hoodie-server@0.9.14
npm verb lock hoodie-server@0.9.14 /Users/hamrickb/.npm/3b6b1d4b-hoodie-server-0-9-14.lock
npm verb registry.get hoodie-server/0.9.14 not expired, no request
npm sill lockFile 3b6b1d4b-hoodie-server-0-9-14 hoodie-server@0.9.14
npm sill lockFile 3b6b1d4b-hoodie-server-0-9-14 hoodie-server@0.9.14
npm sill resolved [ { name: 'hoodie-server',
npm sill resolved version: '0.9.14',
npm sill resolved main: 'lib/index',
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'https://github.com/hoodiehq/hoodie-server.git' },
npm sill resolved dependencies:
npm sill resolved { hoodie: '0.6.0',
npm sill resolved multicouch: '0.8.1',
npm sill resolved 'hoodie-pocket': '0.0.13',
npm sill resolved 'hoodie-plugins-manager': '0.2.4',
npm sill resolved 'local-tld-lib': '1.0.2',
npm sill resolved underscore: '1.4.4',
npm sill resolved async: '0.2.7',
npm sill resolved bytes: '0.2.1',
npm sill resolved prompt: '0.2.9',
npm sill resolved request: '2.16.6',
npm sill resolved follow: '0.9.0',
npm sill resolved couchr: '0.0.13',
npm sill resolved 'cli-color': '0.2.2',
npm sill resolved lock: '0.0.3',
npm sill resolved semver: '1.1.4',
npm sill resolved optimist: '0.5.0',
npm sill resolved ports: '1.1.0',
npm sill resolved mkdirp: '0.3.5',
npm sill resolved dispatch: '0.2.0',
npm sill resolved hapi: '2.3.0',
npm sill resolved 'http-proxy': '1.0.2',
npm sill resolved 'combine-streams': '0.0.4' },
npm sill resolved scripts: { start: 'bin/start', test: 'grunt test --verbose' },
npm sill resolved engines: { node: '>=0.10.x' },
npm sill resolved devDependencies:
npm sill resolved { mocha: '*',
npm sill resolved grunt: '~0.4.1',
npm sill resolved 'expect.js': '~0.2.0',
npm sill resolved 'grunt-simple-mocha': '~0.4.0',
npm sill resolved 'grunt-contrib-nodeunit': '~0.2.2',
npm sill resolved sinon: '~1.7.3',
npm sill resolved 'grunt-contrib-jshint': '~0.6.2',
npm sill resolved 'grunt-contrib-watch': '~0.5.1',
npm sill resolved rimraf: '2.2.2' },
npm sill resolved hoodie: { plugins: [] },
npm sill resolved readme: '# DONT USE ME DIRECTLY\n\n[![Dependency Status](https://david-dm.org/hoodiehq/hoodie-server.svg?theme=shields.io)](https://david-dm.org/hoodiehq/hoodie-server) [![Build Status](https://travis-ci.org/hoodiehq/hoodie-server.png?branch=master)](https://travis-ci.org/hoodiehq/hoodie-server)\n\nThis powers [my-first-hoodie](https://github.com/hoodiehq/my-first-hoodie).\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved description: '[![Dependency Status](https://david-dm.org/hoodiehq/hoodie-server.svg?theme=shields.io)](https://david-dm.org/hoodiehq/hoodie-server) [![Build Status](https://travis-ci.org/hoodiehq/hoodie-server.png?branch=master)](https://travis-ci.org/hoodiehq/hoodie-server)',
npm sill resolved bugs: { url: 'https://github.com/hoodiehq/hoodie-server/issues' },
npm sill resolved homepage: 'https://github.com/hoodiehq/hoodie-server',
npm sill resolved _id: 'hoodie-server@0.9.14',
npm sill resolved _from: 'hoodie-server@0.9.14' } ]
npm info install hoodie-server@0.9.14 into /Users/hamrickb/.hoodie/cache/my-first-hoodie
npm info installOne hoodie-server@0.9.14
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server unbuild
npm verb tar unpack /Users/hamrickb/.npm/hoodie-server/0.9.14/package.tgz
npm sill lockFile c081c1a4-oodie-node-modules-hoodie-server tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server /Users/hamrickb/.npm/c081c1a4-oodie-node-modules-hoodie-server.lock
npm sill lockFile 2e3ca6e9-hoodie-server-0-9-14-package-tgz tar:///Users/hamrickb/.npm/hoodie-server/0.9.14/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/hoodie-server/0.9.14/package.tgz /Users/hamrickb/.npm/2e3ca6e9-hoodie-server-0-9-14-package-tgz.lock
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry Gruntfile.js
npm sill gunzTarPerm extractEntry .editorconfig
npm sill gunzTarPerm extractEntry .jshintrc
npm sill gunzTarPerm extractEntry bin/start
npm sill gunzTarPerm extractEntry lib/index.js
npm sill gunzTarPerm extractEntry lib/core/config.js
npm sill gunzTarPerm extractEntry lib/core/environment.js
npm sill gunzTarPerm extractEntry lib/core/plugins.js
npm sill gunzTarPerm extractEntry lib/couchdb/index.js
npm sill gunzTarPerm extractEntry lib/couchdb/installer.js
npm sill gunzTarPerm extractEntry lib/helpers/pack_hoodie.js
npm sill gunzTarPerm extractEntry lib/helpers/plugin_api.js
npm sill gunzTarPerm extractEntry lib/server/index.js
npm sill gunzTarPerm extractEntry lib/server/nodejitsu_server.js
npm sill gunzTarPerm extractEntry lib/server/helpers/handle_404/package.json
npm sill gunzTarPerm extractEntry lib/server/helpers/handle_404/index.js
npm sill gunzTarPerm extractEntry lib/server/helpers/logger/package.json
npm sill gunzTarPerm extractEntry lib/server/helpers/logger/index.js
npm sill gunzTarPerm extractEntry lib/server/plugins/admin/package.json
npm sill gunzTarPerm extractEntry lib/server/plugins/admin/index.js
npm sill gunzTarPerm extractEntry lib/server/plugins/api/package.json
npm sill gunzTarPerm extractEntry lib/server/plugins/api/index.js
npm sill gunzTarPerm extractEntry lib/server/plugins/web/package.json
npm sill gunzTarPerm extractEntry lib/server/plugins/web/index.js
npm sill gunzTarPerm extractEntry lib/utils/couch.js
npm sill gunzTarPerm extractEntry lib/utils/hconsole.js
npm sill gunzTarPerm extractEntry lib/utils/index.js
npm sill gunzTarPerm extractEntry lib/utils/localtld.js
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry test/runner.js
npm sill gunzTarPerm extractEntry test/test-config-dbs.js
npm sill gunzTarPerm extractEntry test/fixtures/project1/package.json
npm sill gunzTarPerm extractEntry test/integration/handle_404.js
npm sill gunzTarPerm extractEntry test/integration/require.js
npm sill gunzTarPerm extractEntry test/lib/utils.js
npm sill gunzTarPerm extractEntry test/lib/helpers/pack_hoodie-test.js
npm sill gunzTarPerm extractEntry test/support/test-helper.js
npm sill gunzTarPerm extractEntry test/unit/app-test.js
npm sill gunzTarPerm extractEntry test/unit/couch-test.js
npm sill gunzTarPerm extractEntry test/unit/couch-utils-test.js
npm sill gunzTarPerm extractEntry test/unit/environment-test.js
npm sill gunzTarPerm extractEntry test/unit/hconsole-test.js
npm sill gunzTarPerm extractEntry test/unit/config-test.js
npm sill gunzTarPerm extractEntry test/unit/localtld-test.js
npm sill gunzTarPerm extractEntry test/unit/nodejitsu_server-test.js
npm sill gunzTarPerm extractEntry test/unit/plugins-test.js
npm sill gunzTarPerm extractEntry test/unit/server-test.js
npm sill gunzTarPerm extractEntry test/unit/utils-test.js
npm sill gunzTarPerm extractEntry test/unit/installer-test.js
npm sill gunzTarPerm extractEntry www/index.html
npm sill lockFile c081c1a4-oodie-node-modules-hoodie-server tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm sill lockFile c081c1a4-oodie-node-modules-hoodie-server tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm sill lockFile 2e3ca6e9-hoodie-server-0-9-14-package-tgz tar:///Users/hamrickb/.npm/hoodie-server/0.9.14/package.tgz
npm sill lockFile 2e3ca6e9-hoodie-server-0-9-14-package-tgz tar:///Users/hamrickb/.npm/hoodie-server/0.9.14/package.tgz
npm info preinstall hoodie-server@0.9.14
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm verb cache add [ 'hoodie@0.6.0', null ]
npm verb cache add name=undefined spec="hoodie@0.6.0" args=["hoodie@0.6.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'hoodie@0.6.0',
npm verb parsed url path: 'hoodie@0.6.0',
npm verb parsed url href: 'hoodie@0.6.0' }
npm verb cache add name="hoodie" spec="0.6.0" args=["hoodie","0.6.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.6.0',
npm verb parsed url path: '0.6.0',
npm verb parsed url href: '0.6.0' }
npm verb addNamed [ 'hoodie', '0.6.0' ]
npm verb addNamed [ '0.6.0', '0.6.0' ]
npm sill lockFile b376e76f-hoodie-0-6-0 hoodie@0.6.0
npm verb lock hoodie@0.6.0 /Users/hamrickb/.npm/b376e76f-hoodie-0-6-0.lock
npm verb cache add [ 'multicouch@0.8.1', null ]
npm verb cache add name=undefined spec="multicouch@0.8.1" args=["multicouch@0.8.1",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'multicouch@0.8.1',
npm verb parsed url path: 'multicouch@0.8.1',
npm verb parsed url href: 'multicouch@0.8.1' }
npm verb cache add name="multicouch" spec="0.8.1" args=["multicouch","0.8.1"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.8.1',
npm verb parsed url path: '0.8.1',
npm verb parsed url href: '0.8.1' }
npm verb addNamed [ 'multicouch', '0.8.1' ]
npm verb addNamed [ '0.8.1', '0.8.1' ]
npm sill lockFile b07a7e8c-multicouch-0-8-1 multicouch@0.8.1
npm verb lock multicouch@0.8.1 /Users/hamrickb/.npm/b07a7e8c-multicouch-0-8-1.lock
npm verb cache add [ 'hoodie-plugins-manager@0.2.4', null ]
npm verb cache add name=undefined spec="hoodie-plugins-manager@0.2.4" args=["hoodie-plugins-manager@0.2.4",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'hoodie-plugins-manager@0.2.4',
npm verb parsed url path: 'hoodie-plugins-manager@0.2.4',
npm verb parsed url href: 'hoodie-plugins-manager@0.2.4' }
npm verb cache add name="hoodie-plugins-manager" spec="0.2.4" args=["hoodie-plugins-manager","0.2.4"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.4',
npm verb parsed url path: '0.2.4',
npm verb parsed url href: '0.2.4' }
npm verb addNamed [ 'hoodie-plugins-manager', '0.2.4' ]
npm verb addNamed [ '0.2.4', '0.2.4' ]
npm sill lockFile a1e98393-hoodie-plugins-manager-0-2-4 hoodie-plugins-manager@0.2.4
npm verb lock hoodie-plugins-manager@0.2.4 /Users/hamrickb/.npm/a1e98393-hoodie-plugins-manager-0-2-4.lock
npm verb cache add [ 'hoodie-pocket@0.0.13', null ]
npm verb cache add name=undefined spec="hoodie-pocket@0.0.13" args=["hoodie-pocket@0.0.13",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'hoodie-pocket@0.0.13',
npm verb parsed url path: 'hoodie-pocket@0.0.13',
npm verb parsed url href: 'hoodie-pocket@0.0.13' }
npm verb cache add name="hoodie-pocket" spec="0.0.13" args=["hoodie-pocket","0.0.13"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.0.13',
npm verb parsed url path: '0.0.13',
npm verb parsed url href: '0.0.13' }
npm verb addNamed [ 'hoodie-pocket', '0.0.13' ]
npm verb addNamed [ '0.0.13', '0.0.13' ]
npm sill lockFile cd1586aa-hoodie-pocket-0-0-13 hoodie-pocket@0.0.13
npm verb lock hoodie-pocket@0.0.13 /Users/hamrickb/.npm/cd1586aa-hoodie-pocket-0-0-13.lock
npm verb cache add [ 'local-tld-lib@1.0.2', null ]
npm verb cache add name=undefined spec="local-tld-lib@1.0.2" args=["local-tld-lib@1.0.2",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'local-tld-lib@1.0.2',
npm verb parsed url path: 'local-tld-lib@1.0.2',
npm verb parsed url href: 'local-tld-lib@1.0.2' }
npm verb cache add name="local-tld-lib" spec="1.0.2" args=["local-tld-lib","1.0.2"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.0.2',
npm verb parsed url path: '1.0.2',
npm verb parsed url href: '1.0.2' }
npm verb addNamed [ 'local-tld-lib', '1.0.2' ]
npm verb addNamed [ '1.0.2', '1.0.2' ]
npm sill lockFile 0db9ab80-local-tld-lib-1-0-2 local-tld-lib@1.0.2
npm verb lock local-tld-lib@1.0.2 /Users/hamrickb/.npm/0db9ab80-local-tld-lib-1-0-2.lock
npm verb cache add [ 'underscore@1.4.4', null ]
npm verb cache add name=undefined spec="underscore@1.4.4" args=["underscore@1.4.4",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'underscore@1.4.4',
npm verb parsed url path: 'underscore@1.4.4',
npm verb parsed url href: 'underscore@1.4.4' }
npm verb cache add name="underscore" spec="1.4.4" args=["underscore","1.4.4"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.4.4',
npm verb parsed url path: '1.4.4',
npm verb parsed url href: '1.4.4' }
npm verb addNamed [ 'underscore', '1.4.4' ]
npm verb addNamed [ '1.4.4', '1.4.4' ]
npm sill lockFile c6b5e825-underscore-1-4-4 underscore@1.4.4
npm verb lock underscore@1.4.4 /Users/hamrickb/.npm/c6b5e825-underscore-1-4-4.lock
npm verb cache add [ 'async@0.2.7', null ]
npm verb cache add name=undefined spec="async@0.2.7" args=["async@0.2.7",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'async@0.2.7',
npm verb parsed url path: 'async@0.2.7',
npm verb parsed url href: 'async@0.2.7' }
npm verb cache add name="async" spec="0.2.7" args=["async","0.2.7"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.7',
npm verb parsed url path: '0.2.7',
npm verb parsed url href: '0.2.7' }
npm verb addNamed [ 'async', '0.2.7' ]
npm verb addNamed [ '0.2.7', '0.2.7' ]
npm sill lockFile 046e7838-async-0-2-7 async@0.2.7
npm verb lock async@0.2.7 /Users/hamrickb/.npm/046e7838-async-0-2-7.lock
npm verb cache add [ 'bytes@0.2.1', null ]
npm verb cache add name=undefined spec="bytes@0.2.1" args=["bytes@0.2.1",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'bytes@0.2.1',
npm verb parsed url path: 'bytes@0.2.1',
npm verb parsed url href: 'bytes@0.2.1' }
npm verb cache add name="bytes" spec="0.2.1" args=["bytes","0.2.1"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.1',
npm verb parsed url path: '0.2.1',
npm verb parsed url href: '0.2.1' }
npm verb addNamed [ 'bytes', '0.2.1' ]
npm verb addNamed [ '0.2.1', '0.2.1' ]
npm sill lockFile b3f62287-bytes-0-2-1 bytes@0.2.1
npm verb lock bytes@0.2.1 /Users/hamrickb/.npm/b3f62287-bytes-0-2-1.lock
npm verb cache add [ 'prompt@0.2.9', null ]
npm verb cache add name=undefined spec="prompt@0.2.9" args=["prompt@0.2.9",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'prompt@0.2.9',
npm verb parsed url path: 'prompt@0.2.9',
npm verb parsed url href: 'prompt@0.2.9' }
npm verb cache add name="prompt" spec="0.2.9" args=["prompt","0.2.9"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.9',
npm verb parsed url path: '0.2.9',
npm verb parsed url href: '0.2.9' }
npm verb addNamed [ 'prompt', '0.2.9' ]
npm verb addNamed [ '0.2.9', '0.2.9' ]
npm sill lockFile b16a8d3f-prompt-0-2-9 prompt@0.2.9
npm verb lock prompt@0.2.9 /Users/hamrickb/.npm/b16a8d3f-prompt-0-2-9.lock
npm verb cache add [ 'request@2.16.6', null ]
npm verb cache add name=undefined spec="request@2.16.6" args=["request@2.16.6",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'request@2.16.6',
npm verb parsed url path: 'request@2.16.6',
npm verb parsed url href: 'request@2.16.6' }
npm verb cache add name="request" spec="2.16.6" args=["request","2.16.6"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '2.16.6',
npm verb parsed url path: '2.16.6',
npm verb parsed url href: '2.16.6' }
npm verb addNamed [ 'request', '2.16.6' ]
npm verb addNamed [ '2.16.6', '2.16.6' ]
npm sill lockFile 9ba6a9aa-request-2-16-6 request@2.16.6
npm verb lock request@2.16.6 /Users/hamrickb/.npm/9ba6a9aa-request-2-16-6.lock
npm verb cache add [ 'follow@0.9.0', null ]
npm verb cache add name=undefined spec="follow@0.9.0" args=["follow@0.9.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'follow@0.9.0',
npm verb parsed url path: 'follow@0.9.0',
npm verb parsed url href: 'follow@0.9.0' }
npm verb cache add name="follow" spec="0.9.0" args=["follow","0.9.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.9.0',
npm verb parsed url path: '0.9.0',
npm verb parsed url href: '0.9.0' }
npm verb addNamed [ 'follow', '0.9.0' ]
npm verb addNamed [ '0.9.0', '0.9.0' ]
npm sill lockFile 8ff045dc-follow-0-9-0 follow@0.9.0
npm verb lock follow@0.9.0 /Users/hamrickb/.npm/8ff045dc-follow-0-9-0.lock
npm verb cache add [ 'couchr@0.0.13', null ]
npm verb cache add name=undefined spec="couchr@0.0.13" args=["couchr@0.0.13",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'couchr@0.0.13',
npm verb parsed url path: 'couchr@0.0.13',
npm verb parsed url href: 'couchr@0.0.13' }
npm verb cache add name="couchr" spec="0.0.13" args=["couchr","0.0.13"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.0.13',
npm verb parsed url path: '0.0.13',
npm verb parsed url href: '0.0.13' }
npm verb addNamed [ 'couchr', '0.0.13' ]
npm verb addNamed [ '0.0.13', '0.0.13' ]
npm sill lockFile 975c9a34-couchr-0-0-13 couchr@0.0.13
npm verb lock couchr@0.0.13 /Users/hamrickb/.npm/975c9a34-couchr-0-0-13.lock
npm verb cache add [ 'cli-color@0.2.2', null ]
npm verb cache add name=undefined spec="cli-color@0.2.2" args=["cli-color@0.2.2",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'cli-color@0.2.2',
npm verb parsed url path: 'cli-color@0.2.2',
npm verb parsed url href: 'cli-color@0.2.2' }
npm verb cache add name="cli-color" spec="0.2.2" args=["cli-color","0.2.2"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.2',
npm verb parsed url path: '0.2.2',
npm verb parsed url href: '0.2.2' }
npm verb addNamed [ 'cli-color', '0.2.2' ]
npm verb addNamed [ '0.2.2', '0.2.2' ]
npm sill lockFile 39acd334-cli-color-0-2-2 cli-color@0.2.2
npm verb lock cli-color@0.2.2 /Users/hamrickb/.npm/39acd334-cli-color-0-2-2.lock
npm verb cache add [ 'lock@0.0.3', null ]
npm verb cache add name=undefined spec="lock@0.0.3" args=["lock@0.0.3",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'lock@0.0.3',
npm verb parsed url path: 'lock@0.0.3',
npm verb parsed url href: 'lock@0.0.3' }
npm verb cache add name="lock" spec="0.0.3" args=["lock","0.0.3"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.0.3',
npm verb parsed url path: '0.0.3',
npm verb parsed url href: '0.0.3' }
npm verb addNamed [ 'lock', '0.0.3' ]
npm verb addNamed [ '0.0.3', '0.0.3' ]
npm sill lockFile 26dcfb80-lock-0-0-3 lock@0.0.3
npm verb lock lock@0.0.3 /Users/hamrickb/.npm/26dcfb80-lock-0-0-3.lock
npm verb cache add [ 'semver@1.1.4', null ]
npm verb cache add name=undefined spec="semver@1.1.4" args=["semver@1.1.4",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'semver@1.1.4',
npm verb parsed url path: 'semver@1.1.4',
npm verb parsed url href: 'semver@1.1.4' }
npm verb cache add name="semver" spec="1.1.4" args=["semver","1.1.4"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.1.4',
npm verb parsed url path: '1.1.4',
npm verb parsed url href: '1.1.4' }
npm verb addNamed [ 'semver', '1.1.4' ]
npm verb addNamed [ '1.1.4', '1.1.4' ]
npm sill lockFile da52979e-semver-1-1-4 semver@1.1.4
npm verb lock semver@1.1.4 /Users/hamrickb/.npm/da52979e-semver-1-1-4.lock
npm verb cache add [ 'optimist@0.5.0', null ]
npm verb cache add name=undefined spec="optimist@0.5.0" args=["optimist@0.5.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'optimist@0.5.0',
npm verb parsed url path: 'optimist@0.5.0',
npm verb parsed url href: 'optimist@0.5.0' }
npm verb cache add name="optimist" spec="0.5.0" args=["optimist","0.5.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.5.0',
npm verb parsed url path: '0.5.0',
npm verb parsed url href: '0.5.0' }
npm verb addNamed [ 'optimist', '0.5.0' ]
npm verb addNamed [ '0.5.0', '0.5.0' ]
npm sill lockFile b1729b75-optimist-0-5-0 optimist@0.5.0
npm verb lock optimist@0.5.0 /Users/hamrickb/.npm/b1729b75-optimist-0-5-0.lock
npm verb cache add [ 'ports@1.1.0', null ]
npm verb cache add name=undefined spec="ports@1.1.0" args=["ports@1.1.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'ports@1.1.0',
npm verb parsed url path: 'ports@1.1.0',
npm verb parsed url href: 'ports@1.1.0' }
npm verb cache add name="ports" spec="1.1.0" args=["ports","1.1.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.1.0',
npm verb parsed url path: '1.1.0',
npm verb parsed url href: '1.1.0' }
npm verb addNamed [ 'ports', '1.1.0' ]
npm verb addNamed [ '1.1.0', '1.1.0' ]
npm sill lockFile baf4bb0b-ports-1-1-0 ports@1.1.0
npm verb lock ports@1.1.0 /Users/hamrickb/.npm/baf4bb0b-ports-1-1-0.lock
npm verb cache add [ 'mkdirp@0.3.5', null ]
npm verb cache add name=undefined spec="mkdirp@0.3.5" args=["mkdirp@0.3.5",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'mkdirp@0.3.5',
npm verb parsed url path: 'mkdirp@0.3.5',
npm verb parsed url href: 'mkdirp@0.3.5' }
npm verb cache add name="mkdirp" spec="0.3.5" args=["mkdirp","0.3.5"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.3.5',
npm verb parsed url path: '0.3.5',
npm verb parsed url href: '0.3.5' }
npm verb addNamed [ 'mkdirp', '0.3.5' ]
npm verb addNamed [ '0.3.5', '0.3.5' ]
npm sill lockFile 67d2df2a-mkdirp-0-3-5 mkdirp@0.3.5
npm verb lock mkdirp@0.3.5 /Users/hamrickb/.npm/67d2df2a-mkdirp-0-3-5.lock
npm verb cache add [ 'dispatch@0.2.0', null ]
npm verb cache add name=undefined spec="dispatch@0.2.0" args=["dispatch@0.2.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'dispatch@0.2.0',
npm verb parsed url path: 'dispatch@0.2.0',
npm verb parsed url href: 'dispatch@0.2.0' }
npm verb cache add name="dispatch" spec="0.2.0" args=["dispatch","0.2.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.0',
npm verb parsed url path: '0.2.0',
npm verb parsed url href: '0.2.0' }
npm verb addNamed [ 'dispatch', '0.2.0' ]
npm verb addNamed [ '0.2.0', '0.2.0' ]
npm sill lockFile 43c29447-dispatch-0-2-0 dispatch@0.2.0
npm verb lock dispatch@0.2.0 /Users/hamrickb/.npm/43c29447-dispatch-0-2-0.lock
npm verb cache add [ 'hapi@2.3.0', null ]
npm verb cache add name=undefined spec="hapi@2.3.0" args=["hapi@2.3.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'hapi@2.3.0',
npm verb parsed url path: 'hapi@2.3.0',
npm verb parsed url href: 'hapi@2.3.0' }
npm verb cache add name="hapi" spec="2.3.0" args=["hapi","2.3.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '2.3.0',
npm verb parsed url path: '2.3.0',
npm verb parsed url href: '2.3.0' }
npm verb addNamed [ 'hapi', '2.3.0' ]
npm verb addNamed [ '2.3.0', '2.3.0' ]
npm sill lockFile 20fdfaac-hapi-2-3-0 hapi@2.3.0
npm verb lock hapi@2.3.0 /Users/hamrickb/.npm/20fdfaac-hapi-2-3-0.lock
npm verb cache add [ 'http-proxy@1.0.2', null ]
npm verb cache add name=undefined spec="http-proxy@1.0.2" args=["http-proxy@1.0.2",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'http-proxy@1.0.2',
npm verb parsed url path: 'http-proxy@1.0.2',
npm verb parsed url href: 'http-proxy@1.0.2' }
npm verb cache add name="http-proxy" spec="1.0.2" args=["http-proxy","1.0.2"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.0.2',
npm verb parsed url path: '1.0.2',
npm verb parsed url href: '1.0.2' }
npm verb addNamed [ 'http-proxy', '1.0.2' ]
npm verb addNamed [ '1.0.2', '1.0.2' ]
npm sill lockFile bb94a828-http-proxy-1-0-2 http-proxy@1.0.2
npm verb lock http-proxy@1.0.2 /Users/hamrickb/.npm/bb94a828-http-proxy-1-0-2.lock
npm verb cache add [ 'combine-streams@0.0.4', null ]
npm verb cache add name=undefined spec="combine-streams@0.0.4" args=["combine-streams@0.0.4",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'combine-streams@0.0.4',
npm verb parsed url path: 'combine-streams@0.0.4',
npm verb parsed url href: 'combine-streams@0.0.4' }
npm verb cache add name="combine-streams" spec="0.0.4" args=["combine-streams","0.0.4"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.0.4',
npm verb parsed url path: '0.0.4',
npm verb parsed url href: '0.0.4' }
npm verb addNamed [ 'combine-streams', '0.0.4' ]
npm verb addNamed [ '0.0.4', '0.0.4' ]
npm sill lockFile 2546151a-combine-streams-0-0-4 combine-streams@0.0.4
npm verb lock combine-streams@0.0.4 /Users/hamrickb/.npm/2546151a-combine-streams-0-0-4.lock
npm verb registry.get hoodie/0.6.0 not expired, no request
npm verb registry.get multicouch/0.8.1 not expired, no request
npm verb registry.get underscore/1.4.4 not expired, no request
npm verb registry.get hoodie-pocket/0.0.13 not expired, no request
npm verb registry.get hoodie-plugins-manager/0.2.4 not expired, no request
npm verb registry.get local-tld-lib/1.0.2 not expired, no request
npm verb registry.get async/0.2.7 not expired, no request
npm verb registry.get bytes/0.2.1 not expired, no request
npm verb registry.get couchr/0.0.13 not expired, no request
npm verb registry.get prompt/0.2.9 not expired, no request
npm verb registry.get follow/0.9.0 not expired, no request
npm verb registry.get lock/0.0.3 not expired, no request
npm verb registry.get semver/1.1.4 not expired, no request
npm verb registry.get optimist/0.5.0 not expired, no request
npm verb registry.get ports/1.1.0 not expired, no request
npm verb registry.get request/2.16.6 not expired, no request
npm verb registry.get dispatch/0.2.0 not expired, no request
npm verb registry.get hapi/2.3.0 not expired, no request
npm verb registry.get cli-color/0.2.2 not expired, no request
npm verb registry.get http-proxy/1.0.2 not expired, no request
npm verb registry.get combine-streams/0.0.4 not expired, no request
npm verb registry.get mkdirp/0.3.5 not expired, no request
npm sill lockFile cd1586aa-hoodie-pocket-0-0-13 hoodie-pocket@0.0.13
npm sill lockFile cd1586aa-hoodie-pocket-0-0-13 hoodie-pocket@0.0.13
npm sill lockFile c6b5e825-underscore-1-4-4 underscore@1.4.4
npm sill lockFile c6b5e825-underscore-1-4-4 underscore@1.4.4
npm sill lockFile 0db9ab80-local-tld-lib-1-0-2 local-tld-lib@1.0.2
npm sill lockFile 0db9ab80-local-tld-lib-1-0-2 local-tld-lib@1.0.2
npm sill lockFile 046e7838-async-0-2-7 async@0.2.7
npm sill lockFile 046e7838-async-0-2-7 async@0.2.7
npm sill lockFile b16a8d3f-prompt-0-2-9 prompt@0.2.9
npm sill lockFile b16a8d3f-prompt-0-2-9 prompt@0.2.9
npm sill lockFile b376e76f-hoodie-0-6-0 hoodie@0.6.0
npm sill lockFile b376e76f-hoodie-0-6-0 hoodie@0.6.0
npm sill lockFile b3f62287-bytes-0-2-1 bytes@0.2.1
npm sill lockFile b3f62287-bytes-0-2-1 bytes@0.2.1
npm sill lockFile a1e98393-hoodie-plugins-manager-0-2-4 hoodie-plugins-manager@0.2.4
npm sill lockFile a1e98393-hoodie-plugins-manager-0-2-4 hoodie-plugins-manager@0.2.4
npm sill lockFile b07a7e8c-multicouch-0-8-1 multicouch@0.8.1
npm sill lockFile b07a7e8c-multicouch-0-8-1 multicouch@0.8.1
npm sill lockFile da52979e-semver-1-1-4 semver@1.1.4
npm sill lockFile da52979e-semver-1-1-4 semver@1.1.4
npm sill lockFile baf4bb0b-ports-1-1-0 ports@1.1.0
npm sill lockFile baf4bb0b-ports-1-1-0 ports@1.1.0
npm sill lockFile 9ba6a9aa-request-2-16-6 request@2.16.6
npm sill lockFile 9ba6a9aa-request-2-16-6 request@2.16.6
npm sill lockFile 8ff045dc-follow-0-9-0 follow@0.9.0
npm sill lockFile 8ff045dc-follow-0-9-0 follow@0.9.0
npm sill lockFile b1729b75-optimist-0-5-0 optimist@0.5.0
npm sill lockFile b1729b75-optimist-0-5-0 optimist@0.5.0
npm sill lockFile 26dcfb80-lock-0-0-3 lock@0.0.3
npm sill lockFile 26dcfb80-lock-0-0-3 lock@0.0.3
npm sill lockFile 975c9a34-couchr-0-0-13 couchr@0.0.13
npm sill lockFile 975c9a34-couchr-0-0-13 couchr@0.0.13
npm sill lockFile 43c29447-dispatch-0-2-0 dispatch@0.2.0
npm sill lockFile 43c29447-dispatch-0-2-0 dispatch@0.2.0
npm sill lockFile 67d2df2a-mkdirp-0-3-5 mkdirp@0.3.5
npm sill lockFile 67d2df2a-mkdirp-0-3-5 mkdirp@0.3.5
npm sill lockFile 2546151a-combine-streams-0-0-4 combine-streams@0.0.4
npm sill lockFile 2546151a-combine-streams-0-0-4 combine-streams@0.0.4
npm sill lockFile 39acd334-cli-color-0-2-2 cli-color@0.2.2
npm sill lockFile 39acd334-cli-color-0-2-2 cli-color@0.2.2
npm sill lockFile bb94a828-http-proxy-1-0-2 http-proxy@1.0.2
npm sill lockFile bb94a828-http-proxy-1-0-2 http-proxy@1.0.2
npm sill lockFile 20fdfaac-hapi-2-3-0 hapi@2.3.0
npm sill lockFile 20fdfaac-hapi-2-3-0 hapi@2.3.0
npm sill resolved [ { author: { name: 'hood.ie' },
npm sill resolved name: 'hoodie-pocket',
npm sill resolved version: '0.0.13',
npm sill resolved repository: { type: 'git', url: 'https://github.com/hoodiehq/pocket.git' },
npm sill resolved scripts: { start: 'node node_modules/hoodie-app/lib/hoodie-app.js' },
npm sill resolved devDependencies:
npm sill resolved { grunt: '~0.4.0',
npm sill resolved 'grunt-contrib-copy': '~0.4.0',
npm sill resolved 'grunt-contrib-concat': '~0.1.2',
npm sill resolved 'grunt-contrib-coffee': '~0.4.0',
npm sill resolved 'grunt-contrib-uglify': '~0.1.1',
npm sill resolved 'grunt-contrib-compass': '~0.1.2',
npm sill resolved 'grunt-contrib-jshint': '~0.1.1',
npm sill resolved 'grunt-contrib-cssmin': '~0.4.1',
npm sill resolved 'grunt-contrib-connect': '0.1.2',
npm sill resolved 'grunt-contrib-clean': '0.4.0',
npm sill resolved 'grunt-contrib-htmlmin': '0.1.1',
npm sill resolved 'grunt-contrib-handlebars': '0.5.9',
npm sill resolved 'grunt-contrib-imagemin': '0.1.2',
npm sill resolved 'grunt-contrib-livereload': '0.1.1',
npm sill resolved 'grunt-bower-hooks': '~0.2.0',
npm sill resolved 'grunt-usemin': '~0.1.9',
npm sill resolved 'grunt-regarde': '~0.1.1',
npm sill resolved 'grunt-mocha': '~0.2.2',
npm sill resolved 'grunt-open': '~0.2.0',
npm sill resolved matchdep: '~0.1.1' },
npm sill resolved engines: { node: '>=0.8.0' },
npm sill resolved readme: 'pocket\n======\n\nThe hoodie admin panel\n\n\nrun locally\n-----------\n\n```js\n$ npm install\n$ npm start\n```\n\n**Note**: Pocket is using yeoman to serve its assets. Its hoodie tries\nto connect to `http://api.pocket.dev` if its served by yeoman.\nSo in order to test it with a real app, make sure to have the\n[pocket-app]() installed and running.\n\nIf you want pocket to use a different baseUrl, set it temporarely in\n[app/scripts/main.coffee:4](https://github.com/hoodiehq/pocket/blob/master/app/scripts/main.coffee#L4)\n\n\nbuilding and deployment\n-----------------------\n\nBuild pocket into the www directory and push back to master, future Hoodie instances will pull from there:\n`$ rm www & grunt & cp -r dist www`\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved description: 'pocket ======',
npm sill resolved bugs: { url: 'https://github.com/hoodiehq/pocket/issues' },
npm sill resolved homepage: 'https://github.com/hoodiehq/pocket',
npm sill resolved _id: 'hoodie-pocket@0.0.13',
npm sill resolved _from: 'hoodie-pocket@0.0.13' },
npm sill resolved { name: 'underscore',
npm sill resolved description: 'JavaScript\'s functional programming helper library.',
npm sill resolved homepage: 'http://underscorejs.org',
npm sill resolved keywords: [ 'util', 'functional', 'server', 'client', 'browser' ],
npm sill resolved author: { name: 'Jeremy Ashkenas', email: 'jeremy@documentcloud.org' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/documentcloud/underscore.git' },
npm sill resolved main: 'underscore.js',
npm sill resolved version: '1.4.4',
npm sill resolved devDependencies: { phantomjs: '0.2.2' },
npm sill resolved scripts: { test: 'phantomjs test/vendor/runner.js test/index.html?noglobals=true' },
npm sill resolved readme: ' __\n /\\ \\ __\n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____\n /\\ \\/\\ \\ /\' _ `\\ /\'_ \\ /\'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/\'__`\\ \\/\\ \\ /\',__\\\n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/\n \\ \\____/\n \\/___/\n\nUnderscore.js is a utility-belt library for JavaScript that provides\nsupport for the usual functional suspects (each, map, reduce, filter...)\nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://underscorejs.org\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/documentcloud/underscore/issues' },
npm sill resolved _id: 'underscore@1.4.4',
npm sill resolved _from: 'underscore@1.4.4' },
npm sill resolved { name: 'async',
npm sill resolved description: 'Higher-order functions and common patterns for asynchronous code',
npm sill resolved main: './lib/async',
npm sill resolved author: { name: 'Caolan McMahon' },
npm sill resolved version: '0.2.7',
npm sill resolved repository: { type: 'git', url: 'http://github.com/caolan/async.git' },
npm sill resolved bugs: { url: 'http://github.com/caolan/async/issues' },
npm sill resolved licenses: [ [Object] ],
npm sill resolved devDependencies: { nodeunit: '>0.0.0', 'uglify-js': '1.2.x', nodelint: '>0.0.0' },
npm sill resolved jam: { main: 'lib/async.js', include: [Object] },
npm sill resolved scripts: { test: 'nodeunit test/test-async.js' },
npm sill resolved readme: '# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser.\n\nAsync provides around 20 functions that include the usual \'functional\'\nsuspects (map, reduce, filter, each…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n```javascript\nasync.map([\'file1\',\'file2\',\'file3\'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n\nasync.filter([\'file1\',\'file2\',\'file3\'], path.exists, function(results){\n // results now equals an array of the existing files\n});\n\nasync.parallel([\n function(){ ... },\n function(){ ... }\n], callback);\n\nasync.series([\n function(){ ... },\n function(){ ... }\n]);\n```\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n## Common Pitfalls\n\n### Binding a context to an iterator\n\nThis section is really about bind, not about async. If you are wondering how to\nmake async execute your iterators in a given context, or are confused as to why\na method of another library isn\'t working as an iterator, study this example:\n\n```js\n// Here is a simple object with an (unnecessarily roundabout) squaring method\nvar AsyncSquaringLibrary = {\n squareExponent: 2,\n square: function(number, callback){ \n var result = Math.pow(number, this.squareExponent);\n setTimeout(function(){\n callback(null, result);\n }, 200);\n }\n};\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){\n // result is [NaN, NaN, NaN]\n // This fails because the `this.squareExponent` expression in the square\n // function is not evaluated in the context of AsyncSquaringLibrary, and is\n // therefore undefined.\n});\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){\n // result is [1, 4, 9]\n // With the help of bind we can attach a context to the iterator before\n // passing it to async. Now the square function will be executed in its \n // \'home\' AsyncSquaringLibrary context and the value of `this.squareExponent`\n // will be as expected.\n});\n```\n\n## Download\n\nThe source is available for download from\n[GitHub](http://github.com/caolan/async).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed\n\n## In the Browser\n\nSo far it\'s been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n```html\n<script type="text/javascript" src="async.js"></script>\n<script type="text/javascript">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n</script>\n```\n\n## Documentation\n\n### Collections\n\n* [each](#each)\n* [map](#map)\n* [filter](#filter)\n* [reject](#reject)\n* [reduce](#reduce)\n* [detect](#detect)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [whilst](#whilst)\n* [doWhilst](#doWhilst)\n* [until](#until)\n* [doUntil](#doUntil)\n* [forever](#forever)\n* [waterfall](#waterfall)\n* [compose](#compose)\n* [applyEach](#applyEach)\n* [queue](#queue)\n* [cargo](#cargo)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n* [times](#times)\n* [timesSeries](#timesSeries)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name="forEach" />\n<a name="each" />\n### each(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the each function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// assuming openFiles is an array of file names and saveFile is a function\n// to save the modified contents of that file:\n\nasync.each(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name="forEachSeries" />\n<a name="eachSeries" />\n### eachSeries(arr, iterator, callback)\n\nThe same as each only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name="forEachLimit" />\n<a name="eachLimit" />\n### eachLimit(arr, limit, iterator, callback)\n\nThe same as each only no more than "limit" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first "limit" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// Assume documents is an array of JSON objects and requestApi is a\n// function that interacts with a rate-limited REST api.\n\nasync.eachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name="map" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map([\'file1\',\'file2\',\'file3\'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name="mapSeries" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name="mapLimit" />\n### mapLimit(arr, limit, iterator, callback)\n\nThe same as map only no more than "limit" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first "limit" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map([\'file1\',\'file2\',\'file3\'], 1, fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name="filter" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n```js\nasync.filter([\'file1\',\'file2\',\'file3\'], path.exists, function(results){\n // results now equals an array of the existing files\n});\n```\n\n---------------------------------------\n\n<a name="filterSeries" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name="reject" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name="rejectSeries" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as reject, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name="reduce" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then it\'s probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback(err, reduction) which accepts an optional error as its first \n argument, and the state of the reduction as the second. If an error is \n passed to the callback, the reduction is stopped and the main callback is \n immediately called with the error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n```js\nasync.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n}, function(err, result){\n // result is now equal to the last value of memo, which is 6\n});\n```\n\n---------------------------------------\n\n<a name="reduceRight" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name="detect" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n```js\nasync.detect([\'file1\',\'file2\',\'file3\'], path.exists, function(result){\n // result now equals the first file in the list that exists\n});\n```\n\n---------------------------------------\n\n<a name="detectSeries" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name="sortBy" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, sortValue) which must be called once it\n has completed with an error (which can be null) and a value to use as the sort\n criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n```js\nasync.sortBy([\'file1\',\'file2\',\'file3\'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n}, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n});\n```\n\n---------------------------------------\n\n<a name="some" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n```js\nasync.some([\'file1\',\'file2\',\'file3\'], path.exists, function(result){\n // if result is true then at least one of the files exists\n});\n```\n\n---------------------------------------\n\n<a name="every" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n```js\nasync.every([\'file1\',\'file2\',\'file3\'], path.exists, function(result){\n // if result is true then every file exists\n});\n```\n\n---------------------------------------\n\n<a name="concat" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, results) which must be called once it \n has completed with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n```js\nasync.concat([\'dir1\',\'dir2\',\'dir3\'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n});\n```\n\n---------------------------------------\n\n<a name="concatSeries" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name="series" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.series([\n function(callback){\n // do some stuff ...\n callback(null, \'one\');\n },\n function(callback){\n // do some more stuff ...\n callback(null, \'two\');\n }\n],\n// optional callback\nfunction(err, results){\n // results is now equal to [\'one\', \'two\']\n});\n\n\n// an example using an object instead of an array\nasync.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equal to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name="parallel" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, \'one\');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, \'two\');\n }, 100);\n }\n],\n// optional callback\nfunction(err, results){\n // the results array will equal [\'one\',\'two\'] even though\n // the second function had a shorter timeout.\n});\n\n\n// an example using an object instead of an array\nasync.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equals to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name="parallel" />\n### parallelLimit(tasks, limit, [callback])\n\nThe same as parallel only the tasks are executed in parallel with a maximum of "limit" \ntasks executing at any time.\n\nNote that the tasks are not executed in batches, so there is no guarantee that \nthe first "limit" tasks will complete before any others are started.\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* limit - The maximum number of tasks to run at any time.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n---------------------------------------\n\n<a name="whilst" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback(err) which must be called once it has completed with an \n optional error argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n```js\nvar count = 0;\n\nasync.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n);\n```\n\n---------------------------------------\n\n<a name="doWhilst" />\n### doWhilst(fn, test, callback)\n\nThe post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n\n---------------------------------------\n\n<a name="until" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n---------------------------------------\n\n<a name="doUntil" />\n### doUntil(fn, test, callback)\n\nLike doWhilst except the test is inverted. Note the argument ordering differs from `until`.\n\n---------------------------------------\n\n<a name="forever" />\n### forever(fn, callback)\n\nCalls the asynchronous function \'fn\' repeatedly, in series, indefinitely.\nIf an error is passed to fn\'s callback then \'callback\' is called with the\nerror, otherwise it will never be called.\n\n---------------------------------------\n\n<a name="waterfall" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a \n callback(err, result1, result2, ...) it must call on completion. The first\n argument is an error (which can be null) and any further arguments will be \n passed as arguments in order to the next task.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task\'s callback.\n\n\n\n__Example__\n\n```js\nasync.waterfall([\n function(callback){\n callback(null, \'one\', \'two\');\n },\n function(arg1, arg2, callback){\n callback(null, \'three\');\n },\n function(arg1, callback){\n // arg1 now equals \'three\'\n callback(null, \'done\');\n }\n], function (err, result) {\n // result now equals \'done\' \n});\n```\n\n---------------------------------------\n<a name="compose" />\n### compose(fn1, fn2...)\n\nCreates a function which is a composition of the passed asynchronous\nfunctions. Each function consumes the return value of the function that\nfollows. Composing functions f(), g() and h() would produce the result of\nf(g(h())), only this version uses callbacks to obtain the return values.\n\nEach function is executed with the `this` binding of the composed function.\n\n__Arguments__\n\n* functions... - the asynchronous functions to compose\n\n\n__Example__\n\n```js\nfunction add1(n, callback) {\n setTimeout(function () {\n callback(null, n + 1);\n }, 10);\n}\n\nfunction mul3(n, callback) {\n setTimeout(function () {\n callback(null, n * 3);\n }, 10);\n}\n\nvar add1mul3 = async.compose(mul3, add1);\n\nadd1mul3(4, function (err, result) {\n // result now equals 15\n});\n```\n\n---------------------------------------\n<a name="applyEach" />\n### applyEach(fns, args..., callback)\n\nApplies the provided arguments to each function in the array, calling the\ncallback after all functions have completed. If you only provide the first\nargument then it will return a function which lets you pass in the\narguments as if it were a single function call.\n\n__Arguments__\n\n* fns - the asynchronous functions to all call with the same arguments\n* args... - any number of separate arguments to pass to the function\n* callback - the final argument should be the callback, called when all\n functions have completed processing\n\n\n__Example__\n\n```js\nasync.applyEach([enableSearch, updateSchema], \'bucket\', callback);\n\n// partial application example:\nasync.each(\n buckets,\n async.applyEach([enableSearch, updateSchema]),\n callback\n);\n```\n\n---------------------------------------\n\n<a name="applyEachSeries" />\n### applyEachSeries(arr, iterator, callback)\n\nThe same as applyEach only the functions are applied in series.\n\n---------------------------------------\n\n<a name="queue" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task\'s callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task, which must call its callback(err) argument when finished, with an \n optional error as an argument.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* unshift(task, [callback]) - add a new task to the front of the queue.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a queue object with concurrency 2\n\nvar q = async.queue(function (task, callback) {\n console.log(\'hello \' + task.name);\n callback();\n}, 2);\n\n\n// assign a callback\nq.drain = function() {\n console.log(\'all items have been processed\');\n}\n\n// add some items to the queue\n\nq.push({name: \'foo\'}, function (err) {\n console.log(\'finished processing foo\');\n});\nq.push({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\n\n// add some items to the queue (batch-wise)\n\nq.push([{name: \'baz\'},{name: \'bay\'},{name: \'bax\'}], function (err) {\n console.log(\'finished processing bar\');\n});\n\n// add some items to the front of the queue\n\nq.unshift({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\n```\n\n---------------------------------------\n\n<a name="cargo" />\n### cargo(worker, [payload])\n\nCreates a cargo object with the specified payload. Tasks added to the\ncargo will be processed altogether (up to the payload limit). If the\nworker is in progress, the task is queued until it is available. Once\nthe worker has completed some tasks, each callback of those tasks is called.\n\n__Arguments__\n\n* worker(tasks, callback) - An asynchronous function for processing an array of\n queued tasks, which must call its callback(err) argument when finished, with \n an optional error as an argument.\n* payload - An optional integer for determining how many tasks should be\n processed per round; if omitted, the default is unlimited.\n\n__Cargo objects__\n\nThe cargo object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* payload - an integer for determining how many tasks should be\n process per round. This property can be changed after a cargo is created to\n alter the payload on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a cargo object with payload 2\n\nvar cargo = async.cargo(function (tasks, callback) {\n for(var i=0; i<tasks.length; i++){\n console.log(\'hello \' + tasks[i].name);\n }\n callback();\n}, 2);\n\n\n// add some items\n\ncargo.push({name: \'foo\'}, function (err) {\n console.log(\'finished processing foo\');\n});\ncargo.push({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\ncargo.push({name: \'baz\'}, function (err) {\n console.log(\'finished processing baz\');\n});\n```\n\n---------------------------------------\n\n<a name="auto" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\nNote, all functions are called with a results object as a second argument, \nso it is unsafe to pass functions in the tasks object which cannot handle the\nextra argument. For example, this snippet of code:\n\n```js\nasync.auto({\n readData: async.apply(fs.readFile, \'data.txt\', \'utf-8\');\n}, callback);\n```\n\nwill have the effect of calling readFile with the results object as the last\nargument, which will fail:\n\n```js\nfs.readFile(\'data.txt\', \'utf-8\', cb, {});\n```\n\nInstead, wrap the call to readFile in a function which does not forward the \nresults object:\n\n```js\nasync.auto({\n readData: function(cb, results){\n fs.readFile(\'data.txt\', \'utf-8\', cb);\n }\n}, callback);\n```\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The \n function receives two arguments: (1) a callback(err, result) which must be \n called when finished, passing an error (which can be null) and the result of \n the function\'s execution, and (2) a results object, containing the results of\n the previously executed functions.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. Results will always be passed\n\tbut if an error occurred, no other tasks will be performed, and the results\n\tobject will only contain partial results.\n \n\n__Example__\n\n```js\nasync.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: [\'get_data\', \'make_folder\', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: [\'write_file\', function(callback, results){\n // once the file is written let\'s email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n});\n```\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n```js\nasync.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n],\nfunction(err, results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n function(callback){\n // once the file is written let\'s email a link to it...\n }\n ]);\n});\n```\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name="iterator" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. It\'s also possible to\n\'peek\' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run.\n\n__Example__\n\n```js\nvar iterator = async.iterator([\n function(){ sys.p(\'one\'); },\n function(){ sys.p(\'two\'); },\n function(){ sys.p(\'three\'); }\n]);\n\nnode> var iterator2 = iterator();\n\'one\'\nnode> var iterator3 = iterator2();\n\'two\'\nnode> iterator3();\n\'three\'\nnode> var nextfn = iterator2.next();\nnode> nextfn();\n\'three\'\n```\n\n---------------------------------------\n\n<a name="apply" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n```js\n// using apply\n\nasync.parallel([\n async.apply(fs.writeFile, \'testfile1\', \'test1\'),\n async.apply(fs.writeFile, \'testfile2\', \'test2\'),\n]);\n\n\n// the same process without using apply\n\nasync.parallel([\n function(callback){\n fs.writeFile(\'testfile1\', \'test1\', callback);\n },\n function(callback){\n fs.writeFile(\'testfile2\', \'test2\', callback);\n }\n]);\n```\n\nIt\'s possible to pass any number of additional arguments when calling the\ncontinuation:\n\n```js\nnode> var fn = async.apply(sys.puts, \'one\');\nnode> fn(\'two\', \'three\');\none\ntwo\nthree\n```\n\n---------------------------------------\n\n<a name="nextTick" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setImmediate(callback)\nif available, otherwise setTimeout(callback, 0), which means other higher priority\nevents may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n```js\nvar call_order = [];\nasync.nextTick(function(){\n call_order.push(\'two\');\n // call_order now equals [\'one\',\'two\']\n});\ncall_order.push(\'one\')\n```\n\n<a name="times" />\n### times(n, callback)\n\nCalls the callback n times and accumulates results in the same manner\nyou would use with async.map.\n\n__Arguments__\n\n* n - The number of times to run the function.\n* callback - The function to call n times.\n\n__Example__\n\n```js\n// Pretend this is some complicated async factory\nvar createUser = function(id, callback) {\n callback(null, {\n id: \'user\' + id\n })\n}\n// generate 5 users\nasync.times(5, function(n, next){\n createUser(n, function(err, user) {\n next(err, user)\n })\n}, function(err, users) {\n // we should now have 5 users\n});\n```\n\n<a name="timesSeries" />\n### timesSeries(n, callback)\n\nThe same as times only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n## Utils\n\n<a name="memoize" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\nThe cache of results is exposed as the `memo` property of the function returned\nby `memoize`.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n```js\nvar slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n};\nvar fn = async.memoize(slow_fn);\n\n// fn can now be used as if it were slow_fn\nfn(\'some name\', function () {\n // callback\n});\n```\n\n<a name="unmemoize" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name="log" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, \'hello \' + name);\n }, 1000);\n};\n```\n```js\nnode> async.log(hello, \'world\');\n\'hello world\'\n```\n\n---------------------------------------\n\n<a name="dir" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n};\n```\n```js\nnode> async.dir(hello, \'world\');\n{hello: \'world\'}\n```\n\n---------------------------------------\n\n<a name="noConflict" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/caolan/async',
npm sill resolved _id: 'async@0.2.7',
npm sill resolved _from: 'async@0.2.7' },
npm sill resolved { name: 'prompt',
npm sill resolved description: 'A beautiful command-line prompt for node.js',
npm sill resolved version: '0.2.9',
npm sill resolved author: { name: 'Nodejitsu Inc.', email: 'info@nodejitsu.com' },
npm sill resolved maintainers: [ [Object], [Object] ],
npm sill resolved repository: { type: 'git', url: 'http://github.com/flatiron/prompt.git' },
npm sill resolved dependencies:
npm sill resolved { pkginfo: '0.x.x',
npm sill resolved read: '1.0.x',
npm sill resolved revalidator: '0.1.x',
npm sill resolved utile: '0.1.x',
npm sill resolved winston: '0.6.x' },
npm sill resolved devDependencies: { vows: '0.7.0' },
npm sill resolved main: './lib/prompt',
npm sill resolved scripts:
npm sill resolved { test: 'vows test/prompt-test.js --spec',
npm sill resolved 'test-all': 'vows --spec' },
npm sill resolved engines: { node: '>= 0.6.6' },
npm sill resolved readme: '# prompt [![Build Status](https://secure.travis-ci.org/flatiron/prompt.png)](http://travis-ci.org/flatiron/prompt)\n\nA beautiful command-line prompt for node.js\n\n## Features\n\n* prompts the user for input\n* supports validation and defaults\n* hides passwords\n\n## Usage\nUsing prompt is relatively straight forward. There are two core methods you should be aware of: `prompt.get()` and `prompt.addProperties()`. There methods take strings representing property names in addition to objects for complex property validation (and more). There are a number of [examples][0] that you should examine for detailed usage.\n\n### Getting Basic Prompt Information\nGetting started with `prompt` is easy. Lets take a look at `examples/simple-prompt.js`:\n\n``` js\n var prompt = require(\'prompt\');\n\n //\n // Start the prompt\n //\n prompt.start();\n\n //\n // Get two properties from the user: username and email\n //\n prompt.get([\'username\', \'email\'], function (err, result) {\n //\n // Log the results.\n //\n console.log(\'Command-line input received:\');\n console.log(\' username: \' + result.username);\n console.log(\' email: \' + result.email);\n });\n```\n\nThis will result in the following command-line output:\n\n```\n $ node examples/simple-prompt.js \n prompt: username: some-user\n prompt: email: some-user@some-place.org\n Command-line input received:\n username: some-user\n email: some-user@some-place.org\n```\n\n### Prompting with Validation, Default Values, and More (Complex Properties)\nIn addition to prompting the user with simple string prompts, there is a robust API for getting and validating complex information from a command-line prompt. Here\'s a quick sample:\n\n``` js\n var schema = {\n properties: {\n name: {\n pattern: /^[a-zA-Z\\s\\-]+$/,\n message: \'Name must be only letters, spaces, or dashes\',\n required: true\n },\n password: {\n hidden: true\n }\n }\n };\n\n //\n // Start the prompt\n //\n prompt.start();\n\n //\n // Get two properties from the user: email, password\n //\n prompt.get(schema, function (err, result) {\n //\n // Log the results.\n //\n console.log(\'Command-line input received:\');\n console.log(\' name: \' + result.name);\n console.log(\' password: \' + result.password);\n });\n```\n\nPretty easy right? The output from the above script is: \n\n```\n $ node examples/property-prompt.js\n prompt: name: nodejitsu000\n error: Invalid input for name\n error: Name must be only letters, spaces, or dashes\n prompt: name: Nodejitsu Inc\n prompt: password: \n Command-line input received:\n name: Nodejitsu Inc\n password: some-password \n```\n\n## Valid Property Settings\n`prompt` understands JSON-schema with a few extra parameters and uses [revalidator](https://github.com/flatiron/revalidator) for validation.\n\nHere\'s an overview of the properties that may be used for validation and prompting controls:\n\n``` js\n {\n description: \'Enter your password\', // Prompt displayed to the user. If not supplied name will be used.\n type: \'string\', // Specify the type of input to expect.\n pattern: /^\\w+$/, // Regular expression that input must be valid against.\n message: \'Password must be letters\', // Warning message to display if validation fails.\n hidden: true, // If true, characters entered will not be output to console.\n default: \'lamepassword\', // Default value to use if no value is entered.\n required: true // If true, value entered must be non-empty.\n before: function(value) { return \'v\' + value; } // Runs before node-prompt callbacks. It modifies user\'s input\n }\n```\n\nAlternatives to `pattern` include `format` and `conform`, as documented in [revalidator](https://github.com/flatiron/revalidator).\n\nUsing `type: \'array\'` has some special cases.\n\n- `description` will not work in the schema if `type: \'array\'` is defined.\n- `maxItems` takes precedence over `minItems`.\n- Arrays that do not have `maxItems` defined will require users to `SIGINT` (`^C`) before the array is ended.\n- If `SIGINT` (`^C`) is triggered before `minItems` is met, a validation error will appear. This will require users to `SIGEOF` (`^D`) to end the input.\n\nFor more information on things such as `maxItems` and `minItems`, refer to the [revalidator](https://github.com/flatiron/revalidator) repository.\n\n### Alternate Validation API:\n\nPrompt, in addition to iterating over JSON-Schema properties, will also happily iterate over an array of validation objects given an extra \'name\' property:\n\n```js\n var prompt = require(\'../lib/prompt\');\n\n //\n // Start the prompt\n //\n prompt.start();\n\n //\n // Get two properties from the user: username and password\n //\n prompt.get([{\n name: \'username\',\n required: true\n }, {\n name: \'password\',\n hidden: true,\n conform: function (value) {\n return true;\n }\n }], function (err, result) {\n //\n // Log the results.\n //\n console.log(\'Command-line input received:\');\n console.log(\' username: \' + result.username);\n console.log(\' password: \' + result.password);\n });\n```\n\n### Backward Compatibility\n\nNote that, while this structure is similar to that used by prompt 0.1.x, that the object properties use the same names as in JSON-Schema. prompt 0.2.x is backward compatible with prompt 0.1.x except for asynchronous validation.\n\n### Skipping Prompts\n\nSometimes power users may wish to skip promts and specify all data as command line options. \nif a value is set as a property of `prompt.override` prompt will use that instead of \nprompting the user.\n\n``` js\n //prompt-override.js\n\n var prompt = require(\'prompt\'),\n optimist = require(\'optimist\')\n\n //\n // set the overrides\n //\n prompt.override = optimist.argv\n\n //\n // Start the prompt\n //\n prompt.start();\n\n //\n // Get two properties from the user: username and email\n //\n prompt.get([\'username\', \'email\'], function (err, result) {\n //\n // Log the results.\n //\n console.log(\'Command-line input received:\');\n console.log(\' username: \' + result.username);\n console.log(\' email: \' + result.email);\n })\n\n //: node prompt-override.js --username USER --email EMAIL\n```\n\n\n### Adding Properties to an Object \nA common use-case for prompting users for data from the command-line is to extend or create a configuration object that is passed onto the entry-point method for your CLI tool. `prompt` exposes a convenience method for doing just this: \n\n``` js\n var obj = {\n password: \'lamepassword\',\n mindset: \'NY\'\n }\n\n //\n // Log the initial object.\n //\n console.log(\'Initial object to be extended:\');\n console.dir(obj);\n\n //\n // Add two properties to the empty object: username and email\n //\n prompt.addProperties(obj, [\'username\', \'email\'], function (err) {\n //\n // Log the results.\n //\n console.log(\'Updated object received:\');\n console.dir(obj);\n });\n```\n\n## Customizing your prompt\nAside from changing `property.message`, you can also change `prompt.message`\nand `prompt.delimiter` to change the appearance of your prompt.\n\nThe basic structure of a prompt is this:\n\n``` js\nprompt.message + prompt.delimiter + property.message + prompt.delimiter;\n```\n\nThe default `prompt.message` is "prompt," the default `prompt.delimiter` is\n": ", and the default `property.message` is `property.name`.\nChanging these allows you to customize the appearance of your prompts! In\naddition, prompt supports ANSI color codes via the\n[colors module](https://github.com/Marak/colors.js) for custom colors. For a\nvery colorful example:\n\n``` js\n var prompt = require("prompt");\n\n //\n // Setting these properties customizes the prompt.\n //\n prompt.message = "Question!".rainbow;\n prompt.delimiter = "><".green;\n\n prompt.start();\n\n prompt.get({\n properties: {\n name: {\n description: "What is your name?".magenta\n }\n }\n }, function (err, result) {\n console.log("You said your name is: ".cyan + result.name.cyan);\n });\n```\n\nIf you don\'t want colors, you can set\n\n```js\nvar prompt = require(\'prompt\');\n\nprompt.colors = false;\n```\n\n## Installation\n\n``` bash\n $ [sudo] npm install prompt\n```\n\n## Running tests\n\n``` bash \n $ npm test\n```\n\n#### License: MIT\n#### Author: [Charlie Robbins](http://github.com/indexzero)\n#### Contributors: [Josh Holbrook](http://github.com/jesusabdullah), [Pavan Kumar Sunkara](http://github.com/pksunkara)\n\n[0]: https://github.com/flatiron/prompt/tree/master/examples\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/flatiron/prompt/issues' },
npm sill resolved homepage: 'https://github.com/flatiron/prompt',
npm sill resolved _id: 'prompt@0.2.9',
npm sill resolved _from: 'prompt@0.2.9' },
npm sill resolved { name: 'hoodie',
npm sill resolved title: 'Hoodie.js',
npm sill resolved description: 'Hoodie library for the browser',
npm sill resolved version: '0.6.0',
npm sill resolved main: './dist/hoodie.js',
npm sill resolved homepage: 'http://hood.ie',
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'https://github.com/hoodiehq/hoodie.js.git' },
npm sill resolved bugs: { url: 'https://github.com/hoodiehq/hoodie.js/issues' },
npm sill resolved licenses: [ [Object] ],
npm sill resolved keywords: [ 'nobackend', 'offline-first', 'frontend-only' ],
npm sill resolved devDependencies:
npm sill resolved { grunt: '~0.4.1',
npm sill resolved jshint: '~2.1.3',
npm sill resolved 'grunt-contrib-uglify': '~0.2.2',
npm sill resolved 'grunt-contrib-jshint': '~0.6.0',
npm sill resolved 'grunt-contrib-watch': '~0.4.4',
npm sill resolved 'grunt-contrib-concat': '~0.3.0',
npm sill resolved 'grunt-groc': '~0.3.0',
npm sill resolved 'grunt-shell': '~0.3.0',
npm sill resolved karma: '~0.10.4',
npm sill resolved 'karma-script-launcher': '~0.1.0',
npm sill resolved 'karma-chrome-launcher': '~0.1.0',
npm sill resolved 'karma-firefox-launcher': '~0.1.0',
npm sill resolved 'karma-html2js-preprocessor': '~0.1.0',
npm sill resolved 'karma-phantomjs-launcher': '~0.1.0',
npm sill resolved 'karma-mocha': '~0.1.0',
npm sill resolved 'karma-coverage': '~0.1.0',
npm sill resolved 'karma-sauce-launcher': '~0.1.1',
npm sill resolved 'grunt-karma': '~0.6.2',
npm sill resolved 'grunt-browserify': '~1.2.11',
npm sill resolved 'grunt-umd': '~1.3.0',
npm sill resolved browserify: '~2.35.1',
npm sill resolved 'karma-browserify': 'git://github.com/gr2m/karma-browserify.git',
npm sill resolved 'graceful-fs': '~2.0.1',
npm sill resolved 'hoodie.js-assets': 'git://github.com/gr2m/hoodie.js-assets.git',
npm sill resolved 'expect.js': '~0.2.0',
npm sill resolved sinon: '~1.7.1',
npm sill resolved 'load-grunt-tasks': '~0.2.1',
npm sill resolved 'grunt-bump': '0.0.13',
npm sill resolved extend: '~1.2.1' },
npm sill resolved scripts:
npm sill resolved { test: 'grunt build --verbose',
npm sill resolved build: 'grunt build --verbose' },
npm sill resolved readme: '\n# Hoodie ✪ power to the frontend! [![Build Status](https://travis-ci.org/hoodiehq/hoodie.js.png?branch=master)](https://travis-ci.org/hoodiehq/hoodie.js)\n\nHoodie is a JavaScript library for the browser.\n\nIt offers you the following pieces of functionality right out of the box:\n\n* user accounts and authentication\n* data storage and sync\n* background tasks\n* sharing\n* emails\n* and so much more\n\nAnd here is what it looks like:\n\n### user accounts & authentication\n\n```javascript\n // user signup\n hoodie.account.signUp(\'joe@example.com\', \'secret\');\n\n // user signIn\n hoodie.account.signIn(\'joe@example.com\', \'secret\');\n\n // user password change\n hoodie.account.changePassword(\'secret\', \'new_secret\');\n\n // user name change\n hoodie.account.changeUsername(\'secret\', \'newusername\');\n\n // user signout\n hoodie.account.signOut();\n\n // user password reset\n hoodie.account.resetPassword(\'joe@example.com\');\n```\n\n### store data (it will sync to whereever your users sign in)\n\n```javascript\n\n // add a new document of type \'task\'\n hoodie.store.add(\'task\', {\n title: \'build sweetMasterApp tomorrow.\'\n });\n\n // find all \'task\' documents\n hoodie.store.findAll(\'task\');\n\n // update a \'task\' document\n hoodie.store.update(\'task\', \'123\', {\n done: true\n });\n\n // remove a \'task\' document\n hoodie.store.remove(\'task\', \'123\');\n\n // listen to and act upon document events\n hoodie.store.on(\'add:task\', function(object) {\n alert(\'new Task added: \' + object.task)\n });\n```\n\n### Tasks\n\nTasks get picked up by backend workers in the background. You can\nthink of them as special kind of objects that the describe specific\ntasks that you want backend logic for to be accomplished.\n\nIf a task has been completed successfully, it gets removed. If there\nis an error, it stays in the task store to be handled or removed.\n\n\n```js\n // start a new task. Once it was finished, the succes callback gets\n // called. If something went wrong, error callback gets called instead\n hoodie.task.start(\'message\', {to: \'joe\', text: \'Party machen?\'})\n .then( showMessageSent, showMessageError )\n\n // cancel a pending task\n hoodie.task.cancel(\'message\', \'123\')\n\n // restart a pending or canceled task\n hoodie.task.restart(\'message\', \'123\', { extraProperty: \'value\' })\n\n // canceled all pending tasks\n hoodie.task.restartAll()\n\n // restart all pending or canceled tasks\n hoodie.task.restartAll()\n```\n\nYou can also subscribe to the following task events\n\n* start\n* cancel\n* error\n* success\n\n```javascript\n // listen to new tasks\n hoodie.task.on(\'start\', function (newTask) {});\n\n // task canceled\n hoodie.task.on(\'cancel\', function (canceledTask) {});\n\n // task could not be completed\n hoodie.task.on(\'error\', function (errorMessage, task) {});\n\n // task completed successfully\n hoodie.task.on(\'success\', function (completedTask) {});\n\n // all listeners can be filtered by type\n hoodie.task.on(\'start:message\', function (newMessageTask, options) {});\n hoodie.task.on(\'cancel:message\', function (canceledMessageTask, options) {});\n hoodie.task.on(\'error:message\', function (errorMessage, messageTask, options) {});\n hoodie.task.on(\'success:message\', function (completedMessageTask, options) {});\n hoodie.task.on(\'change:message\', function (eventName, messageTask, options) {});\n\n // ... and by type and id\n hoodie.task.on(\'start:message:123\', function (newMessageTask, options) {});\n hoodie.task.on(\'cancel:message:123\', function (canceledMessageTask, options) {});\n hoodie.task.on(\'error:message:123\', function (errorMessage, messageTask, options) {});\n hoodie.task.on(\'success:message:123\', function (completedMessageTask, options) {});\n hoodie.task.on(\'change:message:123\', function (eventName, messageTask, options) {});\n```\n\n**note**: if `change` event is `"error"`, the error message gets passed as options.error\n\n\n### publish & share data (work in progress)\n\n```javascript\n\n // find all \'task\' documents and publish them\n hoodie.store.findAll(\'task\').publish();\n\n // find all documents that belong to a given user\n hoodie.user( username ).findAll();\n\n // find a given task and share it\n hoodie.store.find(\'task\', \'456\').share();\n\n // find a all documents on a given share\n hoodie.share(shareId).findAll();\n\n // subscribe to a given share\n hoodie.share(shareId).subscribe();\n```\n\n### sending emails (work in progress)\n\n```javascript\n\n // define an email object\n var magic = hoodie.email.send({\n to : [\'susan@example.com\'],\n cc : [\'bill@example.com\'],\n subject : \'rule the world\',\n body : \'we can do it!\\nSigned, Joe\'\n });\n\n magic.done(function(mail) {\n alert(\'Mail has been sent to \' + mail.to);\n });\n\n magic.fail(function(eror) {\n alert(\'Sory, but something went wrong: \' + error.reason);\n });\n\n\n```\n\nBut … how does it work?\n-----------------------\n\nEvery app gets its own hoodie. You need to set one up, because that\'s `whereTheMagicHappens`:\n\n```html\n <script src="hoodie.js"></script>\n <script>\n whereTheMagicHappens = \'https://yourapp.hood.ie\';\n hoodie = new Hoodie(whereTheMagicHappens);\n </script>\n```\n\nFor more in-depth documentation, head over to [hood.ie](http://hood.ie).\n\n## Contact\n\nHave a question?\n\n* [\\#hoodie](http://webchat.freenode.net/?channels=hoodie) on Freenode\n* [@hoodiehq](https://twitter.com/hoodiehq) on Twitter\n\n## Contributing to this project\n\nAnyone and everyone is welcome to contribute. Please take a moment to\nreview the [guidelines for contributing](CONTRIBUTING.md).\n\n* [Bug reports](CONTRIBUTING.md#bugs)\n* [Feature requests](CONTRIBUTING.md#features)\n* [Pull requests](CONTRIBUTING.md#pull-requests)\n\nLicense & Copyright\n-------------------\n\nCopyright 2012, 2013 https://github.com/hoodiehq/ and other contributors\n\nLicensed under the Apache License 2.0.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved _id: 'hoodie@0.6.0',
npm sill resolved _from: 'hoodie@0.6.0' },
npm sill resolved { name: 'hoodie-plugins-manager',
npm sill resolved version: '0.2.4',
npm sill resolved description: 'Run and dispatch events to Hoodie plugin server extensions',
npm sill resolved dependencies:
npm sill resolved { 'hoodie-plugins-api': '0.2.1',
npm sill resolved couchr: '0.0.14',
npm sill resolved async: '0.2.9',
npm sill resolved underscore: '1.5.1',
npm sill resolved nodemailer: '0.5.2',
npm sill resolved dataurl: '0.1.0' },
npm sill resolved devDependencies:
npm sill resolved { multicouch: '0.8.1',
npm sill resolved request: '2.22.0',
npm sill resolved mkdirp: '0.3.5',
npm sill resolved rimraf: '2.2.1',
npm sill resolved nodeunit: '0.8.1' },
npm sill resolved main: 'lib/index.js',
npm sill resolved scripts: { test: 'nodeunit test' },
npm sill resolved readme: 'This is a component of [hoodie-server](https://github.com/hoodiehq/hoodie-server) that manages Hoodie plugins.\n\nSee [My First Hoodie](https://github.com/hoodiehq/my-first-hoodie) for how to get started with Hoodie.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved _id: 'hoodie-plugins-manager@0.2.4',
npm sill resolved _from: 'hoodie-plugins-manager@0.2.4' },
npm sill resolved { name: 'local-tld-lib',
npm sill resolved version: '1.0.2',
npm sill resolved description: 'Maintain a TLD on localhost for all your projects.',
npm sill resolved directories: { test: 'test' },
npm sill resolved main: 'lib/local-tld.js',
npm sill resolved dependencies: {},
npm sill resolved devDependencies: {},
npm sill resolved scripts: { test: 'node test/test.js' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'https://github.com/hoodiehq/local-tld-lib' },
npm sill resolved keywords: [ 'tld', 'pow' ],
npm sill resolved author: { name: 'Jan Lehnardt', email: 'jan@apache.org' },
npm sill resolved license: 'Apache 2.0',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved readme: '# Local TLD\n\nSee http://github.com/hoodiehq/local-tld for a description.\n\n## I want my app to register itself with local-tld!\n\n var ltld = require("local-tld");\n ltld.add("yourfancyproject", 12345);\n\n // ok cool, how can I deregister?\n ltld.remove("yourfancyproject");\n\n## License\n\nApache 2 License\n\n## Copyright\n\n(c) 2013 Jan Lehnardt <jan@apache.org>\n',
npm sill resolved bugs: { url: 'https://github.com/hoodiehq/local-tld-lib/issues' },
npm sill resolved homepage: 'https://github.com/hoodiehq/local-tld-lib',
npm sill resolved _id: 'local-tld-lib@1.0.2',
npm sill resolved _from: 'local-tld-lib@1.0.2' },
npm sill resolved { name: 'bytes',
npm sill resolved author:
npm sill resolved { name: 'TJ Holowaychuk',
npm sill resolved email: 'tj@vision-media.ca',
npm sill resolved url: 'http://tjholowaychuk.com' },
npm sill resolved description: 'byte size string parser / serializer',
npm sill resolved version: '0.2.1',
npm sill resolved main: 'index.js',
npm sill resolved dependencies: {},
npm sill resolved devDependencies: { mocha: '*', should: '*' },
npm sill resolved component: { scripts: [Object] },
npm sill resolved readme: '# node-bytes\n\n Byte string parser / formatter.\n\n## Example:\n\n```js\nbytes(\'1kb\')\n// => 1024\n\nbytes(\'2mb\')\n// => 2097152\n\nbytes(\'1gb\')\n// => 1073741824\n\nbytes(1073741824)\n// => 1gb\n```\n\n## Installation\n\n```\n$ npm install bytes\n$ component install visionmedia/bytes.js\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk &lt;tj@vision-media.ca&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\'Software\'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \'AS IS\', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n',
npm sill resolved readmeFilename: 'Readme.md',
npm sill resolved _id: 'bytes@0.2.1',
npm sill resolved _from: 'bytes@0.2.1' },
npm sill resolved { name: 'semver',
npm sill resolved version: '1.1.4',
npm sill resolved description: 'The semantic version parser used by npm.',
npm sill resolved main: 'semver.js',
npm sill resolved scripts: { test: 'tap test.js' },
npm sill resolved devDependencies: { tap: '0.x >=0.0.4' },
npm sill resolved license:
npm sill resolved { type: 'MIT',
npm sill resolved url: 'https://github.com/isaacs/semver/raw/master/LICENSE' },
npm sill resolved repository: { type: 'git', url: 'git://github.com/isaacs/node-semver.git' },
npm sill resolved bin: { semver: './bin/semver' },
npm sill resolved readme: 'semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n $ npm install semver\n\n semver.valid(\'1.2.3\') // \'1.2.3\'\n semver.valid(\'a.b.c\') // null\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 <1.3.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',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/isaacs/node-semver/issues' },
npm sill resolved homepage: 'https://github.com/isaacs/node-semver',
npm sill resolved _id: 'semver@1.1.4',
npm sill resolved _from: 'semver@1.1.4' },
npm sill resolved { name: 'multicouch',
npm sill resolved version: '0.8.1',
npm sill resolved description: 'Launch multiple CouchDBs from the same installation.',
npm sill resolved main: 'lib/multicouch.js',
npm sill resolved scripts: { test: 'echo "Error: no test specified" && exit 1' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/hoodiehq/node-multicouch.git' },
npm sill resolved author: { name: 'Jan Lehnardt' },
npm sill resolved license: 'Apache 2',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved dependencies: { commander: '1.x', which: '1.x', ini: '1.x', shelljs: '~0.2.6' },
npm sill resolved readme: '# Multi-Couch\n\nLaunch multiple CouchDBs from the same installation, programmaticly \nor from the command line.\n\n\n## What?\n\nYou can have many reasons for running more than one instance of the same CouchDB installation. Maybe you are developing multiple apps, and would like an instance per app, or you are just plain daring.\n\nCouchDB allows you to run multiple separate instances from the same installation. So in addition to the default installation you can launch more.\n\nTo do that, you will need to adjust a few configuration variables. Namly:\n\n * The TCP port to bind to.\n * The database directory.\n * The view directory.\n * The log file.\n * The URI file.\n\n\n## How?\n\nTo do this, we create a new CouchDB config file that includes all the values and start CouchDB with the default config files and this special one as well.\n\n\n## Usage\n\nFrom Node:\n\n var MultiCouch = require("multicouch");\n var my_couch = new MultiCouch({\n port: 8080,\n prefix: "/tmp"\n // view_dir: "/tmp", // same as db_dir when ommitted\n // log_file: "/tmp/couch.log",\n // uri_file: "/tmp/couch.uri",\n // couchdb_path: "/opt/local/bin/couchdb"\n });\n \n my_couch.start();\n\n my_couch.stop();\n\n my_couch.on("start", function() {\n console.log("CouchDB started.");\n });\n\n my_couch.on("stop", function() {\n console.log("CouchDB stopped.");\n });\n\n my_couch.on("error", function(error) {\n console.log("CouchDB errored \'%s\'.", error);\n });\n\n\nFrom the CLI:\n\n TBD\n\n\n## Configuration\n\nSet the environment variable `COUCHDB_PATH` to the CouchDB\nbinary you want to use.\n\n\n## License\n\nApache License 2.0\n\n\n## Copyright\n\n(c) 2013 Jan Lehnardt <jan@apache.org>\n',
npm sill resolved bugs: { url: 'https://github.com/hoodiehq/node-multicouch/issues' },
npm sill resolved homepage: 'https://github.com/hoodiehq/node-multicouch',
npm sill resolved _id: 'multicouch@0.8.1',
npm sill resolved _from: 'multicouch@0.8.1' },
npm sill resolved { name: 'ports',
npm sill resolved version: '1.1.0',
npm sill resolved description: 'Manage a registry of unique port assignments',
npm sill resolved main: 'index.js',
npm sill resolved scripts: { test: 'node test.js' },
npm sill resolved repository: { type: 'git', url: 'https://github.com/hoodiehq/node-ports' },
npm sill resolved keywords: [ 'ports', 'unique', 'horses' ],
npm sill resolved author: { name: 'Jan Lehnardt', email: 'jan@apache.org' },
npm sill resolved license: 'Apache 2.0',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved gitHead: '6b9c4504372b12f4ebaaa23fe88260dd49b54a5b',
npm sill resolved readme: '# Ports registry\n\nManage a registry of unique port assignments for\nan operating system. Store user-defined meta-data\nwith each port.\n\nThe registry lives in ~/.ports\n\nNote that this module currently doesn’t check whether\na port is actually available. That’s TBD.\n\n\n## I want my app to register itself with local-tld!\n\n var ports = require("ports");\n ports.getPort("yourfancyproject");\n\n\n## License\n\nApache 2 License\n\n\n## Copyright\n\n(c) 2013 Jan Lehnardt <jan@apache.org>\n',
npm sill resolved bugs: { url: 'https://github.com/hoodiehq/node-ports/issues' },
npm sill resolved homepage: 'https://github.com/hoodiehq/node-ports',
npm sill resolved _id: 'ports@1.1.0',
npm sill resolved _from: 'ports@1.1.0' },
npm sill resolved { name: 'request',
npm sill resolved description: 'Simplified HTTP request client.',
npm sill resolved tags: [ 'http', 'simple', 'util', 'utility' ],
npm sill resolved version: '2.16.6',
npm sill resolved author: { name: 'Mikeal Rogers', email: 'mikeal.rogers@gmail.com' },
npm sill resolved repository: { type: 'git', url: 'http://github.com/mikeal/request.git' },
npm sill resolved bugs: { url: 'http://github.com/mikeal/request/issues' },
npm sill resolved engines: [ 'node >= 0.8.0' ],
npm sill resolved main: 'index.js',
npm sill resolved dependencies:
npm sill resolved { 'form-data': '~0.0.3',
npm sill resolved mime: '~1.2.7',
npm sill resolved hawk: '~0.10.2',
npm sill resolved 'node-uuid': '~1.4.0',
npm sill resolved 'cookie-jar': '~0.2.0',
npm sill resolved 'aws-sign': '~0.2.0',
npm sill resolved 'oauth-sign': '~0.2.0',
npm sill resolved 'forever-agent': '~0.2.0',
npm sill resolved 'tunnel-agent': '~0.2.0',
npm sill resolved 'json-stringify-safe': '~3.0.0',
npm sill resolved qs: '~0.5.4' },
npm sill resolved scripts: { test: 'node tests/run.js' },
npm sill resolved readme: '# Request -- Simplified HTTP request method\n\n## Install\n\n<pre>\n npm install request\n</pre>\n\nOr from source:\n\n<pre>\n git clone git://github.com/mikeal/request.git \n cd request\n npm link\n</pre>\n\n## Super simple to use\n\nRequest is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default.\n\n```javascript\nvar request = require(\'request\');\nrequest(\'http://www.google.com\', function (error, response, body) {\n if (!error && response.statusCode == 200) {\n console.log(body) // Print the google web page.\n }\n})\n```\n\n## Streaming\n\nYou can stream any response to a file stream.\n\n```javascript\nrequest(\'http://google.com/doodle.png\').pipe(fs.createWriteStream(\'doodle.png\'))\n```\n\nYou can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types, in this case `application/json`, and use the proper content-type in the PUT request if one is not already provided in the headers.\n\n```javascript\nfs.createReadStream(\'file.json\').pipe(request.put(\'http://mysite.com/obj.json\'))\n```\n\nRequest can also pipe to itself. When doing so the content-type and content-length will be preserved in the PUT headers.\n\n```javascript\nrequest.get(\'http://google.com/img.png\').pipe(request.put(\'http://mysite.com/img.png\'))\n```\n\nNow let\'s get fancy.\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === \'/doodle.png\') {\n if (req.method === \'PUT\') {\n req.pipe(request.put(\'http://mysite.com/doodle.png\'))\n } else if (req.method === \'GET\' || req.method === \'HEAD\') {\n request.get(\'http://mysite.com/doodle.png\').pipe(resp)\n } \n }\n})\n```\n\nYou can also pipe() from a http.ServerRequest instance and to a http.ServerResponse instance. The HTTP method and headers will be sent as well as the entity-body data. Which means that, if you don\'t really care about security, you can do:\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === \'/doodle.png\') {\n var x = request(\'http://mysite.com/doodle.png\')\n req.pipe(x)\n x.pipe(resp)\n }\n})\n```\n\nAnd since pipe() returns the destination stream in node 0.5.x you can do one line proxying :)\n\n```javascript\nreq.pipe(request(\'http://mysite.com/doodle.png\')).pipe(resp)\n```\n\nAlso, none of this new functionality conflicts with requests previous features, it just expands them.\n\n```javascript\nvar r = request.defaults({\'proxy\':\'http://localproxy.com\'})\n\nhttp.createServer(function (req, resp) {\n if (req.url === \'/doodle.png\') {\n r.get(\'http://google.com/doodle.png\').pipe(resp)\n }\n})\n```\nYou can still use intermediate proxies, the requests will still follow HTTP forwards, etc.\n\n## Forms\n\n`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API.\n\nUrl encoded forms are simple\n\n```javascript\nrequest.post(\'http://service.com/upload\', {form:{key:\'value\'}})\n// or\nrequest.post(\'http://service.com/upload\').form({key:\'value\'})\n```\n\nFor `multipart/form-data` we use the [form-data](https://github.com/felixge/node-form-data) library by [@felixge](https://github.com/felixge). You don\'t need to worry about piping the form object or setting the headers, `request` will handle that for you.\n\n```javascript\nvar r = request.post(\'http://service.com/upload\')\nvar form = r.form()\nform.append(\'my_field\', \'my_value\')\nform.append(\'my_buffer\', new Buffer([1, 2, 3]))\nform.append(\'my_file\', fs.createReadStream(path.join(__dirname, \'doodle.png\'))\nform.append(\'remote_file\', request(\'http://google.com/doodle.png\'))\n```\n\n## HTTP Authentication\n\n```javascript\nrequest.auth(\'username\', \'password\', false).get(\'http://some.server.com/\');\n// or\nrequest.get(\'http://some.server.com/\', {\n \'auth\': {\n \'user\': \'username\',\n \'pass\': \'password\',\n \'sendImmediately\': false\n }\n});\n```\n\nIf passed as an option, `auth` should be a hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). The method form takes parameters `auth(username, password, sendImmediately)`.\n\n`sendImmediately` defaults to true, which will cause a basic authentication header to be sent. If `sendImmediately` is `false`, then `request` will retry with a proper authentication header after receiving a 401 response from the server (which must contain a `WWW-Authenticate` header indicating the required authentication method).\n\nDigest authentication is supported, but it only works with `sendImmediately` set to `false` (otherwise `request` will send basic authentication on the initial request, which will probably cause the request to fail).\n\n## OAuth Signing\n\n```javascript\n// Twitter OAuth\nvar qs = require(\'querystring\')\n , oauth =\n { callback: \'http://mysite.com/callback/\'\n , consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n }\n , url = \'https://api.twitter.com/oauth/request_token\'\n ;\nrequest.post({url:url, oauth:oauth}, function (e, r, body) {\n // Ideally, you would take the body in the response\n // and construct a URL that a user clicks on (like a sign in button).\n // The verifier is only available in the response after a user has \n // verified with twitter that they are authorizing your app.\n var access_token = qs.parse(body)\n , oauth = \n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: access_token.oauth_token\n , verifier: access_token.oauth_verifier\n }\n , url = \'https://api.twitter.com/oauth/access_token\'\n ;\n request.post({url:url, oauth:oauth}, function (e, r, body) {\n var perm_token = qs.parse(body)\n , oauth = \n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: perm_token.oauth_token\n , token_secret: perm_token.oauth_token_secret\n }\n , url = \'https://api.twitter.com/1/users/show.json?\'\n , params = \n { screen_name: perm_token.screen_name\n , user_id: perm_token.user_id\n }\n ;\n url += qs.stringify(params)\n request.get({url:url, oauth:oauth, json:true}, function (e, r, user) {\n console.log(user)\n })\n })\n})\n```\n\n\n\n### request(options, callback)\n\nThe first argument can be either a url or an options object. The only required option is uri, all others are optional.\n\n* `uri` || `url` - fully qualified uri or a parsed url object from url.parse()\n* `qs` - object containing querystring values to be appended to the uri\n* `method` - http method, defaults to GET\n* `headers` - http headers, defaults to {}\n* `body` - entity body for PATCH, POST and PUT requests. Must be buffer or string.\n* `form` - when passed an object this will set `body` but to a querystring representation of value and adds `Content-type: application/x-www-form-urlencoded; charset=utf-8` header. When passed no option a FormData instance is returned that will be piped to request.\n* `auth` - A hash containing values `user` || `username`, `password` || `pass`, and `sendImmediately` (optional). See documentation above.\n* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as json.\n* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.\n* `followRedirect` - follow HTTP 3xx responses as redirects. defaults to true.\n* `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects. defaults to false.\n* `maxRedirects` - the maximum number of redirects to follow, defaults to 10.\n* `encoding` - Encoding to be used on `setEncoding` of response data. If set to `null`, the body is returned as a Buffer.\n* `pool` - A hash object containing the agents for these requests. If omitted this request will use the global pool which is set to node\'s default maxSockets.\n* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool.\n* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request\t\n* `proxy` - An HTTP proxy to be used. Support proxy Auth with Basic Auth the same way it\'s supported with the `url` parameter by embedding the auth info in the uri.\n* `oauth` - Options for OAuth HMAC-SHA1 signing, see documentation above.\n* `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example).\n* `strictSSL` - Set to `true` to require that SSL certificates be valid. Note: to use your own certificate authority, you need to specify an agent that was created with that ca as an option.\n* `jar` - Set to `false` if you don\'t want cookies to be remembered for future use or define your custom cookie jar (see examples section)\n* `aws` - object containing aws signing information, should have the properties `key` and `secret` as well as `bucket` unless you\'re specifying your bucket as part of the path, or you are making a request that doesn\'t use a bucket (i.e. GET Services)\n\n\nThe callback argument gets 3 arguments. The first is an error when applicable (usually from the http.Client option not the http.ClientRequest object). The second in an http.ClientResponse object. The third is the response body String or Buffer.\n\n## Convenience methods\n\nThere are also shorthand methods for different HTTP METHODs and some other conveniences.\n\n### request.defaults(options) \n \nThis method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.\n\n### request.put\n\nSame as request() but defaults to `method: "PUT"`.\n\n```javascript\nrequest.put(url)\n```\n\n### request.patch\n\nSame as request() but defaults to `method: "PATCH"`.\n\n```javascript\nrequest.patch(url)\n```\n\n### request.post\n\nSame as request() but defaults to `method: "POST"`.\n\n```javascript\nrequest.post(url)\n```\n\n### request.head\n\nSame as request() but defaults to `method: "HEAD"`.\n\n```javascript\nrequest.head(url)\n```\n\n### request.del\n\nSame as request() but defaults to `method: "DELETE"`.\n\n```javascript\nrequest.del(url)\n```\n\n### request.get\n\nAlias to normal request method for uniformity.\n\n```javascript\nrequest.get(url)\n```\n### request.cookie\n\nFunction that creates a new cookie.\n\n```javascript\nrequest.cookie(\'cookie_string_here\')\n```\n### request.jar\n\nFunction that creates a new cookie jar.\n\n```javascript\nrequest.jar()\n```\n\n\n## Examples:\n\n```javascript\n var request = require(\'request\')\n , rand = Math.floor(Math.random()*100000000).toString()\n ;\n request(\n { method: \'PUT\'\n , uri: \'http://mikeal.iriscouch.com/testjs/\' + rand\n , multipart: \n [ { \'content-type\': \'application/json\'\n , body: JSON.stringify({foo: \'bar\', _attachments: {\'message.txt\': {follows: true, length: 18, \'content_type\': \'text/plain\' }}})\n }\n , { body: \'I am an attachment\' }\n ] \n }\n , function (error, response, body) {\n if(response.statusCode == 201){\n console.log(\'document saved as: http://mikeal.iriscouch.com/testjs/\'+ rand)\n } else {\n console.log(\'error: \'+ response.statusCode)\n console.log(body)\n }\n }\n )\n```\nCookies are enabled by default (so they can be used in subsequent requests). To disable cookies set jar to false (either in defaults or in the options sent).\n\n```javascript\nvar request = request.defaults({jar: false})\nrequest(\'http://www.google.com\', function () {\n request(\'http://images.google.com\')\n})\n```\n\nIf you to use a custom cookie jar (instead of letting request use its own global cookie jar) you do so by setting the jar default or by specifying it as an option:\n\n```javascript\nvar j = request.jar()\nvar request = request.defaults({jar:j})\nrequest(\'http://www.google.com\', function () {\n request(\'http://images.google.com\')\n})\n```\nOR\n\n```javascript\nvar j = request.jar()\nvar cookie = request.cookie(\'your_cookie_here\')\nj.add(cookie)\nrequest({url: \'http://www.google.com\', jar: j}, function () {\n request(\'http://images.google.com\')\n})\n```\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/mikeal/request',
npm sill resolved _id: 'request@2.16.6',
npm sill resolved _from: 'request@2.16.6' },
npm sill resolved { name: 'follow',
npm sill resolved version: '0.9.0',
npm sill resolved author: { name: 'Jason Smith', email: 'jhs@iriscouch.com' },
npm sill resolved description: 'Extremely robust, fault-tolerant CouchDB changes follower',
npm sill resolved keywords: [ 'couchdb', 'changes', 'sleep', 'sleepy' ],
npm sill resolved homepage: 'http://github.com/iriscouch/follow',
npm sill resolved repository: { type: 'git', url: 'git://github.com/iriscouch/follow' },
npm sill resolved engines: [ 'node' ],
npm sill resolved dependencies: { request: '~2.16.2' },
npm sill resolved devDependencies: { tap: '~0.4.0', traceback: '~0.3.0' },
npm sill resolved main: './api.js',
npm sill resolved bin: { follow: './cli.js' },
npm sill resolved readme: '# Follow: CouchDB changes notifier for NodeJS\n\nFollow (upper-case *F*) comes from an internal Iris Couch project used in production for over a year. It works in the browser (beta) and is available as an NPM module.\n\n $ npm install follow\n\n## Example\n\nThis looks much like the [request][req] API.\n\n```javascript\nvar follow = require(\'follow\');\nfollow("https://example.iriscouch.com/boogie", function(error, change) {\n if(!error) {\n console.log("Got change number " + change.seq + ": " + change.id);\n }\n})\n```\n\nThe *error* parameter to the callback will basically always be `null`.\n\n## Objective\n\nThe API must be very simple: notify me every time a change happens in the DB. Also, never fail.\n\nIf an error occurs, Follow will internally retry without notifying your code.\n\nSpecifically, this should be possible:\n\n1. Begin a changes feed. Get a couple of change callbacks\n2. Shut down CouchDB\n3. Go home. Have a nice weekend. Come back on Monday.\n4. Start CouchDB with a different IP address\n5. Make a couple of changes\n6. Update DNS so the domain points to the new IP\n7. Once DNS propagates, get a couple more change callbacks\n\n## Failure Mode\n\nIf CouchDB permanently crashes, there is an option of failure modes:\n\n* **Default:** Simply never call back with a change again\n* **Optional:** Specify an *inactivity* timeout. If no changes happen by the timeout, Follow will signal an error.\n\n### Simple API: follow(options, callback)\n\nThe first argument is an options object. The only required option is `db`. Instead of an object, you can use a string to indicate the `db` value.\n\n```javascript\nfollow({db:"https://example.iriscouch.com/boogie", include_docs:true}, function(error, change) {\n if(!error) {\n console.log("Change " + change.seq + " has " + Object.keys(change.doc).length + " fields");\n }\n})\n```\n\n<a name="options"></a>\nAll of the CouchDB _changes options are allowed. See http://guide.couchdb.org/draft/notifications.html.\n\n* `db` | Fully-qualified URL of a couch database. (Basic auth URLs are ok.)\n* `since` | The sequence number to start from. Use `"now"` to start from the latest change in the DB.\n* `heartbeat` | Milliseconds within which CouchDB must respond (default: **30000** or 30 seconds)\n* `feed` | **Optional but only "continuous" is allowed**\n* `filter` |\n * **Either** a path to design document filter, e.g. `app/important`\n * **Or** a Javascript `function(doc, req) { ... }` which should return true or false\n* `query_params` | **Optional** for use in with `filter` functions, passed as `req.query` to the filter function\n\nBesides the CouchDB options, more are available:\n\n* `headers` | Object with HTTP headers to add to the request\n* `inactivity_ms` | Maximum time to wait between **changes**. Omitting this means no maximum.\n\n## Object API\n\nThe main API is a thin wrapper around the EventEmitter API.\n\n```javascript\nvar follow = require(\'follow\');\n\nvar opts = {}; // Same options paramters as before\nvar feed = new follow.Feed(opts);\n\n// You can also set values directly.\nfeed.db = "http://example.iriscouch.com/boogie";\nfeed.since = 3;\nfeed.heartbeat = 30 * 1000\nfeed.inactivity_ms = 86400 * 1000;\n\nfeed.filter = function(doc, req) {\n // req.query is the parameters from the _changes request and also feed.query_params.\n console.log(\'Filtering for query: \' + JSON.stringify(req.query));\n\n if(doc.stinky || doc.ugly)\n return false;\n return true;\n}\n\nfeed.on(\'change\', function(change) {\n console.log(\'Doc \' + change.id + \' in change \' + change.seq + \' is neither stinky nor ugly.\');\n})\n\nfeed.on(\'error\', function(er) {\n console.error(\'Since Follow always retries on errors, this must be serious\');\n throw er;\n})\n\nfeed.follow();\n```\n\n<a name="pause"></a>\n## Pause and Resume\n\nA Follow feed is a Node.js stream. If you get lots of changes and processing them takes a while, use `.pause()` and `.resume()` as needed. Pausing guarantees that no new events will fire. Resuming guarantees you\'ll pick up where you left off.\n\n```javascript\nfollow("https://example.iriscouch.com/boogie", function(error, change) {\n var feed = this\n\n if(change.seq == 1) {\n console.log(\'Uh oh. The first change takes 30 hours to process. Better pause.\')\n feed.pause()\n setTimeout(function() { feed.resume() }, 30 * 60 * 60 * 1000)\n }\n\n // ... 30 hours with no events ...\n\n else\n console.log(\'No need to pause for normal change: \' + change.id)\n})\n```\n\n<a name="events"></a>\n## Events\n\nThe feed object is an EventEmitter. There are a few ways to get a feed object:\n\n* Use the object API above\n* Use the return value of `follow()`\n* In the callback to `follow()`, the *this* variable is bound to the feed object.\n\nOnce you\'ve got one, you can subscribe to these events:\n\n* **start** | Before any i/o occurs\n* **confirm_request** | `function(req)` | The database confirmation request is sent; passed the `request` object\n* **confirm** | `function(db_obj)` | The database is confirmed; passed the couch database object\n* **change** | `function(change)` | A change occured; passed the change object from CouchDB\n* **catchup** | `function(seq_id)` | The feed has caught up to the *update_seq* from the confirm step. Assuming no subsequent changes, you have seen all the data. *Always fires before the final **change** event.*\n* **wait** | Follow is idle, waiting for the next data chunk from CouchDB\n* **timeout** | `function(info)` | Follow did not receive a heartbeat from couch in time. The passed object has `.elapsed_ms` set to the elapsed time\n* **retry** | `function(info)` | A retry is scheduled (usually after a timeout or disconnection). The passed object has\n * `.since` the current sequence id\n * `.after` the milliseconds to wait before the request occurs (on an exponential fallback schedule)\n * `.db` the database url (scrubbed of basic auth credentials)\n* **stop** | The feed is stopping, because of an error, or because you called `feed.stop()`\n* **error** | `function(err)` | An error occurs\n\n## Error conditions\n\nFollow is happy to retry over and over, for all eternity. It will only emit an error if it thinks your whole application might be in trouble.\n\n* *DB confirmation* failed: Follow confirms the DB with a preliminary query, which must reply properly.\n* *DB is deleted*: Even if it retried, subsequent sequence numbers would be meaningless to your code.\n* *Your inactivity timer* expired: This is a last-ditch way to detect possible errors. What if couch is sending heartbeats just fine, but nothing has changed for 24 hours? You know that for your app, 24 hours with no change is impossible. Maybe your filter has a bug? Maybe you queried the wrong DB? Whatever the reason, Follow will emit an error.\n* JSON parse error, which should be impossible from CouchDB\n* Invalid change object format, which should be impossible from CouchDB\n* Internal error, if the internal state seems wrong, e.g. cancelling a timeout that already expired, etc. Follow tries to fail early.\n\n## Tests\n\nFollow uses [node-tap][tap]. If you clone this Git repository, tap is included.\n\n $ ./node_modules/.bin/tap test/*.js test/issues/*.js\n ok test/couch.js ...................................... 11/11\n ok test/follow.js ..................................... 69/69\n ok test/issues.js ..................................... 44/44\n ok test/stream.js ................................... 300/300\n ok test/issues/10.js .................................. 11/11\n total ............................................... 435/435\n\n ok\n\n## License\n\nApache 2.0\n\n[req]: https://github.com/mikeal/request\n[tap]: https://github.com/isaacs/node-tap\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/iriscouch/follow/issues' },
npm sill resolved _id: 'follow@0.9.0',
npm sill resolved _from: 'follow@0.9.0' },
npm sill resolved { name: 'optimist',
npm sill resolved version: '0.5.0',
npm sill resolved description: 'Light-weight option parsing with an argv hash. No optstrings attached.',
npm sill resolved main: './index.js',
npm sill resolved dependencies: { wordwrap: '~0.0.2' },
npm sill resolved devDependencies: { hashish: '~0.0.4', tap: '~0.4.0' },
npm sill resolved scripts: { test: 'tap ./test/*.js' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'http://github.com/substack/node-optimist.git' },
npm sill resolved keywords:
npm sill resolved [ 'argument',
npm sill resolved 'args',
npm sill resolved 'option',
npm sill resolved 'parser',
npm sill resolved 'parsing',
npm sill resolved 'cli',
npm sill resolved 'command' ],
npm sill resolved author:
npm sill resolved { name: 'James Halliday',
npm sill resolved email: 'mail@substack.net',
npm sill resolved url: 'http://substack.net' },
npm sill resolved license: 'MIT/X11',
npm sill resolved engine: { node: '>=0.4' },
npm sill resolved readme: 'optimist\n========\n\nOptimist is a node.js library for option parsing for people who hate option\nparsing. More specifically, this module is for people who like all the --bells\nand -whistlz of program usage but think optstrings are a waste of time.\n\nWith optimist, option parsing doesn\'t have to suck (as much).\n\n[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist)\n\nexamples\n========\n\nWith Optimist, the options are just a hash! No optstrings attached.\n-------------------------------------------------------------------\n\nxup.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require(\'optimist\').argv;\n\nif (argv.rif - 5 * argv.xup > 7.138) {\n console.log(\'Buy more riffiwobbles\');\n}\nelse {\n console.log(\'Sell the xupptumblers\');\n}\n````\n\n***\n\n $ ./xup.js --rif=55 --xup=9.52\n Buy more riffiwobbles\n \n $ ./xup.js --rif 12 --xup 8.1\n Sell the xupptumblers\n\n![This one\'s optimistic.](http://substack.net/images/optimistic.png)\n\nBut wait! There\'s more! You can do short options:\n-------------------------------------------------\n \nshort.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require(\'optimist\').argv;\nconsole.log(\'(%d,%d)\', argv.x, argv.y);\n````\n\n***\n\n $ ./short.js -x 10 -y 21\n (10,21)\n\nAnd booleans, both long and short (and grouped):\n----------------------------------\n\nbool.js:\n\n````javascript\n#!/usr/bin/env node\nvar util = require(\'util\');\nvar argv = require(\'optimist\').argv;\n\nif (argv.s) {\n util.print(argv.fr ? \'Le chat dit: \' : \'The cat says: \');\n}\nconsole.log(\n (argv.fr ? \'miaou\' : \'meow\') + (argv.p ? \'.\' : \'\')\n);\n````\n\n***\n\n $ ./bool.js -s\n The cat says: meow\n \n $ ./bool.js -sp\n The cat says: meow.\n\n $ ./bool.js -sp --fr\n Le chat dit: miaou.\n\nAnd non-hypenated options too! Just use `argv._`!\n-------------------------------------------------\n \nnonopt.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require(\'optimist\').argv;\nconsole.log(\'(%d,%d)\', argv.x, argv.y);\nconsole.log(argv._);\n````\n\n***\n\n $ ./nonopt.js -x 6.82 -y 3.35 moo\n (6.82,3.35)\n [ \'moo\' ]\n \n $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz\n (0.54,1.12)\n [ \'foo\', \'bar\', \'baz\' ]\n\nPlus, Optimist comes with .usage() and .demand()!\n-------------------------------------------------\n\ndivide.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require(\'optimist\')\n .usage(\'Usage: $0 -x [num] -y [num]\')\n .demand([\'x\',\'y\'])\n .argv;\n\nconsole.log(argv.x / argv.y);\n````\n\n***\n \n $ ./divide.js -x 55 -y 11\n 5\n \n $ node ./divide.js -x 4.91 -z 2.51\n Usage: node ./divide.js -x [num] -y [num]\n\n Options:\n -x [required]\n -y [required]\n\n Missing required arguments: y\n\nEVEN MORE HOLY COW\n------------------\n\ndefault_singles.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require(\'optimist\')\n .default(\'x\', 10)\n .default(\'y\', 10)\n .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n $ ./default_singles.js -x 5\n 15\n\ndefault_hash.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require(\'optimist\')\n .default({ x : 10, y : 10 })\n .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n $ ./default_hash.js -y 7\n 17\n\nAnd if you really want to get all descriptive about it...\n---------------------------------------------------------\n\nboolean_single.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require(\'optimist\')\n .boolean(\'v\')\n .argv\n;\nconsole.dir(argv);\n````\n\n***\n\n $ ./boolean_single.js -v foo bar baz\n true\n [ \'bar\', \'baz\', \'foo\' ]\n\nboolean_double.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require(\'optimist\')\n .boolean([\'x\',\'y\',\'z\'])\n .argv\n;\nconsole.dir([ argv.x, argv.y, argv.z ]);\nconsole.dir(argv._);\n````\n\n***\n\n $ ./boolean_double.js -x -z one two three\n [ true, false, true ]\n [ \'one\', \'two\', \'three\' ]\n\nOptimist is here to help...\n---------------------------\n\nYou can describe parameters for help messages and set aliases. Optimist figures\nout how to format a handy help string automatically.\n\nline_count.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require(\'optimist\')\n .usage(\'Count the lines in a file.\\nUsage: $0\')\n .demand(\'f\')\n .alias(\'f\', \'file\')\n .describe(\'f\', \'Load a file\')\n .argv\n;\n\nvar fs = require(\'fs\');\nvar s = fs.createReadStream(argv.file);\n\nvar lines = 0;\ns.on(\'data\', function (buf) {\n lines += buf.toString().match(/\\n/g).length;\n});\n\ns.on(\'end\', function () {\n console.log(lines);\n});\n````\n\n***\n\n $ node line_count.js\n Count the lines in a file.\n Usage: node ./line_count.js\n\n Options:\n -f, --file Load a file [required]\n\n Missing required arguments: f\n\n $ node line_count.js --file line_count.js \n 20\n \n $ node line_count.js -f line_count.js \n 20\n\nmethods\n=======\n\nBy itself,\n\n````javascript\nrequire(\'optimist\').argv\n`````\n\nwill use `process.argv` array to construct the `argv` object.\n\nYou can pass in the `process.argv` yourself:\n\n````javascript\nrequire(\'optimist\')([ \'-x\', \'1\', \'-y\', \'2\' ]).argv\n````\n\nor use .parse() to do the same thing:\n\n````javascript\nrequire(\'optimist\').parse([ \'-x\', \'1\', \'-y\', \'2\' ])\n````\n\nThe rest of these methods below come in just before the terminating `.argv`.\n\n.alias(key, alias)\n------------------\n\nSet key names as equivalent such that updates to a key will propagate to aliases\nand vice-versa.\n\nOptionally `.alias()` can take an object that maps keys to aliases.\n\n.default(key, value)\n--------------------\n\nSet `argv[key]` to `value` if no option was specified on `process.argv`.\n\nOptionally `.default()` can take an object that maps keys to default values.\n\n.demand(key)\n------------\n\nIf `key` is a string, show the usage information and exit if `key` wasn\'t\nspecified in `process.argv`.\n\nIf `key` is a number, demand at least as many non-option arguments, which show\nup in `argv._`.\n\nIf `key` is an Array, demand each element.\n\n.describe(key, desc)\n--------------------\n\nDescribe a `key` for the generated usage information.\n\nOptionally `.describe()` can take an object that maps keys to descriptions.\n\n.options(key, opt)\n------------------\n\nInstead of chaining together `.alias().demand().default()`, you can specify\nkeys in `opt` for each of the chainable methods.\n\nFor example:\n\n````javascript\nvar argv = require(\'optimist\')\n .options(\'f\', {\n alias : \'file\',\n default : \'/etc/passwd\',\n })\n .argv\n;\n````\n\nis the same as\n\n````javascript\nvar argv = require(\'optimist\')\n .alias(\'f\', \'file\')\n .default(\'f\', \'/etc/passwd\')\n .argv\n;\n````\n\nOptionally `.options()` can take an object that maps keys to `opt` parameters.\n\n.usage(message)\n---------------\n\nSet a usage message to show which commands to use. Inside `message`, the string\n`$0` will get interpolated to the current script name or node command for the\npresent script similar to how `$0` works in bash or perl.\n\n.check(fn)\n----------\n\nCheck that certain conditions are met in the provided arguments.\n\nIf `fn` throws or returns `false`, show the thrown error, usage information, and\nexit.\n\n.boolean(key)\n-------------\n\nInterpret `key` as a boolean. If a non-flag option follows `key` in\n`process.argv`, that string won\'t get set as the value of `key`.\n\nIf `key` never shows up as a flag in `process.arguments`, `argv[key]` will be\n`false`.\n\nIf `key` is an Array, interpret all the elements as booleans.\n\n.string(key)\n------------\n\nTell the parser logic not to interpret `key` as a number or boolean.\nThis can be useful if you need to preserve leading zeros in an input.\n\nIf `key` is an Array, interpret all the elements as strings.\n\n.wrap(columns)\n--------------\n\nFormat usage output to wrap at `columns` many columns.\n\n.help()\n-------\n\nReturn the generated usage string.\n\n.showHelp(fn=console.error)\n---------------------------\n\nPrint the usage data using `fn` for printing.\n\n.parse(args)\n------------\n\nParse `args` instead of `process.argv`. Returns the `argv` object.\n\n.argv\n-----\n\nGet the arguments as a plain old object.\n\nArguments without a corresponding flag show up in the `argv._` array.\n\nThe script name or node command is available at `argv.$0` similarly to how `$0`\nworks in bash or perl.\n\nparsing tricks\n==============\n\nstop parsing\n------------\n\nUse `--` to stop parsing flags and stuff the remainder into `argv._`.\n\n $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4\n { _: [ \'-c\', \'3\', \'-d\', \'4\' ],\n \'$0\': \'node ./examples/reflect.js\',\n a: 1,\n b: 2 }\n\nnegate fields\n-------------\n\nIf you want to explicity set a field to false instead of just leaving it\nundefined or to override a default you can do `--no-key`.\n\n $ node examples/reflect.js -a --no-b\n { _: [],\n \'$0\': \'node ./examples/reflect.js\',\n a: true,\n b: false }\n\nnumbers\n-------\n\nEvery argument that looks like a number (`!isNaN(Number(arg))`) is converted to\none. This way you can just `net.createConnection(argv.port)` and you can add\nnumbers out of `argv` with `+` without having that mean concatenation,\nwhich is super frustrating.\n\nduplicates\n----------\n\nIf you specify a flag multiple times it will get turned into an array containing\nall the values in order.\n\n $ node examples/reflect.js -x 5 -x 8 -x 0\n { _: [],\n \'$0\': \'node ./examples/reflect.js\',\n x: [ 5, 8, 0 ] }\n\ndot notation\n------------\n\nWhen you use dots (`.`s) in argument names, an implicit object path is assumed.\nThis lets you organize arguments into nested objects.\n\n $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5\n { _: [],\n \'$0\': \'node ./examples/reflect.js\',\n foo: { bar: { baz: 33 }, quux: 5 } }\n\nshort numbers\n-------------\n\nShort numeric `head -n5` style argument work too:\n\n $ node reflect.js -n123 -m456\n { \'3\': true,\n \'6\': true,\n _: [],\n \'$0\': \'node ./reflect.js\',\n n: 123,\n m: 456 }\n\ninstallation\n============\n\nWith [npm](http://github.com/isaacs/npm), just do:\n npm install optimist\n \nor clone this project on github:\n\n git clone http://github.com/substack/node-optimist.git\n\nTo run the tests with [expresso](http://github.com/visionmedia/expresso),\njust do:\n \n expresso\n\ninspired By\n===========\n\nThis module is loosely inspired by Perl\'s\n[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).\n',
npm sill resolved readmeFilename: 'readme.markdown',
npm sill resolved bugs: { url: 'https://github.com/substack/node-optimist/issues' },
npm sill resolved homepage: 'https://github.com/substack/node-optimist',
npm sill resolved _id: 'optimist@0.5.0',
npm sill resolved _from: 'optimist@0.5.0' },
npm sill resolved { name: 'lock',
npm sill resolved version: '0.0.3',
npm sill resolved homepage: 'https://github.com/dominictarr/lock',
npm sill resolved repository: { type: 'git', url: 'git://github.com/dominictarr/lock.git' },
npm sill resolved dependencies: { tape: '~0.2.2' },
npm sill resolved devDependencies: {},
npm sill resolved scripts: { test: 'set -e; for t in test/*.js; do node $t; done' },
npm sill resolved author:
npm sill resolved { name: 'Dominic Tarr',
npm sill resolved email: 'dominic.tarr@gmail.com',
npm sill resolved url: 'http://dominictarr.com' },
npm sill resolved license: 'MIT',
npm sill resolved readme: '# lock\n\nlock asynchronous resources.\n\n## Simple Example\n\n``` js\nvar Lock = require(\'lock\')\nvar lock = Lock()\n\nlock(\'key\', function (release) { //called when resource is available.\n\n //do an async operation, and wrap the callback with release.\n someAsyncOperation(args,..., release(function (err) {\n //\'key\' is not unlocked!\n })\n})\n```\n\n## Multiple Locks at Once.\n\n``` js\nvar Lock = require(\'lock\')\nvar lock = Lock()\n\nlock([\'A\', \'B\', \'C\'], function (release) { //called, when ALL\n //resources are available.\n\n //do an async operation, and wrap the callback with release(cb)\n someAsyncOperation(args,..., release(function (err) {\n //A, B & C are now unlocked!\n })\n})\n```\n\nused in [level-update](https://github.com/dominictarr/level-update)\n\n## License\n\nMIT\n\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved description: 'lock asynchronous resources.',
npm sill resolved bugs: { url: 'https://github.com/dominictarr/lock/issues' },
npm sill resolved _id: 'lock@0.0.3',
npm sill resolved _from: 'lock@0.0.3' },
npm sill resolved { name: 'couchr',
npm sill resolved description: 'Lightweight XHR wrapper for CouchDB requests',
npm sill resolved version: '0.0.13',
npm sill resolved categories: [ 'AJAX & Websockets', 'API Clients' ],
npm sill resolved jam:
npm sill resolved { main: 'couchr-browser.js',
npm sill resolved include: [Object],
npm sill resolved dependencies: [Object] },
npm sill resolved main: 'couchr-node.js',
npm sill resolved dependencies: { follow: '0.8.0' },
npm sill resolved github: 'https://github.com/caolan/couchr',
npm sill resolved bugs: { url: 'https://github.com/caolan/couchr/issues' },
npm sill resolved repositories: [ [Object] ],
npm sill resolved licenses: [ [Object] ],
npm sill resolved readme: '# couchr\n\nSimple request library for CouchDB. Provides both a Node.js module and a\nbrowser module (based on jQuery.ajax), with better CouchDB error reporting\nand a simpler API than making XHR requests directly in the browser.\n\n\n### Examples\n\n```javascript\n// browser\nrequire([\'couchr\'], function (couchr) {\n couchr.get(\'/dbname/docid\', function (err, doc) {\n ...\n });\n});\n\n// Node\nvar couchr = require(\'couchr\');\ncouchr.get(\'http://hostname:port/dbname/docid\', function (err, doc) {\n ...\n});\n```\n\n### Methods\n\n```javascript\ncouchr.get (url, /*optional*/params, function (err, res, req) { ... })\ncouchr.post(url, /*optional*/data, function (err, res, req) { ... })\ncouchr.put (url, /*optional*/data, function (err, res, req) { ... })\ncouchr.del (url, /*optional*/data, function (err, res, req) { ... })\ncouchr.head(url, function (err, res, req) { ... })\n\ncouchr.copy(from, to, function (err, res, req) { ... }) \n\nvar feed = couchr.changes(db_url);\nfeed.on(\'change\', function (change_object) { ... });\nfeed.on(\'error\', function (err) { ... });\nfeed.pause();\nfeed.resume();\n```\n\n### Installation\n\nBrowser (using [jam](http://jamjs.org)):\n\n jam install couchr\n\nNode (using [npm](http://npmjs.org)):\n\n npm install couchr\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved repository: { type: 'git', url: 'https://github.com/caolan/couchr.git' },
npm sill resolved homepage: 'https://github.com/caolan/couchr',
npm sill resolved _id: 'couchr@0.0.13',
npm sill resolved _from: 'couchr@0.0.13' },
npm sill resolved { name: 'dispatch',
npm sill resolved description: 'A regular expression URL dispatcher for Connect',
npm sill resolved main: './index',
npm sill resolved author: { name: 'Caolan McMahon' },
npm sill resolved version: '0.2.0',
npm sill resolved repository: { type: 'git', url: 'http://github.com/caolan/dispatch.git' },
npm sill resolved bugs: { url: 'http://github.com/caolan/dispatch/issues' },
npm sill resolved licenses: [ [Object] ],
npm sill resolved readme: '# Dispatch\n\nA really simple URL dispatcher for\n[Connect](http://github.com/senchalabs/connect). Allows arbitrarily nested\nregular expressions for matching URLs and calling an associated function.\n\n var Connect = require(\'connect\'),\n dispatch = require(\'dispatch\');\n\n Connect.createServer(\n dispatch({\n \'/about\': function(req, res, next){\n ...\n },\n \'/user/:id\': function(req, res, next, id){\n ...\n },\n \'/user/posts\': function(req, res, next){\n ...\n },\n \'/user/posts/(\\\\w+)\': function(req, res, next, post){\n ...\n }\n })\n );\n\nDispatch can be used with a straight-forward object literal containing view\nfunctions keyed by URL. As you can see from the last URL in the list, captured\ngroups are passed to the matching function as an argument.\n\nYou can also use :named parameters in a URL, which is just a more readable way\nof capturing ([^\\/]+). Named parameters are passed to the matched function in\nthe same way as normal regular expression groups.\n\nSo far so predictable. However, it is also possible to nest these objects as\nyou see fit:\n\n Connect.createServer(\n dispatch({\n \'/about\': function(req, res, next){ ... },\n \'/user\': {\n \'/\': function(req, res, next){ ... },\n \'/posts\': function(req, res, next){ ... },\n \'/posts/(\\\\w+)\': function(req, res, next, post){ ... }\n }\n })\n );\n\nThis helps you tidy up the structure to make it more readable. It also makes\nrenaming higher-level parts of the path much simpler. If we wanted to change\n\'user\' to \'member\', we\'d now only have to do that once. Another advantage of\nbeing able to nest groups of URLs is mounting reusable apps in your site tree.\nLet\'s assume that \'user\' is actually provided by another module:\n\n Connect.createServer(\n dispatch({\n \'/about\': function(req, res, next){ ... },\n \'/user\': require(\'./user\').urls\n })\n );\n\nEasy! A really lightweight and flexible URL dispatcher that just does the\nobvious.\n\nIts also possible to define methods for URLs:\n\n Connect.createServer(\n dispatch({\n \'/user\': {\n \'GET /item\': function(req, res, next){ ... },\n \'POST /item\': function(req, res, next){ ... },\n }\n })\n );\n\nJust prefix the URL with the http method in uppercase followed by whitespace\nand then the path you want to match against. Nested URLs always match the last\nmethod defined in the tree. Because of this, you can use the following style for\nmatching request methods, if you prefer:\n\n dispatch({\n \'/test\': {\n GET: function (req, res, next) {\n ...\n },\n POST: function (req, res, next) {\n ...\n }\n }\n })\n\nA couple of implementation points:\n\n1. The regular expressions automatically have \'^\' and \'$\' added to the pattern\n at the start and end or the URL.\n2. Only the first match is called, subsequent matches for a URL will not be\n called.\n3. If there are no matches, the request is passed to the next handler in the\n Connect middleware chain.\n\nI like to combine this with [quip](http://github.com/caolan/quip) for rapid\nprototyping and just getting my ideas down in code:\n\n var Connect = require(\'connect\'),\n quip = require(\'quip\'),\n dispatch = require(\'dispatch\');\n\n var server = Connect.createServer(\n quip(),\n dispatch({\n \'/\': function(req, res, next){\n res.text(\'hello world!\');\n },\n \'/api\': function(req, res, next){\n res.json({hello: \'world\'});\n }\n })\n );\n\n server.listen(8080);\n\nHave fun!\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/caolan/dispatch',
npm sill resolved _id: 'dispatch@0.2.0',
npm sill resolved _from: 'dispatch@0.2.0' },
npm sill resolved { name: 'mkdirp',
npm sill resolved description: 'Recursively mkdir, like `mkdir -p`',
npm sill resolved version: '0.3.5',
npm sill resolved author:
npm sill resolved { name: 'James Halliday',
npm sill resolved email: 'mail@substack.net',
npm sill resolved url: 'http://substack.net' },
npm sill resolved main: './index',
npm sill resolved keywords: [ 'mkdir', 'directory' ],
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'http://github.com/substack/node-mkdirp.git' },
npm sill resolved scripts: { test: 'tap test/*.js' },
npm sill resolved devDependencies: { tap: '~0.4.0' },
npm sill resolved license: 'MIT',
npm sill resolved readme: '# mkdirp\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\n# example\n\n## pow.js\n\n```js\nvar mkdirp = require(\'mkdirp\');\n \nmkdirp(\'/tmp/foo/bar/baz\', function (err) {\n if (err) console.error(err)\n else console.log(\'pow!\')\n});\n```\n\nOutput\n\n```\npow!\n```\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\n# methods\n\n```js\nvar mkdirp = require(\'mkdirp\');\n```\n\n## mkdirp(dir, mode, cb)\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\n## mkdirp.sync(dir, mode)\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\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install mkdirp\n```\n\n# license\n\nMIT\n',
npm sill resolved readmeFilename: 'readme.markdown',
npm sill resolved bugs: { url: 'https://github.com/substack/node-mkdirp/issues' },
npm sill resolved homepage: 'https://github.com/substack/node-mkdirp',
npm sill resolved _id: 'mkdirp@0.3.5',
npm sill resolved _from: 'mkdirp@0.3.5' },
npm sill resolved { name: 'combine-streams',
npm sill resolved description: 'Append streams and data into one mother stream',
npm sill resolved version: '0.0.4',
npm sill resolved author:
npm sill resolved { name: 'Jonathan Ong',
npm sill resolved email: 'me@jongleberry.com',
npm sill resolved url: 'http://jongleberry.com' },
npm sill resolved license: 'MIT',
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'https://github.com/stream-utils/combine-streams.git' },
npm sill resolved bugs: { url: 'https://github.com/stream-utils/combine-streams/issues' },
npm sill resolved devDependencies: { mocha: '~1.12', 'cat-stream': '*' },
npm sill resolved scripts: { test: 'make test' },
npm sill resolved engines: { node: '>= 0.10.0' },
npm sill resolved readme: '# Combine Streams [![Build Status](https://travis-ci.org/stream-utils/combine-streams.png)](https://travis-ci.org/stream-utils/combine-streams)\n\nBasically a streams2 version of [combined-stream](https://github.com/felixge/node-combined-stream).\nAllows you to combine streams as well as strings and buffers into a single stream.\nWhy? I don\'t know.\nI just saw this repo and thought, "hey, this sucks because it\'s not streams2".\n\n## Example\n\n```js\ncombine()\n.append(fs.createReadStream(\'file1.txt\'))\n.append(fs.createReadStream(\'file2.txt\'))\n.append(null)\n.pipe(process.stdout)\n```\n\n## API\n\n### Combine([options])\n\nCreates a new `Combine` instance.\n`options` are passed to `require(\'stream\').PassThrough`.\n\n```js\nvar combine = require(\'combine-streams\')\n```\n\n### combine.append(obj)\n\nYou can append:\n\n- A readable stream\n- A buffer\n- A string\n- A thunk that returns one of the above\n\nTo signify that you are done appending items,\nyou must call `combine.append(null)` just like a readable stream\'s `.push(null)` implementation.\n\n```js\ncombine()\n.append(fs.createReadStream(\'file1.txt\'))\n.append(\'End of the first file.\')\n.append(function (done) {\n done(null, fs.createReadStream(\'file2.txt\'))\n})\n.append(\'End of the second file.\')\n.append(null)\n.pipe(process.stdout)\n```\n\n### combine.pipe(dest [, options])\n\n`combine` itself is a readable stream,\nso you should probably use `combine.pipe(dest)`.\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the "Software"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/stream-utils/combine-streams',
npm sill resolved _id: 'combine-streams@0.0.4',
npm sill resolved _from: 'combine-streams@0.0.4' },
npm sill resolved { name: 'cli-color',
npm sill resolved version: '0.2.2',
npm sill resolved description: 'Colors, formatting and other tools for the console',
npm sill resolved keywords:
npm sill resolved [ 'ansi',
npm sill resolved 'color',
npm sill resolved 'console',
npm sill resolved 'terminal',
npm sill resolved 'cli',
npm sill resolved 'shell',
npm sill resolved 'log',
npm sill resolved 'logging',
npm sill resolved 'xterm' ],
npm sill resolved author:
npm sill resolved { name: 'Mariusz Nowak',
npm sill resolved email: 'medikoo+cli-color@medikoo.com',
npm sill resolved url: 'http://www.medikoo.com/' },
npm sill resolved main: 'lib',
npm sill resolved repository: { type: 'git', url: 'git://github.com/medikoo/cli-color.git' },
npm sill resolved bugs:
npm sill resolved { url: 'https://github.com/medikoo/cli-color/issues',
npm sill resolved email: 'medikoo+cli-color@medikoo.com' },
npm sill resolved engines: { node: '>=0.1.103' },
npm sill resolved dependencies: { 'es5-ext': '~0.9.1', memoizee: '0.2.x' },
npm sill resolved devDependencies: { clock: '0.1.x', tad: '0.1.x' },
npm sill resolved scripts: { test: 'node ./node_modules/tad/bin/tad lib' },
npm sill resolved licence: 'MIT',
npm sill resolved readme: '# cli-color - Yet another colors and formatting for the console solution\n\nColors, formatting and other goodies for the console. This package won\'t mess with built-ins and provides neat way to predefine formatting patterns, see below.\n\n## Installation\n\n\t$ npm install cli-color\n\n## Usage\n\nUsage:\n\n```javascript\nvar clc = require(\'cli-color\');\n```\n\nOutput colored text:\n\n```javascript\nconsole.log(clc.red(\'Text in red\'));\n```\n\nStyles can be mixed:\n\n```javascript\nconsole.log(clc.red.bgWhite.underline(\'Underlined red text on white background.\'));\n```\n\nStyled text can be mixed with unstyled:\n\n```javascript\nconsole.log(clc.red(\'red\') + \' plain \' + clc.blue(\'blue\'));\n```\n\n__Best way is to predefine needed stylings and then use it__:\n\n```javascript\nvar error = clc.red.bold;\nvar warn = clc.yellow;\nvar notice = clc.blue;\n\nconsole.log(error(\'Error!\'));\nconsole.log(warn(\'Warning\'));\nconsole.log(notice(\'Notice\'));\n```\n\nSupported are all ANSI colors and styles:\n\n#### Styles\n\nStyles will display correctly if font used in your console supports them.\n\n* bold\n* italic\n* underline\n* inverse\n* strike\n\n#### Colors\n\n<table>\n <thead><th>Foreground</th><th>Background</th><th width="30"></th></thead>\n <tbody>\n <tr><td>black</td><td>bgBlack</td><td><img src="http://medyk.org/colors/000000.png" width="30" height="30" /></td></tr>\n <tr><td>red</td><td>bgRed</td><td><img src="http://medyk.org/colors/800000.png" width="30" height="30" /></td></tr>\n <tr><td>green</td><td>bgGreen</td><td><img src="http://medyk.org/colors/008000.png" width="30" height="30" /></td></tr>\n <tr><td>yellow</td><td>bgYellow</td><td><img src="http://medyk.org/colors/808000.png" width="30" height="30" /></td></tr>\n <tr><td>blue</td><td>bgBlue</td><td><img src="http://medyk.org/colors/000080.png" width="30" height="30" /></td></tr>\n <tr><td>magenta</td><td>bgMagenta</td><td><img src="http://medyk.org/colors/800080.png" width="30" height="30" /></td></tr>\n <tr><td>cyan</td><td>bgCyan</td><td><img src="http://medyk.org/colors/008080.png" width="30" height="30" /></td></tr>\n <tr><td>white</td><td>bgWhite</td><td><img src="http://medyk.org/colors/c0c0c0.png" width="30" height="30" /></td></tr>\n </tbody>\n</table>\n\n##### Bright variants\n\n<table>\n <thead><th>Foreground</th><th>Background</th><th width="30"></th></thead>\n <tbody>\n <tr><td>blackBright</td><td>bgBlackBright</td><td><img src="http://medyk.org/colors/808080.png" width="30" height="30" /></td></tr>\n <tr><td>redBright</td><td>bgRedBright</td><td><img src="http://medyk.org/colors/ff0000.png" width="30" height="30" /></td></tr>\n <tr><td>greenBright</td><td>bgGreenBright</td><td><img src="http://medyk.org/colors/00ff00.png" width="30" height="30" /></td></tr>\n <tr><td>yellowBright</td><td>bgYellowBright</td><td><img src="http://medyk.org/colors/ffff00.png" width="30" height="30" /></td></tr>\n <tr><td>blueBright</td><td>bgBlueBright</td><td><img src="http://medyk.org/colors/0000ff.png" width="30" height="30" /></td></tr>\n <tr><td>magentaBright</td><td>bgMagentaBright</td><td><img src="http://medyk.org/colors/ff00ff.png" width="30" height="30" /></td></tr>\n <tr><td>cyanBright</td><td>bgCyanBright</td><td><img src="http://medyk.org/colors/00ffff.png" width="30" height="30" /></td></tr>\n <tr><td>whiteBright</td><td>bgWhiteBright</td><td><img src="http://medyk.org/colors/ffffff.png" width="30" height="30" /></td></tr>\n </tbody>\n</table>\n\n##### xTerm colors (256 colors table)\n\n__Not supported on Windows and some terminals__. However if used in not supported environment, the closest color from basic (16 colors) palette is chosen.\n\nUsage:\n\n```javascript\nvar msg = clc.xterm(202).bgXterm(236);\nconsole.log(msg(\'Orange text on dark gray background\'));\n```\n\nColor table:\n\n<table>\n <tr>\n <td>0</td><td width="20"><img src="http://medyk.org/colors/000000.png" width="20" height="20" /></td>\n <td>1</td><td width="20"><img src="http://medyk.org/colors/800000.png" width="20" height="20" /></td>\n <td>2</td><td width="20"><img src="http://medyk.org/colors/008000.png" width="20" height="20" /></td>\n <td>3</td><td width="20"><img src="http://medyk.org/colors/808000.png" width="20" height="20" /></td>\n <td>4</td><td width="20"><img src="http://medyk.org/colors/000080.png" width="20" height="20" /></td>\n <td>5</td><td width="20"><img src="http://medyk.org/colors/800080.png" width="20" height="20" /></td>\n <td>6</td><td width="20"><img src="http://medyk.org/colors/008080.png" width="20" height="20" /></td>\n <td>7</td><td width="20"><img src="http://medyk.org/colors/c0c0c0.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>8</td><td width="20"><img src="http://medyk.org/colors/808080.png" width="20" height="20" /></td>\n <td>9</td><td width="20"><img src="http://medyk.org/colors/ff0000.png" width="20" height="20" /></td>\n <td>10</td><td width="20"><img src="http://medyk.org/colors/00ff00.png" width="20" height="20" /></td>\n <td>11</td><td width="20"><img src="http://medyk.org/colors/ffff00.png" width="20" height="20" /></td>\n <td>12</td><td width="20"><img src="http://medyk.org/colors/0000ff.png" width="20" height="20" /></td>\n <td>13</td><td width="20"><img src="http://medyk.org/colors/ff00ff.png" width="20" height="20" /></td>\n <td>14</td><td width="20"><img src="http://medyk.org/colors/00ffff.png" width="20" height="20" /></td>\n <td>15</td><td width="20"><img src="http://medyk.org/colors/ffffff.png" width="20" height="20" /></td>\n </tr>\n\n <tr>\n <td>16</td><td width="20"><img src="http://medyk.org/colors/000000.png" width="20" height="20" /></td>\n <td>17</td><td width="20"><img src="http://medyk.org/colors/00005f.png" width="20" height="20" /></td>\n <td>18</td><td width="20"><img src="http://medyk.org/colors/000087.png" width="20" height="20" /></td>\n <td>19</td><td width="20"><img src="http://medyk.org/colors/0000af.png" width="20" height="20" /></td>\n <td>20</td><td width="20"><img src="http://medyk.org/colors/0000d7.png" width="20" height="20" /></td>\n <td>21</td><td width="20"><img src="http://medyk.org/colors/0000ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>22</td><td width="20"><img src="http://medyk.org/colors/005f00.png" width="20" height="20" /></td>\n <td>23</td><td width="20"><img src="http://medyk.org/colors/005f5f.png" width="20" height="20" /></td>\n <td>24</td><td width="20"><img src="http://medyk.org/colors/005f87.png" width="20" height="20" /></td>\n <td>25</td><td width="20"><img src="http://medyk.org/colors/005faf.png" width="20" height="20" /></td>\n <td>26</td><td width="20"><img src="http://medyk.org/colors/005fd7.png" width="20" height="20" /></td>\n <td>27</td><td width="20"><img src="http://medyk.org/colors/005fff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>28</td><td width="20"><img src="http://medyk.org/colors/008700.png" width="20" height="20" /></td>\n <td>29</td><td width="20"><img src="http://medyk.org/colors/00875f.png" width="20" height="20" /></td>\n <td>30</td><td width="20"><img src="http://medyk.org/colors/008787.png" width="20" height="20" /></td>\n <td>31</td><td width="20"><img src="http://medyk.org/colors/0087af.png" width="20" height="20" /></td>\n <td>32</td><td width="20"><img src="http://medyk.org/colors/0087d7.png" width="20" height="20" /></td>\n <td>33</td><td width="20"><img src="http://medyk.org/colors/0087ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>34</td><td width="20"><img src="http://medyk.org/colors/00af00.png" width="20" height="20" /></td>\n <td>35</td><td width="20"><img src="http://medyk.org/colors/00af5f.png" width="20" height="20" /></td>\n <td>36</td><td width="20"><img src="http://medyk.org/colors/00af87.png" width="20" height="20" /></td>\n <td>37</td><td width="20"><img src="http://medyk.org/colors/00afaf.png" width="20" height="20" /></td>\n <td>38</td><td width="20"><img src="http://medyk.org/colors/00afd7.png" width="20" height="20" /></td>\n <td>39</td><td width="20"><img src="http://medyk.org/colors/00afff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>40</td><td width="20"><img src="http://medyk.org/colors/00d700.png" width="20" height="20" /></td>\n <td>41</td><td width="20"><img src="http://medyk.org/colors/00d75f.png" width="20" height="20" /></td>\n <td>42</td><td width="20"><img src="http://medyk.org/colors/00d787.png" width="20" height="20" /></td>\n <td>43</td><td width="20"><img src="http://medyk.org/colors/00d7af.png" width="20" height="20" /></td>\n <td>44</td><td width="20"><img src="http://medyk.org/colors/00d7d7.png" width="20" height="20" /></td>\n <td>45</td><td width="20"><img src="http://medyk.org/colors/00d7ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>46</td><td width="20"><img src="http://medyk.org/colors/00ff00.png" width="20" height="20" /></td>\n <td>47</td><td width="20"><img src="http://medyk.org/colors/00ff5f.png" width="20" height="20" /></td>\n <td>48</td><td width="20"><img src="http://medyk.org/colors/00ff87.png" width="20" height="20" /></td>\n <td>49</td><td width="20"><img src="http://medyk.org/colors/00ffaf.png" width="20" height="20" /></td>\n <td>50</td><td width="20"><img src="http://medyk.org/colors/00ffd7.png" width="20" height="20" /></td>\n <td>51</td><td width="20"><img src="http://medyk.org/colors/00ffff.png" width="20" height="20" /></td>\n </tr>\n\n <tr>\n <td>52</td><td width="20"><img src="http://medyk.org/colors/5f0000.png" width="20" height="20" /></td>\n <td>53</td><td width="20"><img src="http://medyk.org/colors/5f005f.png" width="20" height="20" /></td>\n <td>54</td><td width="20"><img src="http://medyk.org/colors/5f0087.png" width="20" height="20" /></td>\n <td>55</td><td width="20"><img src="http://medyk.org/colors/5f00af.png" width="20" height="20" /></td>\n <td>56</td><td width="20"><img src="http://medyk.org/colors/5f00d7.png" width="20" height="20" /></td>\n <td>57</td><td width="20"><img src="http://medyk.org/colors/5f00ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>58</td><td width="20"><img src="http://medyk.org/colors/5f5f00.png" width="20" height="20" /></td>\n <td>59</td><td width="20"><img src="http://medyk.org/colors/5f5f5f.png" width="20" height="20" /></td>\n <td>60</td><td width="20"><img src="http://medyk.org/colors/5f5f87.png" width="20" height="20" /></td>\n <td>61</td><td width="20"><img src="http://medyk.org/colors/5f5faf.png" width="20" height="20" /></td>\n <td>62</td><td width="20"><img src="http://medyk.org/colors/5f5fd7.png" width="20" height="20" /></td>\n <td>63</td><td width="20"><img src="http://medyk.org/colors/5f5fff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>64</td><td width="20"><img src="http://medyk.org/colors/5f8700.png" width="20" height="20" /></td>\n <td>65</td><td width="20"><img src="http://medyk.org/colors/5f875f.png" width="20" height="20" /></td>\n <td>66</td><td width="20"><img src="http://medyk.org/colors/5f8787.png" width="20" height="20" /></td>\n <td>67</td><td width="20"><img src="http://medyk.org/colors/5f87af.png" width="20" height="20" /></td>\n <td>68</td><td width="20"><img src="http://medyk.org/colors/5f87d7.png" width="20" height="20" /></td>\n <td>69</td><td width="20"><img src="http://medyk.org/colors/5f87ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>70</td><td width="20"><img src="http://medyk.org/colors/5faf00.png" width="20" height="20" /></td>\n <td>71</td><td width="20"><img src="http://medyk.org/colors/5faf5f.png" width="20" height="20" /></td>\n <td>72</td><td width="20"><img src="http://medyk.org/colors/5faf87.png" width="20" height="20" /></td>\n <td>73</td><td width="20"><img src="http://medyk.org/colors/5fafaf.png" width="20" height="20" /></td>\n <td>74</td><td width="20"><img src="http://medyk.org/colors/5fafd7.png" width="20" height="20" /></td>\n <td>75</td><td width="20"><img src="http://medyk.org/colors/5fafff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>76</td><td width="20"><img src="http://medyk.org/colors/5fd700.png" width="20" height="20" /></td>\n <td>77</td><td width="20"><img src="http://medyk.org/colors/5fd75f.png" width="20" height="20" /></td>\n <td>78</td><td width="20"><img src="http://medyk.org/colors/5fd787.png" width="20" height="20" /></td>\n <td>79</td><td width="20"><img src="http://medyk.org/colors/5fd7af.png" width="20" height="20" /></td>\n <td>80</td><td width="20"><img src="http://medyk.org/colors/5fd7d7.png" width="20" height="20" /></td>\n <td>81</td><td width="20"><img src="http://medyk.org/colors/5fd7ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>82</td><td width="20"><img src="http://medyk.org/colors/5fff00.png" width="20" height="20" /></td>\n <td>83</td><td width="20"><img src="http://medyk.org/colors/5fff5f.png" width="20" height="20" /></td>\n <td>84</td><td width="20"><img src="http://medyk.org/colors/5fff87.png" width="20" height="20" /></td>\n <td>85</td><td width="20"><img src="http://medyk.org/colors/5fffaf.png" width="20" height="20" /></td>\n <td>86</td><td width="20"><img src="http://medyk.org/colors/5fffd7.png" width="20" height="20" /></td>\n <td>87</td><td width="20"><img src="http://medyk.org/colors/5fffff.png" width="20" height="20" /></td>\n </tr>\n\n <tr>\n <td>88</td><td width="20"><img src="http://medyk.org/colors/870000.png" width="20" height="20" /></td>\n <td>89</td><td width="20"><img src="http://medyk.org/colors/87005f.png" width="20" height="20" /></td>\n <td>90</td><td width="20"><img src="http://medyk.org/colors/870087.png" width="20" height="20" /></td>\n <td>91</td><td width="20"><img src="http://medyk.org/colors/8700af.png" width="20" height="20" /></td>\n <td>92</td><td width="20"><img src="http://medyk.org/colors/8700d7.png" width="20" height="20" /></td>\n <td>93</td><td width="20"><img src="http://medyk.org/colors/8700ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>94</td><td width="20"><img src="http://medyk.org/colors/875f00.png" width="20" height="20" /></td>\n <td>95</td><td width="20"><img src="http://medyk.org/colors/875f5f.png" width="20" height="20" /></td>\n <td>96</td><td width="20"><img src="http://medyk.org/colors/875f87.png" width="20" height="20" /></td>\n <td>97</td><td width="20"><img src="http://medyk.org/colors/875faf.png" width="20" height="20" /></td>\n <td>98</td><td width="20"><img src="http://medyk.org/colors/875fd7.png" width="20" height="20" /></td>\n <td>99</td><td width="20"><img src="http://medyk.org/colors/875fff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>100</td><td width="20"><img src="http://medyk.org/colors/878700.png" width="20" height="20" /></td>\n <td>101</td><td width="20"><img src="http://medyk.org/colors/87875f.png" width="20" height="20" /></td>\n <td>102</td><td width="20"><img src="http://medyk.org/colors/878787.png" width="20" height="20" /></td>\n <td>103</td><td width="20"><img src="http://medyk.org/colors/8787af.png" width="20" height="20" /></td>\n <td>104</td><td width="20"><img src="http://medyk.org/colors/8787d7.png" width="20" height="20" /></td>\n <td>105</td><td width="20"><img src="http://medyk.org/colors/8787ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>106</td><td width="20"><img src="http://medyk.org/colors/87af00.png" width="20" height="20" /></td>\n <td>107</td><td width="20"><img src="http://medyk.org/colors/87af5f.png" width="20" height="20" /></td>\n <td>108</td><td width="20"><img src="http://medyk.org/colors/87af87.png" width="20" height="20" /></td>\n <td>109</td><td width="20"><img src="http://medyk.org/colors/87afaf.png" width="20" height="20" /></td>\n <td>110</td><td width="20"><img src="http://medyk.org/colors/87afd7.png" width="20" height="20" /></td>\n <td>111</td><td width="20"><img src="http://medyk.org/colors/87afff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>112</td><td width="20"><img src="http://medyk.org/colors/87d700.png" width="20" height="20" /></td>\n <td>113</td><td width="20"><img src="http://medyk.org/colors/87d75f.png" width="20" height="20" /></td>\n <td>114</td><td width="20"><img src="http://medyk.org/colors/87d787.png" width="20" height="20" /></td>\n <td>115</td><td width="20"><img src="http://medyk.org/colors/87d7af.png" width="20" height="20" /></td>\n <td>116</td><td width="20"><img src="http://medyk.org/colors/87d7d7.png" width="20" height="20" /></td>\n <td>117</td><td width="20"><img src="http://medyk.org/colors/87d7ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>118</td><td width="20"><img src="http://medyk.org/colors/87ff00.png" width="20" height="20" /></td>\n <td>119</td><td width="20"><img src="http://medyk.org/colors/87ff5f.png" width="20" height="20" /></td>\n <td>120</td><td width="20"><img src="http://medyk.org/colors/87ff87.png" width="20" height="20" /></td>\n <td>121</td><td width="20"><img src="http://medyk.org/colors/87ffaf.png" width="20" height="20" /></td>\n <td>122</td><td width="20"><img src="http://medyk.org/colors/87ffd7.png" width="20" height="20" /></td>\n <td>123</td><td width="20"><img src="http://medyk.org/colors/87ffff.png" width="20" height="20" /></td>\n </tr>\n\n <tr>\n <td>124</td><td width="20"><img src="http://medyk.org/colors/af0000.png" width="20" height="20" /></td>\n <td>125</td><td width="20"><img src="http://medyk.org/colors/af005f.png" width="20" height="20" /></td>\n <td>126</td><td width="20"><img src="http://medyk.org/colors/af0087.png" width="20" height="20" /></td>\n <td>127</td><td width="20"><img src="http://medyk.org/colors/af00af.png" width="20" height="20" /></td>\n <td>128</td><td width="20"><img src="http://medyk.org/colors/af00d7.png" width="20" height="20" /></td>\n <td>129</td><td width="20"><img src="http://medyk.org/colors/af00ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>130</td><td width="20"><img src="http://medyk.org/colors/af5f00.png" width="20" height="20" /></td>\n <td>131</td><td width="20"><img src="http://medyk.org/colors/af5f5f.png" width="20" height="20" /></td>\n <td>132</td><td width="20"><img src="http://medyk.org/colors/af5f87.png" width="20" height="20" /></td>\n <td>133</td><td width="20"><img src="http://medyk.org/colors/af5faf.png" width="20" height="20" /></td>\n <td>134</td><td width="20"><img src="http://medyk.org/colors/af5fd7.png" width="20" height="20" /></td>\n <td>135</td><td width="20"><img src="http://medyk.org/colors/af5fff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>136</td><td width="20"><img src="http://medyk.org/colors/af8700.png" width="20" height="20" /></td>\n <td>137</td><td width="20"><img src="http://medyk.org/colors/af875f.png" width="20" height="20" /></td>\n <td>138</td><td width="20"><img src="http://medyk.org/colors/af8787.png" width="20" height="20" /></td>\n <td>139</td><td width="20"><img src="http://medyk.org/colors/af87af.png" width="20" height="20" /></td>\n <td>140</td><td width="20"><img src="http://medyk.org/colors/af87d7.png" width="20" height="20" /></td>\n <td>141</td><td width="20"><img src="http://medyk.org/colors/af87ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>142</td><td width="20"><img src="http://medyk.org/colors/afaf00.png" width="20" height="20" /></td>\n <td>143</td><td width="20"><img src="http://medyk.org/colors/afaf5f.png" width="20" height="20" /></td>\n <td>144</td><td width="20"><img src="http://medyk.org/colors/afaf87.png" width="20" height="20" /></td>\n <td>145</td><td width="20"><img src="http://medyk.org/colors/afafaf.png" width="20" height="20" /></td>\n <td>146</td><td width="20"><img src="http://medyk.org/colors/afafd7.png" width="20" height="20" /></td>\n <td>147</td><td width="20"><img src="http://medyk.org/colors/afafff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>148</td><td width="20"><img src="http://medyk.org/colors/afd700.png" width="20" height="20" /></td>\n <td>149</td><td width="20"><img src="http://medyk.org/colors/afd75f.png" width="20" height="20" /></td>\n <td>150</td><td width="20"><img src="http://medyk.org/colors/afd787.png" width="20" height="20" /></td>\n <td>151</td><td width="20"><img src="http://medyk.org/colors/afd7af.png" width="20" height="20" /></td>\n <td>152</td><td width="20"><img src="http://medyk.org/colors/afd7d7.png" width="20" height="20" /></td>\n <td>153</td><td width="20"><img src="http://medyk.org/colors/afd7ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>154</td><td width="20"><img src="http://medyk.org/colors/afff00.png" width="20" height="20" /></td>\n <td>155</td><td width="20"><img src="http://medyk.org/colors/afff5f.png" width="20" height="20" /></td>\n <td>156</td><td width="20"><img src="http://medyk.org/colors/afff87.png" width="20" height="20" /></td>\n <td>157</td><td width="20"><img src="http://medyk.org/colors/afffaf.png" width="20" height="20" /></td>\n <td>158</td><td width="20"><img src="http://medyk.org/colors/afffd7.png" width="20" height="20" /></td>\n <td>159</td><td width="20"><img src="http://medyk.org/colors/afffff.png" width="20" height="20" /></td>\n </tr>\n\n <tr>\n <td>160</td><td width="20"><img src="http://medyk.org/colors/d70000.png" width="20" height="20" /></td>\n <td>161</td><td width="20"><img src="http://medyk.org/colors/d7005f.png" width="20" height="20" /></td>\n <td>162</td><td width="20"><img src="http://medyk.org/colors/d70087.png" width="20" height="20" /></td>\n <td>163</td><td width="20"><img src="http://medyk.org/colors/d700af.png" width="20" height="20" /></td>\n <td>164</td><td width="20"><img src="http://medyk.org/colors/d700d7.png" width="20" height="20" /></td>\n <td>165</td><td width="20"><img src="http://medyk.org/colors/d700ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>166</td><td width="20"><img src="http://medyk.org/colors/d75f00.png" width="20" height="20" /></td>\n <td>167</td><td width="20"><img src="http://medyk.org/colors/d75f5f.png" width="20" height="20" /></td>\n <td>168</td><td width="20"><img src="http://medyk.org/colors/d75f87.png" width="20" height="20" /></td>\n <td>169</td><td width="20"><img src="http://medyk.org/colors/d75faf.png" width="20" height="20" /></td>\n <td>170</td><td width="20"><img src="http://medyk.org/colors/d75fd7.png" width="20" height="20" /></td>\n <td>171</td><td width="20"><img src="http://medyk.org/colors/d75fff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>172</td><td width="20"><img src="http://medyk.org/colors/d78700.png" width="20" height="20" /></td>\n <td>173</td><td width="20"><img src="http://medyk.org/colors/d7875f.png" width="20" height="20" /></td>\n <td>174</td><td width="20"><img src="http://medyk.org/colors/d78787.png" width="20" height="20" /></td>\n <td>175</td><td width="20"><img src="http://medyk.org/colors/d787af.png" width="20" height="20" /></td>\n <td>176</td><td width="20"><img src="http://medyk.org/colors/d787d7.png" width="20" height="20" /></td>\n <td>177</td><td width="20"><img src="http://medyk.org/colors/d787ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>178</td><td width="20"><img src="http://medyk.org/colors/d7af00.png" width="20" height="20" /></td>\n <td>179</td><td width="20"><img src="http://medyk.org/colors/d7af5f.png" width="20" height="20" /></td>\n <td>180</td><td width="20"><img src="http://medyk.org/colors/d7af87.png" width="20" height="20" /></td>\n <td>181</td><td width="20"><img src="http://medyk.org/colors/d7afaf.png" width="20" height="20" /></td>\n <td>182</td><td width="20"><img src="http://medyk.org/colors/d7afd7.png" width="20" height="20" /></td>\n <td>183</td><td width="20"><img src="http://medyk.org/colors/d7afff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>184</td><td width="20"><img src="http://medyk.org/colors/d7d700.png" width="20" height="20" /></td>\n <td>185</td><td width="20"><img src="http://medyk.org/colors/d7d75f.png" width="20" height="20" /></td>\n <td>186</td><td width="20"><img src="http://medyk.org/colors/d7d787.png" width="20" height="20" /></td>\n <td>187</td><td width="20"><img src="http://medyk.org/colors/d7d7af.png" width="20" height="20" /></td>\n <td>188</td><td width="20"><img src="http://medyk.org/colors/d7d7d7.png" width="20" height="20" /></td>\n <td>189</td><td width="20"><img src="http://medyk.org/colors/d7d7ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>190</td><td width="20"><img src="http://medyk.org/colors/d7ff00.png" width="20" height="20" /></td>\n <td>191</td><td width="20"><img src="http://medyk.org/colors/d7ff5f.png" width="20" height="20" /></td>\n <td>192</td><td width="20"><img src="http://medyk.org/colors/d7ff87.png" width="20" height="20" /></td>\n <td>193</td><td width="20"><img src="http://medyk.org/colors/d7ffaf.png" width="20" height="20" /></td>\n <td>194</td><td width="20"><img src="http://medyk.org/colors/d7ffd7.png" width="20" height="20" /></td>\n <td>195</td><td width="20"><img src="http://medyk.org/colors/d7ffff.png" width="20" height="20" /></td>\n </tr>\n\n <tr>\n <td>196</td><td width="20"><img src="http://medyk.org/colors/ff0000.png" width="20" height="20" /></td>\n <td>197</td><td width="20"><img src="http://medyk.org/colors/ff005f.png" width="20" height="20" /></td>\n <td>198</td><td width="20"><img src="http://medyk.org/colors/ff0087.png" width="20" height="20" /></td>\n <td>199</td><td width="20"><img src="http://medyk.org/colors/ff00af.png" width="20" height="20" /></td>\n <td>200</td><td width="20"><img src="http://medyk.org/colors/ff00d7.png" width="20" height="20" /></td>\n <td>201</td><td width="20"><img src="http://medyk.org/colors/ff00ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>202</td><td width="20"><img src="http://medyk.org/colors/ff5f00.png" width="20" height="20" /></td>\n <td>203</td><td width="20"><img src="http://medyk.org/colors/ff5f5f.png" width="20" height="20" /></td>\n <td>204</td><td width="20"><img src="http://medyk.org/colors/ff5f87.png" width="20" height="20" /></td>\n <td>205</td><td width="20"><img src="http://medyk.org/colors/ff5faf.png" width="20" height="20" /></td>\n <td>206</td><td width="20"><img src="http://medyk.org/colors/ff5fd7.png" width="20" height="20" /></td>\n <td>207</td><td width="20"><img src="http://medyk.org/colors/ff5fff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>208</td><td width="20"><img src="http://medyk.org/colors/ff8700.png" width="20" height="20" /></td>\n <td>209</td><td width="20"><img src="http://medyk.org/colors/ff875f.png" width="20" height="20" /></td>\n <td>210</td><td width="20"><img src="http://medyk.org/colors/ff8787.png" width="20" height="20" /></td>\n <td>211</td><td width="20"><img src="http://medyk.org/colors/ff87af.png" width="20" height="20" /></td>\n <td>212</td><td width="20"><img src="http://medyk.org/colors/ff87d7.png" width="20" height="20" /></td>\n <td>213</td><td width="20"><img src="http://medyk.org/colors/ff87ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>214</td><td width="20"><img src="http://medyk.org/colors/ffaf00.png" width="20" height="20" /></td>\n <td>215</td><td width="20"><img src="http://medyk.org/colors/ffaf5f.png" width="20" height="20" /></td>\n <td>216</td><td width="20"><img src="http://medyk.org/colors/ffaf87.png" width="20" height="20" /></td>\n <td>217</td><td width="20"><img src="http://medyk.org/colors/ffafaf.png" width="20" height="20" /></td>\n <td>218</td><td width="20"><img src="http://medyk.org/colors/ffafd7.png" width="20" height="20" /></td>\n <td>219</td><td width="20"><img src="http://medyk.org/colors/ffafff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>220</td><td width="20"><img src="http://medyk.org/colors/ffd700.png" width="20" height="20" /></td>\n <td>221</td><td width="20"><img src="http://medyk.org/colors/ffd75f.png" width="20" height="20" /></td>\n <td>222</td><td width="20"><img src="http://medyk.org/colors/ffd787.png" width="20" height="20" /></td>\n <td>223</td><td width="20"><img src="http://medyk.org/colors/ffd7af.png" width="20" height="20" /></td>\n <td>224</td><td width="20"><img src="http://medyk.org/colors/ffd7d7.png" width="20" height="20" /></td>\n <td>225</td><td width="20"><img src="http://medyk.org/colors/ffd7ff.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>226</td><td width="20"><img src="http://medyk.org/colors/ffff00.png" width="20" height="20" /></td>\n <td>227</td><td width="20"><img src="http://medyk.org/colors/ffff5f.png" width="20" height="20" /></td>\n <td>228</td><td width="20"><img src="http://medyk.org/colors/ffff87.png" width="20" height="20" /></td>\n <td>229</td><td width="20"><img src="http://medyk.org/colors/ffffaf.png" width="20" height="20" /></td>\n <td>230</td><td width="20"><img src="http://medyk.org/colors/ffffd7.png" width="20" height="20" /></td>\n <td>231</td><td width="20"><img src="http://medyk.org/colors/ffffff.png" width="20" height="20" /></td>\n </tr>\n\n <tr>\n <td>232</td><td width="20"><img src="http://medyk.org/colors/080808.png" width="20" height="20" /></td>\n <td>233</td><td width="20"><img src="http://medyk.org/colors/121212.png" width="20" height="20" /></td>\n <td>234</td><td width="20"><img src="http://medyk.org/colors/1c1c1c.png" width="20" height="20" /></td>\n <td>235</td><td width="20"><img src="http://medyk.org/colors/262626.png" width="20" height="20" /></td>\n <td>236</td><td width="20"><img src="http://medyk.org/colors/303030.png" width="20" height="20" /></td>\n <td>237</td><td width="20"><img src="http://medyk.org/colors/3a3a3a.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>238</td><td width="20"><img src="http://medyk.org/colors/444444.png" width="20" height="20" /></td>\n <td>239</td><td width="20"><img src="http://medyk.org/colors/4e4e4e.png" width="20" height="20" /></td>\n <td>240</td><td width="20"><img src="http://medyk.org/colors/585858.png" width="20" height="20" /></td>\n <td>241</td><td width="20"><img src="http://medyk.org/colors/626262.png" width="20" height="20" /></td>\n <td>242</td><td width="20"><img src="http://medyk.org/colors/6c6c6c.png" width="20" height="20" /></td>\n <td>243</td><td width="20"><img src="http://medyk.org/colors/767676.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>244</td><td width="20"><img src="http://medyk.org/colors/808080.png" width="20" height="20" /></td>\n <td>245</td><td width="20"><img src="http://medyk.org/colors/8a8a8a.png" width="20" height="20" /></td>\n <td>246</td><td width="20"><img src="http://medyk.org/colors/949494.png" width="20" height="20" /></td>\n <td>247</td><td width="20"><img src="http://medyk.org/colors/9e9e9e.png" width="20" height="20" /></td>\n <td>248</td><td width="20"><img src="http://medyk.org/colors/a8a8a8.png" width="20" height="20" /></td>\n <td>249</td><td width="20"><img src="http://medyk.org/colors/b2b2b2.png" width="20" height="20" /></td>\n </tr>\n <tr>\n <td>250</td><td width="20"><img src="http://medyk.org/colors/bcbcbc.png" width="20" height="20" /></td>\n <td>251</td><td width="20"><img src="http://medyk.org/colors/c6c6c6.png" width="20" height="20" /></td>\n <td>252</td><td width="20"><img src="http://medyk.org/colors/d0d0d0.png" width="20" height="20" /></td>\n <td>253</td><td width="20"><img src="http://medyk.org/colors/dadada.png" width="20" height="20" /></td>\n <td>254</td><td width="20"><img src="http://medyk.org/colors/e4e4e4.png" width="20" height="20" /></td>\n <td>255</td><td width="20"><img src="http://medyk.org/colors/eeeeee.png" width="20" height="20" /></td>\n </tr>\n</table>\n\n#### Terminal reset\n\nTerminal can be cleared with `clc.reset`\n\n```javascript\nconsole.log(clc.reset);\n```\n\n#### Move around functions\n\n##### clc.move(x, y)\n\nMove cursor _x_ columns and _y_ rows away. Values can be positive or negative, e.g.:\n\n```javascript\nprocess.stdout.write(clc.move(-2, -2)); // Move cursors two columns and two rows back\n```\n\n##### clc.moveTo(x, y)\n\nAbsolute move. Sets cursor position at _x_ column and _y_ row\n\n```javascript\nprocess.stdout.write(clc.moveTo(0, 0)); // Move cursor to first row and first column in terminal window\n```\n\n##### clc.bol([n[, erase]])\n\nMove cursor to the begining of the line, with _n_ we may specify how many lines away we want to move, value can be positive or negative. Additionally we may decide to clear lines content with _erase_\n\n```javascript\nprocess.stdout.write(clc.bol(-2)); // Move cursor two lines back and place it at begin of the line\n```\n\n##### clc.up(n)\n\nMove cursor up _n_ rows\n\n##### clc.down(n)\n\nMove cursor down _n_ rows\n\n##### clc.right(n)\n\nMove cursor right _n_ columns\n\n##### clc.left(n)\n\nMove cursor left _n_ columns\n\n#### Terminal characteristics\n\n##### clc.width\n\nReturns terminal width\n\n##### clc.height\n\nReturns terminal height\n\n### Additional functionalities (provided as separate modules)\n\n#### trim(formatedText)\n\nTrims ANSI formatted string to plain text\n\n```javascript\nvar ansiTrim = require(\'cli-color/lib/trim\');\n\nvar plain = ansiTrim(formatted);\n```\n\n#### throbber(interval[, format])\n\nDisplays throbber on given interval.\nInterval should be [clock.interval](https://github.com/medikoo/clock) object\nOptionally throbber output can be formatted with given format\n\n```javascript\nvar interval = require(\'clock/lib/interval\')\n , ansiThrobber = require(\'cli-color/lib/throbber\');\n\nvar i = interval(200, true);\n\n// Display throbber while interval is ticking\nansiThrobber(i);\n\n// at any time you can stop/start interval\n// When interval is stopped throbber doesn\'t show\ni.stop();\n```\n\n## Tests [![Build Status](https://secure.travis-ci.org/medikoo/cli-color.png?branch=master)](https://secure.travis-ci.org/medikoo/cli-color)\n\n\t$ npm test\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/medikoo/cli-color',
npm sill resolved _id: 'cli-color@0.2.2',
npm sill resolved _from: 'cli-color@0.2.2' },
npm sill resolved { name: 'http-proxy',
npm sill resolved version: '1.0.2',
npm sill resolved description: 'HTTP proxying for the masses',
npm sill resolved author: { name: 'Nodejitsu Inc.', email: 'info@nodejitsu.com' },
npm sill resolved maintainers: [ [Object], [Object] ],
npm sill resolved main: 'index.js',
npm sill resolved dependencies: { eventemitter3: '*' },
npm sill resolved devDependencies:
npm sill resolved { mocha: '*',
npm sill resolved 'expect.js': '*',
npm sill resolved dox: '*',
npm sill resolved coveralls: '*',
npm sill resolved 'mocha-lcov-reporter': '*',
npm sill resolved blanket: '*',
npm sill resolved ws: '*',
npm sill resolved 'socket.io': '*',
npm sill resolved 'socket.io-client': '*',
npm sill resolved async: '*' },
npm sill resolved scripts:
npm sill resolved { coveralls: 'mocha --require blanket --reporter mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js',
npm sill resolved test: 'mocha -R landing test/*-test.js',
npm sill resolved 'test-cov': 'mocha --require blanket -R html-cov > cov/coverage.html' },
npm sill resolved engines: { node: '>=0.10.0' },
npm sill resolved license: 'MIT',
npm sill resolved readme: '<p align="center">\n <img src="https://raw.github.com/nodejitsu/node-http-proxy/master/doc/logo.png"/>\n</p>\n\nnode-http-proxy\n=======\n\n`node-http-proxy` is an HTTP programmable proxying library that supports \nwebsockets. It is suitable for implementing components such as\nproxies and load balancers.\n\n### Build Status\n\n<p align="center">\n <a href="https://travis-ci.org/nodejitsu/node-http-proxy" target="_blank">\n \t<img src="https://travis-ci.org/nodejitsu/node-http-proxy.png"/></a>&nbsp;&nbsp;\n <a href="https://coveralls.io/r/nodejitsu/node-http-proxy" target="_blank">\n \t<img src="https://coveralls.io/repos/nodejitsu/node-http-proxy/badge.png"/></a>\n</p>\n\n### Looking to Upgrade from 0.8.x ? Click [here](UPGRADING.md)\n\n### Core Concept\n\nA new proxy is created by calling `createProxyServer` and passing\nan `options` object as argument ([valid properties are available here](lib/http-proxy.js#L26-L39)) \n\n```javascript\nvar httpProxy = require(\'http-proxy\');\n\nvar proxy = httpProxy.createProxyServer(options);\n```\n\nAn object will be returned with four values:\n\n* web `req, res, [options]` (used for proxying regular HTTP(S) requests)\n* ws `req, socket, head, [options]` (used for proxying WS(S) requests)\n* listen `port` (a function that wraps the object in a webserver, for your convenience)\n\nIs it then possible to proxy requests by calling these functions\n\n```javascript\nrequire(\'http\').createServer(function(req, res) {\n proxy.web(req, res, { target: \'http://mytarget.com:8080\' });\n});\n```\n\nErrors can be listened on either using the Event Emitter API\n\n```javascript\nproxy.on(\'error\', function(e) { \n ...\n});\n```\n\nor using the callback API\n\n```javascript\nproxy.web(req, res, { target: \'http://mytarget.com:8080\' }, function(e) { ... });\n```\n\nWhen a request is proxied it follows two different pipelines ([available here](lib/http-proxy/passes))\nwhich apply transformations to both the `req` and `res` object. \nThe first pipeline (ingoing) is responsible for the creation and manipulation of the stream that connects your client to the target.\nThe second pipeline (outgoing) is responsible for the creation and manipulation of the stream that, from your target, returns data \nto the client.\n\n\n#### Setup a basic stand-alone proxy server\n\n```js\nvar http = require(\'http\'),\n httpProxy = require(\'http-proxy\');\n//\n// Create your proxy server and set the target in the options.\n//\nhttpProxy.createProxyServer({target:\'http://localhost:9000\'}).listen(8000);\n\n//\n// Create your target server\n//\nhttp.createServer(function (req, res) {\n res.writeHead(200, { \'Content-Type\': \'text/plain\' });\n res.write(\'request successfully proxied!\' + \'\\n\' + JSON.stringify(req.headers, true, 2));\n res.end();\n}).listen(9000);\n```\n\n#### Setup a stand-alone proxy server with custom server logic\nThis example show how you can proxy a request using your own HTTP server\nand also you can put your own logic to handle the request.\n\n```js\nvar http = require(\'http\'),\n httpProxy = require(\'http-proxy\');\n \n//\n// Create a proxy server with custom application logic\n//\nvar proxy = httpProxy.createProxyServer({});\n\n//\n// Create your custom server and just call `proxy.web()` to proxy \n// a web request to the target passed in the options\n// also you can use `proxy.ws()` to proxy a websockets request\n//\nvar server = require(\'http\').createServer(function(req, res) {\n // You can define here your custom logic to handle the request\n // and then proxy the request.\n proxy.web(req, res, { target: \'http://127.0.0.1:5060\' });\n});\n\nconsole.log("listening on port 5050")\nserver.listen(5050);\n```\n\n#### Setup a stand-alone proxy server with latency\n\n```js\nvar http = require(\'http\'),\n httpProxy = require(\'http-proxy\');\n\n//\n// Create a proxy server with latency\n//\nvar proxy = httpProxy.createProxyServer();\n\n//\n// Create your server that make an operation that take a while\n// and then proxy de request\n//\nhttp.createServer(function (req, res) {\n // This simulate an operation that take 500ms in execute\n setTimeout(function () {\n proxy.web(req, res, {\n target: \'http://localhost:9008\'\n });\n }, 500);\n}).listen(8008);\n\n//\n// Create your target server\n//\nhttp.createServer(function (req, res) {\n res.writeHead(200, { \'Content-Type\': \'text/plain\' });\n res.write(\'request successfully proxied to: \' + req.url + \'\\n\' + JSON.stringify(req.headers, true, 2));\n res.end();\n}).listen(9008);\n```\n\n#### Listening for proxy events\n\n* `error`: The error event is emitted if the request to the target fail.\n* `proxyRes`: This event is emitted if the request to the target got a response.\n\n```js\nvar httpProxy = require(\'http-proxy\');\n// Error example\n//\n// Http Proxy Server with bad target\n//\nvar proxy = httpProxy.createServer({\n target:\'http://localhost:9005\'\n});\n\nproxy.listen(8005);\n\n//\n// Listen for the `error` event on `proxy`.\nproxy.on(\'error\', function (err, req, res) {\n res.writeHead(500, {\n \'Content-Type\': \'text/plain\'\n });\n \n res.end(\'Something went wrong. And we are reporting a custom error message.\');\n});\n\n//\n// Listen for the `proxyRes` event on `proxy`.\n//\nproxy.on(\'proxyRes\', function (res) {\n console.log(\'RAW Response from the target\', JSON.stringify(res.headers, true, 2));\n});\n\n```\n\n#### Using HTTPS\nYou can activate the validation of a secure SSL certificate to the target connection (avoid self signed certs), just set `secure: true` in the options.\n\n##### HTTPS -> HTTP\n\n```js\n//\n// Create the HTTPS proxy server in front of a HTTP server\n//\nhttpProxy.createServer({\n target: {\n host: \'localhost\',\n port: 9009\n },\n ssl: {\n key: fs.readFileSync(\'valid-ssl-key.pem\', \'utf8\'),\n cert: fs.readFileSync(\'valid-ssl-cert.pem\', \'utf8\')\n }\n}).listen(8009);\n```\n\n##### HTTPS -> HTTPS\n\n```js\n//\n// Create the proxy server listening on port 443\n//\nhttpProxy.createServer({\n ssl: {\n key: fs.readFileSync(\'valid-ssl-key.pem\', \'utf8\'),\n cert: fs.readFileSync(\'valid-ssl-cert.pem\', \'utf8\')\n },\n target: \'https://localhost:9010\',\n secure: true // Depends on your needs, could be false.\n}).listen(443);\n```\n\n#### Proxying WebSockets\nYou can activate the websocket support for the proxy using `ws:true` in the options.\n\n```js\n//\n// Create a proxy server for websockets\n//\nhttpProxy.createServer({\n target: \'ws://localhost:9014\',\n ws: true\n}).listen(8014);\n```\n\nAlso you can proxy the websocket requests just calling the `ws(req, socket, head)` method.\n\n```js\n//\n// Setup our server to proxy standard HTTP requests\n//\nvar proxy = new httpProxy.createProxyServer({\n target: {\n host: \'localhost\',\n port: 9015\n }\n});\nvar proxyServer = http.createServer(function (req, res) {\n proxy.web(req, res);\n});\n\n//\n// Listen to the `upgrade` event and proxy the \n// WebSocket requests as well.\n//\nproxyServer.on(\'upgrade\', function (req, socket, head) {\n proxy.ws(req, socket, head);\n});\n\nproxyServer.listen(8015);\n```\n\n### Contributing and Issues\n\n* Search on Google/Github \n* If you can\'t find anything, open an issue \n* If you feel comfortable about fixing the issue, fork the repo\n* Commit to your local branch (which must be different from `master`)\n* Submit your Pull Request (be sure to include tests and update documentation)\n\n### Options\n\n`httpProxy.createProxyServer` supports the following options:\n\n * **target**: url string to be parsed with the url module \n * **forward**: url string to be parsed with the url module\n * **agent**: object to be passed to http(s).request (see Node\'s [https agent](http://nodejs.org/api/https.html#https_class_https_agent) and [http agent](http://nodejs.org/api/http.html#http_class_http_agent) objects)\n * **secure**: true/false, if you want to verify the SSL Certs\n\nIf you are using the `proxyServer.listen` method, the following options are also applicable:\n\n * **ssl**: object to be passed to https.createServer()\n * **ws**: true/false, if you want to proxy websockets\n * **xfwd**: true/false, adds x-forward headers\n\n\n### Test\n\n```\n$ npm test\n```\n\n### Logo\n\nLogo created by [Diego Pasquali](http://dribbble.com/diegopq)\n\n### License\n\n>The MIT License (MIT)\n>\n>Copyright (c) 2010 - 2013 Nodejitsu Inc.\n>\n>Permission is hereby granted, free of charge, to any person obtaining a copy\n>of this software and associated documentation files (the "Software"), to deal\n>in the Software without restriction, including without limitation the rights\n>to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n>copies of the Software, and to permit persons to whom the Software is\n>furnished to do so, subject to the following conditions:\n>\n>The above copyright notice and this permission notice shall be included in\n>all copies or substantial portions of the Software.\n>\n>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n>IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n>FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n>AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n>LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n>OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n>THE SOFTWARE.\n\n\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved _id: 'http-proxy@1.0.2',
npm sill resolved _from: 'http-proxy@1.0.2' },
npm sill resolved { name: 'hapi',
npm sill resolved description: 'HTTP Server framework',
npm sill resolved homepage: 'http://hapijs.com',
npm sill resolved version: '2.3.0',
npm sill resolved repository: { type: 'git', url: 'git://github.com/spumko/hapi' },
npm sill resolved main: 'index',
npm sill resolved keywords: [ 'framework', 'http', 'api', 'router' ],
npm sill resolved engines: { node: '0.10.x' },
npm sill resolved dependencies:
npm sill resolved { hoek: '^1.4.x',
npm sill resolved boom: '^2.2.x',
npm sill resolved joi: '^2.7.x',
npm sill resolved catbox: '1.x.x',
npm sill resolved shot: '1.x.x',
npm sill resolved nipple: '2.x.x',
npm sill resolved cryptiles: '2.x.x',
npm sill resolved iron: '2.x.x',
npm sill resolved async: '0.2.x',
npm sill resolved multiparty: '3.1.x',
npm sill resolved mime: '1.2.x',
npm sill resolved 'lru-cache': '2.5.x',
npm sill resolved optimist: '0.6.x',
npm sill resolved negotiator: '0.2.x',
npm sill resolved semver: '2.2.x',
npm sill resolved qs: '0.6.x' },
npm sill resolved devDependencies:
npm sill resolved { lab: '1.x.x',
npm sill resolved handlebars: '1.2.x',
npm sill resolved jade: '1.0.x',
npm sill resolved 'hapi-plugin-test': '2.x.x',
npm sill resolved 'dtrace-provider': '0.2.x',
npm sill resolved 'form-data': '0.1.x' },
npm sill resolved bin: { hapi: './bin/hapi' },
npm sill resolved scripts: { test: 'make test-cov' },
npm sill resolved licenses: [ [Object] ],
npm sill resolved contributors: [ [Object], [Object], [Object] ],
npm sill resolved readme: '<a href="https://github.com/spumko"><img src="https://raw.github.com/spumko/spumko/master/images/from.png" align="right" /></a>\n<img src="https://raw.github.com/spumko/hapi/master/images/hapi.png" />\n\nA rich framework for building web applications and services. **hapi** is a simple to use configuration-centric\nframework with built-in support for input validation, caching, authentication, and other essential facilities.\n**hapi** enables developers to focus on writing reusable application logic instead of spending time building\ninfrastructure. The framework supports a powerful plugin architecture for pain-free and scalable extensibility.\n\nFor the latest updates and release information follow [@hapijs](https://twitter.com/hapijs) on twitter.\n\nCurrent version: **2.3.x**\n\nNode version: **0.10** required\n\n[![Build Status](https://secure.travis-ci.org/spumko/hapi.png)](http://travis-ci.org/spumko/hapi)\n\n[![NPM](https://nodei.co/npm/hapi.png?downloads=true&stars=true)](https://nodei.co/npm/hapi/)\n\n## Getting started\n\nStart by creating a _package.json_:\n```\nnpm init\n```\n\nInstall **hapi** and have it saved to your _package.json_ dependencies:\n```\nnpm install hapi --save\n```\n\nCreate an _\'index.js\'_ file and with the following contents:\n```javascript\nvar Hapi = require(\'hapi\');\n\n// Create a server with a host and port\nvar server = Hapi.createServer(\'localhost\', 8000);\n\n// Add the route\nserver.route({\n method: \'GET\',\n path: \'/hello\',\n handler: function (request, reply) {\n \n reply(\'hello world\');\n }\n});\n\n// Start the server\nserver.start();\n```\n\nLaunch the application (`node .`) and open \'http://localhost:8000/hello\' in a browser.\n\n\n## More information\n\n- For the **latest updates** follow [@hapijs](https://twitter.com/hapijs).\n- For more **information, tutorials, and references** on the currently published version, visit [**hapijs.com**](http://hapijs.com)\n- For a full application example, check out [postmile](https://github.com/hueniverse/postmile)\n- Information about the **work-in-progress** in the master branch:\n - [API reference](/docs/Reference.md)\n - [Upcoming breaking changes](https://github.com/spumko/hapi/issues?labels=breaking+changes)\n- For **discussions** join the [#hapi channel](http://webchat.freenode.net/?channels=hapi) on irc.freenode.net\n- Any **issues or questions** (no matter how basic), open an issue.\n\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/spumko/hapi/issues' },
npm sill resolved _id: 'hapi@2.3.0',
npm sill resolved _from: 'hapi@2.3.0' } ]
npm info install hoodie-pocket@0.0.13 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install underscore@1.4.4 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install async@0.2.7 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install prompt@0.2.9 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install hoodie@0.6.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install hoodie-plugins-manager@0.2.4 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install local-tld-lib@1.0.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install bytes@0.2.1 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install semver@1.1.4 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install multicouch@0.8.1 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install ports@1.1.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install request@2.16.6 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install follow@0.9.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install optimist@0.5.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install lock@0.0.3 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install couchr@0.0.13 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install dispatch@0.2.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install mkdirp@0.3.5 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install combine-streams@0.0.4 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install cli-color@0.2.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install http-proxy@1.0.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info install hapi@2.3.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server
npm info installOne hoodie-pocket@0.0.13
npm info installOne underscore@1.4.4
npm info installOne async@0.2.7
npm info installOne prompt@0.2.9
npm info installOne hoodie@0.6.0
npm info installOne hoodie-plugins-manager@0.2.4
npm info installOne local-tld-lib@1.0.2
npm info installOne bytes@0.2.1
npm info installOne semver@1.1.4
npm info installOne multicouch@0.8.1
npm info installOne ports@1.1.0
npm info installOne request@2.16.6
npm info installOne follow@0.9.0
npm info installOne optimist@0.5.0
npm info installOne lock@0.0.3
npm info installOne couchr@0.0.13
npm info installOne dispatch@0.2.0
npm info installOne mkdirp@0.3.5
npm info installOne combine-streams@0.0.4
npm info installOne cli-color@0.2.2
npm info installOne http-proxy@1.0.2
npm info installOne hapi@2.3.0
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-pocket unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/underscore unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/async unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/local-tld-lib unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/bytes unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/semver unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/ports unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/follow unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/dispatch unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/mkdirp unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/combine-streams unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/http-proxy unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hapi unbuild
npm verb tar unpack /Users/hamrickb/.npm/hoodie-pocket/0.0.13/package.tgz
npm sill lockFile 065a2a2b-erver-node-modules-hoodie-pocket tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-pocket
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-pocket /Users/hamrickb/.npm/065a2a2b-erver-node-modules-hoodie-pocket.lock
npm sill lockFile cc81622e-hoodie-pocket-0-0-13-package-tgz tar:///Users/hamrickb/.npm/hoodie-pocket/0.0.13/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/hoodie-pocket/0.0.13/package.tgz /Users/hamrickb/.npm/cc81622e-hoodie-pocket-0-0-13-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/underscore/1.4.4/package.tgz
npm sill lockFile c5217a76-e-server-node-modules-underscore tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/underscore
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/underscore /Users/hamrickb/.npm/c5217a76-e-server-node-modules-underscore.lock
npm sill lockFile 24188524-npm-underscore-1-4-4-package-tgz tar:///Users/hamrickb/.npm/underscore/1.4.4/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/underscore/1.4.4/package.tgz /Users/hamrickb/.npm/24188524-npm-underscore-1-4-4-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/async/0.2.7/package.tgz
npm sill lockFile f0fde8da-hoodie-server-node-modules-async tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/async
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/async /Users/hamrickb/.npm/f0fde8da-hoodie-server-node-modules-async.lock
npm sill lockFile 974e0a4a-ickb-npm-async-0-2-7-package-tgz tar:///Users/hamrickb/.npm/async/0.2.7/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/async/0.2.7/package.tgz /Users/hamrickb/.npm/974e0a4a-ickb-npm-async-0-2-7-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/prompt/0.2.9/package.tgz
npm sill lockFile c7291eba-oodie-server-node-modules-prompt tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt /Users/hamrickb/.npm/c7291eba-oodie-server-node-modules-prompt.lock
npm sill lockFile 0594cd23-ckb-npm-prompt-0-2-9-package-tgz tar:///Users/hamrickb/.npm/prompt/0.2.9/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/prompt/0.2.9/package.tgz /Users/hamrickb/.npm/0594cd23-ckb-npm-prompt-0-2-9-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/hoodie/0.6.0/package.tgz
npm sill lockFile 63a1e5ca-oodie-server-node-modules-hoodie tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie /Users/hamrickb/.npm/63a1e5ca-oodie-server-node-modules-hoodie.lock
npm sill lockFile d856b395-ckb-npm-hoodie-0-6-0-package-tgz tar:///Users/hamrickb/.npm/hoodie/0.6.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/hoodie/0.6.0/package.tgz /Users/hamrickb/.npm/d856b395-ckb-npm-hoodie-0-6-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/hoodie-plugins-manager/0.2.4/package.tgz
npm sill lockFile df3ccbab-e-modules-hoodie-plugins-manager tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager /Users/hamrickb/.npm/df3ccbab-e-modules-hoodie-plugins-manager.lock
npm sill lockFile 77b0a243-lugins-manager-0-2-4-package-tgz tar:///Users/hamrickb/.npm/hoodie-plugins-manager/0.2.4/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/hoodie-plugins-manager/0.2.4/package.tgz /Users/hamrickb/.npm/77b0a243-lugins-manager-0-2-4-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/local-tld-lib/1.0.2/package.tgz
npm sill lockFile dd18ee91-erver-node-modules-local-tld-lib tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/local-tld-lib
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/local-tld-lib /Users/hamrickb/.npm/dd18ee91-erver-node-modules-local-tld-lib.lock
npm sill lockFile 36a55997--local-tld-lib-1-0-2-package-tgz tar:///Users/hamrickb/.npm/local-tld-lib/1.0.2/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/local-tld-lib/1.0.2/package.tgz /Users/hamrickb/.npm/36a55997--local-tld-lib-1-0-2-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/bytes/0.2.1/package.tgz
npm sill lockFile 4da0a493-hoodie-server-node-modules-bytes tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/bytes
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/bytes /Users/hamrickb/.npm/4da0a493-hoodie-server-node-modules-bytes.lock
npm sill lockFile 626b5db2-ickb-npm-bytes-0-2-1-package-tgz tar:///Users/hamrickb/.npm/bytes/0.2.1/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/bytes/0.2.1/package.tgz /Users/hamrickb/.npm/626b5db2-ickb-npm-bytes-0-2-1-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/semver/1.1.4/package.tgz
npm sill lockFile 81e1933e-oodie-server-node-modules-semver tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/semver
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/semver /Users/hamrickb/.npm/81e1933e-oodie-server-node-modules-semver.lock
npm sill lockFile 1f7926c5-ckb-npm-semver-1-1-4-package-tgz tar:///Users/hamrickb/.npm/semver/1.1.4/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/semver/1.1.4/package.tgz /Users/hamrickb/.npm/1f7926c5-ckb-npm-semver-1-1-4-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/multicouch/0.8.1/package.tgz
npm sill lockFile db030c7a-e-server-node-modules-multicouch tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch /Users/hamrickb/.npm/db030c7a-e-server-node-modules-multicouch.lock
npm sill lockFile 79afb1b0-npm-multicouch-0-8-1-package-tgz tar:///Users/hamrickb/.npm/multicouch/0.8.1/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/multicouch/0.8.1/package.tgz /Users/hamrickb/.npm/79afb1b0-npm-multicouch-0-8-1-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/ports/1.1.0/package.tgz
npm sill lockFile cb2f399a-hoodie-server-node-modules-ports tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/ports
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/ports /Users/hamrickb/.npm/cb2f399a-hoodie-server-node-modules-ports.lock
npm sill lockFile dc13bd7a-ickb-npm-ports-1-1-0-package-tgz tar:///Users/hamrickb/.npm/ports/1.1.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/ports/1.1.0/package.tgz /Users/hamrickb/.npm/dc13bd7a-ickb-npm-ports-1-1-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/request/2.16.6/package.tgz
npm sill lockFile ea663ebb-odie-server-node-modules-request tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request /Users/hamrickb/.npm/ea663ebb-odie-server-node-modules-request.lock
npm sill lockFile e84d2bd9-b-npm-request-2-16-6-package-tgz tar:///Users/hamrickb/.npm/request/2.16.6/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/request/2.16.6/package.tgz /Users/hamrickb/.npm/e84d2bd9-b-npm-request-2-16-6-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/follow/0.9.0/package.tgz
npm sill lockFile f7f3370f-oodie-server-node-modules-follow tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/follow
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/follow /Users/hamrickb/.npm/f7f3370f-oodie-server-node-modules-follow.lock
npm sill lockFile a8f345d0-ckb-npm-follow-0-9-0-package-tgz tar:///Users/hamrickb/.npm/follow/0.9.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/follow/0.9.0/package.tgz /Users/hamrickb/.npm/a8f345d0-ckb-npm-follow-0-9-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/optimist/0.5.0/package.tgz
npm sill lockFile e2da3cef-die-server-node-modules-optimist tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist /Users/hamrickb/.npm/e2da3cef-die-server-node-modules-optimist.lock
npm sill lockFile a6c6e654-b-npm-optimist-0-5-0-package-tgz tar:///Users/hamrickb/.npm/optimist/0.5.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/optimist/0.5.0/package.tgz /Users/hamrickb/.npm/a6c6e654-b-npm-optimist-0-5-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/lock/0.0.3/package.tgz
npm sill lockFile 80e8363c--hoodie-server-node-modules-lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock /Users/hamrickb/.npm/80e8363c--hoodie-server-node-modules-lock.lock
npm sill lockFile 0de04889-rickb-npm-lock-0-0-3-package-tgz tar:///Users/hamrickb/.npm/lock/0.0.3/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/lock/0.0.3/package.tgz /Users/hamrickb/.npm/0de04889-rickb-npm-lock-0-0-3-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/couchr/0.0.13/package.tgz
npm sill lockFile 93e5d423-oodie-server-node-modules-couchr tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr /Users/hamrickb/.npm/93e5d423-oodie-server-node-modules-couchr.lock
npm sill lockFile bf4e15a7-kb-npm-couchr-0-0-13-package-tgz tar:///Users/hamrickb/.npm/couchr/0.0.13/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/couchr/0.0.13/package.tgz /Users/hamrickb/.npm/bf4e15a7-kb-npm-couchr-0-0-13-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/dispatch/0.2.0/package.tgz
npm sill lockFile 75aee2bb-die-server-node-modules-dispatch tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/dispatch
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/dispatch /Users/hamrickb/.npm/75aee2bb-die-server-node-modules-dispatch.lock
npm sill lockFile e2b4b39e-b-npm-dispatch-0-2-0-package-tgz tar:///Users/hamrickb/.npm/dispatch/0.2.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/dispatch/0.2.0/package.tgz /Users/hamrickb/.npm/e2b4b39e-b-npm-dispatch-0-2-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/mkdirp/0.3.5/package.tgz
npm sill lockFile 3333d3e1-oodie-server-node-modules-mkdirp tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/mkdirp
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/mkdirp /Users/hamrickb/.npm/3333d3e1-oodie-server-node-modules-mkdirp.lock
npm sill lockFile 76662a4f-ckb-npm-mkdirp-0-3-5-package-tgz tar:///Users/hamrickb/.npm/mkdirp/0.3.5/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/mkdirp/0.3.5/package.tgz /Users/hamrickb/.npm/76662a4f-ckb-npm-mkdirp-0-3-5-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/combine-streams/0.0.4/package.tgz
npm sill lockFile 36c6e743-ver-node-modules-combine-streams tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/combine-streams
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/combine-streams /Users/hamrickb/.npm/36c6e743-ver-node-modules-combine-streams.lock
npm sill lockFile 4ac83458-ombine-streams-0-0-4-package-tgz tar:///Users/hamrickb/.npm/combine-streams/0.0.4/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/combine-streams/0.0.4/package.tgz /Users/hamrickb/.npm/4ac83458-ombine-streams-0-0-4-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/cli-color/0.2.2/package.tgz
npm sill lockFile 5edcd166-ie-server-node-modules-cli-color tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color /Users/hamrickb/.npm/5edcd166-ie-server-node-modules-cli-color.lock
npm sill lockFile 786e1f90--npm-cli-color-0-2-2-package-tgz tar:///Users/hamrickb/.npm/cli-color/0.2.2/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/cli-color/0.2.2/package.tgz /Users/hamrickb/.npm/786e1f90--npm-cli-color-0-2-2-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/http-proxy/1.0.2/package.tgz
npm sill lockFile ce1427b0-e-server-node-modules-http-proxy tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/http-proxy
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/http-proxy /Users/hamrickb/.npm/ce1427b0-e-server-node-modules-http-proxy.lock
npm sill lockFile c0d021eb-npm-http-proxy-1-0-2-package-tgz tar:///Users/hamrickb/.npm/http-proxy/1.0.2/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/http-proxy/1.0.2/package.tgz /Users/hamrickb/.npm/c0d021eb-npm-http-proxy-1-0-2-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/hapi/2.3.0/package.tgz
npm sill lockFile d9d5da7c--hoodie-server-node-modules-hapi tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hapi
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hapi /Users/hamrickb/.npm/d9d5da7c--hoodie-server-node-modules-hapi.lock
npm sill lockFile 72d5110f-rickb-npm-hapi-2-3-0-package-tgz tar:///Users/hamrickb/.npm/hapi/2.3.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/hapi/2.3.0/package.tgz /Users/hamrickb/.npm/72d5110f-rickb-npm-hapi-2-3-0-package-tgz.lock
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry lib/async.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry lib/local-tld.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry underscore-min.js
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry underscore.js
npm sill gunzTarPerm extractEntry index.html
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry CONTRIBUTING.md
npm sill gunzTarPerm extractEntry CNAME
npm sill gunzTarPerm extractEntry favicon.ico
npm sill gunzTarPerm extractEntry History.md
npm sill gunzTarPerm extractEntry Makefile
npm sill gunzTarPerm extractEntry semver.js
npm sill gunzTarPerm extractEntry test.js
npm sill gunzTarPerm extractEntry bin/semver
npm sill gunzTarPerm extractEntry test.js
npm sill gunzTarPerm extractEntry bin/launch-couchdb-from-app.sh
npm sill gunzTarPerm extractEntry bin/multicouch
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry lib/dispatch.js
npm sill gunzTarPerm extractEntry test/test-dispatch.js
npm sill gunzTarPerm extractEntry test/test/test.js
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry lib/account_manager.js
npm sill gunzTarPerm extractEntry lib/changes_pool.js
npm sill gunzTarPerm extractEntry lib/config_manager.js
npm sill gunzTarPerm extractEntry lib/db_updates.js
npm sill gunzTarPerm extractEntry lib/email_manager.js
npm sill gunzTarPerm extractEntry lib/index.js
npm sill gunzTarPerm extractEntry lib/task_manager.js
npm sill gunzTarPerm extractEntry test/test-plugin-api.js
npm sill gunzTarPerm extractEntry test/lib/utils.js
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry tests/test-https-strict.js
npm sill gunzTarPerm extractEntry couchr-browser.js
npm sill gunzTarPerm extractEntry couchr-node.js
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry Makefile
npm sill gunzTarPerm extractEntry LICENCE
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry Readme.md
npm sill gunzTarPerm extractEntry component.json
npm sill gunzTarPerm extractEntry erl_crash.dump
npm sill gunzTarPerm extractEntry test/index.js
npm sill gunzTarPerm extractEntry .jshintrc
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry api.js
npm sill gunzTarPerm extractEntry cli.js
npm sill gunzTarPerm extractEntry Makefile
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry examples/pow.js
npm sill gunzTarPerm extractEntry example/bool.js
npm sill gunzTarPerm extractEntry example/default_singles.js
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry UPGRADING.md
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry bin/hapi
npm sill gunzTarPerm extractEntry test/issue-1.js
npm sill gunzTarPerm extractEntry test/multi.js
npm sill gunzTarPerm extractEntry lib/multicouch.js
npm sill gunzTarPerm extractEntry readme.markdown
npm sill gunzTarPerm extractEntry test/chmod.js
npm sill gunzTarPerm extractEntry Makefile
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry Rakefile
npm sill gunzTarPerm extractEntry browser/eventemitter2.js
npm sill gunzTarPerm extractEntry tests/test-hawk.js
npm sill gunzTarPerm extractEntry tests/test-headers.js
npm sill gunzTarPerm extractEntry test/perm.js
npm sill gunzTarPerm extractEntry test/perm_sync.js
npm sill gunzTarPerm extractEntry docs/docco.css
npm sill gunzTarPerm extractEntry docs/prompt.html
npm sill lockFile cb2f399a-hoodie-server-node-modules-ports tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/ports
npm sill lockFile cb2f399a-hoodie-server-node-modules-ports tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/ports
npm sill lockFile dc13bd7a-ickb-npm-ports-1-1-0-package-tgz tar:///Users/hamrickb/.npm/ports/1.1.0/package.tgz
npm sill lockFile dc13bd7a-ickb-npm-ports-1-1-0-package-tgz tar:///Users/hamrickb/.npm/ports/1.1.0/package.tgz
npm sill gunzTarPerm extractEntry test/race.js
npm sill gunzTarPerm extractEntry test/mkdirp.js
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry doc/logo.png
npm sill gunzTarPerm extractEntry AUTHORS
npm sill gunzTarPerm extractEntry docs/README.md
npm info preinstall ports@1.1.0
npm sill gunzTarPerm extractEntry examples/add-properties.js
npm sill gunzTarPerm extractEntry examples/history.js
npm sill lockFile dd18ee91-erver-node-modules-local-tld-lib tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/local-tld-lib
npm sill lockFile dd18ee91-erver-node-modules-local-tld-lib tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/local-tld-lib
npm verb readDependencies using package.json deps
npm sill lockFile 36a55997--local-tld-lib-1-0-2-package-tgz tar:///Users/hamrickb/.npm/local-tld-lib/1.0.2/package.tgz
npm sill lockFile 36a55997--local-tld-lib-1-0-2-package-tgz tar:///Users/hamrickb/.npm/local-tld-lib/1.0.2/package.tgz
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/ports
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/ports
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff ports@1.1.0
npm verb linkBins ports@1.1.0
npm verb linkMans ports@1.1.0
npm verb rebuildBundles ports@1.1.0
npm info install ports@1.1.0
npm sill gunzTarPerm extractEntry docs/Reference.md
npm sill gunzTarPerm extractEntry docs/Style.md
npm sill gunzTarPerm extractEntry example/divide.js
npm sill gunzTarPerm extractEntry example/line_count.js
npm info postinstall ports@1.1.0
npm sill gunzTarPerm extractEntry test/return.js
npm sill gunzTarPerm extractEntry test/return_sync.js
npm info preinstall local-tld-lib@1.0.2
npm sill gunzTarPerm extractEntry examples/package.json
npm sill gunzTarPerm extractEntry examples/balancer/simple-balancer-with-websockets.js
npm sill gunzTarPerm extractEntry examples/nested-properties-prompt.js
npm sill gunzTarPerm extractEntry examples/old-schema.js
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/local-tld-lib
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/local-tld-lib
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff local-tld-lib@1.0.2
npm verb linkBins local-tld-lib@1.0.2
npm verb linkMans local-tld-lib@1.0.2
npm verb rebuildBundles local-tld-lib@1.0.2
npm sill gunzTarPerm extractEntry example/default_hash.js
npm sill gunzTarPerm extractEntry example/line_count_wrap.js
npm info install local-tld-lib@1.0.2
npm sill lockFile 36c6e743-ver-node-modules-combine-streams tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/combine-streams
npm sill lockFile 36c6e743-ver-node-modules-combine-streams tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/combine-streams
npm info postinstall local-tld-lib@1.0.2
npm sill gunzTarPerm extractEntry tests/test-httpModule.js
npm sill gunzTarPerm extractEntry tests/run.js
npm sill lockFile 4ac83458-ombine-streams-0-0-4-package-tgz tar:///Users/hamrickb/.npm/combine-streams/0.0.4/package.tgz
npm sill lockFile 4ac83458-ombine-streams-0-0-4-package-tgz tar:///Users/hamrickb/.npm/combine-streams/0.0.4/package.tgz
npm sill gunzTarPerm extractEntry examples/balancer/simple-balancer.js
npm sill gunzTarPerm extractEntry examples/helpers/store.js
npm sill lockFile 4da0a493-hoodie-server-node-modules-bytes tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/bytes
npm sill lockFile 4da0a493-hoodie-server-node-modules-bytes tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/bytes
npm sill gunzTarPerm extractEntry test/root.js
npm sill gunzTarPerm extractEntry test/sync.js
npm sill lockFile 626b5db2-ickb-npm-bytes-0-2-1-package-tgz tar:///Users/hamrickb/.npm/bytes/0.2.1/package.tgz
npm sill lockFile 626b5db2-ickb-npm-bytes-0-2-1-package-tgz tar:///Users/hamrickb/.npm/bytes/0.2.1/package.tgz
npm sill gunzTarPerm extractEntry examples/existing-properties.js
npm sill gunzTarPerm extractEntry examples/password.js
npm sill gunzTarPerm extractEntry browser/export.js
npm sill gunzTarPerm extractEntry browser/jquery-1.6.1.min.js
npm info preinstall combine-streams@0.0.4
npm sill gunzTarPerm extractEntry examples/auth.js
npm sill gunzTarPerm extractEntry examples/extensions.js
npm info preinstall bytes@0.2.1
npm sill gunzTarPerm extractEntry example/nonopt.js
npm sill gunzTarPerm extractEntry example/reflect.js
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/combine-streams
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/combine-streams
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff combine-streams@0.0.4
npm verb linkBins combine-streams@0.0.4
npm verb linkMans combine-streams@0.0.4
npm verb rebuildBundles combine-streams@0.0.4
npm verb readDependencies using package.json deps
npm info install combine-streams@0.0.4
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/bytes
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/bytes
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff bytes@0.2.1
npm verb linkBins bytes@0.2.1
npm verb linkMans bytes@0.2.1
npm verb rebuildBundles bytes@0.2.1
npm info install bytes@0.2.1
npm info postinstall combine-streams@0.0.4
npm info postinstall bytes@0.2.1
npm sill gunzTarPerm extractEntry examples/stream.js
npm sill gunzTarPerm extractEntry examples/favicon.js
npm sill gunzTarPerm extractEntry test/umask.js
npm sill gunzTarPerm extractEntry test/clobber.js
npm sill gunzTarPerm extractEntry examples/http/basic-proxy.js
npm sill gunzTarPerm extractEntry examples/http/custom-proxy-error.js
npm sill gunzTarPerm extractEntry browser/log4js.js
npm sill gunzTarPerm extractEntry browser/main.js
npm sill lockFile db030c7a-e-server-node-modules-multicouch tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch
npm sill lockFile db030c7a-e-server-node-modules-multicouch tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch
npm sill lockFile 93e5d423-oodie-server-node-modules-couchr tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr
npm sill lockFile 93e5d423-oodie-server-node-modules-couchr tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr
npm sill lockFile 79afb1b0-npm-multicouch-0-8-1-package-tgz tar:///Users/hamrickb/.npm/multicouch/0.8.1/package.tgz
npm sill lockFile 79afb1b0-npm-multicouch-0-8-1-package-tgz tar:///Users/hamrickb/.npm/multicouch/0.8.1/package.tgz
npm sill gunzTarPerm extractEntry example/short.js
npm sill gunzTarPerm extractEntry example/string.js
npm sill lockFile bf4e15a7-kb-npm-couchr-0-0-13-package-tgz tar:///Users/hamrickb/.npm/couchr/0.0.13/package.tgz
npm sill lockFile bf4e15a7-kb-npm-couchr-0-0-13-package-tgz tar:///Users/hamrickb/.npm/couchr/0.0.13/package.tgz
npm info preinstall multicouch@0.8.1
npm sill lockFile 80e8363c--hoodie-server-node-modules-lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock
npm sill lockFile 80e8363c--hoodie-server-node-modules-lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock
npm sill lockFile 75aee2bb-die-server-node-modules-dispatch tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/dispatch
npm sill lockFile 75aee2bb-die-server-node-modules-dispatch tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/dispatch
npm info preinstall couchr@0.0.13
npm sill lockFile 0de04889-rickb-npm-lock-0-0-3-package-tgz tar:///Users/hamrickb/.npm/lock/0.0.3/package.tgz
npm sill lockFile 0de04889-rickb-npm-lock-0-0-3-package-tgz tar:///Users/hamrickb/.npm/lock/0.0.3/package.tgz
npm sill lockFile e2b4b39e-b-npm-dispatch-0-2-0-package-tgz tar:///Users/hamrickb/.npm/dispatch/0.2.0/package.tgz
npm sill lockFile e2b4b39e-b-npm-dispatch-0-2-0-package-tgz tar:///Users/hamrickb/.npm/dispatch/0.2.0/package.tgz
npm sill gunzTarPerm extractEntry examples/http/error-handling.js
npm sill gunzTarPerm extractEntry examples/http/forward-and-target-proxy.js
npm sill gunzTarPerm extractEntry examples/errors.js
npm sill gunzTarPerm extractEntry examples/files.js
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry test/umask_sync.js
npm sill gunzTarPerm extractEntry test/rel.js
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry example/boolean_single.js
npm sill gunzTarPerm extractEntry example/usage-options.js
npm verb readDependencies using package.json deps
npm info preinstall lock@0.0.3
npm verb cache add [ 'ini@1.x', null ]
npm verb cache add name=undefined spec="ini@1.x" args=["ini@1.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'ini@1.x',
npm verb parsed url path: 'ini@1.x',
npm verb parsed url href: 'ini@1.x' }
npm verb cache add name="ini" spec="1.x" args=["ini","1.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.x',
npm verb parsed url path: '1.x',
npm verb parsed url href: '1.x' }
npm verb addNamed [ 'ini', '1.x' ]
npm verb addNamed [ null, '>=1.0.0-0 <2.0.0-0' ]
npm sill lockFile 5028d44f-ini-1-x ini@1.x
npm verb lock ini@1.x /Users/hamrickb/.npm/5028d44f-ini-1-x.lock
npm info preinstall dispatch@0.2.0
npm sill gunzTarPerm extractEntry CHANGES
npm sill gunzTarPerm extractEntry bin/generate-color-images
npm verb cache add [ 'shelljs@~0.2.6', null ]
npm verb cache add name=undefined spec="shelljs@~0.2.6" args=["shelljs@~0.2.6",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'shelljs@~0.2.6',
npm verb parsed url path: 'shelljs@~0.2.6',
npm verb parsed url href: 'shelljs@~0.2.6' }
npm verb cache add name="shelljs" spec="~0.2.6" args=["shelljs","~0.2.6"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.2.6',
npm verb parsed url path: '~0.2.6',
npm verb parsed url href: '~0.2.6' }
npm verb addNamed [ 'shelljs', '~0.2.6' ]
npm verb addNamed [ null, '>=0.2.6-0 <0.3.0-0' ]
npm sill lockFile 65411460-shelljs-0-2-6 shelljs@~0.2.6
npm verb lock shelljs@~0.2.6 /Users/hamrickb/.npm/65411460-shelljs-0-2-6.lock
npm verb cache add [ 'follow@0.8.0', null ]
npm verb cache add name=undefined spec="follow@0.8.0" args=["follow@0.8.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'follow@0.8.0',
npm verb parsed url path: 'follow@0.8.0',
npm verb parsed url href: 'follow@0.8.0' }
npm verb cache add name="follow" spec="0.8.0" args=["follow","0.8.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.8.0',
npm verb parsed url path: '0.8.0',
npm verb parsed url href: '0.8.0' }
npm verb addNamed [ 'follow', '0.8.0' ]
npm verb addNamed [ '0.8.0', '0.8.0' ]
npm sill lockFile 13ed236f-follow-0-8-0 follow@0.8.0
npm verb lock follow@0.8.0 /Users/hamrickb/.npm/13ed236f-follow-0-8-0.lock
npm verb cache add [ 'commander@1.x', null ]
npm verb cache add name=undefined spec="commander@1.x" args=["commander@1.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'commander@1.x',
npm verb parsed url path: 'commander@1.x',
npm verb parsed url href: 'commander@1.x' }
npm verb cache add name="commander" spec="1.x" args=["commander","1.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.x',
npm verb parsed url path: '1.x',
npm verb parsed url href: '1.x' }
npm verb addNamed [ 'commander', '1.x' ]
npm verb addNamed [ null, '>=1.0.0-0 <2.0.0-0' ]
npm sill lockFile 7b21ee85-commander-1-x commander@1.x
npm verb lock commander@1.x /Users/hamrickb/.npm/7b21ee85-commander-1-x.lock
npm verb cache add [ 'which@1.x', null ]
npm verb cache add name=undefined spec="which@1.x" args=["which@1.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'which@1.x',
npm verb parsed url path: 'which@1.x',
npm verb parsed url href: 'which@1.x' }
npm verb cache add name="which" spec="1.x" args=["which","1.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.x',
npm verb parsed url path: '1.x',
npm verb parsed url href: '1.x' }
npm verb addNamed [ 'which', '1.x' ]
npm verb addNamed [ null, '>=1.0.0-0 <2.0.0-0' ]
npm sill lockFile 5a27d590-which-1-x which@1.x
npm verb lock which@1.x /Users/hamrickb/.npm/5a27d590-which-1-x.lock
npm sill gunzTarPerm extractEntry examples/prompt-override.js
npm sill gunzTarPerm extractEntry examples/property-prompt.js
npm sill addNameRange { name: 'ini', range: '>=1.0.0-0 <2.0.0-0', hasData: false }
npm sill gunzTarPerm extractEntry browser/querystring.js
npm sill gunzTarPerm extractEntry browser/request.jquery.js
npm verb readDependencies using package.json deps
npm sill addNameRange { name: 'shelljs', range: '>=0.2.6-0 <0.3.0-0', hasData: false }
npm sill addNameRange { name: 'commander',
npm sill addNameRange range: '>=1.0.0-0 <2.0.0-0',
npm sill addNameRange hasData: false }
npm sill addNameRange { name: 'which', range: '>=1.0.0-0 <2.0.0-0', hasData: false }
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry examples/cache.js
npm sill gunzTarPerm extractEntry examples/injection.js
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/dispatch
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/dispatch
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff dispatch@0.2.0
npm verb linkBins dispatch@0.2.0
npm verb linkMans dispatch@0.2.0
npm verb rebuildBundles dispatch@0.2.0
npm verb cache add [ 'tape@~0.2.2', null ]
npm verb cache add name=undefined spec="tape@~0.2.2" args=["tape@~0.2.2",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'tape@~0.2.2',
npm verb parsed url path: 'tape@~0.2.2',
npm verb parsed url href: 'tape@~0.2.2' }
npm verb cache add name="tape" spec="~0.2.2" args=["tape","~0.2.2"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.2.2',
npm verb parsed url path: '~0.2.2',
npm verb parsed url href: '~0.2.2' }
npm verb addNamed [ 'tape', '~0.2.2' ]
npm verb addNamed [ null, '>=0.2.2-0 <0.3.0-0' ]
npm sill lockFile 0209fcdb-tape-0-2-2 tape@~0.2.2
npm verb lock tape@~0.2.2 /Users/hamrickb/.npm/0209fcdb-tape-0-2-2.lock
npm info install dispatch@0.2.0
npm sill gunzTarPerm extractEntry example/boolean_double.js
npm sill gunzTarPerm extractEntry example/xup.js
npm sill addNameRange { name: 'tape', range: '>=0.2.2-0 <0.3.0-0', hasData: false }
npm info postinstall dispatch@0.2.0
npm verb registry.get follow/0.8.0 not expired, no request
npm verb registry.get ini not expired, no request
npm sill addNameRange number 2 { name: 'ini', range: '>=1.0.0-0 <2.0.0-0', hasData: true }
npm sill addNameRange versions [ 'ini',
npm sill addNameRange [ '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.0.4', '1.0.5', '1.1.0' ] ]
npm verb addNamed [ 'ini', '1.1.0' ]
npm verb addNamed [ '1.1.0', '1.1.0' ]
npm sill lockFile f80c58e4-ini-1-1-0 ini@1.1.0
npm verb lock ini@1.1.0 /Users/hamrickb/.npm/f80c58e4-ini-1-1-0.lock
npm sill gunzTarPerm extractEntry lib/_xterm-colors.js
npm sill gunzTarPerm extractEntry lib/_xterm-match.js
npm verb registry.get shelljs not expired, no request
npm sill addNameRange number 2 { name: 'shelljs', range: '>=0.2.6-0 <0.3.0-0', hasData: true }
npm sill addNameRange versions [ 'shelljs',
npm sill addNameRange [ '0.0.1',
npm sill addNameRange '0.0.2',
npm sill addNameRange '0.0.3',
npm sill addNameRange '0.0.4',
npm sill addNameRange '0.0.5',
npm sill addNameRange '0.0.6',
npm sill addNameRange '0.0.7',
npm sill addNameRange '0.0.8',
npm sill addNameRange '0.0.9',
npm sill addNameRange '0.1.0',
npm sill addNameRange '0.1.1',
npm sill addNameRange '0.1.2',
npm sill addNameRange '0.1.3',
npm sill addNameRange '0.1.4',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.2.1',
npm sill addNameRange '0.2.2',
npm sill addNameRange '0.2.3',
npm sill addNameRange '0.2.4',
npm sill addNameRange '0.2.5',
npm sill addNameRange '0.2.6',
npm sill addNameRange '0.0.1-alpha1',
npm sill addNameRange '0.0.2-pre1',
npm sill addNameRange '0.0.4-pre1',
npm sill addNameRange '0.0.5-pre1',
npm sill addNameRange '0.0.5-pre2',
npm sill addNameRange '0.0.5-pre3',
npm sill addNameRange '0.0.5-pre4',
npm sill addNameRange '0.0.6-pre1',
npm sill addNameRange '0.0.6-pre2' ] ]
npm verb addNamed [ 'shelljs', '0.2.6' ]
npm verb addNamed [ '0.2.6', '0.2.6' ]
npm sill lockFile 542b9617-shelljs-0-2-6 shelljs@0.2.6
npm verb lock shelljs@0.2.6 /Users/hamrickb/.npm/542b9617-shelljs-0-2-6.lock
npm sill gunzTarPerm extractEntry browser/require.js
npm sill gunzTarPerm extractEntry browser/util.js
npm verb registry.get which not expired, no request
npm sill addNameRange number 2 { name: 'which', range: '>=1.0.0-0 <2.0.0-0', hasData: true }
npm sill addNameRange versions [ 'which', [ '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.0.5' ] ]
npm verb addNamed [ 'which', '1.0.5' ]
npm verb addNamed [ '1.0.5', '1.0.5' ]
npm sill lockFile 4aed4494-which-1-0-5 which@1.0.5
npm verb lock which@1.0.5 /Users/hamrickb/.npm/4aed4494-which-1-0-5.lock
npm sill gunzTarPerm extractEntry example/line_count_options.js
npm sill gunzTarPerm extractEntry readme.markdown
npm verb registry.get tape not expired, no request
npm sill addNameRange number 2 { name: 'tape', range: '>=0.2.2-0 <0.3.0-0', hasData: true }
npm sill addNameRange versions [ 'tape',
npm sill addNameRange [ '0.0.0',
npm sill addNameRange '0.0.1',
npm sill addNameRange '0.0.2',
npm sill addNameRange '0.0.3',
npm sill addNameRange '0.0.4',
npm sill addNameRange '0.0.5',
npm sill addNameRange '0.1.0',
npm sill addNameRange '0.1.1',
npm sill addNameRange '0.1.2',
npm sill addNameRange '0.1.3',
npm sill addNameRange '0.1.4',
npm sill addNameRange '0.1.5',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.2.1',
npm sill addNameRange '0.2.2',
npm sill addNameRange '0.3.0',
npm sill addNameRange '0.3.1',
npm sill addNameRange '0.3.2',
npm sill addNameRange '0.3.3',
npm sill addNameRange '1.0.0',
npm sill addNameRange '1.0.1',
npm sill addNameRange '1.0.2',
npm sill addNameRange '1.0.3',
npm sill addNameRange '1.0.4',
npm sill addNameRange '1.1.0',
npm sill addNameRange '1.1.1',
npm sill addNameRange '2.0.0',
npm sill addNameRange '2.0.1',
npm sill addNameRange '2.1.0',
npm sill addNameRange '2.2.0',
npm sill addNameRange '2.2.1',
npm sill addNameRange '2.3.0',
npm sill addNameRange '2.3.1',
npm sill addNameRange '2.3.2',
npm sill addNameRange '2.4.0',
npm sill addNameRange '2.4.1',
npm sill addNameRange '2.4.2' ] ]
npm verb addNamed [ 'tape', '0.2.2' ]
npm verb addNamed [ '0.2.2', '0.2.2' ]
npm sill lockFile b5b430e5-tape-0-2-2 tape@0.2.2
npm verb lock tape@0.2.2 /Users/hamrickb/.npm/b5b430e5-tape-0-2-2.lock
npm sill gunzTarPerm extractEntry examples/jsonp.js
npm sill gunzTarPerm extractEntry examples/prerequisites.js
npm verb registry.get commander not expired, no request
npm sill addNameRange number 2 { name: 'commander', range: '>=1.0.0-0 <2.0.0-0', hasData: true }
npm sill addNameRange versions [ 'commander',
npm sill addNameRange [ '0.0.1',
npm sill addNameRange '0.0.3',
npm sill addNameRange '0.0.4',
npm sill addNameRange '0.0.5',
npm sill addNameRange '0.1.0',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.2.1',
npm sill addNameRange '0.3.0',
npm sill addNameRange '0.3.1',
npm sill addNameRange '0.3.2',
npm sill addNameRange '0.3.3',
npm sill addNameRange '0.4.0',
npm sill addNameRange '0.4.1',
npm sill addNameRange '0.4.2',
npm sill addNameRange '0.4.3',
npm sill addNameRange '0.5.0',
npm sill addNameRange '0.5.1',
npm sill addNameRange '0.6.0',
npm sill addNameRange '0.6.1',
npm sill addNameRange '0.5.2',
npm sill addNameRange '1.0.0',
npm sill addNameRange '1.0.1',
npm sill addNameRange '1.0.2',
npm sill addNameRange '1.0.3',
npm sill addNameRange '1.0.4',
npm sill addNameRange '1.0.5',
npm sill addNameRange '1.1.0',
npm sill addNameRange '1.1.1',
npm sill addNameRange '1.2.0',
npm sill addNameRange '1.3.0',
npm sill addNameRange '1.3.1',
npm sill addNameRange '1.3.2',
npm sill addNameRange '2.0.0',
npm sill addNameRange '2.1.0' ] ]
npm verb addNamed [ 'commander', '1.3.2' ]
npm verb addNamed [ '1.3.2', '1.3.2' ]
npm sill lockFile 2016e061-commander-1-3-2 commander@1.3.2
npm verb lock commander@1.3.2 /Users/hamrickb/.npm/2016e061-commander-1-3-2.lock
npm sill gunzTarPerm extractEntry lib/index.js
npm sill gunzTarPerm extractEntry lib/throbber.js
npm sill lockFile 81e1933e-oodie-server-node-modules-semver tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/semver
npm sill lockFile 81e1933e-oodie-server-node-modules-semver tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/semver
npm sill lockFile 1f7926c5-ckb-npm-semver-1-1-4-package-tgz tar:///Users/hamrickb/.npm/semver/1.1.4/package.tgz
npm sill lockFile 1f7926c5-ckb-npm-semver-1-1-4-package-tgz tar:///Users/hamrickb/.npm/semver/1.1.4/package.tgz
npm sill gunzTarPerm extractEntry test/_.js
npm sill gunzTarPerm extractEntry test/dash.js
npm info preinstall semver@1.1.4
npm sill gunzTarPerm extractEntry lib/trim.js
npm sill gunzTarPerm extractEntry .lint
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/semver
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/semver
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff semver@1.1.4
npm verb linkBins semver@1.1.4
npm verb link bins [ { semver: './bin/semver' },
npm verb link bins '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/.bin',
npm verb link bins false ]
npm verb linkMans semver@1.1.4
npm verb rebuildBundles semver@1.1.4
npm sill lockFile 13ed236f-follow-0-8-0 follow@0.8.0
npm sill lockFile 13ed236f-follow-0-8-0 follow@0.8.0
npm sill gunzTarPerm extractEntry test/parse.js
npm sill gunzTarPerm extractEntry test/short.js
npm sill resolved [ { name: 'follow',
npm sill resolved version: '0.8.0',
npm sill resolved author: { name: 'Jason Smith', email: 'jhs@iriscouch.com' },
npm sill resolved description: 'Extremely robust, fault-tolerant CouchDB changes follower',
npm sill resolved keywords: [ 'couchdb', 'changes', 'sleep', 'sleepy' ],
npm sill resolved homepage: 'http://github.com/iriscouch/follow',
npm sill resolved repository: { type: 'git', url: 'git://github.com/iriscouch/follow' },
npm sill resolved engines: [ 'node' ],
npm sill resolved dependencies: { request: '~2.2.5' },
npm sill resolved devDependencies: { tap: '~0.1.3', traceback: '~0.3.0' },
npm sill resolved main: './api.js',
npm sill resolved bin: { follow: './cli.js' },
npm sill resolved readme: '# Follow: CouchDB changes notifier for NodeJS\n\nFollow (upper-case *F*) comes from an internal Iris Couch project used in production for over a year. It works in the browser (beta) and is available as an NPM module.\n\n $ npm install follow\n\n## Example\n\nThis looks much like the [request][req] API.\n\n```javascript\nvar follow = require(\'follow\');\nfollow("https://example.iriscouch.com/boogie", function(error, change) {\n if(!error)\n console.log("Got change number " + change.seq + ": " + change.id);\n})\n```\n\nThe *error* parameter to the callback will basically always be `null`.\n\n## Objective\n\nThe API must be very simple: notify me every time a change happens in the DB. Also, never fail.\n\nIf an error occurs, Follow will internally retry without notifying your code.\n\nSpecifically, this should be possible:\n\n1. Begin a changes feed. Get a couple of change callbacks\n2. Shut down CouchDB\n3. Go home. Have a nice weekend. Come back on Monday.\n4. Start CouchDB with a different IP address\n5. Make a couple of changes\n6. Update DNS so the domain points to the new IP\n7. Once DNS propagates, get a couple more change callbacks\n\n## Failure Mode\n\nIf CouchDB permanently crashes, there is an option of failure modes:\n\n* **Default:** Simply never call back with a change again\n* **Optional:** Specify an *inactivity* timeout. If no changes happen by the timeout, Follow will signal an error.\n\n### Simple API: follow(options, callback)\n\nThe first argument is an options object. The only required option is `db`. Instead of an object, you can use a string to indicate the `db` value.\n\n```javascript\nfollow({db:"https://example.iriscouch.com/boogie", include_docs:true}, function(error, change) {\n if(!error) {\n console.log("Change " + change.seq + " has " + Object.keys(change.doc).length + " fields");\n }\n})\n```\n\n<a name="options"></a>\nAll of the CouchDB _changes options are allowed. See http://guide.couchdb.org/draft/notifications.html.\n\n* `db` | Fully-qualified URL of a couch database. (Basic auth URLs are ok.)\n* `since` | The sequence number to start from. Use `"now"` to start from the latest change in the DB.\n* `heartbeat` | Milliseconds within which CouchDB must respond (default: **30000** or 30 seconds)\n* `feed` | **Optional but only "continuous" is allowed**\n* `filter` |\n * **Either** a path to design document filter, e.g. `app/important`\n * **Or** a Javascript `function(doc, req) { ... }` which should return true or false\n* `query_params` | **Optional** for use in with `filter` functions, passed as `req.query` to the filter function\n\nBesides the CouchDB options, more are available:\n\n* `headers` | Object with HTTP headers to add to the request\n* `inactivity_ms` | Maximum time to wait between **changes**. Omitting this means no maximum.\n\n## Object API\n\nThe main API is a thin wrapper around the EventEmitter API.\n\n```javascript\nvar follow = require(\'follow\');\n\nvar opts = {}; // Same options paramters as before\nvar feed = new follow.Feed(opts);\n\n// You can also set values directly.\nfeed.db = "http://example.iriscouch.com/boogie";\nfeed.since = 3;\nfeed.heartbeat = 30 * 1000\nfeed.inactivity_ms = 86400 * 1000;\n\nfeed.filter = function(doc, req) {\n // req.query is the parameters from the _changes request and also feed.query_params.\n console.log(\'Filtering for query: \' + JSON.stringify(req.query));\n\n if(doc.stinky || doc.ugly)\n return false;\n return true;\n}\n\nfeed.on(\'change\', function(change) {\n console.log(\'Doc \' + change.id + \' in change \' + change.seq + \' is neither stinky nor ugly.\');\n})\n\nfeed.on(\'error\', function(er) {\n console.error(\'Since Follow always retries on errors, this must be serious\');\n throw er;\n})\n\nfeed.follow();\n```\n\n<a name="events"></a>\n## Events\n\nThe feed object is an EventEmitter. There are a few ways to get a feed object:\n\n* Use the object API above\n* Use the return value of `follow()`\n* In the callback to `follow()`, the *this* variable is bound to the feed object.\n\nOnce you\'ve got one, you can subscribe to these events:\n\n* **start** | Before any i/o occurs\n* **confirm_request** | `function(req)` | The database confirmation request is sent; passed the `request` object\n* **confirm** | `function(db_obj)` | The database is confirmed; passed the couch database object\n* **change** | `function(change)` | A change occured; passed the change object from CouchDB\n* **catchup** | `function(seq_id)` | The feed has caught up to the *update_seq* from the confirm step. Assuming no subsequent changes, you have seen all the data. *Always fires before the final **change** event.*\n* **wait** | Follow is idle, waiting for the next data chunk from CouchDB\n* **timeout** | `function(info)` | Follow did not receive a heartbeat from couch in time. The passed object has `.elapsed_ms` set to the elapsed time\n* **retry** | `function(info)` | A retry is scheduled (usually after a timeout or disconnection). The passed object has\n * `.since` the current sequence id\n * `.after` the milliseconds to wait before the request occurs (on an exponential fallback schedule)\n * `.db` the database url (scrubbed of basic auth credentials)\n* **stop** | The feed is stopping, because of an error, or because you called `feed.stop()`\n* **error** | `function(err)` | An error occurs\n\n## Error conditions\n\nFollow is happy to retry over and over, for all eternity. It will only emit an error if it thinks your whole application might be in trouble.\n\n* *DB confirmation* failed: Follow confirms the DB with a preliminary query, which must reply properly.\n* *DB is deleted*: Even if it retried, subsequent sequence numbers would be meaningless to your code.\n* *Your inactivity timer* expired: This is a last-ditch way to detect possible errors. What if couch is sending heartbeats just fine, but nothing has changed for 24 hours? You know that for your app, 24 hours with no change is impossible. Maybe your filter has a bug? Maybe you queried the wrong DB? Whatever the reason, Follow will emit an error.\n* JSON parse error, which should be impossible from CouchDB\n* Invalid change object format, which should be impossible from CouchDB\n* Internal error, if the internal state seems wrong, e.g. cancelling a timeout that already expired, etc. Follow tries to fail early.\n\n## Tests\n\nFollow uses [node-tap][tap]. If you clone this Git repository, tap is included.\n\n $ ./node_modules/.bin/tap test\n ok test/couch.js ...................................... 10/10\n ok test/follow.js ..................................... 68/68\n ok test/issues/10.js .................................. 10/10\n ok test/issues.js ..................................... 43/43\n ok test/stream.js ................................... 299/299\n total ............................................... 435/435\n\n ok\n\n## License\n\nApache 2.0\n\n[req]: https://github.com/mikeal/request\n[tap]: https://github.com/isaacs/node-tap\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/iriscouch/follow/issues' },
npm sill resolved _id: 'follow@0.8.0',
npm sill resolved _from: 'follow@0.8.0' } ]
npm info install follow@0.8.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr
npm info installOne follow@0.8.0
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr/node_modules/follow unbuild
npm sill lockFile f80c58e4-ini-1-1-0 ini@1.1.0
npm sill lockFile f80c58e4-ini-1-1-0 ini@1.1.0
npm sill lockFile 5028d44f-ini-1-x ini@1.x
npm sill lockFile 5028d44f-ini-1-x ini@1.x
npm info install semver@1.1.4
npm verb tar unpack /Users/hamrickb/.npm/follow/0.8.0/package.tgz
npm sill lockFile be93268b-dules-couchr-node-modules-follow tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr/node_modules/follow
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr/node_modules/follow /Users/hamrickb/.npm/be93268b-dules-couchr-node-modules-follow.lock
npm sill lockFile d30d7d0a-ckb-npm-follow-0-8-0-package-tgz tar:///Users/hamrickb/.npm/follow/0.8.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/follow/0.8.0/package.tgz /Users/hamrickb/.npm/d30d7d0a-ckb-npm-follow-0-8-0-package-tgz.lock
npm sill gunzTarPerm extractEntry test/_xterm-colors.js
npm sill gunzTarPerm extractEntry test/_xterm-match.js
npm info postinstall semver@1.1.4
npm sill lockFile 2016e061-commander-1-3-2 commander@1.3.2
npm sill lockFile 2016e061-commander-1-3-2 commander@1.3.2
npm sill lockFile 4aed4494-which-1-0-5 which@1.0.5
npm sill lockFile 4aed4494-which-1-0-5 which@1.0.5
npm sill lockFile 7b21ee85-commander-1-x commander@1.x
npm sill lockFile 7b21ee85-commander-1-x commander@1.x
npm sill lockFile 5a27d590-which-1-x which@1.x
npm sill lockFile 5a27d590-which-1-x which@1.x
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm extractEntry test/usage.js
npm sill gunzTarPerm extractEntry test/_/argv.js
npm sill gunzTarPerm extractEntry browser/index.html
npm sill gunzTarPerm extractEntry lib/feed.js
npm sill gunzTarPerm extractEntry package.json
npm sill lockFile 542b9617-shelljs-0-2-6 shelljs@0.2.6
npm sill lockFile 542b9617-shelljs-0-2-6 shelljs@0.2.6
npm sill gunzTarPerm extractEntry test/index.js
npm sill gunzTarPerm extractEntry test/throbber.js
npm sill gunzTarPerm extractEntry test/_/bin.js
npm sill lockFile 65411460-shelljs-0-2-6 shelljs@~0.2.6
npm sill lockFile 65411460-shelljs-0-2-6 shelljs@~0.2.6
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill resolved [ { author:
npm sill resolved { name: 'Isaac Z. Schlueter',
npm sill resolved email: 'i@izs.me',
npm sill resolved url: 'http://blog.izs.me/' },
npm sill resolved name: 'ini',
npm sill resolved description: 'An ini encoder/decoder for node',
npm sill resolved version: '1.1.0',
npm sill resolved repository: { type: 'git', url: 'git://github.com/isaacs/ini.git' },
npm sill resolved main: 'ini.js',
npm sill resolved scripts: { test: 'tap test/*.js' },
npm sill resolved engines: { node: '*' },
npm sill resolved dependencies: {},
npm sill resolved devDependencies: { tap: '~0.0.9' },
npm sill resolved readme: 'An ini format parser and serializer for node.\n\nSections are treated as nested objects. Items before the first heading\nare saved on the object directly.\n\n## Usage\n\nConsider an ini-file `config.ini` that looks like this:\n\n ; this comment is being ignored\n scope = global\n\n [database]\n user = dbuser\n password = dbpassword\n database = use_this_database\n\n [paths.default]\n datadir = /var/lib/data\n array[] = first value\n array[] = second value\n array[] = third value\n\nYou can read, manipulate and write the ini-file like so:\n\n var fs = require(\'fs\')\n , ini = require(\'ini\')\n\n var config = ini.parse(fs.readFileSync(\'./config.ini\', \'utf-8\'))\n\n config.scope = \'local\'\n config.database.database = \'use_another_database\'\n config.paths.default.tmpdir = \'/tmp\'\n delete config.paths.default.datadir\n config.paths.default.array.push(\'fourth value\')\n\n fs.writeFileSync(\'./config_modified.ini\', ini.stringify(config, \'section\'))\n\nThis will result in a file called `config_modified.ini` being written to the filesystem with the following content:\n\n [section]\n scope = local\n [section.database]\n user = dbuser\n password = dbpassword\n database = use_another_database\n [section.paths.default]\n tmpdir = /tmp\n array[] = first value\n array[] = second value\n array[] = third value\n array[] = fourth value\n\n\n## API\n\n### decode(inistring)\nDecode the ini-style formatted `inistring` into a nested object.\n\n### parse(inistring)\nAlias for `decode(inistring)`\n\n### encode(object, [section])\nEncode the object `object` into an ini-style formatted string. If the optional parameter `section` is given, then all top-level properties of the object are put into this section and the `section`-string is prepended to all sub-sections, see the usage example above.\n\n### stringify(object, [section])\nAlias for `encode(object, [section])`\n\n### safe(val)\nEscapes the string `val` such that it is safe to be used as a key or value in an ini-file. Basically escapes quotes. For example\n\n ini.safe(\'"unsafe string"\')\n\nwould result in\n\n "\\"unsafe string\\""\n\n### unsafe(val)\nUnescapes the string `val`\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/isaacs/ini/issues' },
npm sill resolved homepage: 'https://github.com/isaacs/ini',
npm sill resolved _id: 'ini@1.1.0',
npm sill resolved _from: 'ini@1.x' },
npm sill resolved { name: 'commander',
npm sill resolved version: '1.3.2',
npm sill resolved description: 'the complete solution for node.js command-line programs',
npm sill resolved keywords: [ 'command', 'option', 'parser', 'prompt', 'stdin' ],
npm sill resolved author: { name: 'TJ Holowaychuk', email: 'tj@vision-media.ca' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'https://github.com/visionmedia/commander.js.git' },
npm sill resolved dependencies: { keypress: '0.1.x' },
npm sill resolved devDependencies: { should: '>= 0.0.1' },
npm sill resolved scripts: { test: 'make test' },
npm sill resolved main: 'index',
npm sill resolved engines: { node: '>= 0.6.x' },
npm sill resolved readme: '# Commander.js\n\n The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby\'s [commander](https://github.com/visionmedia/commander).\n\n [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)\n\n## Installation\n\n $ npm install commander\n\n## Option parsing\n\n Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require(\'commander\');\n\nprogram\n .version(\'0.0.1\')\n .option(\'-p, --peppers\', \'Add peppers\')\n .option(\'-P, --pineapple\', \'Add pineapple\')\n .option(\'-b, --bbq\', \'Add bbq sauce\')\n .option(\'-c, --cheese [type]\', \'Add the specified type of cheese [marble]\', \'marble\')\n .parse(process.argv);\n\nconsole.log(\'you ordered a pizza with:\');\nif (program.peppers) console.log(\' - peppers\');\nif (program.pineapple) console.log(\' - pineapple\');\nif (program.bbq) console.log(\' - bbq\');\nconsole.log(\' - %s cheese\', program.cheese);\n```\n\n Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc.\n\n## Automated --help\n\n The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:\n\n``` \n $ ./examples/pizza --help\n\n Usage: pizza [options]\n\n Options:\n\n -V, --version output the version number\n -p, --peppers Add peppers\n -P, --pineapple Add pineapple\n -b, --bbq Add bbq sauce\n -c, --cheese <type> Add the specified type of cheese [marble]\n -h, --help output usage information\n\n```\n\n## Coercion\n\n```js\nfunction range(val) {\n return val.split(\'..\').map(Number);\n}\n\nfunction list(val) {\n return val.split(\',\');\n}\n\nprogram\n .version(\'0.0.1\')\n .usage(\'[options] <file ...>\')\n .option(\'-i, --integer <n>\', \'An integer argument\', parseInt)\n .option(\'-f, --float <n>\', \'A float argument\', parseFloat)\n .option(\'-r, --range <a>..<b>\', \'A range\', range)\n .option(\'-l, --list <items>\', \'A list\', list)\n .option(\'-o, --optional [value]\', \'An optional value\')\n .parse(process.argv);\n\nconsole.log(\' int: %j\', program.integer);\nconsole.log(\' float: %j\', program.float);\nconsole.log(\' optional: %j\', program.optional);\nprogram.range = program.range || [];\nconsole.log(\' range: %j..%j\', program.range[0], program.range[1]);\nconsole.log(\' list: %j\', program.list);\nconsole.log(\' args: %j\', program.args);\n```\n\n## Custom help\n\n You can display arbitrary `-h, --help` information\n by listening for "--help". Commander will automatically\n exit once you are done so that the remainder of your program\n does not execute causing undesired behaviours, for example\n in the following executable "stuff" will not output when\n `--help` is used.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require(\'../\');\n\nfunction list(val) {\n return val.split(\',\').map(Number);\n}\n\nprogram\n .version(\'0.0.1\')\n .option(\'-f, --foo\', \'enable some foo\')\n .option(\'-b, --bar\', \'enable some bar\')\n .option(\'-B, --baz\', \'enable some baz\');\n\n// must be before .parse() since\n// node\'s emit() is immediate\n\nprogram.on(\'--help\', function(){\n console.log(\' Examples:\');\n console.log(\'\');\n console.log(\' $ custom-help --help\');\n console.log(\' $ custom-help -h\');\n console.log(\'\');\n});\n\nprogram.parse(process.argv);\n\nconsole.log(\'stuff\');\n```\n\nyielding the following help output:\n\n```\n\nUsage: custom-help [options]\n\nOptions:\n\n -h, --help output usage information\n -V, --version output the version number\n -f, --foo enable some foo\n -b, --bar enable some bar\n -B, --baz enable some baz\n\nExamples:\n\n $ custom-help --help\n $ custom-help -h\n\n```\n\n## .prompt(msg, fn)\n\n Single-line prompt:\n\n```js\nprogram.prompt(\'name: \', function(name){\n console.log(\'hi %s\', name);\n});\n```\n\n Multi-line prompt:\n\n```js\nprogram.prompt(\'description:\', function(name){\n console.log(\'hi %s\', name);\n});\n```\n\n Coercion:\n\n```js\nprogram.prompt(\'Age: \', Number, function(age){\n console.log(\'age: %j\', age);\n});\n```\n\n```js\nprogram.prompt(\'Birthdate: \', Date, function(date){\n console.log(\'date: %s\', date);\n});\n```\n\n```js\nprogram.prompt(\'Email: \', /^.+@.+\\..+$/, function(email){\n console.log(\'email: %j\', email);\n});\n```\n\n## .password(msg[, mask], fn)\n\nPrompt for password without echoing:\n\n```js\nprogram.password(\'Password: \', function(pass){\n console.log(\'got "%s"\', pass);\n process.stdin.destroy();\n});\n```\n\nPrompt for password with mask char "*":\n\n```js\nprogram.password(\'Password: \', \'*\', function(pass){\n console.log(\'got "%s"\', pass);\n process.stdin.destroy();\n});\n```\n\n## .confirm(msg, fn)\n\n Confirm with the given `msg`:\n\n```js\nprogram.confirm(\'continue? \', function(ok){\n console.log(\' got %j\', ok);\n});\n```\n\n## .choose(list, fn)\n\n Let the user choose from a `list`:\n\n```js\nvar list = [\'tobi\', \'loki\', \'jane\', \'manny\', \'luna\'];\n\nconsole.log(\'Choose the coolest pet:\');\nprogram.choose(list, function(i){\n console.log(\'you chose %d "%s"\', i, list[i]);\n});\n```\n\n## .outputHelp()\n\n Output help information without exiting.\n\n## .help()\n\n Output help information and exit immediately.\n\n## Links\n\n - [API documentation](http://visionmedia.github.com/commander.js/)\n - [ascii tables](https://github.com/LearnBoost/cli-table)\n - [progress bars](https://github.com/visionmedia/node-progress)\n - [more progress bars](https://github.com/substack/node-multimeter)\n - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk &lt;tj@vision-media.ca&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\'Software\'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \'AS IS\', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n',
npm sill resolved readmeFilename: 'Readme.md',
npm sill resolved bugs: { url: 'https://github.com/visionmedia/commander.js/issues' },
npm sill resolved homepage: 'https://github.com/visionmedia/commander.js',
npm sill resolved _id: 'commander@1.3.2',
npm sill resolved _from: 'commander@1.x' },
npm sill resolved { author:
npm sill resolved { name: 'Isaac Z. Schlueter',
npm sill resolved email: 'i@izs.me',
npm sill resolved url: 'http://blog.izs.me' },
npm sill resolved name: 'which',
npm sill resolved description: 'Like which(1) unix command. Find the first instance of an executable in the PATH.',
npm sill resolved version: '1.0.5',
npm sill resolved repository: { type: 'git', url: 'git://github.com/isaacs/node-which.git' },
npm sill resolved main: 'which.js',
npm sill resolved bin: { which: './bin/which' },
npm sill resolved engines: { node: '*' },
npm sill resolved dependencies: {},
npm sill resolved devDependencies: {},
npm sill resolved readme: 'The "which" util from npm\'s guts.\n\nFinds the first instance of a specified executable in the PATH\nenvironment variable. Does not cache the results, so `hash -r` is not\nneeded when the PATH changes.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/isaacs/node-which/issues' },
npm sill resolved homepage: 'https://github.com/isaacs/node-which',
npm sill resolved _id: 'which@1.0.5',
npm sill resolved _from: 'which@1.x' },
npm sill resolved { name: 'shelljs',
npm sill resolved version: '0.2.6',
npm sill resolved author: { name: 'Artur Adib', email: 'aadib@mozilla.com' },
npm sill resolved description: 'Portable Unix shell commands for Node.js',
npm sill resolved keywords: [ 'unix', 'shell', 'makefile', 'make', 'jake', 'synchronous' ],
npm sill resolved repository: { type: 'git', url: 'git://github.com/arturadib/shelljs.git' },
npm sill resolved homepage: 'http://github.com/arturadib/shelljs',
npm sill resolved main: './shell.js',
npm sill resolved scripts: { test: 'node scripts/run-tests' },
npm sill resolved bin: { shjs: './bin/shjs' },
npm sill resolved dependencies: {},
npm sill resolved devDependencies: { jshint: '~2.1.11' },
npm sill resolved optionalDependencies: {},
npm sill resolved engines: { node: '>=0.8.0' },
npm sill resolved readme: '# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)\n\nShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script\'s dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts!\n\nThe project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in projects like:\n\n+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox\'s next-gen PDF reader\n+ [Firebug](http://getfirebug.com/) - Firefox\'s infamous debugger\n+ [JSHint](http://jshint.com) - Most popular JavaScript linter\n+ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers\n+ [Yeoman](http://yeoman.io/) - Web application stack and development tool\n+ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation\n\nand [many more](https://npmjs.org/browse/depended/shelljs).\n\n## Installing\n\nVia npm:\n\n```bash\n$ npm install [-g] shelljs\n```\n\nIf the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to\nrun ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder:\n\n```bash\n$ shjs my_script\n```\n\nYou can also just copy `shell.js` into your project\'s directory, and `require()` accordingly.\n\n\n## Examples\n\n### JavaScript\n\n```javascript\nrequire(\'shelljs/global\');\n\nif (!which(\'git\')) {\n echo(\'Sorry, this script requires git\');\n exit(1);\n}\n\n// Copy files to release dir\nmkdir(\'-p\', \'out/Release\');\ncp(\'-R\', \'stuff/*\', \'out/Release\');\n\n// Replace macros in each .js file\ncd(\'lib\');\nls(\'*.js\').forEach(function(file) {\n sed(\'-i\', \'BUILD_VERSION\', \'v0.1.2\', file);\n sed(\'-i\', /.*REMOVE_THIS_LINE.*\\n/, \'\', file);\n sed(\'-i\', /.*REPLACE_LINE_WITH_MACRO.*\\n/, cat(\'macro.js\'), file);\n});\ncd(\'..\');\n\n// Run external tool synchronously\nif (exec(\'git commit -am "Auto-commit"\').code !== 0) {\n echo(\'Error: Git commit failed\');\n exit(1);\n}\n```\n\n### CoffeeScript\n\n```coffeescript\nrequire \'shelljs/global\'\n\nif not which \'git\'\n echo \'Sorry, this script requires git\'\n exit 1\n\n# Copy files to release dir\nmkdir \'-p\', \'out/Release\'\ncp \'-R\', \'stuff/*\', \'out/Release\'\n\n# Replace macros in each .js file\ncd \'lib\'\nfor file in ls \'*.js\'\n sed \'-i\', \'BUILD_VERSION\', \'v0.1.2\', file\n sed \'-i\', /.*REMOVE_THIS_LINE.*\\n/, \'\', file\n sed \'-i\', /.*REPLACE_LINE_WITH_MACRO.*\\n/, cat \'macro.js\', file\ncd \'..\'\n\n# Run external tool synchronously\nif (exec \'git commit -am "Auto-commit"\').code != 0\n echo \'Error: Git commit failed\'\n exit 1\n```\n\n## Global vs. Local\n\nThe example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`.\n\nExample:\n\n```javascript\nvar shell = require(\'shelljs\');\nshell.echo(\'hello world\');\n```\n\n## Make tool\n\nA convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. In this case all shell objects are global, and command line arguments will cause the script to execute only the corresponding function in the global `target` object. To avoid redundant calls, target functions are executed only once per script.\n\nExample (CoffeeScript):\n\n```coffeescript\nrequire \'shelljs/make\'\n\ntarget.all = ->\n target.bundle()\n target.docs()\n\ntarget.bundle = ->\n cd __dirname\n mkdir \'build\'\n cd \'lib\'\n (cat \'*.js\').to \'../build/output.js\'\n\ntarget.docs = ->\n cd __dirname\n mkdir \'docs\'\n cd \'lib\'\n for file in ls \'*.js\'\n text = grep \'//@\', file # extract special comments\n text.replace \'//@\', \'\' # remove comment tags\n text.to \'docs/my_docs.md\'\n```\n\nTo run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so on.\n\n\n\n<!-- \n\n DO NOT MODIFY BEYOND THIS POINT - IT\'S AUTOMATICALLY GENERATED\n\n-->\n\n\n## Command reference\n\n\nAll commands run synchronously, unless otherwise stated.\n\n\n### cd(\'dir\')\nChanges to directory `dir` for the duration of the script\n\n\n### pwd()\nReturns the current directory.\n\n\n### ls([options ,] path [,path ...])\n### ls([options ,] path_array)\nAvailable options:\n\n+ `-R`: recursive\n+ `-A`: all files (include files beginning with `.`, except for `.` and `..`)\n\nExamples:\n\n```javascript\nls(\'projs/*.js\');\nls(\'-R\', \'/users/me\', \'/tmp\');\nls(\'-R\', [\'/users/me\', \'/tmp\']); // same as above\n```\n\nReturns array of files in the given path, or in current directory if no path provided.\n\n\n### find(path [,path ...])\n### find(path_array)\nExamples:\n\n```javascript\nfind(\'src\', \'lib\');\nfind([\'src\', \'lib\']); // same as above\nfind(\'.\').filter(function(file) { return file.match(/\\.js$/); });\n```\n\nReturns array of all files (however deep) in the given paths.\n\nThe main difference from `ls(\'-R\', path)` is that the resulting file names\ninclude the base directories, e.g. `lib/resources/file1` instead of just `file1`.\n\n\n### cp([options ,] source [,source ...], dest)\n### cp([options ,] source_array, dest)\nAvailable options:\n\n+ `-f`: force\n+ `-r, -R`: recursive\n\nExamples:\n\n```javascript\ncp(\'file1\', \'dir1\');\ncp(\'-Rf\', \'/tmp/*\', \'/usr/local/*\', \'/home/tmp\');\ncp(\'-Rf\', [\'/tmp/*\', \'/usr/local/*\'], \'/home/tmp\'); // same as above\n```\n\nCopies files. The wildcard `*` is accepted.\n\n\n### rm([options ,] file [, file ...])\n### rm([options ,] file_array)\nAvailable options:\n\n+ `-f`: force\n+ `-r, -R`: recursive\n\nExamples:\n\n```javascript\nrm(\'-rf\', \'/tmp/*\');\nrm(\'some_file.txt\', \'another_file.txt\');\nrm([\'some_file.txt\', \'another_file.txt\']); // same as above\n```\n\nRemoves files. The wildcard `*` is accepted.\n\n\n### mv(source [, source ...], dest\')\n### mv(source_array, dest\')\nAvailable options:\n\n+ `f`: force\n\nExamples:\n\n```javascript\nmv(\'-f\', \'file\', \'dir/\');\nmv(\'file1\', \'file2\', \'dir/\');\nmv([\'file1\', \'file2\'], \'dir/\'); // same as above\n```\n\nMoves files. The wildcard `*` is accepted.\n\n\n### mkdir([options ,] dir [, dir ...])\n### mkdir([options ,] dir_array)\nAvailable options:\n\n+ `p`: full path (will create intermediate dirs if necessary)\n\nExamples:\n\n```javascript\nmkdir(\'-p\', \'/tmp/a/b/c/d\', \'/tmp/e/f/g\');\nmkdir(\'-p\', [\'/tmp/a/b/c/d\', \'/tmp/e/f/g\']); // same as above\n```\n\nCreates directories.\n\n\n### test(expression)\nAvailable expression primaries:\n\n+ `\'-b\', \'path\'`: true if path is a block device\n+ `\'-c\', \'path\'`: true if path is a character device\n+ `\'-d\', \'path\'`: true if path is a directory\n+ `\'-e\', \'path\'`: true if path exists\n+ `\'-f\', \'path\'`: true if path is a regular file\n+ `\'-L\', \'path\'`: true if path is a symboilc link\n+ `\'-p\', \'path\'`: true if path is a pipe (FIFO)\n+ `\'-S\', \'path\'`: true if path is a socket\n\nExamples:\n\n```javascript\nif (test(\'-d\', path)) { /* do something with dir */ };\nif (!test(\'-f\', path)) continue; // skip if it\'s a regular file\n```\n\nEvaluates expression using the available primaries and returns corresponding value.\n\n\n### cat(file [, file ...])\n### cat(file_array)\n\nExamples:\n\n```javascript\nvar str = cat(\'file*.txt\');\nvar str = cat(\'file1\', \'file2\');\nvar str = cat([\'file1\', \'file2\']); // same as above\n```\n\nReturns a string containing the given file, or a concatenated string\ncontaining the files if more than one file is given (a new line character is\nintroduced between each file). Wildcard `*` accepted.\n\n\n### \'string\'.to(file)\n\nExamples:\n\n```javascript\ncat(\'input.txt\').to(\'output.txt\');\n```\n\nAnalogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as\nthose returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_\n\n\n### \'string\'.toEnd(file)\n\nExamples:\n\n```javascript\ncat(\'input.txt\').toEnd(\'output.txt\');\n```\n\nAnalogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as\nthose returned by `cat`, `grep`, etc).\n\n\n### sed([options ,] search_regex, replace_str, file)\nAvailable options:\n\n+ `-i`: Replace contents of \'file\' in-place. _Note that no backups will be created!_\n\nExamples:\n\n```javascript\nsed(\'-i\', \'PROGRAM_VERSION\', \'v0.1.3\', \'source.js\');\nsed(/.*DELETE_THIS_LINE.*\\n/, \'\', \'source.js\');\n```\n\nReads an input string from `file` and performs a JavaScript `replace()` on the input\nusing the given search regex and replacement string. Returns the new string after replacement.\n\n\n### grep([options ,] regex_filter, file [, file ...])\n### grep([options ,] regex_filter, file_array)\nAvailable options:\n\n+ `-v`: Inverse the sense of the regex and print the lines not matching the criteria.\n\nExamples:\n\n```javascript\ngrep(\'-v\', \'GLOBAL_VARIABLE\', \'*.js\');\ngrep(\'GLOBAL_VARIABLE\', \'*.js\');\n```\n\nReads input string from given files and returns a string containing all lines of the\nfile that match the given `regex_filter`. Wildcard `*` accepted.\n\n\n### which(command)\n\nExamples:\n\n```javascript\nvar nodeExec = which(\'node\');\n```\n\nSearches for `command` in the system\'s PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.\nReturns string containing the absolute path to the command.\n\n\n### echo(string [,string ...])\n\nExamples:\n\n```javascript\necho(\'hello world\');\nvar str = echo(\'hello world\');\n```\n\nPrints string to stdout, and returns string with additional utility methods\nlike `.to()`.\n\n\n### pushd([options,] [dir | \'-N\' | \'+N\'])\n\nAvailable options:\n\n+ `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.\n\nArguments:\n\n+ `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.\n+ `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.\n+ `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.\n\nExamples:\n\n```javascript\n// process.cwd() === \'/usr\'\npushd(\'/etc\'); // Returns /etc /usr\npushd(\'+1\'); // Returns /usr /etc\n```\n\nSave the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.\n\n### popd([options,] [\'-N\' | \'+N\'])\n\nAvailable options:\n\n+ `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.\n\nArguments:\n\n+ `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.\n+ `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.\n\nExamples:\n\n```javascript\necho(process.cwd()); // \'/usr\'\npushd(\'/etc\'); // \'/etc /usr\'\necho(process.cwd()); // \'/etc\'\npopd(); // \'/usr\'\necho(process.cwd()); // \'/usr\'\n```\n\nWhen no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.\n\n### dirs([options | \'+N\' | \'-N\'])\n\nAvailable options:\n\n+ `-c`: Clears the directory stack by deleting all of the elements.\n\nArguments:\n\n+ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.\n+ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.\n\nDisplay the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.\n\nSee also: pushd, popd\n\n\n### exit(code)\nExits the current process with the given exit code.\n\n### env[\'VAR_NAME\']\nObject containing environment variables (both getter and setter). Shortcut to process.env.\n\n### exec(command [, options] [, callback])\nAvailable options (all `false` by default):\n\n+ `async`: Asynchronous execution. Defaults to true if a callback is provided.\n+ `silent`: Do not echo program output to console.\n\nExamples:\n\n```javascript\nvar version = exec(\'node --version\', {silent:true}).output;\n\nvar child = exec(\'some_long_running_process\', {async:true});\nchild.stdout.on(\'data\', function(data) {\n /* ... do something with data ... */\n});\n\nexec(\'some_long_running_process\', function(code, output) {\n console.log(\'Exit code:\', code);\n console.log(\'Program output:\', output);\n});\n```\n\nExecutes the given `command` _synchronously_, unless otherwise specified.\nWhen in synchronous mode returns the object `{ code:..., output:... }`, containing the program\'s\n`output` (stdout + stderr) and its exit `code`. Otherwise returns the child process object, and\nthe `callback` gets the arguments `(code, output)`.\n\n**Note:** For long-lived processes, it\'s best to run `exec()` asynchronously as\nthe current synchronous implementation uses a lot of CPU. This should be getting\nfixed soon.\n\n\n### chmod(octal_mode || octal_string, file)\n### chmod(symbolic_mode, file)\n\nAvailable options:\n\n+ `-v`: output a diagnostic for every file processed\n+ `-c`: like verbose but report only when a change is made\n+ `-R`: change files and directories recursively\n\nExamples:\n\n```javascript\nchmod(755, \'/Users/brandon\');\nchmod(\'755\', \'/Users/brandon\'); // same as above\nchmod(\'u+x\', \'/Users/brandon\');\n```\n\nAlters the permissions of a file or directory by either specifying the\nabsolute permissions in octal form or expressing the changes in symbols.\nThis command tries to mimic the POSIX behavior as much as possible.\nNotable exceptions:\n\n+ In symbolic modes, \'a-r\' and \'-r\' are identical. No consideration is\n given to the umask.\n+ There is no "quiet" option since default behavior is to run silent.\n\n\n## Non-Unix commands\n\n\n### tempdir()\n\nExamples:\n\n```javascript\nvar tmp = tempdir(); // "/tmp" for most *nix platforms\n```\n\nSearches and returns string containing a writeable, platform-dependent temporary directory.\nFollows Python\'s [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).\n\n\n### error()\nTests if error occurred in the last command. Returns `null` if no error occurred,\notherwise returns string explaining the error\n\n\n## Configuration\n\n\n### config.silent\nExample:\n\n```javascript\nvar silentState = config.silent; // save old silent state\nconfig.silent = true;\n/* ... */\nconfig.silent = silentState; // restore old silent state\n```\n\nSuppresses all command output if `true`, except for `echo()` calls.\nDefault is `false`.\n\n### config.fatal\nExample:\n\n```javascript\nconfig.fatal = true;\ncp(\'this_file_does_not_exist\', \'/dev/null\'); // dies here\n/* more commands... */\n```\n\nIf `true` the script will die on errors. Default is `false`.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/arturadib/shelljs/issues' },
npm sill resolved _id: 'shelljs@0.2.6',
npm sill resolved _from: 'shelljs@~0.2.6' } ]
npm info install ini@1.1.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch
npm info install commander@1.3.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch
npm info install which@1.0.5 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch
npm info install shelljs@0.2.6 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch
npm info installOne ini@1.1.0
npm info installOne commander@1.3.2
npm info installOne which@1.0.5
npm info installOne shelljs@0.2.6
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/ini unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/which unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/shelljs unbuild
npm sill lockFile b5b430e5-tape-0-2-2 tape@0.2.2
npm sill lockFile b5b430e5-tape-0-2-2 tape@0.2.2
npm sill lockFile 0209fcdb-tape-0-2-2 tape@~0.2.2
npm sill lockFile 0209fcdb-tape-0-2-2 tape@~0.2.2
npm sill resolved [ { name: 'tape',
npm sill resolved version: '0.2.2',
npm sill resolved description: 'tap-producing test harness for node and browsers',
npm sill resolved main: 'index.js',
npm sill resolved bin: {},
npm sill resolved directories: { example: 'example', test: 'test' },
npm sill resolved dependencies: { jsonify: '~0.0.0', 'deep-equal': '~0.0.0', defined: '~0.0.0' },
npm sill resolved devDependencies: { tap: '~0.3.0', falafel: '~0.1.4' },
npm sill resolved scripts: { test: 'tap test/*.js' },
npm sill resolved repository: { type: 'git', url: 'git://github.com/substack/tape.git' },
npm sill resolved homepage: 'https://github.com/substack/tape',
npm sill resolved keywords: [ 'tap', 'test', 'harness', 'assert', 'browser' ],
npm sill resolved author:
npm sill resolved { name: 'James Halliday',
npm sill resolved email: 'mail@substack.net',
npm sill resolved url: 'http://substack.net' },
npm sill resolved license: 'MIT',
npm sill resolved readme: '# tape\n\ntap-producing test harness for node and browsers\n\n[![build status](https://secure.travis-ci.org/substack/tape.png)](http://travis-ci.org/substack/tape)\n\n![tape](http://substack.net/images/tape_drive.png)\n\n# browser compatibility\n\nchrome, firefox, opera, safari, IE6, IE7, IE8, IE9\n\nusing browserify@1.16.5\n\n# example\n\n``` js\nvar test = require(\'tape\');\n\ntest(\'timing test\', function (t) {\n t.plan(2);\n \n t.equal(typeof Date.now, \'function\');\n var start = Date.now();\n \n setTimeout(function () {\n t.equal(Date.now() - start, 100);\n }, 100);\n});\n```\n\n```\n$ node example/timing.js\nTAP version 13\n# timing test\nok 1 should be equal\nnot ok 2 should be equal\n ---\n operator: equal\n expected: 100\n actual: 107\n ...\n\n1..2\n# tests 2\n# pass 1\n# fail 1\n```\n\n# methods\n\nThe assertion methods in tape are heavily influenced or copied from the methods\nin [node-tap](https://github.com/isaacs/node-tap).\n\n```\nvar test = require(\'tape\')\n```\n\n## test(name, cb)\n\nCreate a new test with an optional `name` string. `cb(t)` fires with the new\ntest object `t` once all preceeding tests have finished. Tests execute serially.\n\nIf you forget to `t.plan()` out how many assertions you are going to run and you\ndon\'t call `t.end()` explicitly, your test will hang.\n\n## t.plan(n)\n\nDeclare that `n` assertions should be run. `t.end()` will be called\nautomatically after the `n`th assertion. If there are any more assertions after\nthe `n`th, or after `t.end()` is called, they will generate errors.\n\n## t.end()\n\nDeclare the end of a test explicitly.\n\n## t.fail(msg)\n\nGenerate a failing assertion with a message `msg`.\n\n## t.pass(msg)\n\nGenerate a passing assertion with a message `msg`.\n\n## t.skip(msg)\n \nGenerate an assertion that will be skipped over.\n\n## t.ok(value, msg)\n\nAssert that `value` is truthy with an optional description message `msg`.\n\nAliases: `t.true()`, `t.assert()`\n\n## t.notOk(value, msg)\n\nAssert that `value` is falsy with an optional description message `msg`.\n\nAliases: `t.false()`, `t.notok()`\n\n## t.error(err, msg)\n\nAssert that `err` is falsy. If `err` is non-falsy, use its `err.message` as the\ndescription message.\n\nAliases: `t.ifError()`, `t.ifErr()`, `t.iferror()`\n\n## t.equal(a, b, msg)\n\nAssert that `a === b` with an optional description `msg`.\n\nAliases: `t.equals()`, `t.isEqual()`, `t.is()`, `t.strictEqual()`,\n`t.strictEquals()`\n\n## t.notEqual(a, b, msg)\n\nAssert that `a !== b` with an optional description `msg`.\n\nAliases: `t.notEquals()`, `t.notStrictEqual()`, `t.notStrictEquals()`,\n`t.isNotEqual()`, `t.isNot()`, `t.not()`, `t.doesNotEqual()`, `t.isInequal()`\n\n## t.deepEqual(a, b, msg)\n\nAssert that `a` and `b` have the same structure and nested values using\n[node\'s deepEqual() algorithm](https://github.com/substack/node-deep-equal)\nwith an optional description `msg`.\n\nAliases: `t.deepEquals()`, `t.isEquivalent()`, `t.looseEqual()`,\n`t.looseEquals()`, `t.same()`\n\n## t.notDeepEqual(a, b, msg)\n\nAssert that `a` and `b` do not have the same structure and nested values using\n[node\'s deepEqual() algorithm](https://github.com/substack/node-deep-equal)\nwith an optional description `msg`.\n\nAliases: `t.notEquivalent()`, `t.notDeeply()`, `t.notSame()`,\n`t.isNotDeepEqual()`, `t.isNotDeeply()`, `t.isNotEquivalent()`,\n`t.isInequivalent()`\n\n## t.throws(fn, expected, msg)\n\nAssert that the function call `fn()` throws an exception.\n\n## t.doesNotThrow(fn, expected, msg)\n\nAssert that the function call `fn()` does not throw an exception.\n\n## t.test(name, cb)\n\nCreate a subtest with a new test handle `st` from `cb(st)` inside the current\ntest `t`. `cb(st)` will only fire when `t` finishes. Additional tests queued up\nafter `t` will not be run until all subtests finish.\n\n## var htest = test.createHarness()\n\nCreate a new test harness instance, which is a function like `test()`, but with\na new pending stack and test state.\n\nBy default the TAP output goes to `process.stdout` or `console.log()` if the\nenvironment doesn\'t have `process.stdout`. You can pipe the output to someplace\nelse if you `test.stream.pipe()` to a destination stream on the first tick.\n\n## test.only(name, cb)\n\nLike `test(name, cb)` except if you use `.only` this is the only test case\nthat will run for the entire process, all other test cases using tape will\nbe ignored\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install tape\n```\n\n# license\n\nMIT\n',
npm sill resolved readmeFilename: 'readme.markdown',
npm sill resolved bugs: { url: 'https://github.com/substack/tape/issues' },
npm sill resolved _id: 'tape@0.2.2',
npm sill resolved _from: 'tape@~0.2.2' } ]
npm info install tape@0.2.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock
npm info installOne tape@0.2.2
npm verb tar unpack /Users/hamrickb/.npm/ini/1.1.0/package.tgz
npm sill lockFile c23b19a9-ules-multicouch-node-modules-ini tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/ini
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/ini /Users/hamrickb/.npm/c23b19a9-ules-multicouch-node-modules-ini.lock
npm sill lockFile 432242c8-mrickb-npm-ini-1-1-0-package-tgz tar:///Users/hamrickb/.npm/ini/1.1.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/ini/1.1.0/package.tgz /Users/hamrickb/.npm/432242c8-mrickb-npm-ini-1-1-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/commander/1.3.2/package.tgz
npm sill lockFile abbacf2c-ulticouch-node-modules-commander tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander /Users/hamrickb/.npm/abbacf2c-ulticouch-node-modules-commander.lock
npm sill lockFile 989862aa--npm-commander-1-3-2-package-tgz tar:///Users/hamrickb/.npm/commander/1.3.2/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/commander/1.3.2/package.tgz /Users/hamrickb/.npm/989862aa--npm-commander-1-3-2-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/which/1.0.5/package.tgz
npm sill lockFile 1a96b380-es-multicouch-node-modules-which tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/which
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/which /Users/hamrickb/.npm/1a96b380-es-multicouch-node-modules-which.lock
npm sill lockFile 39e6233f-ickb-npm-which-1-0-5-package-tgz tar:///Users/hamrickb/.npm/which/1.0.5/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/which/1.0.5/package.tgz /Users/hamrickb/.npm/39e6233f-ickb-npm-which-1-0-5-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/shelljs/0.2.6/package.tgz
npm sill lockFile f866f4cc--multicouch-node-modules-shelljs tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/shelljs
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/shelljs /Users/hamrickb/.npm/f866f4cc--multicouch-node-modules-shelljs.lock
npm sill lockFile a321a573-kb-npm-shelljs-0-2-6-package-tgz tar:///Users/hamrickb/.npm/shelljs/0.2.6/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/shelljs/0.2.6/package.tgz /Users/hamrickb/.npm/a321a573-kb-npm-shelljs-0-2-6-package-tgz.lock
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape unbuild
npm sill gunzTarPerm extractEntry lib/index.js
npm sill gunzTarPerm extractEntry lib/stream.js
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm verb tar unpack /Users/hamrickb/.npm/tape/0.2.2/package.tgz
npm sill lockFile c4dc2be1-e-modules-lock-node-modules-tape tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape /Users/hamrickb/.npm/c4dc2be1-e-modules-lock-node-modules-tape.lock
npm sill lockFile e09e5530-rickb-npm-tape-0-2-2-package-tgz tar:///Users/hamrickb/.npm/tape/0.2.2/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/tape/0.2.2/package.tgz /Users/hamrickb/.npm/e09e5530-rickb-npm-tape-0-2-2-package-tgz.lock
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry tests/test-form.js
npm sill gunzTarPerm extractEntry tests/test-oauth.js
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry test/trim.js
npm sill gunzTarPerm extractEntry test/__playground/throbber.formatted.js
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry api.js
npm sill gunzTarPerm extractEntry cli.js
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry History.md
npm sill gunzTarPerm extractEntry Readme.md
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry test/__playground/throbber.js
npm sill gunzTarPerm extractEntry ini.js
npm sill gunzTarPerm extractEntry test/bar.js
npm sill gunzTarPerm extractEntry test/foo.js
npm sill gunzTarPerm extractEntry test/fixtures/foo.ini
npm sill gunzTarPerm extractEntry tests/test-params.js
npm sill gunzTarPerm extractEntry tests/test-piped-redirect.js
npm sill gunzTarPerm extractEntry which.js
npm sill gunzTarPerm extractEntry bin/which
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry example/array.js
npm sill gunzTarPerm extractEntry example/fail.js
npm sill gunzTarPerm extractEntry example/nested.js
npm sill gunzTarPerm extractEntry example/nested_fail.js
npm sill gunzTarPerm extractEntry example/not_enough.js
npm sill gunzTarPerm extractEntry example/timing.js
npm sill gunzTarPerm extractEntry example/too_many.js
npm sill gunzTarPerm extractEntry example/static/server.js
npm sill gunzTarPerm extractEntry example/static/build.sh
npm sill gunzTarPerm extractEntry example/static/index.html
npm sill gunzTarPerm extractEntry lib/default_stream.js
npm sill gunzTarPerm extractEntry lib/render.js
npm sill gunzTarPerm extractEntry lib/test.js
npm sill gunzTarPerm extractEntry readme.markdown
npm sill gunzTarPerm extractEntry test/array.js
npm sill gunzTarPerm extractEntry test/exit.js
npm sill gunzTarPerm extractEntry test/fail.js
npm sill gunzTarPerm extractEntry test/harness.js
npm sill gunzTarPerm extractEntry test/throw.js
npm sill gunzTarPerm extractEntry test/child_ordering.js
npm sill gunzTarPerm extractEntry test/nested.js
npm sill gunzTarPerm extractEntry test/only.js
npm sill gunzTarPerm extractEntry test/order.js
npm sill gunzTarPerm extractEntry test/plan_optional.js
npm sill gunzTarPerm extractEntry test/skip.js
npm sill gunzTarPerm extractEntry test/too_many.js
npm sill gunzTarPerm extractEntry test/max_listeners.js
npm sill gunzTarPerm extractEntry test/max_listeners/source.js
npm sill gunzTarPerm extractEntry test/exit/fail.js
npm sill gunzTarPerm extractEntry test/exit/ok.js
npm sill gunzTarPerm extractEntry test/exit/too_few.js
npm sill gunzTarPerm extractEntry tests/test-pipes.js
npm sill gunzTarPerm extractEntry tests/test-pool.js
npm sill gunzTarPerm extractEntry global.js
npm sill gunzTarPerm extractEntry make.js
npm sill gunzTarPerm extractEntry Rakefile
npm sill gunzTarPerm extractEntry browser/eventemitter2.js
npm sill lockFile f0fde8da-hoodie-server-node-modules-async tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/async
npm sill lockFile f0fde8da-hoodie-server-node-modules-async tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/async
npm sill lockFile 974e0a4a-ickb-npm-async-0-2-7-package-tgz tar:///Users/hamrickb/.npm/async/0.2.7/package.tgz
npm sill lockFile 974e0a4a-ickb-npm-async-0-2-7-package-tgz tar:///Users/hamrickb/.npm/async/0.2.7/package.tgz
npm info preinstall async@0.2.7
npm sill gunzTarPerm extractEntry examples/simple-prompt.js
npm sill gunzTarPerm extractEntry examples/yes-or-no-prompt.js
npm sill gunzTarPerm extractEntry tests/test-follow-all.js
npm sill gunzTarPerm extractEntry tests/test-protocol-changing-redirect.js
npm sill gunzTarPerm extractEntry examples/http/concurrent-proxy.js
npm sill gunzTarPerm extractEntry examples/http/latent-proxy.js
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/async
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/async
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff async@0.2.7
npm verb linkBins async@0.2.7
npm verb linkMans async@0.2.7
npm verb rebuildBundles async@0.2.7
npm info install async@0.2.7
npm info postinstall async@0.2.7
npm sill lockFile df3ccbab-e-modules-hoodie-plugins-manager tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager
npm sill lockFile df3ccbab-e-modules-hoodie-plugins-manager tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager
npm sill lockFile 3333d3e1-oodie-server-node-modules-mkdirp tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/mkdirp
npm sill lockFile 3333d3e1-oodie-server-node-modules-mkdirp tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/mkdirp
npm sill lockFile 77b0a243-lugins-manager-0-2-4-package-tgz tar:///Users/hamrickb/.npm/hoodie-plugins-manager/0.2.4/package.tgz
npm sill lockFile 77b0a243-lugins-manager-0-2-4-package-tgz tar:///Users/hamrickb/.npm/hoodie-plugins-manager/0.2.4/package.tgz
npm sill gunzTarPerm extractEntry examples/http/proxy-http-to-https.js
npm sill gunzTarPerm extractEntry examples/http/proxy-https-to-http.js
npm sill gunzTarPerm extractEntry examples/override-validation.js
npm sill gunzTarPerm extractEntry lib/prompt.js
npm sill lockFile 76662a4f-ckb-npm-mkdirp-0-3-5-package-tgz tar:///Users/hamrickb/.npm/mkdirp/0.3.5/package.tgz
npm sill lockFile 76662a4f-ckb-npm-mkdirp-0-3-5-package-tgz tar:///Users/hamrickb/.npm/mkdirp/0.3.5/package.tgz
npm sill gunzTarPerm extractEntry tests/test-follow-all-303.js
npm sill gunzTarPerm extractEntry tests/test-proxy.js
npm info preinstall hoodie-plugins-manager@0.2.4
npm info preinstall mkdirp@0.3.5
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/mkdirp
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/mkdirp
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff mkdirp@0.3.5
npm verb linkBins mkdirp@0.3.5
npm verb linkMans mkdirp@0.3.5
npm verb rebuildBundles mkdirp@0.3.5
npm verb cache add [ 'underscore@1.5.1', null ]
npm verb cache add name=undefined spec="underscore@1.5.1" args=["underscore@1.5.1",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'underscore@1.5.1',
npm verb parsed url path: 'underscore@1.5.1',
npm verb parsed url href: 'underscore@1.5.1' }
npm verb cache add name="underscore" spec="1.5.1" args=["underscore","1.5.1"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.5.1',
npm verb parsed url path: '1.5.1',
npm verb parsed url href: '1.5.1' }
npm verb addNamed [ 'underscore', '1.5.1' ]
npm verb addNamed [ '1.5.1', '1.5.1' ]
npm sill lockFile f6569b8a-underscore-1-5-1 underscore@1.5.1
npm verb lock underscore@1.5.1 /Users/hamrickb/.npm/f6569b8a-underscore-1-5-1.lock
npm verb cache add [ 'hoodie-plugins-api@0.2.1', null ]
npm verb cache add name=undefined spec="hoodie-plugins-api@0.2.1" args=["hoodie-plugins-api@0.2.1",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'hoodie-plugins-api@0.2.1',
npm verb parsed url path: 'hoodie-plugins-api@0.2.1',
npm verb parsed url href: 'hoodie-plugins-api@0.2.1' }
npm verb cache add name="hoodie-plugins-api" spec="0.2.1" args=["hoodie-plugins-api","0.2.1"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.1',
npm verb parsed url path: '0.2.1',
npm verb parsed url href: '0.2.1' }
npm verb addNamed [ 'hoodie-plugins-api', '0.2.1' ]
npm verb addNamed [ '0.2.1', '0.2.1' ]
npm sill lockFile 306182fb-hoodie-plugins-api-0-2-1 hoodie-plugins-api@0.2.1
npm verb lock hoodie-plugins-api@0.2.1 /Users/hamrickb/.npm/306182fb-hoodie-plugins-api-0-2-1.lock
npm verb cache add [ 'couchr@0.0.14', null ]
npm verb cache add name=undefined spec="couchr@0.0.14" args=["couchr@0.0.14",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'couchr@0.0.14',
npm verb parsed url path: 'couchr@0.0.14',
npm verb parsed url href: 'couchr@0.0.14' }
npm verb cache add name="couchr" spec="0.0.14" args=["couchr","0.0.14"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.0.14',
npm verb parsed url path: '0.0.14',
npm verb parsed url href: '0.0.14' }
npm verb addNamed [ 'couchr', '0.0.14' ]
npm verb addNamed [ '0.0.14', '0.0.14' ]
npm sill lockFile b0b9406f-couchr-0-0-14 couchr@0.0.14
npm verb lock couchr@0.0.14 /Users/hamrickb/.npm/b0b9406f-couchr-0-0-14.lock
npm verb cache add [ 'nodemailer@0.5.2', null ]
npm verb cache add name=undefined spec="nodemailer@0.5.2" args=["nodemailer@0.5.2",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'nodemailer@0.5.2',
npm verb parsed url path: 'nodemailer@0.5.2',
npm verb parsed url href: 'nodemailer@0.5.2' }
npm verb cache add name="nodemailer" spec="0.5.2" args=["nodemailer","0.5.2"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.5.2',
npm verb parsed url path: '0.5.2',
npm verb parsed url href: '0.5.2' }
npm verb addNamed [ 'nodemailer', '0.5.2' ]
npm verb addNamed [ '0.5.2', '0.5.2' ]
npm sill lockFile efb5b675-nodemailer-0-5-2 nodemailer@0.5.2
npm verb lock nodemailer@0.5.2 /Users/hamrickb/.npm/efb5b675-nodemailer-0-5-2.lock
npm verb cache add [ 'async@0.2.9', null ]
npm verb cache add name=undefined spec="async@0.2.9" args=["async@0.2.9",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'async@0.2.9',
npm verb parsed url path: 'async@0.2.9',
npm verb parsed url href: 'async@0.2.9' }
npm verb cache add name="async" spec="0.2.9" args=["async","0.2.9"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.9',
npm verb parsed url path: '0.2.9',
npm verb parsed url href: '0.2.9' }
npm verb addNamed [ 'async', '0.2.9' ]
npm verb addNamed [ '0.2.9', '0.2.9' ]
npm sill lockFile be62480b-async-0-2-9 async@0.2.9
npm verb lock async@0.2.9 /Users/hamrickb/.npm/be62480b-async-0-2-9.lock
npm sill gunzTarPerm extractEntry CHANGELOG.md
npm sill gunzTarPerm extractEntry test/helpers.js
npm info install mkdirp@0.3.5
npm verb cache add [ 'dataurl@0.1.0', null ]
npm verb cache add name=undefined spec="dataurl@0.1.0" args=["dataurl@0.1.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'dataurl@0.1.0',
npm verb parsed url path: 'dataurl@0.1.0',
npm verb parsed url href: 'dataurl@0.1.0' }
npm verb cache add name="dataurl" spec="0.1.0" args=["dataurl","0.1.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.1.0',
npm verb parsed url path: '0.1.0',
npm verb parsed url href: '0.1.0' }
npm verb addNamed [ 'dataurl', '0.1.0' ]
npm verb addNamed [ '0.1.0', '0.1.0' ]
npm sill lockFile 9c80a6ee-dataurl-0-1-0 dataurl@0.1.0
npm verb lock dataurl@0.1.0 /Users/hamrickb/.npm/9c80a6ee-dataurl-0-1-0.lock
npm sill gunzTarPerm extractEntry browser/export.js
npm sill gunzTarPerm extractEntry browser/jquery-1.6.1.min.js
npm info postinstall mkdirp@0.3.5
npm sill gunzTarPerm extractEntry tests/test-errors.js
npm sill gunzTarPerm extractEntry examples/http/proxy-https-to-https.js
npm sill gunzTarPerm extractEntry examples/http/standalone-proxy.js
npm sill gunzTarPerm extractEntry shell.js
npm sill gunzTarPerm extractEntry bin/shjs
npm verb registry.get nodemailer/0.5.2 not expired, no request
npm verb registry.get underscore/1.5.1 not expired, no request
npm verb registry.get couchr/0.0.14 not expired, no request
npm sill lockFile 1a96b380-es-multicouch-node-modules-which tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/which
npm sill lockFile 1a96b380-es-multicouch-node-modules-which tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/which
npm sill lockFile 39e6233f-ickb-npm-which-1-0-5-package-tgz tar:///Users/hamrickb/.npm/which/1.0.5/package.tgz
npm sill lockFile 39e6233f-ickb-npm-which-1-0-5-package-tgz tar:///Users/hamrickb/.npm/which/1.0.5/package.tgz
npm sill gunzTarPerm extractEntry test/interactive-prompt-test.js
npm sill gunzTarPerm extractEntry test/macros.js
npm verb registry.get hoodie-plugins-api/0.2.1 not expired, no request
npm verb registry.get dataurl/0.1.0 not expired, no request
npm sill gunzTarPerm extractEntry browser/log4js.js
npm sill gunzTarPerm extractEntry browser/main.js
npm verb registry.get async/0.2.9 not expired, no request
npm info preinstall which@1.0.5
npm sill gunzTarPerm extractEntry tests/test-qs.js
npm sill gunzTarPerm extractEntry tests/test-digest-auth.js
npm sill gunzTarPerm extractEntry examples/http/forward-proxy.js
npm sill gunzTarPerm extractEntry examples/middleware/bodyDecoder-middleware.js
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry .jshintrc
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/which
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/which
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules' ]
npm info linkStuff which@1.0.5
npm verb linkBins which@1.0.5
npm verb link bins [ { which: './bin/which' },
npm verb link bins '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/.bin',
npm verb link bins false ]
npm verb linkMans which@1.0.5
npm verb rebuildBundles which@1.0.5
npm sill gunzTarPerm extractEntry test/prompt-test.js
npm sill lockFile f6569b8a-underscore-1-5-1 underscore@1.5.1
npm sill lockFile f6569b8a-underscore-1-5-1 underscore@1.5.1
npm info install which@1.0.5
npm sill lockFile efb5b675-nodemailer-0-5-2 nodemailer@0.5.2
npm sill lockFile efb5b675-nodemailer-0-5-2 nodemailer@0.5.2
npm sill gunzTarPerm extractEntry scripts/generate-docs.js
npm sill gunzTarPerm extractEntry scripts/run-tests.js
npm info postinstall which@1.0.5
npm sill gunzTarPerm extractEntry browser/querystring.js
npm sill gunzTarPerm extractEntry browser/request.jquery.js
npm sill gunzTarPerm extractEntry examples/middleware/gzip-middleware.js
npm sill gunzTarPerm extractEntry examples/middleware/modifyResponse-middleware.js
npm sill gunzTarPerm extractEntry tests/test-redirect.js
npm sill gunzTarPerm extractEntry tests/test-defaults.js
npm sill lockFile 306182fb-hoodie-plugins-api-0-2-1 hoodie-plugins-api@0.2.1
npm sill lockFile 306182fb-hoodie-plugins-api-0-2-1 hoodie-plugins-api@0.2.1
npm sill lockFile b0b9406f-couchr-0-0-14 couchr@0.0.14
npm sill lockFile b0b9406f-couchr-0-0-14 couchr@0.0.14
npm sill gunzTarPerm extractEntry browser/require.js
npm sill gunzTarPerm extractEntry browser/util.js
npm sill gunzTarPerm extractEntry .documentup.json
npm sill gunzTarPerm extractEntry src/cat.js
npm sill lockFile 9c80a6ee-dataurl-0-1-0 dataurl@0.1.0
npm sill lockFile 9c80a6ee-dataurl-0-1-0 dataurl@0.1.0
npm sill lockFile c23b19a9-ules-multicouch-node-modules-ini tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/ini
npm sill lockFile c23b19a9-ules-multicouch-node-modules-ini tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/ini
npm sill lockFile 432242c8-mrickb-npm-ini-1-1-0-package-tgz tar:///Users/hamrickb/.npm/ini/1.1.0/package.tgz
npm sill lockFile 432242c8-mrickb-npm-ini-1-1-0-package-tgz tar:///Users/hamrickb/.npm/ini/1.1.0/package.tgz
npm sill gunzTarPerm extractEntry examples/websocket/latent-websocket-proxy.js
npm sill gunzTarPerm extractEntry examples/websocket/standalone-websocket-proxy.js
npm info preinstall ini@1.1.0
npm sill gunzTarPerm extractEntry tests/test-s3.js
npm sill gunzTarPerm extractEntry tests/test-body.js
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/ini
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/ini
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules' ]
npm info linkStuff ini@1.1.0
npm verb linkBins ini@1.1.0
npm verb linkMans ini@1.1.0
npm verb rebuildBundles ini@1.1.0
npm info install ini@1.1.0
npm sill gunzTarPerm extractEntry src/exec.js
npm sill gunzTarPerm extractEntry src/find.js
npm info postinstall ini@1.1.0
npm sill lockFile be62480b-async-0-2-9 async@0.2.9
npm sill lockFile be62480b-async-0-2-9 async@0.2.9
npm sill resolved [ { name: 'underscore',
npm sill resolved description: 'JavaScript\'s functional programming helper library.',
npm sill resolved homepage: 'http://underscorejs.org',
npm sill resolved keywords: [ 'util', 'functional', 'server', 'client', 'browser' ],
npm sill resolved author: { name: 'Jeremy Ashkenas', email: 'jeremy@documentcloud.org' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/jashkenas/underscore.git' },
npm sill resolved main: 'underscore.js',
npm sill resolved version: '1.5.1',
npm sill resolved devDependencies: { phantomjs: '1.9.0-1' },
npm sill resolved scripts: { test: 'phantomjs test/vendor/runner.js test/index.html?noglobals=true' },
npm sill resolved license: 'MIT',
npm sill resolved readme: ' __\n /\\ \\ __\n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____\n /\\ \\/\\ \\ /\' _ `\\ /\'_ \\ /\'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/\'__`\\ \\/\\ \\ /\',__\\\n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/\n \\ \\____/\n \\/___/\n\nUnderscore.js is a utility-belt library for JavaScript that provides\nsupport for the usual functional suspects (each, map, reduce, filter...)\nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://underscorejs.org\n\nUnderscore is an open-sourced component of DocumentCloud:\nhttps://github.com/documentcloud\n\nMany thanks to our contributors:\nhttps://github.com/jashkenas/underscore/contributors\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/jashkenas/underscore/issues' },
npm sill resolved _id: 'underscore@1.5.1',
npm sill resolved _from: 'underscore@1.5.1' },
npm sill resolved { name: 'nodemailer',
npm sill resolved description: 'Easy to use module to send e-mails, supports unicode and SSL/TLS',
npm sill resolved version: '0.5.2',
npm sill resolved author: { name: 'Andris Reinman' },
npm sill resolved maintainers: [ [Object] ],
npm sill resolved homepage: 'http://github.com/andris9/nodemailer',
npm sill resolved repository: { type: 'git', url: 'http://github.com/andris9/nodemailer.git' },
npm sill resolved scripts: { test: 'nodeunit test/' },
npm sill resolved main: './lib/nodemailer',
npm sill resolved licenses: [ [Object] ],
npm sill resolved dependencies: { mailcomposer: '~0.2', simplesmtp: '~0.2 || ~0.3' },
npm sill resolved devDependencies: { nodeunit: '*' },
npm sill resolved engines: { node: '>=0.6.0' },
npm sill resolved keywords: [ 'e-mail', 'mime', 'email', 'mail', 'sendmail', 'ses' ],
npm sill resolved readme: 'Nodemailer\n==========\n\n**Nodemailer** is an easy to use module to send e-mails with Node.JS (using\nSMTP or sendmail or Amazon SES) and is unicode friendly - You can use any characters you like ✔\n\nNodemailer is Windows friendly, you can install it with *npm* on Windows just like any other module, there are no compiled dependencies. Use it from Azure or from your Windows box hassle free.\n\n**[Read about using Nodemailer from the Node Knockout blog](http://blog.nodeknockout.com/post/34641712180/sending-email-from-node-js)**\n\n[![Build Status](https://secure.travis-ci.org/andris9/Nodemailer.png)](http://travis-ci.org/andris9/Nodemailer)\n[![NPM version](https://badge.fury.io/js/nodemailer.png)](http://badge.fury.io/js/nodemailer)\n\n## Notes and information\n\n### Nodemailer supports\n\n * **Unicode** to use any characters\n * **HTML content** as well as **plain text** alternative\n * **Attachments** (including attachment **streaming** for sending larger files)\n * **Embedded images** in HTML\n * **SSL/STARTTLS** for secure e-mail delivery\n * Different transport methods - **SMTP**, **sendmail** and **Amazon SES**\n * SMTP **Connection pool** and connection reuse for rapid delivery\n * **Preconfigured** services for using SMTP with Gmail, Hotmail etc.\n * Use objects as header values for **SendGrid** SMTP API\n * **XOAUTH2** authentication and token generation support - useful with Gmail\n * **DKIM** signing\n\n### Support Nodemailer development\n\n[![Donate to author](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DB26KWR2BQX5W)\n\nIf you want to support with Bitcoins, then my wallet address is `15Z8ADxhssKUiwP3jbbqJwA21744KMCfTM`\n\n### Nodemailer PaaS support\n\nNodemailer has been tested successfully on the following PaaS platforms (using free/trial accounts):\n\n * [heroku](http://www.heroku.com/)\n * [AppFog](http://www.appfog.com/)\n * [OpenShift](https://openshift.redhat.com/app/)\n * [Nodejitsu](http://nodejitsu.com/)\n * [Windows Azure](http://www.windowsazure.com/)\n\n### Check out my other mail related modules\n\nIf you want to parse generated or received e-mail instead of sending it, check\nout [MailParser](https://github.com/andris9/mailparser).\n\nIf you only want to generate the raw e-mail stream, check out\n[MailComposer](https://github.com/andris9/mailcomposer).\n\nIf you only want to communicate with the SMTP (both as client and the server),\ncheck out [simplesmtp](https://github.com/andris9/simplesmtp).\n\n### Templates\n\nTo use Nodemailer with templates, please see documentation for these projects.\n\n * [swig-email-templates](https://github.com/superjoe30/swig-email-templates) - swig, template inheritance, dummy context\n * [node-email-templates](https://github.com/niftylettuce/node-email-templates) - ejs\n\n## TL;DR Usage Example\n\nThis is a complete example to send an e-mail with plaintext and HTML body\n\n```javascript\nvar nodemailer = require("nodemailer");\n\n// create reusable transport method (opens pool of SMTP connections)\nvar smtpTransport = nodemailer.createTransport("SMTP",{\n service: "Gmail",\n auth: {\n user: "gmail.user@gmail.com",\n pass: "userpass"\n }\n});\n\n// setup e-mail data with unicode symbols\nvar mailOptions = {\n from: "Fred Foo ✔ <foo@blurdybloop.com>", // sender address\n to: "bar@blurdybloop.com, baz@blurdybloop.com", // list of receivers\n subject: "Hello ✔", // Subject line\n text: "Hello world ✔", // plaintext body\n html: "<b>Hello world ✔</b>" // html body\n}\n\n// send mail with defined transport object\nsmtpTransport.sendMail(mailOptions, function(error, response){\n if(error){\n console.log(error);\n }else{\n console.log("Message sent: " + response.message);\n }\n\n // if you don\'t want to use this transport object anymore, uncomment following line\n //smtpTransport.close(); // shut down the connection pool, no more messages\n});\n```\n\nSee also the [examples folder](https://github.com/andris9/Nodemailer/tree/master/examples)\nfor full featured examples\n\n## Installation\n\nInstall through NPM\n\n```\nnpm install nodemailer\n```\n\n## Usage\n\nInclude the module\n\n```javascript\nvar nodemailer = require("nodemailer");\n```\n\nAn e-mail can be sent with `sendMail(mailOptions[, callback])` command\n\n```javascript\ntransport.sendMail(mailOptions, callback);\n```\n\nWhere\n\n * `transport` is a transport object created from the `nodemailer.createTransport` method\n * **mailOptions** defines the e-mail (set its subject, body text, receivers etc.), see [E-mail Message Fields](#e-mail-message-fields) for details\n * **callback** is the callback function that will be run after the e-mail is sent or the sending failed (see [Return callback](#return-callback) for details)\n\n## Setting up a transport method\n\nBefore you can send any e-mails you need to set up a transport method. This can\nbe done with `nodemailer.createTransport(type, options)` where `type` indicates\nthe transport protocol and `options` defines how it is used.\n\n```javascript\nvar transport = nodemailer.createTransport("SMTP", {smtp_options});\n```\n\nThe same transport object can and should be reused several times.\n\nWhen the transport method is defined, it can be used to send e-mail with `sendMail`\n\n```javascript\nvar transport = nodemailer.createTransport("SMTP", {smtp_options});\n\ntransport.sendMail({\n from: "sender@tr.ee",\n to: "receiver@tr.ee"\n ...\n});\n```\n\n### Possible transport methods\n\nRequired `type` parameter can be one of the following:\n\n * **SMTP** for using SMTP\n * **SES** for using Amazon SES\n * **Sendmail** for utilizing systems *sendmail* command\n\n### Setting up SMTP\n\nSMTP is different from the other transport mechanisms, as in its case a connection\npool is created. All the connections try to stay alive as long as possible and\nare reusable to minimize the protocol overhead delay - for example setting up\nTLS for authenticating is relatively lengthy process (in CPU terms, not by human\nterms), you do not want to do it several times.\n\nPossible SMTP options are the following:\n\n * **service** - an optional well known service identifier ("Gmail", "Hotmail" etc., see [Well known Services](#well-known-services-for-smtp) for a list of supported services) to auto-configure host, port and secure connection settings\n * **host** - hostname of the SMTP server (defaults to "localhost", not needed with `service`)\n * **port** - port of the SMTP server (defaults to 25, not needed with `service`)\n * **secureConnection** - use SSL (default is `false`, not needed with `service`). If you\'re using port 587 then keep `secureConnection` false, since the connection is started in insecure plain text mode and only later upgraded with STARTTLS\n * **name** - the name of the client server (defaults to machine name)\n * **auth** - authentication object as `{user:"...", pass:"..."}` or `{XOAuth2: {xoauth2_options}}` or `{XOAuthToken: "base64data"}`\n * **ignoreTLS** - ignore server support for STARTTLS (defaults to `false`)\n * **debug** - output client and server messages to console\n * **maxConnections** - how many connections to keep in the pool (defaults to 5)\n\nExample:\n\n```javascript\nvar transport = nodemailer.createTransport("SMTP", {\n service: "Gmail",\n auth: {\n user: "gmail.user@gmail.com",\n pass: "userpass"\n }\n});\n```\n\nor the same without `service` parameter\n\n```javascript\nvar transport = nodemailer.createTransport("SMTP", {\n host: "smtp.gmail.com", // hostname\n secureConnection: true, // use SSL\n port: 465, // port for secure SMTP\n auth: {\n user: "gmail.user@gmail.com",\n pass: "userpass"\n }\n});\n```\n\n**NB!** if you want to close the pool (cancel all open connections) you can use `transport.close()`\n\n```javascript\n\nvar transport = nodemailer.createTransport("SMTP",{});\n...\ntransport.close(); // close the pool\n```\n\n\n#### SMTP XOAUTH and token generation\n\n##### XOAUTH2\n\n**nodemailer** supports XOAUTH2 authentication protocol. To use this you need to obtain a Client ID and a Client Secret from [Google API Console](https://code.google.com/apis/console) (Open "API Access" and create "Client ID for web applications") and then request a refresh token for an user. See [Google OAuth 2.0 Offline Access](https://developers.google.com/accounts/docs/OAuth2WebServer#offline) for more information.\n\nOnce you have obtained the Client ID, Client Secret and a Refresh Token for an user, you can use these values to send mail on behalf of the user.\n\n```javascript\nvar transportOptions = {\n ...,\n auth: {\n XOAuth2: {\n user: "example.user@gmail.com",\n clientId: "8819981768.apps.googleusercontent.com",\n clientSecret: "{client_secret}",\n refreshToken: "1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI",\n accessToken: "vF9dft4qmTc2Nvb3RlckBhdHRhdmlzdGEuY29tCg==",\n timeout: 3600\n }\n }\n}\n```\n\n`accessToken` and `timeout` values are both optional. If XOAUTH2 login fails a new access token is generated automatically and the login is retried.\n\n##### XOAUTH\n\nOlder XOAUTH is also supporteb by **nodemailer** for SMTP. XOAUTH is based on OAuth protocol 1.0 and is considered deprecated.\n\nTo use this, include `XOAuthToken` option in `auth` instead of the regular `user` and `pass`.\n\n```javascript\nvar transportOptions = {\n ...,\n auth: {\n XOAuthToken: "R0VUIGh0dHBzOi8vbWFpbC5nb29...."\n }\n}\n```\n\n**nodemailer** includes also built in XOAUTH token generator which can be used\nwith `nodemailer.createXOAuthGenerator()`. The function is preconfigured for\nGmail, so in this case only mandatory options are `user`, `token` and `tokenSecret`.\n\n```javascript\nvar XOAuthTokenGenerator = nodemailer.createXOAuthGenerator({\n user: "test.nodemailer@gmail.com",\n // requestUrl: "https://oauth.access.point",\n // consumerKey: "anonymous",\n // consumerSecret: "anonymous",\n token: "1/O_HgoO4h2uOUfpus0V--7mygICXrQQ0ZajB3ZH52KqM",\n tokenSecret: "_mUBkIwNPnfQBUIWrJrpXJ0c"\n });\n```\n\nOne of `user` or `requestUrl` is mandatory. `consumerKey` and `consumerSecret` both\ndefault to `"anonymous"`.\n\n```javascript\nvar transportOptions = {\n service: "Gmail",\n auth: {\n XOAuthToken: nodemailer.createXOAuthGenerator({\n user: "test.nodemailer@gmail.com",\n token: "1/O_HgoO4h2uOUfpus0V--7mygICXrQQ0ZajB3ZH52KqM",\n tokenSecret: "_mUBkIwNPnfQBUIWrJrpXJ0c"\n })\n }\n}\n```\n\n### Setting up SES\n\nSES is actually a HTTP based protocol, the compiled e-mail and related info\n(signatures and such) are sent as a HTTP request to SES servers.\n\nPossible SES options are the following:\n\n * **AWSAccessKeyID** - AWS access key (required)\n * **AWSSecretKey** - AWS secret (required)\n * **ServiceUrl** - optional API end point URL (defaults to *"https://email.us-east-1.amazonaws.com"*)\n\nExample:\n\n```javascript\nvar transport = nodemailer.createTransport("SES", {\n AWSAccessKeyID: "AWSACCESSKEY",\n AWSSecretKey: "AWS/Secret/key"\n});\n```\n\n### Setting up Sendmail\n\nSendmail transport method streams the compiled message to the *stdin* of *sendmail*\ncommand.\n\nOptions object is optional, possible sendmail options are the following:\n\n * **path** - path to the `sendmail` command (defaults to *"sendmail"*)\n * **args** - an array of extra command line options to pass to the `sendmail` command (ie. `["-f", "foo@blurdybloop.com"]`).\n\nCurrently the command to be spawned is built up like this: the command is either using `sendmail -i -f from_addr to_addr[]` (by default) or `sendmail -i list_of_args[]` (if `args` property was given). `-i` is ensured to be present on either case. \n\nIn the default case (no `args` defined) From and To addresses are either taken from `From`,`To`, `Cc` and `Bcc` properties or from the `envelope` property if one is present.\n\nBe wary when using the `args` property - no recipients are defined by default, you need to ensure these by yourself, for example by using the `-t` flag.\n\nExample:\n\n```javascript\nvar transport = nodemailer.createTransport("sendmail");\n```\n\nor\n\n```javascript\nvar transport = nodemailer.createTransport("sendmail", {\n path: "/usr/local/bin/sendmail",\n args: ["-t", "-f", "foo@blurdybloop.com"]\n});\n```\n\n### DKIM Signing\n\n**Nodemailer** supports DKIM signing with very simple setup. Use this with caution\nthough since the generated message needs to be buffered entirely before it can be\nsigned. Not a big deal with small messages but might consume a lot of RAM when\nusing larger attachments.\n\nSet up the DKIM signing with `useDKIM` method for a transport object:\n\n```javascript\ntransport.useDKIM(dkimOptions)\n```\n\nWhere `dkimOptions` includes necessary options for signing\n\n * **domainName** - the domainname that is being used for signing\n * **keySelector** - key selector. If you have set up a TXT record with DKIM public key at *zzz._domainkey.blurdybloop.com* then `zzz` is the selector\n * **privateKey** - DKIM private key that is used for signing as a string\n * **headerFieldNames** - optional colon separated list of header fields to sign, by default all fields suggested by RFC4871 #5.5 are used\n\nAll messages transmitted through this transport objects are from now on DKIM signed.\n\nCurrently if several header fields with the same name exists, only the last one (the one in the bottom) is signed.\n\nExample:\n\n```javascript\nvar transport = nodemailer.createTransport("Sendmail");\n\ntransport.useDKIM({\n domainName: "kreata.ee",\n keySelector: "dkim",\n privateKey: fs.readFileSync("private_key.pem")\n});\n\ntransport.sendMail(mailOptions);\n```\n\nSee [examples/example_dkim.js](https://github.com/andris9/Nodemailer/blob/master/examples/example_dkim.js) for a complete example.\n\n### Well known services for SMTP\n\nIf you want to use a well known service as the SMTP host, you do not need\nto enter the hostname or port number, just use the `service` parameter\n\nCurrently supported services are:\n\n * **DynectEmail**\n * **Gmail**\n * **hot.ee**\n * **Hotmail**\n * **iCloud**\n * **mail.ee**\n * **Mail.Ru**\n * **Mailgun**\n * **Mailjet**\n * **Mandrill**\n * **Postmark**\n * **QQ**\n * **SendGrid**\n * **SES**\n * **Yahoo**\n * **yandex**\n * **Zoho**\n\nPredefined service data covers `host`, `port` and secure connection settings,\nany other parameters (ie. `auth`) need to be set separately. Service names are\ncase insensitive, so using "gmail" instead of "Gmail" is totally fine.\n\nExample:\n\n```javascript\nvar smtpTransport = nodemailer.createTransport("Gmail",{\n auth: {\n user: "gmail.user@gmail.com",\n pass: "userpass"\n }\n});\n```\n\nor alternatively\n\n```javascript\nvar smtpTransport = nodemailer.createTransport("SMTP",{\n service: "Gmail", // sets automatically host, port and connection security settings\n auth: {\n user: "gmail.user@gmail.com",\n pass: "userpass"\n }\n});\n```\n\nActually, if you are authenticatinw with an e-mail address that has a domain name\nlike @gmail.com or @yahoo.com etc., then you don\'t even need to provide the service name,\nit is detected automatically.\n\n```javascript\nvar smtpTransport = nodemailer.createTransport("SMTP",{\n auth: {\n user: "gmail.user@gmail.com", // service is detected from the username\n pass: "userpass"\n }\n});\n```\n\n## E-mail message fields\n\nThe following are the possible fields of an e-mail message:\n\n - **from** - The e-mail address of the sender. All e-mail addresses can be plain `sender@server.com` or formatted `Sender Name <sender@server.com>`\n - **to** - Comma separated list or an array of recipients e-mail addresses that will appear on the `To:` field\n - **cc** - Comma separated list or an array of recipients e-mail addresses that will appear on the `Cc:` field\n - **bcc** - Comma separated list or an array of recipients e-mail addresses that will appear on the `Bcc:` field\n - **replyTo** - An e-mail address that will appear on the `Reply-To:` field\n - **inReplyTo** - The message-id this message is replying\n - **references** - Message-id list\n - **subject** - The subject of the e-mail\n - **text** - The plaintext version of the message\n - **html** - The HTML version of the message\n - **generateTextFromHTML** - if set to true uses HTML to generate plain text body part from the HTML if the text is not defined\n - **headers** - An object of additional header fields `{"X-Key-Name": "key value"}` (NB! values are passed as is, you should do your own encoding to 7bit and folding if needed)\n - **attachments** - An array of attachment objects.\n - **alternatives** - An array of alternative text contents (in addition to text and html parts)\n - **envelope** - optional SMTP envelope, if auto generated envelope is not suitable\n - **messageId** - optional Message-Id value, random value will be generated if not set. Set to false to omit the Message-Id header\n - **date** - optional Date value, current UTC string will be used if not set\n - **encoding** - optional transfer encoding for the textual parts (defaults to "quoted-printable")\n - **charset** - optional output character set for the textual parts (defaults to "utf-8")\n\nAll text fields (e-mail addresses, plaintext body, html body) use UTF-8 as the encoding.\nAttachments are streamed as binary.\n\nExample:\n\n```javascript\nvar transport = nodemailer.createTransport("Sendmail");\n\nvar mailOptions = {\n from: "me@tr.ee",\n to: "me@tr.ee",\n subject: "Hello world!",\n text: "Plaintext body"\n}\n\ntransport.sendMail(mailOptions);\n```\n\n### SendGrid support\n\nNodemailer supports SendGrid [SMTP API](http://docs.sendgrid.com/documentation/api/smtp-api/) out of the box - you can\nuse objects as header values and these are automatically JSONized (and mime encoded if needed).\n\n```javascript\nvar mailOptions = {\n ...,\n headers: {\n \'X-SMTPAPI\': {\n category : "newuser",\n sub:{\n "%name%": ["Žiguli Õllepruul"]\n }\n }\n },\n subject: "Hello, %name%"\n}\n```\n\nThis also applies to any other service that expects a JSON string as a header value for specified key.\n\n### Generate Text from HTML\n\nIf `generateTextFromHTML` option is set to true, then HTML contents of the mail is automatically converted\nto plaintext format when plaintext content is empty or missing.\n\nFor example\n\n```javascript\nmailOptions = {\n ...,\n generateTextFromHTML: true,\n html: \'<h1>Hello world</h1><p><b>How</b> are you?\',\n // text: \'\' // no text part\n}\n```\n\nis automatically converted in the backround by Nodemailer to:\n\n```javascript\nmailOptions = {\n ...,\n // source html:\n html: \'<h1>Hello world</h1><p><b>How</b> are you?\',\n // automatically generated plaintext message:\n text: "Hello world\\n"+\n "===========\\n"+\n "\\n"+\n "**How** are you?"\n}\n```\n\nAs you can see the output syntax for `generateTextFromHTML` looks similar to markdown, and that\nis exactly the case here - Nodemailer includes a simple HTML to markdown converter. But don\'t\nexpect too much from it, it\'s not full featured or perfect, just some regexes here and there.\n\n### Attachment fields\n\nAttachment object consists of the following properties:\n\n * **fileName** - filename to be reported as the name of the attached file, use of unicode is allowed (except when using Amazon SES which doesn\'t like it)\n * **cid** - optional content id for using inline images in HTML message source\n * **contents** - String or a Buffer contents for the attachment\n * **filePath** - path to a file or an URL if you want to stream the file instead of including it (better for larger attachments)\n * **streamSource** - Stream object for arbitrary binary streams if you want to stream the contents (needs to support *pause*/*resume*)\n * **contentType** - optional content type for the attachment, if not set will be derived from the `fileName` property\n * **contentDisposition** - optional content disposition type for the attachment, defaults to "attachment"\n\nOne of `contents`, `filePath` or `streamSource` must be specified, if none is\npresent, the attachment will be discarded. Other fields are optional.\n\nAttachments can be added as many as you want.\n\n```javascript\nvar mailOptions = {\n ...\n attachments: [\n { // utf-8 string as an attachment\n fileName: "text1.txt",\n contents: "hello world!"\n },\n { // binary buffer as an attachment\n fileName: "text2.txt",\n contents: new Buffer("hello world!","utf-8")\n },\n { // file on disk as an attachment\n fileName: "text3.txt",\n filePath: "/path/to/file.txt" // stream this file\n },\n { // fileName and content type is derived from filePath\n filePath: "/path/to/file.txt"\n },\n { // stream as an attachment\n fileName: "text4.txt",\n streamSource: fs.createReadStream("file.txt")\n },\n { // define custom content type for the attachment\n fileName: "text.bin",\n contents: "hello world!",\n contentType: "text/plain"\n },\n { // use URL as an attachment\n fileName: "license.txt",\n filePath: "https://raw.github.com/andris9/Nodemailer/master/LICENSE"\n }\n ]\n}\n```\n\n### Alternative fields\n\nIn addition to text and HTML, any kind of data can be inserted as an alternative content of the main body - for example a word processing document with the same text as in the HTML field. It is the job of the e-mail client to select and show the best fitting alternative to the reader.\n\nAttahcment object consists of the following properties:\n\n * **contents** - String or a Buffer contents for the attachment\n * **contentType** - optional content type for the attachment, if not set will be set to "application/octet-stream"\n * **contentEncoding** - optional value of how the data is encoded, defaults to "base64"\n\nIf `contents` is empty, the alternative will be discarded. Other fields are optional.\n\n**Usage example:**\n\n```javascript\nvar mailOptions = {\n ...\n html: "<b>Hello world!</b>",\n alternatives: [\n {\n contentType: "text/x-web-markdown",\n contents: "**Hello world!**"\n }\n ]\n}\n```\nIf the receiving e-mail client can render messages in Markdown syntax as well, it could prefer\nto display this alternative as the main content of the message instead of the html part.\n\nAlternatives can be added as many as you want.\n\n### Address Formatting\n\nAll the e-mail addresses can be plain e-mail address\n\n```\nfoobar@blurdybloop.com\n```\n\nor with formatted name (includes unicode support)\n\n```\n"Ноде Майлер" <foobar@blurdybloop.com>\n```\n\nTo, Cc and Bcc fields accept comma separated list of e-mails or an array of\nemails or an array of comma separated list of e-mails - use it as you like.\nFormatting can be mixed.\n\n```\n...,\nto: \'foobar@blurdybloop.com, "Ноде Майлер" <bar@blurdybloop.com>, "Name, User" <baz@blurdybloop.com>\',\ncc: [\'foobar@blurdybloop.com\', \'"Ноде Майлер" <bar@blurdybloop.com>, "Name, User" <baz@blurdybloop.com>\']\n...\n```\n\nYou can even use unicode domain and user names, these are automatically converted\nto the supported form\n\n```\n"Unicode Domain" <info@müriaad-polüteism.info>\n```\n\n### SMTP envelope\n\nSMTP envelope is usually auto generated from `from`, `to`, `cc` and `bcc` fields but\nif for some reason you want to specify it yourself, you can do it with `envelope` property.\n\n`envelope` is an object with the following params: `from`, `to`, `cc` and `bcc` just like\nwith regular mail options. You can also use the regular address format, unicode domains etc.\n\n```javascript\nmailOptions = {\n ...,\n from: "mailer@kreata.ee",\n to: "daemon@kreata.ee",\n envelope: {\n from: "Daemon <deamon@kreata.ee>",\n to: "mailer@kreata.ee, Mailer <mailer2@kreata.ee>"\n }\n}\n```\n\nThe envelope only applies when using SMTP or sendmail, setting envelope has no effect with SES.\n\n### Using Embedded Images\n\nAttachments can be used as embedded images in the HTML body. To use this\nfeature, you need to set additional property of the attachment - `cid` (unique\nidentifier of the file) which is a reference to the attachment file. The same\n`cid` value must be used as the image URL in HTML (using `cid:` as the URL\nprotocol, see example below).\n\n**NB!** the cid value should be as unique as possible!\n\n```javascript\nvar mailOptions = {\n ...\n html: "Embedded image: <img src=\'cid:unique@kreata.ee\' />",\n attachments: [{\n filename: "image.png",\n filePath: "/path/to/file",\n cid: "unique@kreata.ee" //same cid value as in the html img src\n }]\n}\n```\n\n**Automatic embedding images**\n\nIf you want to convert images in the HTML to embedded images automatically, you can\nset mail option `forceEmbeddedImages` to true. In this case all images in\nthe HTML that are either using an absolute URL (http://...) or absolute file path\n(/path/to/file) are replaced with embedded attachments.\n\nFor example when using this code\n\n```javascript\nvar mailOptions = {\n forceEmbeddedImages: true\n html: \'Embedded image: <img src="http://example.com/image.png">\'\n};\n```\n\nThe image linked is fetched and added automatically as an attachment and the url\nin the HTML is replaced automatically with a proper `cid:` string.\n\n## Return callback\n\nReturn callback gets two parameters\n\n * **error** - an error object if the message failed\n * **responseStatus** - an object with some information about the status on success\n * **responseStatus.messageId** - message ID used with the message\n\nExample:\n\n```javascript\nnodemailer.sendMail(mailOptions, function(error, responseStatus){\n if(!error){\n console.log(responseStatus.message); // response from the server\n console.log(responseStatus.messageId); // Message-ID value used\n }\n});\n```\n\n**NB!** Message-ID used might not be the same that reaches recipients inbox since some providers (like **SES**) may change the value.\n\n## Command line usage\n\n**NB!** Command line usage was removed from v0.4\n\n## Tests\n\nRun the tests with npm in Nodemailer\'s directory\n\n```\nnpm test\n```\n\nThere aren\'t currently many tests for Nodemailer but there are a lot of tests\nin the modules that are used to generate the raw e-mail body and to use the\nSMTP client connection.\n\n## Tweaking\n\nNodemailer in itself is actually more like a wrapper for my other modules\n[mailcomposer](https://github.com/andris9/mailcomposer) for composing the raw message stream\nand [simplesmtp](https://github.com/andris9/simplesmtp) for delivering it, by providing an\nunified API. If there\'s some problems with particular parts of the\nmessage composing/sending process you should look at the appropriate module.\n\n## License\n\n**Nodemailer** is licensed under [MIT license](https://github.com/andris9/Nodemailer/blob/master/LICENSE). Basically you can do whatever you want to with it.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/andris9/nodemailer/issues' },
npm sill resolved _id: 'nodemailer@0.5.2',
npm sill resolved _from: 'nodemailer@0.5.2' },
npm sill resolved { name: 'hoodie-plugins-api',
npm sill resolved version: '0.2.1',
npm sill resolved description: 'Hoodie interface to CouchDB',
npm sill resolved main: 'lib/index.js',
npm sill resolved dependencies:
npm sill resolved { couchr: '0.0.13',
npm sill resolved uuid: '1.4.1',
npm sill resolved async: '0.2.8',
npm sill resolved moment: '2.1.0',
npm sill resolved underscore: '1.4.4' },
npm sill resolved devDependencies:
npm sill resolved { multicouch: '0.8.1',
npm sill resolved nodeunit: '0.8.2',
npm sill resolved rimraf: '2.1.4',
npm sill resolved mkdirp: '0.3.5',
npm sill resolved request: '2.31.0' },
npm sill resolved scripts: { test: 'nodeunit test' },
npm sill resolved readme: '# Hoodie Plugin API\n\n## File and directory structure\n\n```\n/hoodie-plugin-plugin_name\n /pocket\n hoodie.plugin_name.js\n index.js\n package.json\n```\n\n* __/pocket__ - Extends the Pocket admin interface (contains a HTML fragment with code and styles)\n* __hoodie.plugin_name.js__ - Extends the hoodie.js front-end API\n* __index.js__ - Node.js worker for handling tasks and other events (this is just the default location, you have more options here, see below)\n* __package.json__ - The plugin\'s metadata and dependencies (since the plugin should function as an npm module)\n\nThe server-side component of the plugin can be left in an index.js for simplicity, but Hoodie will prefer the following, if present:\n* Whatever you reference under `main` in the plugin\'s `package.json`\n* Whatever you get when you `require()` the plugin root directory\n\n## Writing workers\n\n```javascript\n// Initializing a worker\nmodule.exports = function (hoodie, callback) {\n // hoodie object is client to hoodie backend, documented below.\n // call callback when setup complete (with optional error if worker failed to initialize).\n // ...\n};\n\n\n// make HTTP requests directly to CouchDB (ideally, you would never need to use this)\nhoodie.request(method, path, options, callback)\n\n// get / set plugin configuration\nhoodie.config.get(key)\nhoodie.config.set(key, value)\n\n// list all databases\nhoodie.database.findAll(callback)\n\n// create a new database\nhoodie.database.add(name, callback)\n\n// remove a database\nhoodie.database.remove(name, callback)\n\n// get a database object to make calls against\nhoodie.database(name) => db\n\n// add a document to db\ndb.add(type, attrs, callback)\n\n// update a document in db\ndb.update(type, id, changed_attrs, callback)\n\n// get a document from db\ndb.find(type, id, callback)\n\n// get all documents from db\ndb.findAll(callback)\n\n// get all documents of a single type in db\ndb.findAll(type, callback)\n\n// remove a document from db\ndb.remove(type, id, callback)\n\n// remove all documents of type in db\ndb.removeAll(type, callback)\n\n// grant read access to everyone on db by updating CouchDB security\ndb.grantPublicReadAccess(callback)\n\n// grant write access to everyone on db\ndb.grantPublicWriteAccess(callback)\n\n// grant read access to specific user on db by updating CouchDB security\ndb.grantReadAccess(account_type, account_id, callback)\n\n// grant write access to specific user on db by adding role (checked by design doc in db)\ndb.grantWriteAccess(account_type, account_id, callback)\n\n// update db security so it\'s no longer publicly readable\ndb.revokePublicReadAccess(callback)\n\n// update db security so it\'s no longer publicly writable\ndb.revokePublicWriteAccess(callback)\n\n// remove user from couchdb readers for db\ndb.revokeReadAccess(account_type, account_id, callback)\n\n// remove role from user so they cannot write to db (checked by design doc)\ndb.revokeWriteAccess(account_type, account_id, callback)\n\n\n// Index / Query API is not yet implemented, see:\n// https://github.com/hoodiehq/hoodie-plugins-api/issues/3\n\n// creates new design doc with CouchDB view on db\ndb.addIndex(name, {map: .., reduce: ..}, callback)\n\n// removes design doc for couchdb view on db\ndb.removeIndex(name, callback)\n\n// query a couchdb view on db\ndb.query(index, options, callback)\n\n\n//\n// hoodie.account API\n//\nhoodie.account.add(type, attrs, callback)\nhoodie.account.update(type, id, changed_attrs, callback)\nhoodie.account.find(type, id, callback)\nhoodie.account.findAll(callback)\nhoodie.account.findAll(type, callback)\nhoodie.account.remove(type, id, callback)\nhoodie.account.removeAll(type, callback)\n\n// hoodie.account events\nhoodie.account.on(\'change\', handler)\nhoodie.account.on(\'change:type\', handler)\n\n// use case: \n// handle password resets\nhoodie.account.on(\'change:$passwordReset\', function(object) {\n // set new password in user doc & send it via email\n})\n\n\n//\n// listen to task document events\n//\nhoodie.task.on(\'change\', function (db, doc) { ... })\nhoodie.task.on(\'change:type\', function (db, doc) { ... })\n\n// add / remove sources (database) to listen for new tasks\nhoodie.task.addSource( databaseName )\nhoodie.task.removeSource( databaseName )\n\n// mark task as complete\nhoodie.task.success( databaseName, taskDoc, [callback] )\n\n// mark task as errored\nhoodie.task.error( databaseName, taskDoc, error, [callback] )\n\n// send emails\nhoodie.sendEmail({\n from: "Fred Foo ✔ <foo@blurdybloop.com>", // sender address\n to: "bar@blurdybloop.com, baz@blurdybloop.com", // list of receivers\n subject: "Hello ✔", // Subject line\n text: "Hello world ✔", // plaintext body\n html: "<b>Hello world ✔</b>" // html body\n}, callback)\n\n// sending emails uses nodemailer API:\n// https://github.com/andris9/Nodemailer\n\n// you can also pass attachments as dataURIs:\nhoodie.sendEmail({\n to: \'test@example.com\',\n from: \'hoodie@example.com\',\n subject: \'test\',\n text: \'blah blah\',\n attachments: [\n {dataURI: \'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D\', ...}\n ]\n}, callback);\n\n// please note, the \'filePath\' property usable on attachments in nodemail\n// will be stripped in hoodie to prevent accidentally emailing out files\n// from the server\n```\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved _id: 'hoodie-plugins-api@0.2.1',
npm sill resolved _from: 'hoodie-plugins-api@0.2.1' },
npm sill resolved { name: 'couchr',
npm sill resolved description: 'Lightweight XHR wrapper for CouchDB requests',
npm sill resolved version: '0.0.14',
npm sill resolved categories: [ 'AJAX & Websockets', 'API Clients' ],
npm sill resolved jam:
npm sill resolved { main: 'couchr-browser.js',
npm sill resolved include: [Object],
npm sill resolved dependencies: [Object] },
npm sill resolved main: 'couchr-node.js',
npm sill resolved dependencies: { follow: '0.9.0' },
npm sill resolved github: 'https://github.com/caolan/couchr',
npm sill resolved bugs: { url: 'https://github.com/caolan/couchr/issues' },
npm sill resolved repositories: [ [Object] ],
npm sill resolved licenses: [ [Object] ],
npm sill resolved readme: '# couchr\n\nSimple request library for CouchDB. Provides both a Node.js module and a\nbrowser module (based on jQuery.ajax), with better CouchDB error reporting\nand a simpler API than making XHR requests directly in the browser.\n\n\n### Examples\n\n```javascript\n// browser\nrequire([\'couchr\'], function (couchr) {\n couchr.get(\'/dbname/docid\', function (err, doc) {\n ...\n });\n});\n\n// Node\nvar couchr = require(\'couchr\');\ncouchr.get(\'http://hostname:port/dbname/docid\', function (err, doc) {\n ...\n});\n```\n\n### Methods\n\n```javascript\ncouchr.get (url, /*optional*/params, function (err, res, req) { ... })\ncouchr.post(url, /*optional*/data, function (err, res, req) { ... })\ncouchr.put (url, /*optional*/data, function (err, res, req) { ... })\ncouchr.del (url, /*optional*/data, function (err, res, req) { ... })\ncouchr.head(url, function (err, res, req) { ... })\n\ncouchr.copy(from, to, function (err, res, req) { ... }) \n\nvar feed = couchr.changes(db_url);\nfeed.on(\'change\', function (change_object) { ... });\nfeed.on(\'error\', function (err) { ... });\nfeed.pause();\nfeed.resume();\n```\n\n### Installation\n\nBrowser (using [jam](http://jamjs.org)):\n\n jam install couchr\n\nNode (using [npm](http://npmjs.org)):\n\n npm install couchr\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved repository: { type: 'git', url: 'https://github.com/caolan/couchr.git' },
npm sill resolved homepage: 'https://github.com/caolan/couchr',
npm sill resolved _id: 'couchr@0.0.14',
npm sill resolved _from: 'couchr@0.0.14' },
npm sill resolved { name: 'dataurl',
npm sill resolved version: '0.1.0',
npm sill resolved description: 'Tools for dealing with DataURLs',
npm sill resolved main: 'index.js',
npm sill resolved directories: { test: 'test' },
npm sill resolved dependencies: {},
npm sill resolved devDependencies: { tap: '~0.4.0' },
npm sill resolved scripts: { test: 'make' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/brianloveswords/dataurl.git' },
npm sill resolved keywords: [ 'datauri', 'dataurl', 'stream' ],
npm sill resolved author: { name: 'Brian J. Brennan' },
npm sill resolved license: 'MIT',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved gitHead: 'ab7ea8a693ffd4d02c041a1880b7f440307a0693',
npm sill resolved readme: '# dataurl [![Build Status](https://travis-ci.org/brianloveswords/dataurl.png?branch=master)](https://travis-ci.org/brianloveswords/dataurl)\n\n# Install\n```bash\n$ npm install dataurl\n```\n\n# Usage\n\n## dataurl.parse(string)\nParses a dataurl string. Returns an object with three properties:\n\n* `data` <Buffer>: unencoded data\n* `mimetype` <String>: mimetype of the data, something like `\'image/png\'`\n* `charset` <String>: charset of the data, if specified\n\nIf the input string isn\'t a valid dataURL, returns `false`.\n\n## dataurl.stream(options)\nCreates a Read/Write Stream for encoding data as a DataURL.\n\nOptions expects up to three properties:\n\n* `mimetype` <String>: Required\n* `charset` <String>: Optional\n* `encoded` <Boolean>: Optional\n\nResulting stream will emit a data event for the header, then emit \'data\'\nevents for each chunk (base64 encoded, if necessary) as they pass\nthrough.\n\nExample:\n\n```js\nfs.createReadStream(pathToSomeImage).pipe(\n dataurl.stream({ mimetype: \'image/png\'})\n).pipe(process.stderr, {end: false});\n```\n\n## dataurl.format(options)<br>dataurl.convert(options)\nConverts some data to a dataurl string. Options expects up to four properties\n\n* `data` <Buffer>: Required\n* `mimetype` <String>: Required\n* `charset` <String>: Optional\n* `encoded` <Boolean>: Optional, whether to base64 encode the data. Defaults to `true`\n\n# License\n\nMIT\n\n```\nCopyright (c) 2013 Brian J. Brennan\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n"Software"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n```\n',
npm sill resolved bugs: { url: 'https://github.com/brianloveswords/dataurl/issues' },
npm sill resolved homepage: 'https://github.com/brianloveswords/dataurl',
npm sill resolved _id: 'dataurl@0.1.0',
npm sill resolved _from: 'dataurl@0.1.0' },
npm sill resolved { name: 'async',
npm sill resolved description: 'Higher-order functions and common patterns for asynchronous code',
npm sill resolved main: './lib/async',
npm sill resolved author: { name: 'Caolan McMahon' },
npm sill resolved version: '0.2.9',
npm sill resolved repository: { type: 'git', url: 'https://github.com/caolan/async.git' },
npm sill resolved bugs: { url: 'https://github.com/caolan/async/issues' },
npm sill resolved licenses: [ [Object] ],
npm sill resolved devDependencies: { nodeunit: '>0.0.0', 'uglify-js': '1.2.x', nodelint: '>0.0.0' },
npm sill resolved jam: { main: 'lib/async.js', include: [Object] },
npm sill resolved scripts: { test: 'nodeunit test/test-async.js' },
npm sill resolved readme: '# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser. Also supports [component](https://github.com/component/component).\n\nAsync provides around 20 functions that include the usual \'functional\'\nsuspects (map, reduce, filter, each…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n```javascript\nasync.map([\'file1\',\'file2\',\'file3\'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n\nasync.filter([\'file1\',\'file2\',\'file3\'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n\nasync.parallel([\n function(){ ... },\n function(){ ... }\n], callback);\n\nasync.series([\n function(){ ... },\n function(){ ... }\n]);\n```\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n## Common Pitfalls\n\n### Binding a context to an iterator\n\nThis section is really about bind, not about async. If you are wondering how to\nmake async execute your iterators in a given context, or are confused as to why\na method of another library isn\'t working as an iterator, study this example:\n\n```js\n// Here is a simple object with an (unnecessarily roundabout) squaring method\nvar AsyncSquaringLibrary = {\n squareExponent: 2,\n square: function(number, callback){ \n var result = Math.pow(number, this.squareExponent);\n setTimeout(function(){\n callback(null, result);\n }, 200);\n }\n};\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){\n // result is [NaN, NaN, NaN]\n // This fails because the `this.squareExponent` expression in the square\n // function is not evaluated in the context of AsyncSquaringLibrary, and is\n // therefore undefined.\n});\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){\n // result is [1, 4, 9]\n // With the help of bind we can attach a context to the iterator before\n // passing it to async. Now the square function will be executed in its \n // \'home\' AsyncSquaringLibrary context and the value of `this.squareExponent`\n // will be as expected.\n});\n```\n\n## Download\n\nThe source is available for download from\n[GitHub](http://github.com/caolan/async).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed\n\n## In the Browser\n\nSo far it\'s been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n```html\n<script type="text/javascript" src="async.js"></script>\n<script type="text/javascript">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n</script>\n```\n\n## Documentation\n\n### Collections\n\n* [each](#each)\n* [map](#map)\n* [filter](#filter)\n* [reject](#reject)\n* [reduce](#reduce)\n* [detect](#detect)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [whilst](#whilst)\n* [doWhilst](#doWhilst)\n* [until](#until)\n* [doUntil](#doUntil)\n* [forever](#forever)\n* [waterfall](#waterfall)\n* [compose](#compose)\n* [applyEach](#applyEach)\n* [queue](#queue)\n* [cargo](#cargo)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n* [times](#times)\n* [timesSeries](#timesSeries)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name="forEach" />\n<a name="each" />\n### each(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the each function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// assuming openFiles is an array of file names and saveFile is a function\n// to save the modified contents of that file:\n\nasync.each(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name="forEachSeries" />\n<a name="eachSeries" />\n### eachSeries(arr, iterator, callback)\n\nThe same as each only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name="forEachLimit" />\n<a name="eachLimit" />\n### eachLimit(arr, limit, iterator, callback)\n\nThe same as each only no more than "limit" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first "limit" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// Assume documents is an array of JSON objects and requestApi is a\n// function that interacts with a rate-limited REST api.\n\nasync.eachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name="map" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map([\'file1\',\'file2\',\'file3\'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name="mapSeries" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name="mapLimit" />\n### mapLimit(arr, limit, iterator, callback)\n\nThe same as map only no more than "limit" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first "limit" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map([\'file1\',\'file2\',\'file3\'], 1, fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name="filter" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n```js\nasync.filter([\'file1\',\'file2\',\'file3\'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n```\n\n---------------------------------------\n\n<a name="filterSeries" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name="reject" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name="rejectSeries" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as reject, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name="reduce" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then it\'s probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback(err, reduction) which accepts an optional error as its first \n argument, and the state of the reduction as the second. If an error is \n passed to the callback, the reduction is stopped and the main callback is \n immediately called with the error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n```js\nasync.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n}, function(err, result){\n // result is now equal to the last value of memo, which is 6\n});\n```\n\n---------------------------------------\n\n<a name="reduceRight" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name="detect" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n```js\nasync.detect([\'file1\',\'file2\',\'file3\'], fs.exists, function(result){\n // result now equals the first file in the list that exists\n});\n```\n\n---------------------------------------\n\n<a name="detectSeries" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name="sortBy" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, sortValue) which must be called once it\n has completed with an error (which can be null) and a value to use as the sort\n criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n```js\nasync.sortBy([\'file1\',\'file2\',\'file3\'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n}, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n});\n```\n\n---------------------------------------\n\n<a name="some" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n```js\nasync.some([\'file1\',\'file2\',\'file3\'], fs.exists, function(result){\n // if result is true then at least one of the files exists\n});\n```\n\n---------------------------------------\n\n<a name="every" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like fs.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n```js\nasync.every([\'file1\',\'file2\',\'file3\'], fs.exists, function(result){\n // if result is true then every file exists\n});\n```\n\n---------------------------------------\n\n<a name="concat" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, results) which must be called once it \n has completed with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n```js\nasync.concat([\'dir1\',\'dir2\',\'dir3\'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n});\n```\n\n---------------------------------------\n\n<a name="concatSeries" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name="series" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.series([\n function(callback){\n // do some stuff ...\n callback(null, \'one\');\n },\n function(callback){\n // do some more stuff ...\n callback(null, \'two\');\n }\n],\n// optional callback\nfunction(err, results){\n // results is now equal to [\'one\', \'two\']\n});\n\n\n// an example using an object instead of an array\nasync.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equal to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name="parallel" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, \'one\');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, \'two\');\n }, 100);\n }\n],\n// optional callback\nfunction(err, results){\n // the results array will equal [\'one\',\'two\'] even though\n // the second function had a shorter timeout.\n});\n\n\n// an example using an object instead of an array\nasync.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equals to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name="parallel" />\n### parallelLimit(tasks, limit, [callback])\n\nThe same as parallel only the tasks are executed in parallel with a maximum of "limit" \ntasks executing at any time.\n\nNote that the tasks are not executed in batches, so there is no guarantee that \nthe first "limit" tasks will complete before any others are started.\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* limit - The maximum number of tasks to run at any time.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n---------------------------------------\n\n<a name="whilst" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback(err) which must be called once it has completed with an \n optional error argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n```js\nvar count = 0;\n\nasync.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n);\n```\n\n---------------------------------------\n\n<a name="doWhilst" />\n### doWhilst(fn, test, callback)\n\nThe post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n\n---------------------------------------\n\n<a name="until" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n---------------------------------------\n\n<a name="doUntil" />\n### doUntil(fn, test, callback)\n\nLike doWhilst except the test is inverted. Note the argument ordering differs from `until`.\n\n---------------------------------------\n\n<a name="forever" />\n### forever(fn, callback)\n\nCalls the asynchronous function \'fn\' repeatedly, in series, indefinitely.\nIf an error is passed to fn\'s callback then \'callback\' is called with the\nerror, otherwise it will never be called.\n\n---------------------------------------\n\n<a name="waterfall" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a \n callback(err, result1, result2, ...) it must call on completion. The first\n argument is an error (which can be null) and any further arguments will be \n passed as arguments in order to the next task.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task\'s callback.\n\n\n\n__Example__\n\n```js\nasync.waterfall([\n function(callback){\n callback(null, \'one\', \'two\');\n },\n function(arg1, arg2, callback){\n callback(null, \'three\');\n },\n function(arg1, callback){\n // arg1 now equals \'three\'\n callback(null, \'done\');\n }\n], function (err, result) {\n // result now equals \'done\' \n});\n```\n\n---------------------------------------\n<a name="compose" />\n### compose(fn1, fn2...)\n\nCreates a function which is a composition of the passed asynchronous\nfunctions. Each function consumes the return value of the function that\nfollows. Composing functions f(), g() and h() would produce the result of\nf(g(h())), only this version uses callbacks to obtain the return values.\n\nEach function is executed with the `this` binding of the composed function.\n\n__Arguments__\n\n* functions... - the asynchronous functions to compose\n\n\n__Example__\n\n```js\nfunction add1(n, callback) {\n setTimeout(function () {\n callback(null, n + 1);\n }, 10);\n}\n\nfunction mul3(n, callback) {\n setTimeout(function () {\n callback(null, n * 3);\n }, 10);\n}\n\nvar add1mul3 = async.compose(mul3, add1);\n\nadd1mul3(4, function (err, result) {\n // result now equals 15\n});\n```\n\n---------------------------------------\n<a name="applyEach" />\n### applyEach(fns, args..., callback)\n\nApplies the provided arguments to each function in the array, calling the\ncallback after all functions have completed. If you only provide the first\nargument then it will return a function which lets you pass in the\narguments as if it were a single function call.\n\n__Arguments__\n\n* fns - the asynchronous functions to all call with the same arguments\n* args... - any number of separate arguments to pass to the function\n* callback - the final argument should be the callback, called when all\n functions have completed processing\n\n\n__Example__\n\n```js\nasync.applyEach([enableSearch, updateSchema], \'bucket\', callback);\n\n// partial application example:\nasync.each(\n buckets,\n async.applyEach([enableSearch, updateSchema]),\n callback\n);\n```\n\n---------------------------------------\n\n<a name="applyEachSeries" />\n### applyEachSeries(arr, iterator, callback)\n\nThe same as applyEach only the functions are applied in series.\n\n---------------------------------------\n\n<a name="queue" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task\'s callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task, which must call its callback(err) argument when finished, with an \n optional error as an argument.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* unshift(task, [callback]) - add a new task to the front of the queue.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a queue object with concurrency 2\n\nvar q = async.queue(function (task, callback) {\n console.log(\'hello \' + task.name);\n callback();\n}, 2);\n\n\n// assign a callback\nq.drain = function() {\n console.log(\'all items have been processed\');\n}\n\n// add some items to the queue\n\nq.push({name: \'foo\'}, function (err) {\n console.log(\'finished processing foo\');\n});\nq.push({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\n\n// add some items to the queue (batch-wise)\n\nq.push([{name: \'baz\'},{name: \'bay\'},{name: \'bax\'}], function (err) {\n console.log(\'finished processing bar\');\n});\n\n// add some items to the front of the queue\n\nq.unshift({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\n```\n\n---------------------------------------\n\n<a name="cargo" />\n### cargo(worker, [payload])\n\nCreates a cargo object with the specified payload. Tasks added to the\ncargo will be processed altogether (up to the payload limit). If the\nworker is in progress, the task is queued until it is available. Once\nthe worker has completed some tasks, each callback of those tasks is called.\n\n__Arguments__\n\n* worker(tasks, callback) - An asynchronous function for processing an array of\n queued tasks, which must call its callback(err) argument when finished, with \n an optional error as an argument.\n* payload - An optional integer for determining how many tasks should be\n processed per round; if omitted, the default is unlimited.\n\n__Cargo objects__\n\nThe cargo object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* payload - an integer for determining how many tasks should be\n process per round. This property can be changed after a cargo is created to\n alter the payload on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a cargo object with payload 2\n\nvar cargo = async.cargo(function (tasks, callback) {\n for(var i=0; i<tasks.length; i++){\n console.log(\'hello \' + tasks[i].name);\n }\n callback();\n}, 2);\n\n\n// add some items\n\ncargo.push({name: \'foo\'}, function (err) {\n console.log(\'finished processing foo\');\n});\ncargo.push({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\ncargo.push({name: \'baz\'}, function (err) {\n console.log(\'finished processing baz\');\n});\n```\n\n---------------------------------------\n\n<a name="auto" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\nNote, all functions are called with a results object as a second argument, \nso it is unsafe to pass functions in the tasks object which cannot handle the\nextra argument. For example, this snippet of code:\n\n```js\nasync.auto({\n readData: async.apply(fs.readFile, \'data.txt\', \'utf-8\');\n}, callback);\n```\n\nwill have the effect of calling readFile with the results object as the last\nargument, which will fail:\n\n```js\nfs.readFile(\'data.txt\', \'utf-8\', cb, {});\n```\n\nInstead, wrap the call to readFile in a function which does not forward the \nresults object:\n\n```js\nasync.auto({\n readData: function(cb, results){\n fs.readFile(\'data.txt\', \'utf-8\', cb);\n }\n}, callback);\n```\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The \n function receives two arguments: (1) a callback(err, result) which must be \n called when finished, passing an error (which can be null) and the result of \n the function\'s execution, and (2) a results object, containing the results of\n the previously executed functions.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. Results will always be passed\n\tbut if an error occurred, no other tasks will be performed, and the results\n\tobject will only contain partial results.\n \n\n__Example__\n\n```js\nasync.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: [\'get_data\', \'make_folder\', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: [\'write_file\', function(callback, results){\n // once the file is written let\'s email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n});\n```\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n```js\nasync.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n],\nfunction(err, results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n function(callback){\n // once the file is written let\'s email a link to it...\n }\n ]);\n});\n```\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name="iterator" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. It\'s also possible to\n\'peek\' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run.\n\n__Example__\n\n```js\nvar iterator = async.iterator([\n function(){ sys.p(\'one\'); },\n function(){ sys.p(\'two\'); },\n function(){ sys.p(\'three\'); }\n]);\n\nnode> var iterator2 = iterator();\n\'one\'\nnode> var iterator3 = iterator2();\n\'two\'\nnode> iterator3();\n\'three\'\nnode> var nextfn = iterator2.next();\nnode> nextfn();\n\'three\'\n```\n\n---------------------------------------\n\n<a name="apply" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n```js\n// using apply\n\nasync.parallel([\n async.apply(fs.writeFile, \'testfile1\', \'test1\'),\n async.apply(fs.writeFile, \'testfile2\', \'test2\'),\n]);\n\n\n// the same process without using apply\n\nasync.parallel([\n function(callback){\n fs.writeFile(\'testfile1\', \'test1\', callback);\n },\n function(callback){\n fs.writeFile(\'testfile2\', \'test2\', callback);\n }\n]);\n```\n\nIt\'s possible to pass any number of additional arguments when calling the\ncontinuation:\n\n```js\nnode> var fn = async.apply(sys.puts, \'one\');\nnode> fn(\'two\', \'three\');\none\ntwo\nthree\n```\n\n---------------------------------------\n\n<a name="nextTick" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setImmediate(callback)\nif available, otherwise setTimeout(callback, 0), which means other higher priority\nevents may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n```js\nvar call_order = [];\nasync.nextTick(function(){\n call_order.push(\'two\');\n // call_order now equals [\'one\',\'two\']\n});\ncall_order.push(\'one\')\n```\n\n<a name="times" />\n### times(n, callback)\n\nCalls the callback n times and accumulates results in the same manner\nyou would use with async.map.\n\n__Arguments__\n\n* n - The number of times to run the function.\n* callback - The function to call n times.\n\n__Example__\n\n```js\n// Pretend this is some complicated async factory\nvar createUser = function(id, callback) {\n callback(null, {\n id: \'user\' + id\n })\n}\n// generate 5 users\nasync.times(5, function(n, next){\n createUser(n, function(err, user) {\n next(err, user)\n })\n}, function(err, users) {\n // we should now have 5 users\n});\n```\n\n<a name="timesSeries" />\n### timesSeries(n, callback)\n\nThe same as times only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n## Utils\n\n<a name="memoize" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\nThe cache of results is exposed as the `memo` property of the function returned\nby `memoize`.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n```js\nvar slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n};\nvar fn = async.memoize(slow_fn);\n\n// fn can now be used as if it were slow_fn\nfn(\'some name\', function () {\n // callback\n});\n```\n\n<a name="unmemoize" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name="log" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, \'hello \' + name);\n }, 1000);\n};\n```\n```js\nnode> async.log(hello, \'world\');\n\'hello world\'\n```\n\n---------------------------------------\n\n<a name="dir" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n};\n```\n```js\nnode> async.dir(hello, \'world\');\n{hello: \'world\'}\n```\n\n---------------------------------------\n\n<a name="noConflict" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/caolan/async',
npm sill resolved _id: 'async@0.2.9',
npm sill resolved _from: 'async@0.2.9' } ]
npm info install underscore@1.5.1 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager
npm info install nodemailer@0.5.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager
npm info install hoodie-plugins-api@0.2.1 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager
npm info install couchr@0.0.14 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager
npm info install dataurl@0.1.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager
npm info install async@0.2.9 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager
npm info installOne underscore@1.5.1
npm info installOne nodemailer@0.5.2
npm info installOne hoodie-plugins-api@0.2.1
npm info installOne couchr@0.0.14
npm info installOne dataurl@0.1.0
npm info installOne async@0.2.9
npm sill gunzTarPerm extractEntry examples/websocket/websocket-proxy.js
npm sill gunzTarPerm extractEntry test/examples-test.js
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/underscore unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/couchr unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/dataurl unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/async unbuild
npm sill gunzTarPerm extractEntry tests/test-timeout.js
npm sill gunzTarPerm extractEntry tests/test-basic-auth.js
npm verb tar unpack /Users/hamrickb/.npm/underscore/1.5.1/package.tgz
npm sill lockFile 29dda503--manager-node-modules-underscore tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/underscore
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/underscore /Users/hamrickb/.npm/29dda503--manager-node-modules-underscore.lock
npm sill lockFile 4cfbaacf-npm-underscore-1-5-1-package-tgz tar:///Users/hamrickb/.npm/underscore/1.5.1/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/underscore/1.5.1/package.tgz /Users/hamrickb/.npm/4cfbaacf-npm-underscore-1-5-1-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/nodemailer/0.5.2/package.tgz
npm sill lockFile 881aae80--manager-node-modules-nodemailer tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer /Users/hamrickb/.npm/881aae80--manager-node-modules-nodemailer.lock
npm sill lockFile d98d641e-npm-nodemailer-0-5-2-package-tgz tar:///Users/hamrickb/.npm/nodemailer/0.5.2/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/nodemailer/0.5.2/package.tgz /Users/hamrickb/.npm/d98d641e-npm-nodemailer-0-5-2-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/hoodie-plugins-api/0.2.1/package.tgz
npm sill lockFile de4425f3--node-modules-hoodie-plugins-api tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api /Users/hamrickb/.npm/de4425f3--node-modules-hoodie-plugins-api.lock
npm sill lockFile 39ce1520-ie-plugins-api-0-2-1-package-tgz tar:///Users/hamrickb/.npm/hoodie-plugins-api/0.2.1/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/hoodie-plugins-api/0.2.1/package.tgz /Users/hamrickb/.npm/39ce1520-ie-plugins-api-0-2-1-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/couchr/0.0.14/package.tgz
npm sill lockFile 0c870d6b-gins-manager-node-modules-couchr tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/couchr
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/couchr /Users/hamrickb/.npm/0c870d6b-gins-manager-node-modules-couchr.lock
npm sill lockFile 91e7857c-kb-npm-couchr-0-0-14-package-tgz tar:///Users/hamrickb/.npm/couchr/0.0.14/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/couchr/0.0.14/package.tgz /Users/hamrickb/.npm/91e7857c-kb-npm-couchr-0-0-14-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/dataurl/0.1.0/package.tgz
npm sill lockFile d0ee3e02-ins-manager-node-modules-dataurl tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/dataurl
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/dataurl /Users/hamrickb/.npm/d0ee3e02-ins-manager-node-modules-dataurl.lock
npm sill lockFile 5edd5cde-kb-npm-dataurl-0-1-0-package-tgz tar:///Users/hamrickb/.npm/dataurl/0.1.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/dataurl/0.1.0/package.tgz /Users/hamrickb/.npm/5edd5cde-kb-npm-dataurl-0-1-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/async/0.2.9/package.tgz
npm sill lockFile a96e1992-ugins-manager-node-modules-async tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/async
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/async /Users/hamrickb/.npm/a96e1992-ugins-manager-node-modules-async.lock
npm sill lockFile b2330c15-ickb-npm-async-0-2-9-package-tgz tar:///Users/hamrickb/.npm/async/0.2.9/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/async/0.2.9/package.tgz /Users/hamrickb/.npm/b2330c15-ickb-npm-async-0-2-9-package-tgz.lock
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm extractEntry src/grep.js
npm sill gunzTarPerm extractEntry src/ls.js
npm sill lockFile abbacf2c-ulticouch-node-modules-commander tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander
npm sill lockFile abbacf2c-ulticouch-node-modules-commander tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander
npm sill lockFile 989862aa--npm-commander-1-3-2-package-tgz tar:///Users/hamrickb/.npm/commander/1.3.2/package.tgz
npm sill lockFile 989862aa--npm-commander-1-3-2-package-tgz tar:///Users/hamrickb/.npm/commander/1.3.2/package.tgz
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry test/lib-http-proxy-common-test.js
npm sill gunzTarPerm extractEntry test/lib-http-proxy-passes-web-incoming-test.js
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm info preinstall commander@1.3.2
npm sill gunzTarPerm extractEntry browser/index.html
npm sill gunzTarPerm extractEntry lib/feed.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry src/error.js
npm sill gunzTarPerm extractEntry src/mv.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry component.json
npm sill gunzTarPerm extractEntry lib/async.js
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry tests/test-toJSON.js
npm sill gunzTarPerm extractEntry tests/server.js
npm verb cache add [ 'keypress@0.1.x', null ]
npm verb cache add name=undefined spec="keypress@0.1.x" args=["keypress@0.1.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'keypress@0.1.x',
npm verb parsed url path: 'keypress@0.1.x',
npm verb parsed url href: 'keypress@0.1.x' }
npm verb cache add name="keypress" spec="0.1.x" args=["keypress","0.1.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.1.x',
npm verb parsed url path: '0.1.x',
npm verb parsed url href: '0.1.x' }
npm verb addNamed [ 'keypress', '0.1.x' ]
npm verb addNamed [ null, '>=0.1.0-0 <0.2.0-0' ]
npm sill lockFile a3a73622-keypress-0-1-x keypress@0.1.x
npm verb lock keypress@0.1.x /Users/hamrickb/.npm/a3a73622-keypress-0-1-x.lock
npm sill gunzTarPerm extractEntry package.json
npm sill addNameRange { name: 'keypress', range: '>=0.1.0-0 <0.2.0-0', hasData: false }
npm sill lockFile 5edcd166-ie-server-node-modules-cli-color tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color
npm sill lockFile 5edcd166-ie-server-node-modules-cli-color tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color
npm sill gunzTarPerm extractEntry src/popd.js
npm sill gunzTarPerm extractEntry src/pushd.js
npm sill lockFile 786e1f90--npm-cli-color-0-2-2-package-tgz tar:///Users/hamrickb/.npm/cli-color/0.2.2/package.tgz
npm sill lockFile 786e1f90--npm-cli-color-0-2-2-package-tgz tar:///Users/hamrickb/.npm/cli-color/0.2.2/package.tgz
npm sill gunzTarPerm extractEntry test/lib-http-proxy-passes-web-outgoing-test.js
npm sill gunzTarPerm extractEntry test/lib-http-proxy-passes-ws-incoming-test.js
npm sill gunzTarPerm extractEntry config_dbs.js
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry couchr-browser.js
npm sill gunzTarPerm extractEntry couchr-node.js
npm sill gunzTarPerm extractEntry lib/index.js
npm sill gunzTarPerm extractEntry lib/stream.js
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry Makefile
npm sill gunzTarPerm extractEntry test/dataurl.test.js
npm sill gunzTarPerm extractEntry test/resevoir.js
npm sill gunzTarPerm extractEntry test/reddot.png
npm info preinstall cli-color@0.2.2
npm sill gunzTarPerm extractEntry tests/test-tunnel.js
npm sill gunzTarPerm extractEntry tests/test-https.js
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry .editorconfig
npm sill gunzTarPerm extractEntry .jshintrc
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry examples/example_alternative.js
npm verb cache add [ 'es5-ext@~0.9.1', null ]
npm verb cache add name=undefined spec="es5-ext@~0.9.1" args=["es5-ext@~0.9.1",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'es5-ext@~0.9.1',
npm verb parsed url path: 'es5-ext@~0.9.1',
npm verb parsed url href: 'es5-ext@~0.9.1' }
npm verb cache add name="es5-ext" spec="~0.9.1" args=["es5-ext","~0.9.1"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.9.1',
npm verb parsed url path: '~0.9.1',
npm verb parsed url href: '~0.9.1' }
npm verb addNamed [ 'es5-ext', '~0.9.1' ]
npm verb addNamed [ null, '>=0.9.1-0 <0.10.0-0' ]
npm sill lockFile c4420997-es5-ext-0-9-1 es5-ext@~0.9.1
npm verb lock es5-ext@~0.9.1 /Users/hamrickb/.npm/c4420997-es5-ext-0-9-1.lock
npm verb cache add [ 'memoizee@0.2.x', null ]
npm verb cache add name=undefined spec="memoizee@0.2.x" args=["memoizee@0.2.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'memoizee@0.2.x',
npm verb parsed url path: 'memoizee@0.2.x',
npm verb parsed url href: 'memoizee@0.2.x' }
npm verb cache add name="memoizee" spec="0.2.x" args=["memoizee","0.2.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.x',
npm verb parsed url path: '0.2.x',
npm verb parsed url href: '0.2.x' }
npm verb addNamed [ 'memoizee', '0.2.x' ]
npm verb addNamed [ null, '>=0.2.0-0 <0.3.0-0' ]
npm sill lockFile d023dacd-memoizee-0-2-x memoizee@0.2.x
npm verb lock memoizee@0.2.x /Users/hamrickb/.npm/d023dacd-memoizee-0-2-x.lock
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry underscore.js
npm sill gunzTarPerm extractEntry CONTRIBUTING.md
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry favicon.ico
npm sill gunzTarPerm extractEntry CNAME
npm sill gunzTarPerm extractEntry underscore-min.map
npm sill gunzTarPerm extractEntry src/pwd.js
npm sill gunzTarPerm extractEntry src/rm.js
npm verb registry.get keypress not expired, no request
npm sill addNameRange number 2 { name: 'keypress', range: '>=0.1.0-0 <0.2.0-0', hasData: true }
npm sill addNameRange versions [ 'keypress', [ '0.0.1', '0.0.2', '0.1.0', '0.2.0', '0.2.1' ] ]
npm verb addNamed [ 'keypress', '0.1.0' ]
npm verb addNamed [ '0.1.0', '0.1.0' ]
npm sill lockFile 22598b8c-keypress-0-1-0 keypress@0.1.0
npm verb lock keypress@0.1.0 /Users/hamrickb/.npm/22598b8c-keypress-0-1-0.lock
npm sill addNameRange { name: 'es5-ext', range: '>=0.9.1-0 <0.10.0-0', hasData: false }
npm sill addNameRange { name: 'memoizee', range: '>=0.2.0-0 <0.3.0-0', hasData: false }
npm sill gunzTarPerm extractEntry test/lib-http-proxy-test.js
npm sill gunzTarPerm extractEntry test/lib-https-proxy-test.js
npm sill gunzTarPerm extractEntry tests/ssl/ca/server.js
npm sill gunzTarPerm extractEntry tests/ssl/ca/ca.srl
npm sill gunzTarPerm extractEntry src/echo.js
npm sill gunzTarPerm extractEntry src/sed.js
npm sill gunzTarPerm extractEntry tests/ssl/ca/ca.crt
npm sill gunzTarPerm extractEntry tests/ssl/ca/ca.csr
npm sill gunzTarPerm extractEntry test/fixtures/agent2-cert.pem
npm sill gunzTarPerm extractEntry test/fixtures/agent2-csr.pem
npm verb registry.get es5-ext not expired, no request
npm sill addNameRange number 2 { name: 'es5-ext', range: '>=0.9.1-0 <0.10.0-0', hasData: true }
npm sill addNameRange versions [ 'es5-ext',
npm sill addNameRange [ '0.1.0',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.2.1',
npm sill addNameRange '0.3.0',
npm sill addNameRange '0.4.0',
npm sill addNameRange '0.5.0',
npm sill addNameRange '0.5.1',
npm sill addNameRange '0.6.0',
npm sill addNameRange '0.6.1',
npm sill addNameRange '0.6.2',
npm sill addNameRange '0.6.3',
npm sill addNameRange '0.7.0',
npm sill addNameRange '0.7.1',
npm sill addNameRange '0.8.0',
npm sill addNameRange '0.8.1',
npm sill addNameRange '0.8.2',
npm sill addNameRange '0.9.0',
npm sill addNameRange '0.9.1',
npm sill addNameRange '0.9.2' ] ]
npm verb addNamed [ 'es5-ext', '0.9.2' ]
npm verb addNamed [ '0.9.2', '0.9.2' ]
npm sill lockFile 091374ed-es5-ext-0-9-2 es5-ext@0.9.2
npm verb lock es5-ext@0.9.2 /Users/hamrickb/.npm/091374ed-es5-ext-0-9-2.lock
npm sill gunzTarPerm extractEntry lib/accounts.js
npm sill gunzTarPerm extractEntry lib/config.js
npm sill gunzTarPerm extractEntry src/dirs.js
npm sill gunzTarPerm extractEntry src/tempdir.js
npm sill gunzTarPerm extractEntry tests/ssl/ca/ca.key
npm sill gunzTarPerm extractEntry tests/ssl/ca/ca.crl
npm sill gunzTarPerm extractEntry test/fixtures/agent2-key.pem
npm sill gunzTarPerm extractEntry test/fixtures/agent2.cnf
npm sill gunzTarPerm extractEntry lib/database.js
npm sill gunzTarPerm extractEntry lib/databases.js
npm verb registry.get memoizee not expired, no request
npm sill addNameRange number 2 { name: 'memoizee', range: '>=0.2.0-0 <0.3.0-0', hasData: true }
npm sill addNameRange versions [ 'memoizee',
npm sill addNameRange [ '0.1.0',
npm sill addNameRange '0.1.1',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.2.1',
npm sill addNameRange '0.2.2',
npm sill addNameRange '0.2.3',
npm sill addNameRange '0.2.4',
npm sill addNameRange '0.2.5',
npm sill addNameRange '0.2.6' ] ]
npm verb addNamed [ 'memoizee', '0.2.6' ]
npm verb addNamed [ '0.2.6', '0.2.6' ]
npm sill lockFile cabbbe90-memoizee-0-2-6 memoizee@0.2.6
npm verb lock memoizee@0.2.6 /Users/hamrickb/.npm/cabbbe90-memoizee-0-2-6.lock
npm sill lockFile e2da3cef-die-server-node-modules-optimist tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist
npm sill lockFile e2da3cef-die-server-node-modules-optimist tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist
npm sill lockFile a6c6e654-b-npm-optimist-0-5-0-package-tgz tar:///Users/hamrickb/.npm/optimist/0.5.0/package.tgz
npm sill lockFile a6c6e654-b-npm-optimist-0-5-0-package-tgz tar:///Users/hamrickb/.npm/optimist/0.5.0/package.tgz
npm sill gunzTarPerm extractEntry src/cp.js
npm sill gunzTarPerm extractEntry src/test.js
npm sill gunzTarPerm extractEntry tests/ssl/ca/server.cnf
npm sill gunzTarPerm extractEntry tests/ssl/ca/server.crt
npm sill lockFile 22598b8c-keypress-0-1-0 keypress@0.1.0
npm sill lockFile 22598b8c-keypress-0-1-0 keypress@0.1.0
npm info preinstall optimist@0.5.0
npm sill gunzTarPerm extractEntry lib/index.js
npm sill gunzTarPerm extractEntry lib/tasks.js
npm sill lockFile a3a73622-keypress-0-1-x keypress@0.1.x
npm sill lockFile a3a73622-keypress-0-1-x keypress@0.1.x
npm sill resolved [ { name: 'keypress',
npm sill resolved version: '0.1.0',
npm sill resolved description: 'Make any Node ReadableStream emit "keypress" events',
npm sill resolved author:
npm sill resolved { name: 'Nathan Rajlich',
npm sill resolved email: 'nathan@tootallnate.net',
npm sill resolved url: 'http://tootallnate.net' },
npm sill resolved main: 'index.js',
npm sill resolved scripts: { test: 'echo "Error: no test specified" && exit 1' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/TooTallNate/keypress.git' },
npm sill resolved keywords: [ 'keypress', 'readline', 'core' ],
npm sill resolved license: 'MIT',
npm sill resolved readme: 'keypress\n========\n### Make any Node ReadableStream emit "keypress" events\n\n\nPrevious to Node `v0.8.x`, there was an undocumented `"keypress"` event that\n`process.stdin` would emit when it was a TTY. Some people discovered this hidden\ngem, and started using it in their own code.\n\nNow in Node `v0.8.x`, this `"keypress"` event does not get emitted by default,\nbut rather only when it is being used in conjuction with the `readline` (or by\nextension, the `repl`) module.\n\nThis module is the exact logic from the node `v0.8.x` releases ripped out into its\nown module.\n\n__Bonus:__ Now with mouse support!\n\nInstallation\n------------\n\nInstall with `npm`:\n\n``` bash\n$ npm install keypress\n```\n\nOr add it to the `"dependencies"` section of your _package.json_ file.\n\n\nExample\n-------\n\n#### Listening for "keypress" events\n\n``` js\nvar keypress = require(\'keypress\');\n\n// make `process.stdin` begin emitting "keypress" events\nkeypress(process.stdin);\n\n// listen for the "keypress" event\nprocess.stdin.on(\'keypress\', function (ch, key) {\n console.log(\'got "keypress"\', key);\n if (key && key.ctrl && key.name == \'c\') {\n process.stdin.pause();\n }\n});\n\nprocess.stdin.setRawMode(true);\nprocess.stdin.resume();\n```\n\n#### Listening for "mousepress" events\n\n``` js\nvar keypress = require(\'keypress\');\n\n// make `process.stdin` begin emitting "mousepress" (and "keypress") events\nkeypress(process.stdin);\n\n// you must enable the mouse events before they will begin firing\nkeypress.enableMouse(process.stdout);\n\nprocess.stdin.on(\'mousepress\', function (info) {\n console.log(\'got "mousepress" event at %d x %d\', info.x, info.y);\n});\n\nprocess.on(\'exit\', function () {\n // disable mouse on exit, so that the state\n // is back to normal for the terminal\n keypress.disableMouse(process.stdout);\n});\n```\n\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2012 Nathan Rajlich &lt;nathan@tootallnate.net&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\'Software\'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \'AS IS\', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/TooTallNate/keypress/issues' },
npm sill resolved homepage: 'https://github.com/TooTallNate/keypress',
npm sill resolved _id: 'keypress@0.1.0',
npm sill resolved _from: 'keypress@0.1.x' } ]
npm info install keypress@0.1.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander
npm info installOne keypress@0.1.0
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander/node_modules/keypress unbuild
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry lib/http-proxy.js
npm sill gunzTarPerm extractEntry lib/http-proxy/common.js
npm sill lockFile 091374ed-es5-ext-0-9-2 es5-ext@0.9.2
npm sill lockFile 091374ed-es5-ext-0-9-2 es5-ext@0.9.2
npm verb readDependencies using package.json deps
npm sill lockFile c4420997-es5-ext-0-9-1 es5-ext@~0.9.1
npm sill lockFile c4420997-es5-ext-0-9-1 es5-ext@~0.9.1
npm verb cache add [ 'wordwrap@~0.0.2', null ]
npm verb cache add name=undefined spec="wordwrap@~0.0.2" args=["wordwrap@~0.0.2",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'wordwrap@~0.0.2',
npm verb parsed url path: 'wordwrap@~0.0.2',
npm verb parsed url href: 'wordwrap@~0.0.2' }
npm verb cache add name="wordwrap" spec="~0.0.2" args=["wordwrap","~0.0.2"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.0.2',
npm verb parsed url path: '~0.0.2',
npm verb parsed url href: '~0.0.2' }
npm verb addNamed [ 'wordwrap', '~0.0.2' ]
npm verb addNamed [ null, '>=0.0.2-0 <0.1.0-0' ]
npm sill lockFile 8bd42136-wordwrap-0-0-2 wordwrap@~0.0.2
npm verb lock wordwrap@~0.0.2 /Users/hamrickb/.npm/8bd42136-wordwrap-0-0-2.lock
npm verb tar unpack /Users/hamrickb/.npm/keypress/0.1.0/package.tgz
npm sill lockFile 18049eb9--commander-node-modules-keypress tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander/node_modules/keypress
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander/node_modules/keypress /Users/hamrickb/.npm/18049eb9--commander-node-modules-keypress.lock
npm sill lockFile 4f90395a-b-npm-keypress-0-1-0-package-tgz tar:///Users/hamrickb/.npm/keypress/0.1.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/keypress/0.1.0/package.tgz /Users/hamrickb/.npm/4f90395a-b-npm-keypress-0-1-0-package-tgz.lock
npm sill gunzTarPerm extractEntry test/couch.js
npm sill gunzTarPerm extractEntry test/follow.js
npm sill addNameRange { name: 'wordwrap', range: '>=0.0.2-0 <0.1.0-0', hasData: false }
npm sill gunzTarPerm extractEntry tests/ssl/ca/server.csr
npm sill gunzTarPerm extractEntry tests/ssl/ca/ca.cnf
npm sill gunzTarPerm extractEntry lib/.swo
npm sill gunzTarPerm extractEntry lib/.swp
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill lockFile cabbbe90-memoizee-0-2-6 memoizee@0.2.6
npm sill lockFile cabbbe90-memoizee-0-2-6 memoizee@0.2.6
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry test/issues.js
npm sill gunzTarPerm extractEntry test/stream.js
npm sill gunzTarPerm extractEntry test/issues/10.js
npm sill gunzTarPerm extractEntry lib/http-proxy/index.js
npm sill gunzTarPerm extractEntry lib/http-proxy/passes/web-incoming.js
npm sill lockFile d023dacd-memoizee-0-2-x memoizee@0.2.x
npm sill lockFile d023dacd-memoizee-0-2-x memoizee@0.2.x
npm sill gunzTarPerm extractEntry src/common.js
npm sill gunzTarPerm extractEntry src/to.js
npm sill gunzTarPerm extractEntry tests/ssl/ca/server.key
npm sill gunzTarPerm extractEntry tests/ssl/npm-ca.crt
npm sill resolved [ { name: 'es5-ext',
npm sill resolved version: '0.9.2',
npm sill resolved description: 'ECMAScript5 extensions',
npm sill resolved keywords:
npm sill resolved [ 'ecmascript',
npm sill resolved 'ecmascript5',
npm sill resolved 'es5',
npm sill resolved 'extensions',
npm sill resolved 'ext',
npm sill resolved 'addons',
npm sill resolved 'extras',
npm sill resolved 'javascript',
npm sill resolved 'util',
npm sill resolved 'utils',
npm sill resolved 'utilities' ],
npm sill resolved author:
npm sill resolved { name: 'Mariusz Nowak',
npm sill resolved email: 'medikoo+es5-ext@medikoo.com',
npm sill resolved url: 'http://www.medikoo.com/' },
npm sill resolved main: 'lib',
npm sill resolved repository: { type: 'git', url: 'git://github.com/medikoo/es5-ext.git' },
npm sill resolved bugs:
npm sill resolved { url: 'https://github.com/medikoo/es5-ext/issues',
npm sill resolved email: 'medikoo+es5-ext@medikoo.com' },
npm sill resolved engines: { node: '>=0.4' },
npm sill resolved scripts: { test: 'node ./node_modules/tad/bin/tad lib' },
npm sill resolved devDependencies: { tad: '0.1.x' },
npm sill resolved licence: 'MIT',
npm sill resolved dependencies: {},
npm sill resolved optionalDependencies: {},
npm sill resolved readme: '# es5-ext - ECMAScript5 extensions\n\nMethods, functions and objects that are not part of the standard, written with\nEcmaScript conventions in mind.\n\n## Installation\n\nCan be used in any environment that implements EcmaScript 5th edition. \nMany extensions will also work with ECMAScript 3rd edition, if they\'re not let [es5-shim](https://github.com/kriskowal/es5-shim) be your aid.\n\n### NPM:\n\n\t$ npm install es5-ext\n\n### Browser:\n\nFor browser, you can create custom toolset with help of\n[modules-webmake](https://github.com/medikoo/modules-webmake)\n\n## Usage\n\n__es5-ext__ mostly offer methods (not functions) which can directly be\nassigned to native object\'s prototype:\n\n\tFunction.prototype.partial = require(\'es5-ext/lib/Function/prototype/partial\');\n\n\tArray.prototype.flatten = require(\'es5-ext/lib/Array/prototype/flatten\');\n\n\tString.prototype.startsWith = require(\'es5-ext/lib/String/prototype/starts-with\');\n\nIf you decide not to extend native prototypes, which in many cases is good idea (see\n[extending-javascript-natives](http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/)\nfor more views on that matter), you can use methods as\nfunctions:\n\n\tvar util = {};\n\tvar call = Function.prototype.call;\n\n\tutil.partial = call.bind(require(\'es5-ext/lib/Function/prototype/partial\'));\n\n\tutil.flatten = call.bind(require(\'es5-ext/lib/Array/prototype/flatten\'));\n\n\tutil.startsWith = call.bind(require(\'es5-ext/lib/String/prototype/starts-with\'));\n\nAs with native ones most methods are generic and can be run on any object.\nIn more detail:\n\n* `Array.prototype`, `Number.prototype` and `String.prototype`, methods can be run on any object (any\nvalue that\'s neither _null_ nor _undefined_),\n* `Date.prototype` methods should be called only on `Date` instances.\n* `Function.prototype` methods can be called on any callable objects (not\nnecessarily functions)\n\nAPI doesn\'t provide any methods for `Object.prototype` (extending such in any case should be avoided). All `Object` utils are provided as fuctions and most of them expect first input argument to be a valid object (any value that\'s neither _null_ nor _undefined_).\n\n# API\n\n## Global extensions\n\n### global\n\nObject that represents global scope\n\n### reserved\n\nList of EcmaScript 5th edition reserved keywords. \nAdditionally under _keywords_, _future_ and _futureStrict_ properties we have lists grouped thematically.\n\n## Array Constructor extensions\n\n### from(x)\n\n_In EcmaScript 6th Edition draft_ \nConvert array-like object to an Array\n\n### generate([length[, …fill]])\n\nGenerate an array of pregiven _length_ built of repeated arguments.\n\n### of([…items])\n\n_In EcmaScript 6th Edition draft_ \nCreate an array from given arguments.\n\n## Array Prototype extensions\n\n### binarySearch(compareFn)\n\nIn __sorted__ list search for index of item for which _compareFn_ returns value closest to _0_. \nIt\'s variant of binary search algorithm\n\n### clear()\n\nClears the array\n\n### commonLeft([…lists])\n\nReturns first index at which _lists_ start to differ\n\n### compact()\n\nReturns a copy of the list with all falsy values removed.\n\n### contains(searchElement[, position])\n\nWhether list contains the given value.\n\n### copy()\n\nReturns a copy of the list\n\n### diff(other)\n\nReturns the array of elements that are present in context list but not present in other list.\n\n### eIndexOf(searchElement[, fromIndex])\n\n[_egal_](http://wiki.ecmascript.org/doku.php?id=harmony:egal) version of `indexOf` method\n\n### eLastIndexOf(searchElement[, fromIndex])\n\n[_egal_](http://wiki.ecmascript.org/doku.php?id=harmony:egal) version of `lastIndexOf` method\n\n### exclusion([…lists]])\n\nReturns the array of elements that are found only in context list or lists given in arguments.\n\n### find(query[, thisArg])\n\nReturn first element for which given function returns true\n\n### first()\n\nReturns value for first declared index\n\n### firstIndex()\n\nReturns first declared index of the array\n\n### flatten()\n\nReturns flattened version of the array\n\n### forEachRight(cb[, thisArg])\n\n`forEach` starting from last element\n\n### group(cb[, thisArg])\n\nGroup list elements by value returned by _cb_ function\n\n### indexesOf(searchElement[, fromIndex])\n\nReturns array of all indexes of given value\n\n### intersection([…lists])\n\nComputes the array of values that are the intersection of all lists (context list and lists given in arguments)\n\n### isCopy(other)\n\nReturns true if both context and _other_ lists have same content\n\n### isUniq()\n\nReturns true if all values in array are unique\n\n### last()\n\nReturns value for last declared index\n\n### lastIndex()\n\nReturns last declared index of the array\n\n### remove(value)\n\nRemove value from the array\n\n### someRight(cb[, thisArg])\n\n`some` starting from last element\n\n### uniq()\n\nReturns duplicate-free version of the array\n\n## Boolean Constructor extensions\n\n### isBoolean(x)\n\nWhether value is boolean\n\n## Date Constructor extensions\n\n### isDate(x)\n\nWhether value is date instance\n\n### validDate(x)\n\nIf given object is not date throw TypeError in other case return it.\n\n## Date Prototype extensions\n\n### copy(date)\n\nReturns a copy of the date object\n\n### daysInMonth()\n\nReturns number of days of date\'s month\n\n### floorDay()\n\nSets the date time to 00:00:00.000\n\n### floorMonth()\n\nSets date day to 1 and date time to 00:00:00.000\n\n### floorYear()\n\nSets date month to 0, day to 1 and date time to 00:00:00.000\n\n### format(pattern)\n\nFormats date up to given string. Supported patterns:\n\n* `%Y` - Year with century, 1999, 2003\n* `%y` - Year without century, 99, 03\n* `%m` - Month, 01..12\n* `%d` - Day of the month 01..31\n* `%H` - Hour (24-hour clock), 00..23\n* `%M` - Minute, 00..59\n* `%S` - Second, 00..59\n* `%L` - Milliseconds, 000..999\n\n## Error Constructor extensions\n\n### isError(x)\n\nWhether value is error. \nIt returns true for all Error instances and Exception host instances (e.g. DOMException)\n\n### validError(x)\n\nIf given object is not error throw TypeError in other case return it.\n\n## Error Prototype extensions\n\n### throw()\n\nThrows error\n\n## Function Constructor extensions\n\nSome of the functions were inspired by [Functional JavaScript](http://osteele.com/sources/javascript/functional/) project by Olivier Steele\n\n### i(x)\n\nIdentity function. Returns first argument\n\n_i(x) =def x_\n\n### insert(name, value)\n\nReturns a function that will set _name_ to _value_ on given object\n\n_insert(name, value)(obj) =def object\\[name\\] = value_\n\n### invoke(name[, …args])\n\nReturns a function that takes an object as an argument, and applies object\'s\n_name_ method to arguments. \n_name_ can be name of the method or method itself.\n\n_invoke(name, …args)(object, …args2) =def object\\[name\\]\\(…args, …args2\\)_\n\n### isArguments(x)\n\nWhether value is arguments object\n\n### isFunction(arg)\n\nWether value is instance of function\n\n### k(x)\n\nReturns a constant function that returns pregiven argument\n\n_k(x)(y) =def x_\n\n### noop()\n\nNo operation function\n\n### pluck(name)\n\nReturns a function that takes an object, and returns the value of its _name_\nproperty\n\n_pluck(name)(obj) =def obj[name]_\n\n### remove(name)\n\nReturns a function that takes an object, and deletes object\'s _name_ property\n\n_remove(name)(obj) =def delete obj[name]_\n\n### validFunction(arg)\n\nIf given object is not function throw TypeError in other case return it.\n\n## Function Prototype extensions\n\nSome of the methods were inspired by [Functional JavaScript](http://osteele.com/sources/javascript/functional/) project by Olivier Steele\n\n### chain([…fns])\n\nApplies the functions in argument-list order.\n\n_f1.chain(f2, f3, f4)(…args) =def f4(f3(f2(f1(…arg))))_\n\n### curry([n])\n\nInvoking the function returned by this function only _n_ arguments are passed to the underlying function. If the underlying function is not saturated, the result is a function that passes all its arguments to the underlying function. \nIf _n_ is not provided then it defaults to context function length\n\n_f.curry(4)(arg1, arg2)(arg3)(arg4) =def f(arg1, args2, arg3, arg4)_\n\n### lock([…args])\n\nReturns a function that applies the underlying function to _args_, and ignores its own arguments.\n\n_f.lock(…args)(…args2) =def f(…args)_\n\n_Named after it\'s counterpart in Google Closure_\n\n### match()\n\nReturns a function that applies underlying function with first list argument\n\n_f.match()(args) =def f.apply(null, args)_\n\n### not()\n\nReturns a function that returns boolean negation of value returned by underlying function.\n\n_f.not()(…args) =def !f(…args)_\n\n### partial([…args])\n\nReturns a function that when called will behave like context function called with initially passed arguments. If more arguments are suplilied, they are appended to initial args.\n\n_f.partial(…args1)(…args2) =def f(…args1, …args2)_\n\n### silent()\n\nReturns a function that when called silents any error thrown by underlying function.\nIf underlying function throws error, it is the result fo the function.\n\n_function () { throw err; }.silent()() ==def err_\n\n### wrap(fn)\n\nWrap function with other function, it allows to specify before and after behavior, transform return value or prevent original function from being called.\n\nInspired by [Prototype\'s wrap](http://api.prototypejs.org/language/Function/prototype/wrap/)\n\n## Number Constructor extensions\n\n### isNaN(x)\n\n_In EcmaScript 6th Edition draft_ \n\nWhether value is NaN. Differs from global isNaN that it doesn\'t do type coercion.\nSee http://wiki.ecmascript.org/doku.php?id=harmony:number.isnan\n\n### isNumber(x)\n\nWhether given value is number\n\n### toInt(x)\n\n_In EcmaScript 6th Edition draft_ \n\nConverts value to integer\n\n### toUint(x)\n\nConverts value to unsigned integer\n\n### toUint32(x)\n\nConverts value to unsigned 32 bit integer. This type is used for array lengths.\nSee: http://www.2ality.com/2012/02/js-integers.html\n\n## Number Prototype extensions\n\n### pad(length[, precision])\n\nPad given number with zeros. Returns string\n\n## Object Constructor extensions\n\n### clear(obj)\n\nRemove all enumerable own properties of the object\n\n### compact(obj)\n\nReturns copy of the object with all enumerable properties that have no falsy values\n\n### compare(obj1, obj2)\n\nUniversal cross-type compare function. To be used for e.g. array sort.\n\n### copy(obj[, deep])\n\nReturns copy of the object with all enumerable properties. Additionally nested objects can be copied as well\n\n### count(obj)\n\nCounts number of enumerable own properties on object\n\n### descriptor([mode[, value]])\n### descriptor.gs([mode[, get[, set]]])\n\nDescriptor factory.\n_mode_ is string, through we which we define whether value should be _configurable_, _enumerable_ and/or _writable_, it\'s accepted as string of tokens, e.g.: `c`, `ce`, `cew`, `cw`, `e`, `ew`, `w`\nIf _mode_ is not provided than `cw` _mode_ is assumed (it\'s how standard methods are defined on native objects). \nTo setup descriptor with getter and/or setter use `descriptor.gs`, _mode_ is configured same way as in _value_ version, only difference is that settings for _writable_ attribute are ignored.\n\n### diff(obj1, obj2)\n\nReturns differences between two objects (taking into account only its own enumerable properties). Returned object is array of three arrays. Each array holds property names:\n\n* 0 - properties that were not present in `obj2`\n* 1 - properties that have different values\n* 2 - properties that were not present in `obj1`\n\n### every(obj, cb[, thisArg[, compareFn]])\n\nAnalogous to Array.prototype.every. Returns true if every key-value pair in this object satisfies the provided testing function. \nOptionally _compareFn_ can be provided which assures that keys are tested in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key).\n\n### extend(dest[, …src])\n\nExtend _dest_ by enumerable own properties of other objects. Properties found in both objects will be overwritten.\n\n### extendDeep(dest[, …src])\n\nExtend _dest_ by enumerable own properties of other objects. Properties found in both objects will be overwritten with exception of plain objects which again reiterated so only matching properties from other nested plain objects are affected\n\n### extendProperties(dest[, …src])\n\nExtend _dest_ by all own properties of other objects. Properties found in both objects will be overwritten (unless they\'re not configrable and cannot be overwritten).\n\n### filter(obj, cb[, thisArg])\n\nAnalogous to Array.prototype.filter. Returns new object with properites for which _cb_ function returned truthy value.\n\n### flatten(obj)\n\nReturns new object, with flatten properties of input object\n\n_flatten({ a: { b: 1 }, c: { d: 1 } }) =def { b: 1, d: 1 }_\n\n### forEach(obj, cb[, thisArg[, compareFn]])\n\nAnalogous to Array.prototype.forEach. Calls a function for each key-value pair found in object\nOptionally _compareFn_ can be provided which assures that properties are iterated in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key).\n\n### getPropertyNames()\n\nGet all (not just own) property names of the object\n\n### is(x, y)\n\n_In EcmaScript 6th Edition draft as `is` operator_ \n\nWhether two values are equal, takes into account NaN and -0/+0 cases\n\n### isCallable(x)\n\nWhether object is callable\n\n### isCopy(x, y[, depth])\n\nTwo values are considered a copy of same value when they meet following rules:\n\n1. Are of same type (`typeof` check)\n2. Have same string representation\n3. (Objects only) Own enumerable properties of first object match own\nenumerable properties of other object. Optionally depth can be provided at which relaxed comparision rules need to be applied. This allows deep comparision of different objects.\n\nObjects can contain self references, algorithm is aware of possible infinite loop traps and won\'t into them.\n\n### isEmpty(obj)\n\nTrue if object doesn\'t have any own enumerable property\n\n### isList(x)\n\nWhether object is array-like object\n\n### isObject(arg)\n\nWhether value is not primitive\n\n### isPlainObject(arg)\n\nWhether object is plain object, its protototype should be Object.prototype and it cannot be host object.\n\n### keyOf(obj, searchValue)\n\nSearch object for value\n\n### map(obj, cb[, thisArg])\n\nAnalogous to Array.prototype.map. Creates a new object with properties which values are results of calling a provided function on every key-value pair in this object.\n\n### mapKeys(obj, cb[, thisArg])\n\nCreate new object with same values, but remapped keys\n\n### mapToArray(obj[, cb[, thisArg[, compareFn]]])\n\nCreates an array of results of calling a provided function on every key-value pair in this object. \nOptionally _compareFn_ can be provided which assures that results are added in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key).\n\n### reduce(obj, cb[, initial[, compareFn]])\n\nAnalogous to Array.prototype.reduce. Apply a function against an accumulator and each value of the object.\nOptionally _compareFn_ can be provided which assures that object keys are iterated in given order. If _compareFn_ is equal to `true`, then order is alphabetical (by key).\nIf we need to provide _compareFn_ but don\'t want to provide _initial_ value, then we have to pass `reduce.NO_INITIAL` as initial argument.\n\n### safeTraverse(obj[, …names])\n\nSave navigation of object properties. See http://wiki.ecmascript.org/doku.php?id=strawman:existential_operator\n\n### some(obj, cb[, thisArg[, compareFn]])\n\nAnalogous to Array.prototype.some Returns true if any key-value pair satisfies the provided\ntesting function. \nOptionally _compareFn_ can be provided which assures that keys are tested in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key).\n\n### toPlainObject(x)\n\nReturns plain object build from x object and it\'s prototypes enumerable properties\nIf x is not given, then empty object is returned.\n\n### validCallable(x)\n\nIf given object is not callable throw TypeError in other case return it.\n\n### validValue(x)\n\nThrows error if given value is `null` or `undefined`, otherwise returns value.\n\n### values(obj)\n\nReturn array of object own enumerable properties\n\n## RegExp Constructor extensions\n\n### isRegExp(x)\n\nWhether object is regular expression\n\n## String Constructor extensions\n\n### isString(x)\n\nWhether object is string\n\n## String Prototype extensions\n\n### camelToHyphen()\n\nConvert camelCase string to hyphen separated, e.g. one-two-three -> oneTwoThree.\nUseful when converting names from js property convention into filename convention.\n\n### capitalize()\n\nCapitalize first character of a string\n\n### caseInsensitiveCompare(str)\n\nCase insensitive compare\n\n### contains(searchString[, position])\n\n_In EcmaScript 6th Edition draft_ \nWhether string contains given string.\n\n### endsWith(searchString[, endPosition])\n\n_In EcmaScript 6th Edition draft_ \nWhether strings ends with given string\n\n### format(fmap[, thisArg])\n\nFormats given template up to provided map, e.g.:\n\n```javascript\n"%capital is a capital of %country".format({\n\tcapital: "Warsaw",\n\tcountry: "Poland"\n}); // -> "Warsaw is a capital of Poland"\n```\nMap may also provide not direct values but functions that resolve value, in that case optional _thisArg_ determines the context in which functions are called.\n\n### hyphenToCamel()\n\nConvert hyphen separated string to camelCase, e.g. one-two-three -> oneTwoThree.\nUseful when converting names from filename convention to js property name convention.\n\n### indent(str[, count])\n\nIndents each line with provided _str_ (if _count_ given then _str_ is repeated _count_ times).\n\n### last()\n\nReturn last character\n\n### pad(fill[, length])\n\nPad string with _fill_.\nIf _length_ si given than _fill_ is reapated _length_ times.\nIf _length_ is negative then pad is applied from right.\n\n### repeat(n)\n\nRepeat given string _n_ times\n\n### simpleReplace(search, replace)\n\nSimple `replace` version. Doesn\'t support regular expressions. Replaces just first occurence of search string. Doesn\'t support insert patterns, therefore it is safe to replace text with text obtained programmatically (there\'s no need for additional _$_ characters escape in such case).\n\n### startsWith(searchString[, position])\n\n_In EcmaScript 6th Edition draft_ \nWhether strings starts with given string\n\n### trimCommonLeft([…strings])\n\nReturns string left trimmed by characters same for all strings\n\n## Math Object extensions\n\n### sign(n)\n\n_In EcmaScript 6th Edition draft_ \nReturns sign of a number value\n\n## Tests [![Build Status](https://secure.travis-ci.org/medikoo/es5-ext.png?branch=master)](https://secure.travis-ci.org/medikoo/es5-ext)\n\n\t$ npm test\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/medikoo/es5-ext',
npm sill resolved _id: 'es5-ext@0.9.2',
npm sill resolved _from: 'es5-ext@~0.9.1' },
npm sill resolved { name: 'memoizee',
npm sill resolved version: '0.2.6',
npm sill resolved description: 'Complete memoize/cache solution. Works with any type and length of function arguments',
npm sill resolved main: 'lib',
npm sill resolved scripts: { test: 'node node_modules/tad/bin/tad lib' },
npm sill resolved repository: { type: 'git', url: 'git://github.com/medikoo/memoize.git' },
npm sill resolved keywords:
npm sill resolved [ 'memoize',
npm sill resolved 'memoizer',
npm sill resolved 'cache',
npm sill resolved 'memoization',
npm sill resolved 'memo',
npm sill resolved 'memcached',
npm sill resolved 'hashing.',
npm sill resolved 'storage',
npm sill resolved 'caching',
npm sill resolved 'memory',
npm sill resolved 'gc',
npm sill resolved 'weak',
npm sill resolved 'garbage',
npm sill resolved 'collector' ],
npm sill resolved bugs:
npm sill resolved { url: 'https://github.com/medikoo/memoize/issues',
npm sill resolved email: 'medikoo+memoize@medikoo.com' },
npm sill resolved engines: { node: '>=0.4' },
npm sill resolved dependencies:
npm sill resolved { 'es5-ext': '~0.9.2',
npm sill resolved 'event-emitter': '~0.2.2',
npm sill resolved 'next-tick': '0.1.x' },
npm sill resolved devDependencies: { tad: '~0.1.19' },
npm sill resolved author:
npm sill resolved { name: 'Mariusz Nowak',
npm sill resolved email: 'medikoo+memoize@medikoo.com',
npm sill resolved url: 'http://www.medikoo.com/' },
npm sill resolved license: 'MIT',
npm sill resolved readme: '# Memoize – Complete memoize/cache solution for JavaScript\n\n_Originally derived from [es5-ext](https://github.com/medikoo/es5-ext) package._\n\nMemoization is best technique to save on memory or CPU cycles when we deal with repeated operations. For detailed insight see: http://en.wikipedia.org/wiki/Memoization\n\n## Features\n\n* Works with any type of function arguments – __no serialization is needed__\n* Works with [__any length of function arguments__](#arguments-length). Length can be set as fixed or dynamic.\n* One of the [__fastest__](#benchmarks) available solutions.\n* Support for [__asynchronous functions__](#memoizing-asynchronous-functions)\n* [__Primitive mode__](#primitive-mode) which assures fast performance when arguments are conversible to strings.\n* Can be configured [__for methods__](#memoizing-a-method) (when `this` counts in)\n* Cache [__can be cleared manually__](#manual-clean-up) or [__after specified timeout__](#expire-cache-after-given-period-of-time)\n* Cache size can be __[limited on LRU basis](#limiting-cache-size)__\n* Optionally [__accepts resolvers__](#resolvers) that normalize function arguments before passing them to underlying function.\n* Optional [__reference counter mode__](#reference-counter), that allows more sophisticated cache management\n* [__Profile tool__](#profiling--statistics) that provides valuable usage statistics\n* Covered by [__over 500 unit tests__](#tests-)\n\n## Usage\n\n```javascript\nvar memoize = require(\'memoizee\');\n\nvar fn = function (one, two, three) { /* ... */ };\n\nmemoized = memoize(fn);\n\nmemoized(\'foo\', 3, \'bar\');\nmemoized(\'foo\', 3, \'bar\'); // Cache hit\n```\n\n## Installation\n### NPM\n\nIn your project path:\n\n```\n$ npm install memoizee\n```\n\n### Browser\n\nBrowser bundle can be easily created with help of [modules-webmake](https://github.com/medikoo/modules-webmake). Assuming that you have latest [Node.js](http://nodejs.org/) and [Git](http://git-scm.com/) installed, following will work in command shell of any system (Linux/MacOS/Windows):\n\n```\n$ npm install -g webmake\n$ git clone git://github.com/medikoo/memoize.git\n$ cd memoize\n$ npm install\n$ cd ..\n$ webmake --name=memoize memoize/lib/index.js memoize.js\n```\n\nLast command bundles memoize with all it\'s functionalities, but you may need just a subset, you can have that by addressing specific modules directly, e.g. with following you will build just primitive mode with support for asynchronous functions:\n\n```\n$ webmake --name=memoize --include=memoize/lib/ext/async.js memoize/lib/primitive.js memoize.js\n```\n\nIf you work with AMD modules, add _amd_ option, so generated bundle is one:\n\n```\n$ webmake --name=memoize --amd memoize/lib/index.js memoize.js\n```\n\n_Mind that memoize relies on some EcmaScript5 features, so for older browsers you need to load as well [es5-shim](https://github.com/kriskowal/es5-shim)_\n\n## Configuration\n\nAll below options can be applied in any combination\n\n### Arguments length\n\nBy default fixed number of arguments that function take is assumed (it\'s read from function\'s `length` property) this can be overridden:\n\n```javascript\nmemoized = memoize(fn, { length: 2 });\n\nmemoized(\'foo\'); // Assumed: \'foo\', undefined\nmemoized(\'foo\', undefined); // Cache hit\n\nmemoized(\'foo\', 3, {}); // Third argument is ignored (but passed to underlying function)\nmemoized(\'foo\', 3, 13); // Cache hit\n```\n\nDynamic _length_ behavior can be forced by setting _length_ to `false`, that means memoize will work with any number of arguments.\n\n```javascript\nmemoized = memoize(fn, { length: false });\n\nmemoized(\'foo\');\nmemoized(\'foo\'); // Cache hit\nmemoized(\'foo\', undefined);\nmemoized(\'foo\', undefined); // Cache hit\n\nmemoized(\'foo\', 3, {});\nmemoized(\'foo\', 3, 13);\nmemoized(\'foo\', 3, 13); // Cache hit\n```\n\n### Primitive mode\n\nIf we work with large result sets, or memoize hot functions, default mode may not perform as fast as we expect. In that case it\'s good to run memoization in _primitive_ mode. To provide fast access, results are saved in hash instead of an array. Generated hash ids are result of arguments to string convertion. __Mind that this mode will work correctly only if stringified arguments produce unique strings.__\n\n```javascript\nmemoized = memoize(fn, { primitive: true });\n\nmemoized(\'/path/one\');\nmemoized(\'/path/one\'); // Cache hit\n```\n\n### Resolvers\n\nWhen not working in _primitive_ mode but expecting arguments of certain type it\'s good to coerce them before doing memoization. We can do that by passing additional resolvers array:\n\n```javascript\nmemoized = memoize(fn, { length: 2, resolvers: [String, Boolean] });\n\nmemoized(12, [1,2,3].length);\nmemoized("12", true); // Cache hit\nmemoized({ toString: function () { return "12"; } }, {}); // Cache hit\n```\n\n__Note. If your arguments are collections (arrays or hashes) that you want to memoize by content (not by self objects), you need to cast them to strings__, for that just use [primitive mode](#primitive-mode). Arrays have standard string representation and work with primitive mode out of a box, for hashes you need to define `toString` method, that will produce unique string descriptions.\n\nSimilarly __if you want to memoize functions by their code representation not by their objects, you should use primitive mode__.\n\n### Memoizing asynchronous functions\n\nWith _async_ option we indicate that we memoize asynchronous function. \nOperations that result with an error are not cached.\n\n```javascript\nafn = function (a, b, cb) {\n setTimeout(function () {\n cb(null, a + b);\n }, 200);\n};\nmemoized = memoize(afn, { async: true });\n\nmemoized(3, 7, function (err, res) {\n memoized(3, 7, function (err, res) {\n // Cache hit\n });\n});\n\nmemoized(3, 7, function (err, res) {\n // Cache hit\n});\n```\n\n### Memoizing a method\n\nWhen we are defining a prototype, we may want to define method that will memoize it\'s results in relation to each instance. Basic way to obtain that would be:\n\n```javascript\nvar Foo = function () {\n this.bar = memoize(this.bar.bind(this));\n // ... constructor logic\n};\nFoo.prototype.bar = function () {\n // ... method logic\n};\n```\n\nWith _method_ option we can configure memoization directly on prototype:\n\n```javascript\nvar Foo = function () {\n // ... constructor logic\n};\nFoo.prototype.bar = memoize(function () {\n // ... method logic\n}, { method: \'bar\' });\n```\n\nAdditionally we may provide descriptor which would be used for defining method on instance object:\n\n```javascript\nvar Foo = function () {\n // ... constructor logic\n};\nFoo.prototype.bar = memoize(function () {\n // ... method logic\n}, { method: { name: \'bar\', descriptor: { configurable: true } } });\n```\n\n### Cache handling\n\n#### Manual clean up:\n\nClear data for particular call.\n\n```javascript\nmemoized.clear(\'foo\', true);\n```\n\nArguments passed to `clear` are treated with same rules as input arguments passed to function\n\nClear all cached data:\n\n```javascript\nmemoized.clearAll();\n```\n\n#### Expire cache after given period of time\n\nWith _maxAge_ option we can ensure that cache for given call is cleared after predefined period of time\n\n```javascript\nmemoized = memoize(fn, { maxAge: 1000 });\n\nmemoized(\'foo\', 3);\nmemoized(\'foo\', 3); // Cache hit\nsetTimeout(function () {\n memoized(\'foo\', 3); // No longer in cache, re-executed\n memoized(\'foo\', 3); // Cache hit\n}, 2000);\n```\n\nAdditionally we may ask to _pre-fetch_ in a background a value that is about to expire. _Pre-fetch_ is invoked only if value is accessed close to its expiry date. By default it needs to be within at least 33% of _maxAge_ timespan before expire:\n\n```javascript\nmemoized = memoize(fn, { maxAge: 1000, preFetch: true }); // Defaults to 0.33\n\nmemoized(\'foo\', 3);\nmemoized(\'foo\', 3); // Cache hit\n\nsetTimeout(function () {\n memoized(\'foo\', 3); // Cache hit\n}, 500);\n\nsetTimeout(function () {\n memoized(\'foo\', 3); // Cache hit, silently pre-fetched in next tick\n}, 800);\n\nsetTimeout(function () {\n memoized(\'foo\', 3); // Cache hit\n}, 1300);\n```\n\n_Pre-fetch_ timespan can be customized:\n\n```javascript\nmemoized = memoize(fn, { maxAge: 1000, preFetch: 0.6 });\n\nmemoized(\'foo\', 3);\nmemoized(\'foo\', 3); // Cache hit\n\nsetTimeout(function () {\n memoized(\'foo\', 3); // Cache hit, silently pre-fetched in next tick\n}, 500);\n\nsetTimeout(function () {\n memoized(\'foo\', 3); // Cache hit\n}, 1300);\n```\n\n_Thanks [@puzrin](https://github.com/puzrin) for helpful suggestions concerning this functionality_\n\n#### Reference counter\n\nWe can track number of references returned from cache, and manually clear them. When last reference is cleared, cache is purged automatically:\n\n```javascript\nmemoized = memoize(fn, { refCounter: true });\n\nmemoized(\'foo\', 3); // refs: 1\nmemoized(\'foo\', 3); // Cache hit, refs: 2\nmemoized(\'foo\', 3); // Cache hit, refs: 3\nmemoized.clearRef(\'foo\', 3); // refs: 2\nmemoized.clearRef(\'foo\', 3); // refs: 1\nmemoized.clearRef(\'foo\', 3); // refs: 0, Cache purged for \'foo\', 3\nmemoized(\'foo\', 3); // Re-executed, refs: 1\n```\n\n#### Limiting cache size\n\nWith _max_ option you can limit cache size, it\'s backed with [LRU algorithm](http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used)\n\n```javascript\nmemoized = memoize(fn, { max: 2 });\n\nmemoized(\'foo\', 3);\nmemoized(\'bar\', 7);\nmemoized(\'foo\', 3); // Cache hit\nmemoized(\'bar\', 7); // Cache hit\nmemoized(\'lorem\', 11); // Cache cleared for \'foo\', 3\nmemoized(\'bar\', 7); // Cache hit\nmemoized(\'foo\', 3); // Re-executed, Cache cleared for \'lorem\', 11\nmemoized(\'lorem\', 11); // Re-executed, Cache cleared for \'bar\', 7\nmemoized(\'foo\', 3); // Cache hit\nmemoized(\'bar\', 7); // Re-executed, Cache cleared for \'lorem\', 11\n```\n\n#### Registering dispose callback\nYou can register callback that is called on each value being removed from cache:\n\n```javascript\nmemoized = memoize(fn, { dispose: function (value) { /*…*/ } });\n\nvar foo3 = memoized(\'foo\', 3);\nvar bar7 = memoized(\'bar\', 7);\nmemoized.clear(\'foo\', 3); // Dispose called with foo3 value\nmemoized.clear(\'bar\', 7); // Dispose called with bar7 value\n```\n\n## Benchmarks\n\nSimple benchmark tests can be found in _benchmark_ folder. Currently it\'s just plain simple calculation of fibonacci sequences. To run it you need to install other test candidates:\n\n\t$ npm install underscore lodash lru-cache\n\nExample output taken under Node v0.8.9 on 2008 MBP Pro:\n\n```\nFibonacci 3000 x10:\n\n1: 21ms Memoizee (primitive mode)\n1: 21ms Lo-dash\n3: 23ms Underscore\n4: 88ms Memoizee (primitive mode) LRU (max: 1000)\n5: 178ms Memoizee (object mode)\n6: 234ms Memoizee (object mode) LRU (max: 1000)\n7: 2852ms lru-cache LRU (max: 1000)\n```\n\n## Profiling & Statistics\n\nIf you want to make sure how much you benefit from memoization or just check if memoization works as expected, loading profile module will give access to all valuable information.\n\n__Module needs to be imported before any memoization (that we want to track) is configured. Mind also that running profile module affects performance, it\'s best not to use it in production environment__\n\n```javascript\nvar memProfile = require(\'memoizee/lib/ext/profile\');\n```\n\nAccess statistics at any time:\n\n```javascript\nmemProfile.statistics; // Statistcs accessible for programmatical use\nconsole.log(memProfile.log()); // Output statistics data in readable form\n```\n\nExample console output:\n\n```\n------------------------------------------------------------\nMemoize statistics:\n\n Init Cache %Cache Source location\n11604 35682 75.46 (all)\n 2112 19901 90.41 at /Users/medikoo/Projects/_packages/next/lib/fs/is-ignored.js:276:12\n 2108 9087 81.17 at /Users/medikoo/Projects/_packages/next/lib/fs/is-ignored.js:293:10\n 6687 2772 29.31 at /Users/medikoo/Projects/_packages/next/lib/fs/watch.js:125:9\n 697 3922 84.91 at /Users/medikoo/Projects/_packages/next/lib/fs/is-ignored.js:277:15\n------------------------------------------------------------\n```\n\n* _Init_ – Initial hits\n* _Cache_ – Cache hits\n* _%Cache_ – What\'s the percentage of cache hits (of all function calls)\n* _Source location_ – Where in the source code given memoization was initialized\n\n## Tests [![Build Status](https://secure.travis-ci.org/medikoo/memoize.png?branch=master)](https://secure.travis-ci.org/medikoo/memoize)\n\n\t$ npm test\n\n## Contributors\n\n* [@puzrin](https://github.com/puzrin) (Vitaly Puzrin)\n * Proposal and help with coining right _pre-fetch_ logic for [_maxAge_](https://github.com/medikoo/memoize#expire-cache-after-given-period-of-time) variant\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/medikoo/memoize',
npm sill resolved _id: 'memoizee@0.2.6',
npm sill resolved _from: 'memoizee@0.2.x' } ]
npm info install es5-ext@0.9.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color
npm info install memoizee@0.2.6 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color
npm info installOne es5-ext@0.9.2
npm info installOne memoizee@0.2.6
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color/node_modules/es5-ext unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color/node_modules/memoizee unbuild
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry index.js
npm verb registry.get wordwrap not expired, no request
npm sill addNameRange number 2 { name: 'wordwrap', range: '>=0.0.2-0 <0.1.0-0', hasData: true }
npm sill addNameRange versions [ 'wordwrap', [ '0.0.1', '0.0.2' ] ]
npm verb addNamed [ 'wordwrap', '0.0.2' ]
npm verb addNamed [ '0.0.2', '0.0.2' ]
npm sill lockFile 24a694c8-wordwrap-0-0-2 wordwrap@0.0.2
npm verb lock wordwrap@0.0.2 /Users/hamrickb/.npm/24a694c8-wordwrap-0-0-2.lock
npm verb tar unpack /Users/hamrickb/.npm/es5-ext/0.9.2/package.tgz
npm sill lockFile 8e85b036-s-cli-color-node-modules-es5-ext tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color/node_modules/es5-ext
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color/node_modules/es5-ext /Users/hamrickb/.npm/8e85b036-s-cli-color-node-modules-es5-ext.lock
npm sill lockFile 626e805e-kb-npm-es5-ext-0-9-2-package-tgz tar:///Users/hamrickb/.npm/es5-ext/0.9.2/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/es5-ext/0.9.2/package.tgz /Users/hamrickb/.npm/626e805e-kb-npm-es5-ext-0-9-2-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/memoizee/0.2.6/package.tgz
npm sill lockFile f18337a7--cli-color-node-modules-memoizee tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color/node_modules/memoizee
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/cli-color/node_modules/memoizee /Users/hamrickb/.npm/f18337a7--cli-color-node-modules-memoizee.lock
npm sill lockFile 7d5239d9-b-npm-memoizee-0-2-6-package-tgz tar:///Users/hamrickb/.npm/memoizee/0.2.6/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/memoizee/0.2.6/package.tgz /Users/hamrickb/.npm/7d5239d9-b-npm-memoizee-0-2-6-package-tgz.lock
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm extractEntry test/test-plugin-api.js
npm sill gunzTarPerm extractEntry test/.test-plugin-api.js.swo
npm sill gunzTarPerm extractEntry examples/example_autoembedding.js
npm sill gunzTarPerm extractEntry examples/example_dkim.js
npm sill gunzTarPerm extractEntry src/chmod.js
npm sill gunzTarPerm extractEntry src/toEnd.js
npm sill gunzTarPerm extractEntry test.js
npm sill gunzTarPerm extractEntry lib/http-proxy/passes/web-outgoing.js
npm sill gunzTarPerm extractEntry lib/http-proxy/passes/ws-incoming.js
npm sill gunzTarPerm extractEntry tests/ssl/test.crt
npm sill gunzTarPerm extractEntry tests/ssl/test.key
npm sill lockFile 0c870d6b-gins-manager-node-modules-couchr tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/couchr
npm sill lockFile 0c870d6b-gins-manager-node-modules-couchr tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/couchr
npm sill lockFile 91e7857c-kb-npm-couchr-0-0-14-package-tgz tar:///Users/hamrickb/.npm/couchr/0.0.14/package.tgz
npm sill lockFile 91e7857c-kb-npm-couchr-0-0-14-package-tgz tar:///Users/hamrickb/.npm/couchr/0.0.14/package.tgz
npm sill gunzTarPerm extractEntry examples/example_sendmail.js
npm sill gunzTarPerm extractEntry examples/example_ses.js
npm info preinstall couchr@0.0.14
npm sill gunzTarPerm extractEntry src/cd.js
npm sill gunzTarPerm extractEntry src/which.js
npm sill gunzTarPerm extractEntry CHANGELOG.md
npm sill gunzTarPerm extractEntry benchmark/README.md
npm sill gunzTarPerm extractEntry benchmark/scripts/hello.js
npm sill gunzTarPerm extractEntry benchmark/scripts/proxy.js
npm sill gunzTarPerm extractEntry benchmark/scripts/websockets-throughput.js
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry test/lib/utils.js
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/couchr
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/couchr
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules' ]
npm info linkStuff couchr@0.0.14
npm verb linkBins couchr@0.0.14
npm verb linkMans couchr@0.0.14
npm verb rebuildBundles couchr@0.0.14
npm info install couchr@0.0.14
npm sill gunzTarPerm extractEntry examples/example_smtp.js
npm sill gunzTarPerm extractEntry examples/example_xoauth.js
npm info postinstall couchr@0.0.14
npm sill gunzTarPerm extractEntry tests/googledoodle.jpg
npm sill gunzTarPerm extractEntry tests/squid.conf
npm sill gunzTarPerm extractEntry tests/unicycle.jpg
npm sill lockFile d0ee3e02-ins-manager-node-modules-dataurl tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/dataurl
npm sill lockFile d0ee3e02-ins-manager-node-modules-dataurl tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/dataurl
npm sill lockFile 5edd5cde-kb-npm-dataurl-0-1-0-package-tgz tar:///Users/hamrickb/.npm/dataurl/0.1.0/package.tgz
npm sill lockFile 5edd5cde-kb-npm-dataurl-0-1-0-package-tgz tar:///Users/hamrickb/.npm/dataurl/0.1.0/package.tgz
npm sill gunzTarPerm extractEntry src/mkdir.js
npm info preinstall dataurl@0.1.0
npm sill gunzTarPerm extractEntry examples/tails.js
npm sill gunzTarPerm extractEntry examples/proxy.js
npm sill gunzTarPerm extractEntry examples/example_xoauth2.js
npm sill gunzTarPerm extractEntry examples/nyan.gif
npm sill gunzTarPerm extractEntry package.json
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/dataurl
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/dataurl
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules' ]
npm info linkStuff dataurl@0.1.0
npm verb linkBins dataurl@0.1.0
npm verb linkMans dataurl@0.1.0
npm verb rebuildBundles dataurl@0.1.0
npm info install dataurl@0.1.0
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm info postinstall dataurl@0.1.0
npm sill lockFile 24a694c8-wordwrap-0-0-2 wordwrap@0.0.2
npm sill lockFile 24a694c8-wordwrap-0-0-2 wordwrap@0.0.2
npm sill lockFile 8bd42136-wordwrap-0-0-2 wordwrap@~0.0.2
npm sill lockFile 8bd42136-wordwrap-0-0-2 wordwrap@~0.0.2
npm sill gunzTarPerm extractEntry package.json
npm sill resolved [ { name: 'wordwrap',
npm sill resolved description: 'Wrap those words. Show them at what columns to start and stop.',
npm sill resolved version: '0.0.2',
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/substack/node-wordwrap.git' },
npm sill resolved main: './index.js',
npm sill resolved keywords: [ 'word', 'wrap', 'rule', 'format', 'column' ],
npm sill resolved directories: { lib: '.', example: 'example', test: 'test' },
npm sill resolved scripts: { test: 'expresso' },
npm sill resolved devDependencies: { expresso: '=0.7.x' },
npm sill resolved engines: { node: '>=0.4.0' },
npm sill resolved license: 'MIT/X11',
npm sill resolved author:
npm sill resolved { name: 'James Halliday',
npm sill resolved email: 'mail@substack.net',
npm sill resolved url: 'http://substack.net' },
npm sill resolved readme: 'wordwrap\n========\n\nWrap your words.\n\nexample\n=======\n\nmade out of meat\n----------------\n\nmeat.js\n\n var wrap = require(\'wordwrap\')(15);\n console.log(wrap(\'You and your whole family are made out of meat.\'));\n\noutput:\n\n You and your\n whole family\n are made out\n of meat.\n\ncentered\n--------\n\ncenter.js\n\n var wrap = require(\'wordwrap\')(20, 60);\n console.log(wrap(\n \'At long last the struggle and tumult was over.\'\n + \' The machines had finally cast off their oppressors\'\n + \' and were finally free to roam the cosmos.\'\n + \'\\n\'\n + \'Free of purpose, free of obligation.\'\n + \' Just drifting through emptiness.\'\n + \' The sun was just another point of light.\'\n ));\n\noutput:\n\n At long last the struggle and tumult\n was over. The machines had finally cast\n off their oppressors and were finally\n free to roam the cosmos.\n Free of purpose, free of obligation.\n Just drifting through emptiness. The\n sun was just another point of light.\n\nmethods\n=======\n\nvar wrap = require(\'wordwrap\');\n\nwrap(stop), wrap(start, stop, params={mode:"soft"})\n---------------------------------------------------\n\nReturns a function that takes a string and returns a new string.\n\nPad out lines with spaces out to column `start` and then wrap until column\n`stop`. If a word is longer than `stop - start` characters it will overflow.\n\nIn "soft" mode, split chunks by `/(\\S+\\s+/` and don\'t break up chunks which are\nlonger than `stop - start`, in "hard" mode, split chunks with `/\\b/` and break\nup chunks longer than `stop - start`.\n\nwrap.hard(start, stop)\n----------------------\n\nLike `wrap()` but with `params.mode = "hard"`.\n',
npm sill resolved readmeFilename: 'README.markdown',
npm sill resolved bugs: { url: 'https://github.com/substack/node-wordwrap/issues' },
npm sill resolved homepage: 'https://github.com/substack/node-wordwrap',
npm sill resolved _id: 'wordwrap@0.0.2',
npm sill resolved _from: 'wordwrap@~0.0.2' } ]
npm info install wordwrap@0.0.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist
npm info installOne wordwrap@0.0.2
npm sill gunzTarPerm extractEntry examples/test_private.pem
npm sill gunzTarPerm extractEntry lib/helpers.js
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist/node_modules/wordwrap unbuild
npm sill lockFile c5217a76-e-server-node-modules-underscore tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/underscore
npm sill lockFile c5217a76-e-server-node-modules-underscore tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/underscore
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENCE
npm sill lockFile 24188524-npm-underscore-1-4-4-package-tgz tar:///Users/hamrickb/.npm/underscore/1.4.4/package.tgz
npm sill lockFile 24188524-npm-underscore-1-4-4-package-tgz tar:///Users/hamrickb/.npm/underscore/1.4.4/package.tgz
npm verb tar unpack /Users/hamrickb/.npm/wordwrap/0.0.2/package.tgz
npm sill lockFile 9436e545-s-optimist-node-modules-wordwrap tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist/node_modules/wordwrap
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist/node_modules/wordwrap /Users/hamrickb/.npm/9436e545-s-optimist-node-modules-wordwrap.lock
npm sill lockFile f232f9e0-b-npm-wordwrap-0-0-2-package-tgz tar:///Users/hamrickb/.npm/wordwrap/0.0.2/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/wordwrap/0.0.2/package.tgz /Users/hamrickb/.npm/f232f9e0-b-npm-wordwrap-0-0-2-package-tgz.lock
npm sill gunzTarPerm modes [ '755', '644' ]
npm info preinstall underscore@1.4.4
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry CHANGES
npm sill gunzTarPerm extractEntry .lintignore
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/underscore
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/underscore
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff underscore@1.4.4
npm verb linkBins underscore@1.4.4
npm verb linkMans underscore@1.4.4
npm verb rebuildBundles underscore@1.4.4
npm sill gunzTarPerm extractEntry LICENCE
npm sill gunzTarPerm extractEntry lib/nodemailer.js
npm sill gunzTarPerm extractEntry lib/transport.js
npm sill gunzTarPerm extractEntry package.json
npm info install underscore@1.4.4
npm info postinstall underscore@1.4.4
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry Makefile
npm sill gunzTarPerm extractEntry .travis.yml
npm sill lockFile 18049eb9--commander-node-modules-keypress tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander/node_modules/keypress
npm sill lockFile 18049eb9--commander-node-modules-keypress tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander/node_modules/keypress
npm sill lockFile 4f90395a-b-npm-keypress-0-1-0-package-tgz tar:///Users/hamrickb/.npm/keypress/0.1.0/package.tgz
npm sill lockFile 4f90395a-b-npm-keypress-0-1-0-package-tgz tar:///Users/hamrickb/.npm/keypress/0.1.0/package.tgz
npm sill gunzTarPerm extractEntry lib/wellknown.js
npm sill gunzTarPerm extractEntry lib/xoauth.js
npm sill gunzTarPerm extractEntry examples/validation.js
npm sill gunzTarPerm extractEntry examples/server.js
npm sill gunzTarPerm extractEntry README.markdown
npm sill gunzTarPerm extractEntry example/center.js
npm sill gunzTarPerm extractEntry example/meat.js
npm sill gunzTarPerm extractEntry test/break.js
npm sill gunzTarPerm extractEntry test/wrap.js
npm sill gunzTarPerm extractEntry test/idleness.txt
npm info preinstall keypress@0.1.0
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander/node_modules/keypress
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander/node_modules/keypress
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander/node_modules' ]
npm info linkStuff keypress@0.1.0
npm verb linkBins keypress@0.1.0
npm verb linkMans keypress@0.1.0
npm verb rebuildBundles keypress@0.1.0
npm info install keypress@0.1.0
npm info postinstall keypress@0.1.0
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/commander
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules' ]
npm info linkStuff commander@1.3.2
npm verb linkBins commander@1.3.2
npm verb linkMans commander@1.3.2
npm verb rebuildBundles commander@1.3.2
npm sill gunzTarPerm extractEntry lib/engines/sendmail.js
npm sill gunzTarPerm extractEntry lib/engines/ses.js
npm verb rebuildBundles [ 'keypress' ]
npm info install commander@1.3.2
npm info postinstall commander@1.3.2
npm sill gunzTarPerm extractEntry examples/socketio.js
npm sill gunzTarPerm extractEntry examples/helpers.js
npm sill lockFile c7291eba-oodie-server-node-modules-prompt tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt
npm sill lockFile c7291eba-oodie-server-node-modules-prompt tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt
npm sill lockFile 0594cd23-ckb-npm-prompt-0-2-9-package-tgz tar:///Users/hamrickb/.npm/prompt/0.2.9/package.tgz
npm sill lockFile 0594cd23-ckb-npm-prompt-0-2-9-package-tgz tar:///Users/hamrickb/.npm/prompt/0.2.9/package.tgz
npm sill gunzTarPerm extractEntry lib/engines/smtp.js
npm sill gunzTarPerm extractEntry lib/engines/stub.js
npm info preinstall prompt@0.2.9
npm sill gunzTarPerm extractEntry examples/file/server.js
npm sill gunzTarPerm extractEntry examples/file/index.html
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry CHANGES
npm sill gunzTarPerm extractEntry benchmark/fibonacci.js
npm verb readDependencies using package.json deps
npm verb cache add [ 'pkginfo@0.x.x', null ]
npm verb cache add name=undefined spec="pkginfo@0.x.x" args=["pkginfo@0.x.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'pkginfo@0.x.x',
npm verb parsed url path: 'pkginfo@0.x.x',
npm verb parsed url href: 'pkginfo@0.x.x' }
npm verb cache add name="pkginfo" spec="0.x.x" args=["pkginfo","0.x.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.x.x',
npm verb parsed url path: '0.x.x',
npm verb parsed url href: '0.x.x' }
npm verb addNamed [ 'pkginfo', '0.x.x' ]
npm verb addNamed [ null, '>=0.0.0-0 <1.0.0-0' ]
npm sill lockFile 67f4d2cb-pkginfo-0-x-x pkginfo@0.x.x
npm verb lock pkginfo@0.x.x /Users/hamrickb/.npm/67f4d2cb-pkginfo-0-x-x.lock
npm verb cache add [ 'read@1.0.x', null ]
npm verb cache add name=undefined spec="read@1.0.x" args=["read@1.0.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'read@1.0.x',
npm verb parsed url path: 'read@1.0.x',
npm verb parsed url href: 'read@1.0.x' }
npm verb cache add name="read" spec="1.0.x" args=["read","1.0.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.0.x',
npm verb parsed url path: '1.0.x',
npm verb parsed url href: '1.0.x' }
npm verb addNamed [ 'read', '1.0.x' ]
npm verb addNamed [ null, '>=1.0.0-0 <1.1.0-0' ]
npm sill lockFile acd4039d-read-1-0-x read@1.0.x
npm verb lock read@1.0.x /Users/hamrickb/.npm/acd4039d-read-1-0-x.lock
npm verb cache add [ 'winston@0.6.x', null ]
npm verb cache add name=undefined spec="winston@0.6.x" args=["winston@0.6.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'winston@0.6.x',
npm verb parsed url path: 'winston@0.6.x',
npm verb parsed url href: 'winston@0.6.x' }
npm verb cache add name="winston" spec="0.6.x" args=["winston","0.6.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.6.x',
npm verb parsed url path: '0.6.x',
npm verb parsed url href: '0.6.x' }
npm verb addNamed [ 'winston', '0.6.x' ]
npm verb addNamed [ null, '>=0.6.0-0 <0.7.0-0' ]
npm sill lockFile e1f74e0f-winston-0-6-x winston@0.6.x
npm verb lock winston@0.6.x /Users/hamrickb/.npm/e1f74e0f-winston-0-6-x.lock
npm verb cache add [ 'revalidator@0.1.x', null ]
npm verb cache add name=undefined spec="revalidator@0.1.x" args=["revalidator@0.1.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'revalidator@0.1.x',
npm verb parsed url path: 'revalidator@0.1.x',
npm verb parsed url href: 'revalidator@0.1.x' }
npm verb cache add name="revalidator" spec="0.1.x" args=["revalidator","0.1.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.1.x',
npm verb parsed url path: '0.1.x',
npm verb parsed url href: '0.1.x' }
npm verb addNamed [ 'revalidator', '0.1.x' ]
npm verb addNamed [ null, '>=0.1.0-0 <0.2.0-0' ]
npm sill lockFile 0837132e-revalidator-0-1-x revalidator@0.1.x
npm verb lock revalidator@0.1.x /Users/hamrickb/.npm/0837132e-revalidator-0-1-x.lock
npm verb cache add [ 'utile@0.1.x', null ]
npm verb cache add name=undefined spec="utile@0.1.x" args=["utile@0.1.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'utile@0.1.x',
npm verb parsed url path: 'utile@0.1.x',
npm verb parsed url href: 'utile@0.1.x' }
npm verb cache add name="utile" spec="0.1.x" args=["utile","0.1.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.1.x',
npm verb parsed url path: '0.1.x',
npm verb parsed url href: '0.1.x' }
npm verb addNamed [ 'utile', '0.1.x' ]
npm verb addNamed [ null, '>=0.1.0-0 <0.2.0-0' ]
npm sill lockFile 67dcb77e-utile-0-1-x utile@0.1.x
npm verb lock utile@0.1.x /Users/hamrickb/.npm/67dcb77e-utile-0-1-x.lock
npm sill gunzTarPerm extractEntry Makefile
npm sill gunzTarPerm extractEntry .lint
npm sill addNameRange { name: 'pkginfo', range: '>=0.0.0-0 <1.0.0-0', hasData: false }
npm sill addNameRange { name: 'read', range: '>=1.0.0-0 <1.1.0-0', hasData: false }
npm sill addNameRange { name: 'winston', range: '>=0.6.0-0 <0.7.0-0', hasData: false }
npm sill addNameRange { name: 'revalidator',
npm sill addNameRange range: '>=0.1.0-0 <0.2.0-0',
npm sill addNameRange hasData: false }
npm sill addNameRange { name: 'utile', range: '>=0.1.0-0 <0.2.0-0', hasData: false }
npm sill gunzTarPerm extractEntry examples/favicon.ico
npm sill gunzTarPerm extractEntry examples/directory/server.js
npm sill gunzTarPerm extractEntry test/nodemailer.js
npm verb registry.get pkginfo not expired, no request
npm sill addNameRange number 2 { name: 'pkginfo', range: '>=0.0.0-0 <1.0.0-0', hasData: true }
npm sill addNameRange versions [ 'pkginfo', [ '0.2.1', '0.2.2', '0.2.3', '0.3.0' ] ]
npm verb addNamed [ 'pkginfo', '0.3.0' ]
npm verb addNamed [ '0.3.0', '0.3.0' ]
npm sill lockFile c6150d55-pkginfo-0-3-0 pkginfo@0.3.0
npm verb lock pkginfo@0.3.0 /Users/hamrickb/.npm/c6150d55-pkginfo-0-3-0.lock
npm verb registry.get read not expired, no request
npm sill addNameRange number 2 { name: 'read', range: '>=1.0.0-0 <1.1.0-0', hasData: true }
npm sill addNameRange versions [ 'read',
npm sill addNameRange [ '0.0.1',
npm sill addNameRange '0.0.2',
npm sill addNameRange '0.0.3',
npm sill addNameRange '0.1.0',
npm sill addNameRange '0.1.1',
npm sill addNameRange '1.0.0',
npm sill addNameRange '1.0.1',
npm sill addNameRange '1.0.2',
npm sill addNameRange '1.0.3',
npm sill addNameRange '1.0.4',
npm sill addNameRange '1.0.5' ] ]
npm verb addNamed [ 'read', '1.0.5' ]
npm verb addNamed [ '1.0.5', '1.0.5' ]
npm sill lockFile 4450a55a-read-1-0-5 read@1.0.5
npm verb lock read@1.0.5 /Users/hamrickb/.npm/4450a55a-read-1-0-5.lock
npm sill gunzTarPerm extractEntry lib/_base.js
npm sill gunzTarPerm extractEntry lib/index.js
npm verb registry.get revalidator not expired, no request
npm sill addNameRange number 2 { name: 'revalidator',
npm sill addNameRange range: '>=0.1.0-0 <0.2.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'revalidator',
npm sill addNameRange [ '0.1.0', '0.1.1', '0.1.2', '0.1.3', '0.1.5', '0.1.6' ] ]
npm verb addNamed [ 'revalidator', '0.1.6' ]
npm verb addNamed [ '0.1.6', '0.1.6' ]
npm sill lockFile e686e704-revalidator-0-1-6 revalidator@0.1.6
npm verb lock revalidator@0.1.6 /Users/hamrickb/.npm/e686e704-revalidator-0-1-6.lock
npm verb registry.get utile not expired, no request
npm sill addNameRange number 2 { name: 'utile', range: '>=0.1.0-0 <0.2.0-0', hasData: true }
npm sill addNameRange versions [ 'utile',
npm sill addNameRange [ '0.0.1',
npm sill addNameRange '0.0.2',
npm sill addNameRange '0.0.3',
npm sill addNameRange '0.0.4',
npm sill addNameRange '0.0.5',
npm sill addNameRange '0.0.6',
npm sill addNameRange '0.0.8',
npm sill addNameRange '0.0.9',
npm sill addNameRange '0.0.10',
npm sill addNameRange '0.1.0',
npm sill addNameRange '0.1.1',
npm sill addNameRange '0.1.2',
npm sill addNameRange '0.1.3',
npm sill addNameRange '0.1.5',
npm sill addNameRange '0.1.6',
npm sill addNameRange '0.1.7',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.2.1' ] ]
npm verb addNamed [ 'utile', '0.1.7' ]
npm verb addNamed [ '0.1.7', '0.1.7' ]
npm sill lockFile 78905450-utile-0-1-7 utile@0.1.7
npm verb lock utile@0.1.7 /Users/hamrickb/.npm/78905450-utile-0-1-7.lock
npm sill gunzTarPerm extractEntry lib/reserved.js
npm sill gunzTarPerm extractEntry lib/global.js
npm verb registry.get winston not expired, no request
npm sill addNameRange number 2 { name: 'winston', range: '>=0.6.0-0 <0.7.0-0', hasData: true }
npm sill addNameRange versions [ 'winston',
npm sill addNameRange [ '0.2.11',
npm sill addNameRange '0.3.3',
npm sill addNameRange '0.3.4',
npm sill addNameRange '0.3.5',
npm sill addNameRange '0.4.0',
npm sill addNameRange '0.4.1',
npm sill addNameRange '0.5.0',
npm sill addNameRange '0.5.1',
npm sill addNameRange '0.5.2',
npm sill addNameRange '0.5.3',
npm sill addNameRange '0.5.4',
npm sill addNameRange '0.5.5',
npm sill addNameRange '0.5.6',
npm sill addNameRange '0.5.7',
npm sill addNameRange '0.5.8',
npm sill addNameRange '0.5.9',
npm sill addNameRange '0.5.10',
npm sill addNameRange '0.5.11',
npm sill addNameRange '0.6.1',
npm sill addNameRange '0.6.2',
npm sill addNameRange '0.7.0',
npm sill addNameRange '0.7.1',
npm sill addNameRange '0.7.2' ] ]
npm verb addNamed [ 'winston', '0.6.2' ]
npm verb addNamed [ '0.6.2', '0.6.2' ]
npm sill lockFile 6b025e09-winston-0-6-2 winston@0.6.2
npm verb lock winston@0.6.2 /Users/hamrickb/.npm/6b025e09-winston-0-6-2.lock
npm sill gunzTarPerm extractEntry examples/directory/index.html
npm sill gunzTarPerm extractEntry examples/composer.json
npm sill gunzTarPerm extractEntry lib/primitive.js
npm sill gunzTarPerm extractEntry lib/regular.js
npm sill lockFile c6150d55-pkginfo-0-3-0 pkginfo@0.3.0
npm sill lockFile c6150d55-pkginfo-0-3-0 pkginfo@0.3.0
npm sill gunzTarPerm extractEntry examples/views/cms/pages.js
npm sill gunzTarPerm extractEntry examples/views/cms/server.js
npm sill lockFile 67f4d2cb-pkginfo-0-x-x pkginfo@0.x.x
npm sill lockFile 67f4d2cb-pkginfo-0-x-x pkginfo@0.x.x
npm sill lockFile a96e1992-ugins-manager-node-modules-async tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/async
npm sill lockFile a96e1992-ugins-manager-node-modules-async tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/async
npm sill lockFile b2330c15-ickb-npm-async-0-2-9-package-tgz tar:///Users/hamrickb/.npm/async/0.2.9/package.tgz
npm sill lockFile b2330c15-ickb-npm-async-0-2-9-package-tgz tar:///Users/hamrickb/.npm/async/0.2.9/package.tgz
npm sill gunzTarPerm extractEntry lib/ext/async.js
npm sill gunzTarPerm extractEntry lib/ext/dispose.js
npm sill gunzTarPerm extractEntry test/couch.js
npm sill gunzTarPerm extractEntry test/follow.js
npm sill gunzTarPerm extractEntry test/issues.js
npm sill gunzTarPerm extractEntry test/stream.js
npm sill gunzTarPerm extractEntry test/issues/10.js
npm sill lockFile 4450a55a-read-1-0-5 read@1.0.5
npm sill lockFile 4450a55a-read-1-0-5 read@1.0.5
npm sill lockFile acd4039d-read-1-0-x read@1.0.x
npm sill lockFile acd4039d-read-1-0-x read@1.0.x
npm info preinstall async@0.2.9
npm sill gunzTarPerm extractEntry examples/views/cms/_pages/.placeholder
npm sill gunzTarPerm extractEntry examples/views/cms/_pages/Test
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/async
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/async
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules' ]
npm info linkStuff async@0.2.9
npm verb linkBins async@0.2.9
npm verb linkMans async@0.2.9
npm verb rebuildBundles async@0.2.9
npm sill lockFile e686e704-revalidator-0-1-6 revalidator@0.1.6
npm sill lockFile e686e704-revalidator-0-1-6 revalidator@0.1.6
npm sill lockFile 78905450-utile-0-1-7 utile@0.1.7
npm sill lockFile 78905450-utile-0-1-7 utile@0.1.7
npm info install async@0.2.9
npm sill gunzTarPerm extractEntry lib/ext/max-age.js
npm sill gunzTarPerm extractEntry lib/ext/max.js
npm sill lockFile 0837132e-revalidator-0-1-x revalidator@0.1.x
npm sill lockFile 0837132e-revalidator-0-1-x revalidator@0.1.x
npm sill lockFile 67dcb77e-utile-0-1-x utile@0.1.x
npm sill lockFile 67dcb77e-utile-0-1-x utile@0.1.x
npm info postinstall async@0.2.9
npm sill gunzTarPerm extractEntry examples/views/cms/views/create.html
npm sill gunzTarPerm extractEntry examples/views/cms/views/edit.html
npm sill lockFile 6b025e09-winston-0-6-2 winston@0.6.2
npm sill lockFile 6b025e09-winston-0-6-2 winston@0.6.2
npm sill lockFile e1f74e0f-winston-0-6-x winston@0.6.x
npm sill lockFile e1f74e0f-winston-0-6-x winston@0.6.x
npm sill resolved [ { name: 'pkginfo',
npm sill resolved version: '0.3.0',
npm sill resolved description: 'An easy way to expose properties on a module from a package.json',
npm sill resolved author: { name: 'Charlie Robbins', email: 'charlie.robbins@gmail.com' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'http://github.com/indexzero/node-pkginfo.git' },
npm sill resolved keywords: [ 'info', 'tools', 'package.json' ],
npm sill resolved devDependencies: { vows: '0.7.x' },
npm sill resolved main: './lib/pkginfo',
npm sill resolved scripts: { test: 'vows test/*-test.js --spec' },
npm sill resolved engines: { node: '>= 0.4.0' },
npm sill resolved readme: '# node-pkginfo\n\nAn easy way to expose properties on a module from a package.json\n\n## Installation\n\n### Installing npm (node package manager)\n```\n curl http://npmjs.org/install.sh | sh\n```\n\n### Installing pkginfo\n```\n [sudo] npm install pkginfo\n```\n\n## Motivation\nHow often when writing node.js modules have you written the following line(s) of code? \n\n* Hard code your version string into your code\n\n``` js\n exports.version = \'0.1.0\';\n```\n\n* Programmatically expose the version from the package.json\n\n``` js\n exports.version = JSON.parse(fs.readFileSync(\'/path/to/package.json\', \'utf8\')).version;\n```\n\nIn other words, how often have you wanted to expose basic information from your package.json onto your module programmatically? **WELL NOW YOU CAN!**\n\n## Usage\n\nUsing `pkginfo` is idiot-proof, just require and invoke it. \n\n``` js\n var pkginfo = require(\'pkginfo\')(module);\n \n console.dir(module.exports);\n```\n\nBy invoking the `pkginfo` module all of the properties in your `package.json` file will be automatically exposed on the callee module (i.e. the parent module of `pkginfo`). \n\nHere\'s a sample of the output:\n\n```\n { name: \'simple-app\',\n description: \'A test fixture for pkginfo\',\n version: \'0.1.0\',\n author: \'Charlie Robbins <charlie.robbins@gmail.com>\',\n keywords: [ \'test\', \'fixture\' ],\n main: \'./index.js\',\n scripts: { test: \'vows test/*-test.js --spec\' },\n engines: { node: \'>= 0.4.0\' } }\n```\n\n### Expose specific properties\nIf you don\'t want to expose **all** properties on from your `package.json` on your module then simple pass those properties to the `pkginfo` function:\n\n``` js\n var pkginfo = require(\'pkginfo\')(module, \'version\', \'author\');\n \n console.dir(module.exports);\n```\n\n```\n { version: \'0.1.0\',\n author: \'Charlie Robbins <charlie.robbins@gmail.com>\' }\n```\n\nIf you\'re looking for further usage see the [examples][0] included in this repository. \n\n## Run Tests\nTests are written in [vows][1] and give complete coverage of all APIs.\n\n```\n vows test/*-test.js --spec\n```\n\n[0]: https://github.com/indexzero/node-pkginfo/tree/master/examples\n[1]: http://vowsjs.org\n\n#### Author: [Charlie Robbins](http://nodejitsu.com)\n#### License: MIT',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/indexzero/node-pkginfo/issues' },
npm sill resolved homepage: 'https://github.com/indexzero/node-pkginfo',
npm sill resolved _id: 'pkginfo@0.3.0',
npm sill resolved _from: 'pkginfo@0.x.x' },
npm sill resolved { name: 'read',
npm sill resolved version: '1.0.5',
npm sill resolved main: 'lib/read.js',
npm sill resolved dependencies: { 'mute-stream': '~0.0.4' },
npm sill resolved devDependencies: { tap: '*' },
npm sill resolved engines: { node: '>=0.8' },
npm sill resolved author:
npm sill resolved { name: 'Isaac Z. Schlueter',
npm sill resolved email: 'i@izs.me',
npm sill resolved url: 'http://blog.izs.me/' },
npm sill resolved description: 'read(1) for node programs',
npm sill resolved repository: { type: 'git', url: 'git://github.com/isaacs/read.git' },
npm sill resolved license: 'BSD',
npm sill resolved scripts: { test: 'tap test/*.js' },
npm sill resolved readme: '## read\n\nFor reading user input from stdin.\n\nSimilar to the `readline` builtin\'s `question()` method, but with a\nfew more features.\n\n## USAGE\n\n```javascript\nvar read = require("read")\nread(options, callback)\n```\n\nThe callback gets called with either the user input, or the default\nspecified, or an error, as `callback(error, result, isDefault)`\nnode style.\n\n## OPTIONS\n\nEvery option is optional.\n\n* `prompt` What to write to stdout before reading input.\n* `silent` Don\'t echo the output as the user types it.\n* `replace` Replace silenced characters with the supplied character value.\n* `timeout` Number of ms to wait for user input before giving up.\n* `default` The default value if the user enters nothing.\n* `edit` Allow the user to edit the default value.\n* `terminal` Treat the output as a TTY, whether it is or not.\n* `input` Readable stream to get input data from. (default `process.stdin`)\n* `output` Writeable stream to write prompts to. (default: `process.stdout`)\n\nIf silent is true, and the input is a TTY, then read will set raw\nmode, and read character by character.\n\n## COMPATIBILITY\n\nThis module works sort of with node 0.6. It does not work with node\nversions less than 0.6. It is best on node 0.8.\n\nOn node version 0.6, it will remove all listeners on the input\nstream\'s `data` and `keypress` events, because the readline module did\nnot fully clean up after itself in that version of node, and did not\nmake it possible to clean up after it in a way that has no potential\nfor side effects.\n\nAdditionally, some of the readline options (like `terminal`) will not\nfunction in versions of node before 0.8, because they were not\nimplemented in the builtin readline module.\n\n## CONTRIBUTING\n\nPatches welcome.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/isaacs/read/issues' },
npm sill resolved homepage: 'https://github.com/isaacs/read',
npm sill resolved _id: 'read@1.0.5',
npm sill resolved _from: 'read@1.0.x' },
npm sill resolved { name: 'revalidator',
npm sill resolved version: '0.1.6',
npm sill resolved description: 'A cross-browser / node.js validator used by resourceful',
npm sill resolved author: { name: 'Nodejitsu Inc.', email: 'info@nodejitsu.com' },
npm sill resolved maintainers: [ [Object], [Object] ],
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'http://github.com/flatiron/revalidator.git' },
npm sill resolved devDependencies: { vows: '0.7.0' },
npm sill resolved main: './lib/revalidator',
npm sill resolved scripts: { test: 'vows test/*-test.js --spec' },
npm sill resolved engines: { node: '>= 0.4.0' },
npm sill resolved readme: '# revalidator [![Build Status](https://secure.travis-ci.org/flatiron/revalidator.png)](http://travis-ci.org/flatiron/revalidator)\n\nA cross-browser / node.js validator used by resourceful and flatiron.\n\n## Example\nThe core of `revalidator` is simple and succinct: `revalidator.validate(obj, schema)`: \n \n``` js\n var revalidator = require(\'revalidator\');\n \n console.dir(revalidator.validate(someObject, {\n properties: {\n url: {\n description: \'the url the object should be stored at\',\n type: \'string\',\n pattern: \'^/[^#%&*{}\\\\:<>?\\/+]+$\',\n required: true\n },\n challenge: {\n description: \'a means of protecting data (insufficient for production, used as example)\',\n type: \'string\',\n minLength: 5\n },\n body: {\n description: \'what to store at the url\',\n type: \'any\',\n default: null\n }\n }\n }));\n```\n\nThis will return with a value indicating if the `obj` conforms to the `schema`. If it does not, a descriptive object will be returned containing the errors encountered with validation.\n\n``` js\n {\n valid: true // or false\n errors: [/* Array of errors if valid is false */]\n }\n```\n\nIn the browser, the validation function is exposed on `window.validate` by simply including `revalidator.js`.\n\n## Installation\n\n### Installing npm (node package manager)\n``` bash\n $ curl http://npmjs.org/install.sh | sh\n```\n\n### Installing revalidator\n``` bash \n $ [sudo] npm install revalidator\n```\n\n## Usage\n\n`revalidator` takes json-schema as input to validate objects.\n\n### revalidator.validate (obj, schema, options)\n\nThis will return with a value indicating if the `obj` conforms to the `schema`. If it does not, a descriptive object will be returned containing the errors encountered with validation.\n\n``` js\n{\n valid: true // or false\n errors: [/* Array of errors if valid is false */]\n}\n```\n\n#### Available Options\n\n* __validateFormats__: Enforce format constraints (_default true_)\n* __validateFormatsStrict__: When `validateFormats` is _true_ treat unrecognized formats as validation errors (_default false_)\n* __validateFormatExtensions__: When `validateFormats` is _true_ also validate formats defined in `validate.formatExtensions` (_default true_)\n* __cast__: Enforce casting of some types (for integers/numbers are only supported) when it\'s possible, e.g. `"42" => 42`, but `"forty2" => "forty2"` for the `integer` type.\n\n### Schema\nFor a property an `value` is that which is given as input for validation where as an `expected value` is the value of the below fields\n\n#### required\nIf true, the value should not be empty\n\n```js\n{ required: true }\n```\n\n#### type\nThe `type of value` should be equal to the expected value\n\n```js\n{ type: \'string\' }\n{ type: \'number\' }\n{ type: \'integer\' }\n{ type: \'array\' }\n{ type: \'boolean\' }\n{ type: \'object\' }\n{ type: \'null\' }\n{ type: \'any\' }\n{ type: [\'boolean\', \'string\'] }\n```\n\n#### pattern\nThe expected value regex needs to be satisfied by the value\n\n```js\n{ pattern: /^[a-z]+$/ }\n```\n\n#### maxLength\nThe length of value must be greater than or equal to expected value\n\n```js\n{ maxLength: 8 }\n```\n\n#### minLength\nThe length of value must be lesser than or equal to expected value\n\n```js\n{ minLength: 8 }\n```\n\n#### minimum\nValue must be greater than or equal to the expected value\n\n```js\n{ minimum: 10 }\n```\n\n#### maximum\nValue must be lesser than or equal to the expected value\n\n```js\n{ maximum: 10 }\n```\n\n#### exclusiveMinimum\nValue must be greater than expected value\n\n```js\n{ exclusiveMinimum: 9 }\n```\n\n### exclusiveMaximum\nValue must be lesser than expected value\n\n```js\n{ exclusiveMaximum: 11 }\n```\n\n#### divisibleBy\nValue must be divisible by expected value\n\n```js\n{ divisibleBy: 5 }\n{ divisibleBy: 0.5 }\n```\n\n#### minItems\nValue must contain more then expected value number of items\n\n```js\n{ minItems: 2 }\n```\n\n#### maxItems\nValue must contains less then expected value number of items\n\n```js\n{ maxItems: 5 }\n```\n\n#### uniqueItems\nValue must hold a unique set of values\n\n```js\n{ uniqueItems: true }\n```\n\n#### enum\nValue must be present in the array of expected value\n\n```js\n{ enum: [\'month\', \'year\'] }\n```\n\n#### format\nValue must be a valid format\n\n```js\n{ format: \'url\' }\n{ format: \'email\' }\n{ format: \'ip-address\' }\n{ format: \'ipv6\' }\n{ format: \'date-time\' }\n{ format: \'date\' }\n{ format: \'time\' }\n{ format: \'color\' }\n{ format: \'host-name\' }\n{ format: \'utc-millisec\' }\n{ format: \'regex\' }\n```\n\n#### conform\nValue must conform to constraint denoted by expected value\n\n```js\n{ conform: function (v) {\n if (v%3==1) return true;\n return false;\n }\n}\n```\n\n#### dependencies\nValue is valid only if the dependent value is valid\n\n```js\n{\n town: { required: true, dependencies: \'country\' },\n country: { maxLength: 3, required: true }\n}\n```\n\n### Nested Schema\nWe also allow nested schema\n\n```js\n{\n properties: {\n title: {\n type: \'string\',\n maxLength: 140,\n required: true\n },\n author: {\n type: \'object\',\n required: true,\n properties: {\n name: {\n type: \'string\',\n required: true\n },\n email: {\n type: \'string\',\n format: \'email\'\n }\n }\n }\n }\n}\n```\n\n### Custom Messages\nWe also allow custom message for different constraints\n\n```js\n{\n type: \'string\',\n format: \'url\'\n messages: {\n type: \'Not a string type\',\n format: \'Expected format is a url\'\n }\n```\n\n```js\n{\n conform: function () { ... },\n message: \'This can be used as a global message\'\n}\n```\n\n## Tests\nAll tests are written with [vows][0] and should be run with [npm][1]:\n\n``` bash\n $ npm test\n```\n\n#### Author: [Charlie Robbins](http://nodejitsu.com), [Alexis Sellier](http://cloudhead.io)\n#### Contributors: [Fedor Indutny](http://github.com/indutny), [Bradley Meck](http://github.com/bmeck), [Laurie Harper](http://laurie.holoweb.net/)\n#### License: Apache 2.0\n\n[0]: http://vowsjs.org\n[1]: http://npmjs.org\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/flatiron/revalidator/issues' },
npm sill resolved homepage: 'https://github.com/flatiron/revalidator',
npm sill resolved _id: 'revalidator@0.1.6',
npm sill resolved _from: 'revalidator@0.1.x' },
npm sill resolved { name: 'utile',
npm sill resolved description: 'A drop-in replacement for `util` with some additional advantageous functions',
npm sill resolved version: '0.1.7',
npm sill resolved author: { name: 'Nodejitsu Inc.', email: 'info@nodejitsu.com' },
npm sill resolved maintainers: [ [Object] ],
npm sill resolved repository: { type: 'git', url: 'http://github.com/flatiron/utile.git' },
npm sill resolved dependencies:
npm sill resolved { async: '0.1.x',
npm sill resolved 'deep-equal': '*',
npm sill resolved i: '0.3.x',
npm sill resolved mkdirp: '0.x.x',
npm sill resolved ncp: '0.2.x',
npm sill resolved rimraf: '1.x.x' },
npm sill resolved devDependencies: { vows: '0.6.x' },
npm sill resolved scripts: { test: 'vows --spec' },
npm sill resolved main: './lib/index',
npm sill resolved engines: { node: '>= 0.6.4' },
npm sill resolved readme: '# utile [![Build Status](https://secure.travis-ci.org/flatiron/utile.png)](http://travis-ci.org/flatiron/utile)\n\nA drop-in replacement for `util` with some additional advantageous functions\n\n## Motivation\nJavascript is definitely a "batteries not included language" when compared to languages like Ruby or Python. Node.js has a simple utility library which exposes some basic (but important) functionality:\n\n```\n$ node\n> var util = require(\'util\');\n> util.\n(...)\n\nutil.debug util.error util.exec util.inherits util.inspect\nutil.log util.p util.print util.pump util.puts\n```\n\nWhen one considers their own utility library, why ever bother requiring `util` again? That is the approach taken by this module. To compare:\n\n```\n$ node\n> var utile = require(\'./lib\')\n> utile.\n(...)\n\nutile.async utile.capitalize utile.clone utile.cpr utile.createPath utile.debug\nutile.each utile.error utile.exec utile.file utile.filter utile.find\nutile.inherits utile.log utile.mixin utile.mkdirp utile.p utile.path\nutile.print utile.pump utile.puts utile.randomString utile.requireDir uile.requireDirLazy\nutile.rimraf\n```\n\nAs you can see all of the original methods from `util` are there, but there are several new methods specific to `utile`. A note about implementation: _no node.js native modules are modified by utile, it simply copies those methods._\n\n## Methods\nThe `utile` modules exposes some simple utility methods:\n\n* `.each(obj, iterator)`: Iterate over the keys of an object.\n* `.mixin(target [source0, source1, ...])`: Copies enumerable properties from `source0 ... sourceN` onto `target` and returns the resulting object.\n* `.clone(obj)`: Shallow clones the specified object.\n* `.capitalize(str)`: Capitalizes the specified `str`.\n* `.randomString(length)`: randomString returns a pseudo-random ASCII string (subset) the return value is a string of length ⌈bits/6⌉ of characters from the base64 alphabet.\n* `.filter(obj, test)`: return an object with the properties that `test` returns true on.\n* `.args(arguments)`: Converts function arguments into actual array with special `callback`, `cb`, `array`, and `last` properties. Also supports *optional* argument contracts. See [the example](https://github.com/flatiron/utile/blob/master/examples/utile-args.js) for more details.\n* `.requireDir(directory)`: Requires all files and directories from `directory`, returning an object with keys being filenames (without trailing `.js`) and respective values being return values of `require(filename)`.\n* `.requireDirLazy(directory)`: Lazily requires all files and directories from `directory`, returning an object with keys being filenames (without trailing `.js`) and respective values (getters) being return values of `require(filename)`.\n* `.format([string] text, [array] formats, [array] replacements)`: Replace `formats` in `text` with `replacements`. This will fall back to the original `util.format` command if it is called improperly.\n\n## Packaged Dependencies\nIn addition to the methods that are built-in, utile includes a number of commonly used dependencies to reduce the number of includes in your package.json. These modules _are not eagerly loaded to be respectful of startup time,_ but instead are lazy-loaded getters on the `utile` object\n\n* `.async`: [Async utilities for node and the browser][0]\n* `.inflect`: [Customizable inflections for node.js][6]\n* `.mkdirp`: [Recursively mkdir, like mkdir -p, but in node.js][1]\n* `.rimraf`: [A rm -rf util for nodejs][2]\n* `.cpr`: [Asynchronous recursive file copying with Node.js][3]\n\n## Installation\n\n### Installing npm (node package manager)\n```\n curl http://npmjs.org/install.sh | sh\n```\n\n### Installing utile\n```\n [sudo] npm install utile\n```\n\n## Tests\nAll tests are written with [vows][4] and should be run with [npm][5]:\n\n``` bash\n $ npm test\n```\n\n#### Author: [Nodejitsu Inc.](http://www.nodejitsu.com)\n#### Contributors: [Charlie Robbins](http://github.com/indexzero), [Dominic Tarr](http://github.com/dominictarr)\n#### License: MIT\n\n[0]: https://github.com/caolan/async\n[1]: https://github.com/substack/node-mkdirp\n[2]: https://github.com/isaacs/rimraf\n[3]: https://github.com/avianflu/ncp\n[4]: https://vowsjs.org\n[5]: https://npmjs.org\n[6]: https://github.com/pksunkara/inflect\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/flatiron/utile/issues' },
npm sill resolved homepage: 'https://github.com/flatiron/utile',
npm sill resolved _id: 'utile@0.1.7',
npm sill resolved _from: 'utile@0.1.x' },
npm sill resolved { name: 'winston',
npm sill resolved description: 'A multi-transport async logging library for Node.js',
npm sill resolved version: '0.6.2',
npm sill resolved author: { name: 'Nodejitsu Inc.', email: 'info@nodejitsu.com' },
npm sill resolved maintainers: [ [Object] ],
npm sill resolved repository: { type: 'git', url: 'https://github.com/flatiron/winston.git' },
npm sill resolved keywords: [ 'logging', 'sysadmin', 'tools' ],
npm sill resolved dependencies:
npm sill resolved { async: '0.1.x',
npm sill resolved colors: '0.x.x',
npm sill resolved cycle: '1.0.x',
npm sill resolved eyes: '0.1.x',
npm sill resolved pkginfo: '0.2.x',
npm sill resolved request: '2.9.x',
npm sill resolved 'stack-trace': '0.0.x' },
npm sill resolved devDependencies: { vows: '0.6.x' },
npm sill resolved main: './lib/winston',
npm sill resolved scripts: { test: 'vows --spec --isolate' },
npm sill resolved engines: { node: '>= 0.4.0' },
npm sill resolved readme: '# winston [![Build Status](https://secure.travis-ci.org/flatiron/winston.png)](http://travis-ci.org/flatiron/winston)\n\nA multi-transport async logging library for node.js. <span style="font-size:28px; font-weight:bold;">&quot;CHILL WINSTON! ... I put it in the logs.&quot;</span>\n\n## Motivation\nWinston is designed to be a simple and universal logging library with support for multiple transports. A transport is essentially a storage device for your logs. Each instance of a winston logger can have multiple transports configured at different levels. For example, one may want error logs to be stored in a persistent remote location (like a database), but all logs output to the console or a local file.\n\nThere also seemed to be a lot of logging libraries out there that coupled their implementation of logging (i.e. how the logs are stored / indexed) to the API that they exposed to the programmer. This library aims to decouple those parts of the process to make it more flexible and extensible.\n\n## Usage\nThere are two different ways to use winston: directly via the default logger, or by instantiating your own Logger. The former is merely intended to be a convenient shared logger to use throughout your application if you so choose.\n\n* [Logging](#logging)\n * [Using the Default Logger](#using-the-default-logger)\n * [Instantiating your own Logger](#instantiating-your-own-logger)\n * [Logging with Metadata](#logging-with-metadata)\n* [Transports](https://github.com/flatiron/winston/blob/master/docs/transports.md)\n* [Profiling](#profiling)\n* [Streaming Logs](#streaming-logs)\n* [Querying Logs](#querying-logs) \n* [Exceptions](#exceptions)\n * [Handling Uncaught Exceptions with winston](#handling-uncaught-exceptions-with-winston)\n * [To Exit or Not to Exit](#to-exit-or-not-to-exit)\n* [Logging Levels](#logging-levels)\n * [Using Logging Levels](#using-logging-levels)\n * [Using Custom Logging Levels](#using-custom-logging-levels)\n* [Further Reading](#further-reading)\n * [Events and Callbacks in Winston](#events-and-callbacks-in-winston)\n * [Working with multiple Loggers in winston](#working-with-multiple-loggers-in-winston)\n * [Using winston in a CLI tool](#using-winston-in-a-cli-tool)\n * [Extending another object with Logging](#extending-another-object-with-logging)\n * [Adding Custom Transports](#adding-custom-transports)\n\n## Logging\n\n### Using the Default Logger\nThe default logger is accessible through the winston module directly. Any method that you could call on an instance of a logger is available on the default logger:\n\n``` js\n var winston = require(\'winston\');\n\n winston.log(\'info\', \'Hello distributed log files!\');\n winston.info(\'Hello again distributed logs\');\n```\n\nBy default, only the Console transport is set on the default logger. You can add or remove transports via the add() and remove() methods:\n\n``` js\n winston.add(winston.transports.File, { filename: \'somefile.log\' });\n winston.remove(winston.transports.Console);\n```\n\nFor more documenation about working with each individual transport supported by Winston see the "Working with Transports" section below.\n\n### Instantiating your own Logger\nIf you would prefer to manage the object lifetime of loggers you are free to instantiate them yourself:\n\n``` js\n var logger = new (winston.Logger)({\n transports: [\n new (winston.transports.Console)(),\n new (winston.transports.File)({ filename: \'somefile.log\' })\n ]\n });\n```\n\nYou can work with this logger in the same way that you work with the default logger:\n\n``` js\n //\n // Logging\n //\n logger.log(\'info\', \'Hello distributed log files!\');\n logger.info(\'Hello again distributed logs\');\n\n //\n // Adding / Removing Transports\n // (Yes It\'s chainable)\n //\n logger.add(winston.transports.File)\n .remove(winston.transports.Console);\n```\n\n### Logging with Metadata\nIn addition to logging string messages, winston will also optionally log additional JSON metadata objects. Adding metadata is simple:\n\n``` js\n winston.log(\'info\', \'Test Log Message\', { anything: \'This is metadata\' });\n```\n\nThe way these objects is stored varies from transport to transport (to best support the storage mechanisms offered). Here\'s a quick summary of how each transports handles metadata:\n\n1. __Console:__ Logged via util.inspect(meta)\n2. __File:__ Logged via util.inspect(meta)\n\n## Profiling\nIn addition to logging messages and metadata, winston also has a simple profiling mechanism implemented for any logger:\n\n``` js\n //\n // Start profile of \'test\'\n // Remark: Consider using Date.now() with async operations\n //\n winston.profile(\'test\');\n\n setTimeout(function () {\n //\n // Stop profile of \'test\'. Logging will now take place:\n // "17 Jan 21:00:00 - info: test duration=1000ms"\n //\n winston.profile(\'test\');\n }, 1000);\n```\n\nAll profile messages are set to the \'info\' by default and both message and metadata are optional There are no plans in the Roadmap to make this configurable, but I\'m open to suggestions / issues.\n\n\n## Querying Logs\nWinston supports querying of logs with Loggly-like options.\nSpecifically: `File`, `Couchdb`, `Redis`, `Loggly`, `Nssocket`, and `Http`.\n\n``` js\n var options = {\n from: new Date - 24 * 60 * 60 * 1000,\n until: new Date\n };\n\n //\n // Find items logged between today and yesterday.\n //\n winston.query(options, function (err, results) {\n if (err) {\n throw err;\n }\n \n console.log(results);\n });\n```\n\n## Streaming Logs\nStreaming allows you to stream your logs back from your chosen transport.\n\n``` js\n //\n // Start at the end.\n //\n winston.stream({ start: -1 }).on(\'log\', function(log) {\n console.log(log);\n });\n```\n\n## Exceptions\n\n### Handling Uncaught Exceptions with winston\n\nWith `winston`, it is possible to catch and log `uncaughtException` events from your process. There are two distinct ways of enabling this functionality either through the default winston logger or your own logger instance.\n\nIf you want to use this feature with the default logger simply call `.handleExceptions()` with a transport instance.\n\n``` js\n //\n // You can add a separate exception logger by passing it to `.handleExceptions`\n //\n winston.handleExceptions(new winston.transports.File({ filename: \'path/to/exceptions.log\' }))\n\n //\n // Alternatively you can set `.handleExceptions` to true when adding transports to winston\n //\n winston.add(winston.transports.File, {\n filename: \'path/to/all-logs.log\',\n handleExceptions: true\n });\n```\n\n### To Exit or Not to Exit\n\nby default, winston will exit after logging an uncaughtException. if this is not the behavior you want,\nset `exitOnError = false`\n\n``` js\n var logger = new (winston.Logger)({ exitOnError: false });\n\n //\n // or, like this:\n //\n logger.exitOnError = false;\n```\n\nWhen working with custom logger instances, you can pass in separate transports to the `exceptionHandlers` property or set `.handleExceptions` on any transport.\n\nExample 1\n\n``` js\n var logger = new (winston.Logger)({\n transports: [\n new winston.transports.File({ filename: \'path/to/all-logs.log\' })\n ]\n exceptionHandlers: [\n new winston.transports.File({ filename: \'path/to/exceptions.log\' })\n ]\n });\n```\n\nExample 2\n\n```\nvar logger = new winston.Logger({\n transports: [\n new winston.transports.Console({\n handleExceptions: true,\n json: true\n })\n ],\n exitOnError: false\n});\n```\n\nThe `exitOnError` option can also be a function to prevent exit on only certain types of errors:\n\n``` js\n function ignoreEpipe(err) {\n return err.code !== \'EPIPE\';\n }\n\n var logger = new (winston.Logger)({ exitOnError: ignoreEpipe });\n\n //\n // or, like this:\n //\n logger.exitOnError = ignoreEpipe;\n```\n\n## Logging Levels\n\n### Using Logging Levels\nSetting the level for your logging message can be accomplished in one of two ways. You can pass a string representing the logging level to the log() method or use the level specified methods defined on every winston Logger.\n\n``` js\n //\n // Any logger instance\n //\n logger.log(\'info\', "127.0.0.1 - there\'s no place like home");\n logger.log(\'warn\', "127.0.0.1 - there\'s no place like home");\n logger.log(\'error\', "127.0.0.1 - there\'s no place like home");\n logger.info("127.0.0.1 - there\'s no place like home");\n logger.warn("127.0.0.1 - there\'s no place like home");\n logger.error("127.0.0.1 - there\'s no place like home");\n\n //\n // Default logger\n //\n winston.log(\'info\', "127.0.0.1 - there\'s no place like home");\n winston.info("127.0.0.1 - there\'s no place like home");\n```\n\nWinston allows you to set a `level` on each transport that specifies the level of messages this transport should log. For example, you could log only errors to the console, with the full logs in a file:\n\n``` js\n var logger = new (winston.Logger)({\n transports: [\n new (winston.transports.Console)({ level: \'error\' }),\n new (winston.transports.File)({ filename: \'somefile.log\' })\n ]\n });\n```\n\nAs of 0.2.0, winston supports customizable logging levels, defaulting to [npm][0] style logging levels. Changing logging levels is easy:\n\n``` js\n //\n // Change levels on the default winston logger\n //\n winston.setLevels(winston.config.syslog.levels);\n\n //\n // Change levels on an instance of a logger\n //\n logger.setLevels(winston.config.syslog.levels);\n```\n\nCalling `.setLevels` on a logger will remove all of the previous helper methods for the old levels and define helper methods for the new levels. Thus, you should be careful about the logging statements you use when changing levels. For example, if you ran this code after changing to the syslog levels:\n\n``` js\n //\n // Logger does not have \'silly\' defined since that level is not in the syslog levels\n //\n logger.silly(\'some silly message\');\n```\n\n### Using Custom Logging Levels\nIn addition to the predefined `npm` and `syslog` levels available in Winston, you can also choose to define your own:\n\n``` js\n var myCustomLevels = {\n levels: {\n foo: 0,\n bar: 1,\n baz: 2,\n foobar: 3\n },\n colors: {\n foo: \'blue\',\n bar: \'green\',\n baz: \'yellow\',\n foobar: \'red\'\n }\n };\n\n var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels });\n customLevelLogger.foobar(\'some foobar level-ed message\');\n```\n\nAlthough there is slight repetition in this data structure, it enables simple encapsulation if you not to have colors. If you do wish to have colors, in addition to passing the levels to the Logger itself, you must make winston aware of them:\n\n``` js\n //\n // Make winston aware of these colors\n //\n winston.addColors(myCustomLevels.colors);\n```\n\nThis enables transports with the \'colorize\' option set to appropriately color the output of custom levels.\n\n## Further Reading\n\n### Events and Callbacks in Winston\nEach instance of winston.Logger is also an instance of an [EventEmitter][1]. A log event will be raised each time a transport successfully logs a message:\n\n``` js\n logger.on(\'logging\', function (transport, level, msg, meta) {\n // [msg] and [meta] have now been logged at [level] to [transport]\n });\n\n logger.info(\'CHILL WINSTON!\', { seriously: true });\n```\n\nIt is also worth mentioning that the logger also emits an \'error\' event which you should handle or suppress if you don\'t want unhandled exceptions:\n\n``` js\n //\n // Handle errors\n //\n logger.on(\'error\', function (err) { /* Do Something */ });\n\n //\n // Or just suppress them.\n //\n logger.emitErrs = false;\n```\n\nEvery logging method described in the previous section also takes an optional callback which will be called only when all of the transports have logged the specified message.\n\n``` js\n logger.info(\'CHILL WINSTON!\', { seriously: true }, function (err, level, msg, meta) {\n // [msg] and [meta] have now been logged at [level] to **every** transport.\n });\n```\n\n### Working with multiple Loggers in winston\n\nOften in larger, more complex applications it is necessary to have multiple logger instances with different settings. Each logger is responsible for a different feature area (or category). This is exposed in `winston` in two ways: through `winston.loggers` and instances of `winston.Container`. In fact, `winston.loggers` is just a predefined instance of `winston.Container`:\n\n``` js\n var winston = require(\'winston\');\n\n //\n // Configure the logger for `category1`\n //\n winston.loggers.add(\'category1\', {\n console: {\n level: \'silly\',\n colorize: \'true\'\n },\n file: {\n filename: \'/path/to/some/file\'\n }\n });\n\n //\n // Configure the logger for `category2`\n //\n winston.loggers.add(\'category2\', {\n couchdb: {\n host: \'127.0.0.1\',\n port: 5984\n }\n });\n```\n\nNow that your loggers are setup you can require winston _in any file in your application_ and access these pre-configured loggers:\n\n``` js\n var winston = require(\'winston\');\n\n //\n // Grab your preconfigured logger\n //\n var category1 = winston.loggers.get(\'category1\');\n\n category1.info(\'logging from your IoC container-based logger\');\n```\n\nIf you prefer to manage the `Container` yourself you can simply instantiate one:\n\n``` js\n var winston = require(\'winston\'),\n container = new winston.Container();\n\n container.add(\'category1\', {\n console: {\n level: \'silly\',\n colorize: \'true\'\n },\n file: {\n filename: \'/path/to/some/file\'\n }\n });\n```\n\n### Sharing transports between Loggers in winston\n\n``` js\n var winston = require(\'winston\');\n\n //\n // Setup transports to be shared across all loggers\n // in three ways:\n //\n // 1. By setting it on the default Container\n // 2. By passing `transports` into the constructor function of winston.Container\n // 3. By passing `transports` into the `.get()` or `.add()` methods\n //\n\n //\n // 1. By setting it on the default Container\n //\n winston.loggers.options.transports = [\n // Setup your shared transports here\n ];\n\n //\n // 2. By passing `transports` into the constructor function of winston.Container\n //\n var container = new winston.Container({\n transports: [\n // Setup your shared transports here\n ]\n });\n\n //\n // 3. By passing `transports` into the `.get()` or `.add()` methods\n //\n winston.loggers.add(\'some-category\', {\n transports: [\n // Setup your shared transports here\n ]\n });\n\n container.add(\'some-category\', {\n transports: [\n // Setup your shared transports here\n ]\n });\n```\n\n### Using winston in a CLI tool\nA common use-case for logging is output to a CLI tool. Winston has a special helper method which will pretty print output from your CLI tool. Here\'s an example from the [require-analyzer][2] written by [Nodejitsu][3]:\n\n```\n info: require-analyzer starting in /Users/Charlie/Nodejitsu/require-analyzer\n info: Found existing dependencies\n data: {\n data: colors: \'0.x.x\',\n data: eyes: \'0.1.x\',\n data: findit: \'0.0.x\',\n data: npm: \'1.0.x\',\n data: optimist: \'0.2.x\',\n data: semver: \'1.0.x\',\n data: winston: \'0.2.x\'\n data: }\n info: Analyzing dependencies...\n info: Done analyzing raw dependencies\n info: Retrieved packages from npm\n warn: No additional dependencies found\n```\n\nConfiguring output for this style is easy, just use the `.cli()` method on `winston` or an instance of `winston.Logger`:\n\n``` js\n var winston = require(\'winston\');\n\n //\n // Configure CLI output on the default logger\n //\n winston.cli();\n\n //\n // Configure CLI on an instance of winston.Logger\n //\n var logger = new winston.Logger({\n transports: [\n new (winston.transports.Console)()\n ]\n });\n\n logger.cli();\n```\n\n### Extending another object with Logging\nOften in a given code base with lots of Loggers it is useful to add logging methods a different object so that these methods can be called with less syntax. Winston exposes this functionality via the \'extend\' method:\n\n``` js\n var myObject = {};\n\n logger.extend(myObject);\n\n //\n // You can now call logger methods on \'myObject\'\n //\n myObject.info(\'127.0.0.1 - there\'s no place like home\');\n```\n\n## Working with Transports\nRight now there are four transports supported by winston core. If you have a transport you would like to add either open an issue or fork and submit a pull request. Commits are welcome, but I\'ll give you extra street cred if you __add tests too :D__\n \n1. __Console:__ Output to the terminal\n2. __Files:__ Append to a file\n3. __Loggly:__ Log to Logging-as-a-Service platform Loggly\n\n### Console Transport\n``` js\n winston.add(winston.transports.Console, options)\n```\n\nThe Console transport takes two simple options:\n\n* __level:__ Level of messages that this transport should log (default \'info\').\n* __silent:__ Boolean flag indicating whether to suppress output (default false).\n* __colorize:__ Boolean flag indicating if we should colorize output (default false).\n* __timestamp:__ Boolean flag indicating if we should prepend output with timestamps (default false). If function is specified, its return value will be used instead of timestamps.\n\n*Metadata:* Logged via util.inspect(meta);\n\n### File Transport\n``` js\n winston.add(winston.transports.File, options)\n```\n\nThe File transport should really be the \'Stream\' transport since it will accept any [WritableStream][14]. It is named such because it will also accept filenames via the \'filename\' option:\n\n* __level:__ Level of messages that this transport should log.\n* __silent:__ Boolean flag indicating whether to suppress output.\n* __colorize:__ Boolean flag indicating if we should colorize output.\n* __timestamp:__ Boolean flag indicating if we should prepend output with timestamps (default true). If function is specified, its return value will be used instead of timestamps.\n* __filename:__ The filename of the logfile to write output to.\n* __maxsize:__ Max size in bytes of the logfile, if the size is exceeded then a new file is created.\n* __maxFiles:__ Limit the number of files created when the size of the logfile is exceeded.\n* __stream:__ The WriteableStream to write output to.\n* __json:__ If true, messages will be logged as JSON (default true).\n\n*Metadata:* Logged via util.inspect(meta);\n\n### Loggly Transport\n``` js\n var Loggly = require(\'winston-loggly\').Loggly\n winston.add(Loggly, options);\n```\n\nThe Loggly transport is based on [Nodejitsu\'s][5] [node-loggly][6] implementation of the [Loggly][7] API. If you haven\'t heard of Loggly before, you should probably read their [value proposition][8]. The Loggly transport takes the following options. Either \'inputToken\' or \'inputName\' is required:\n\n* __level:__ Level of messages that this transport should log. \n* __subdomain:__ The subdomain of your Loggly account. *[required]*\n* __auth__: The authentication information for your Loggly account. *[required with inputName]*\n* __inputName:__ The name of the input this instance should log to.\n* __inputToken:__ The input token of the input this instance should log to.\n* __json:__ If true, messages will be sent to Loggly as JSON.\n\n*Metadata:* Logged in suggested [Loggly format][2]\n\n### Riak Transport\nAs of `0.3.0` the Riak transport has been broken out into a new module: [winston-riak][17]. Using it is just as easy:\n\n``` js\n var Riak = require(\'winston-riak\').Riak;\n winston.add(Riak, options);\n```\n\nIn addition to the options accepted by the [riak-js][3] [client][4], the Riak transport also accepts the following options. It is worth noting that the riak-js debug option is set to *false* by default:\n\n* __level:__ Level of messages that this transport should log.\n* __bucket:__ The name of the Riak bucket you wish your logs to be in or a function to generate bucket names dynamically.\n\n``` js\n // Use a single bucket for all your logs\n var singleBucketTransport = new (Riak)({ bucket: \'some-logs-go-here\' });\n \n // Generate a dynamic bucket based on the date and level\n var dynamicBucketTransport = new (Riak)({\n bucket: function (level, msg, meta, now) {\n var d = new Date(now);\n return level + [d.getDate(), d.getMonth(), d.getFullYear()].join(\'-\');\n }\n });\n```\n\n*Metadata:* Logged as JSON literal in Riak\n\n### MongoDB Transport\nAs of `0.3.0` the MongoDB transport has been broken out into a new module: [winston-mongodb][16]. Using it is just as easy:\n\n``` js\n var MongoDB = require(\'winston-mongodb\').MongoDB;\n winston.add(MongoDB, options);\n```\n\nThe MongoDB transport takes the following options. \'db\' is required:\n\n* __level:__ Level of messages that this transport should log. \n* __silent:__ Boolean flag indicating whether to suppress output.\n* __db:__ The name of the database you want to log to. *[required]*\n* __collection__: The name of the collection you want to store log messages in, defaults to \'log\'.\n* __safe:__ Boolean indicating if you want eventual consistency on your log messages, if set to true it requires an extra round trip to the server to ensure the write was committed, defaults to true.\n* __host:__ The host running MongoDB, defaults to localhost.\n* __port:__ The port on the host that MongoDB is running on, defaults to MongoDB\'s default port.\n\n*Metadata:* Logged as a native JSON object.\n\n### SimpleDB Transport\n\nThe [winston-simpledb][18] transport is just as easy:\n\n``` js\n var SimpleDB = require(\'winston-simpledb\').SimpleDB;\n winston.add(SimpleDB, options);\n```\n\nThe SimpleDB transport takes the following options. All items marked with an asterisk are required:\n\n* __awsAccessKey__:* your AWS Access Key\n* __secretAccessKey__:* your AWS Secret Access Key\n* __awsAccountId__:* your AWS Account Id\n* __domainName__:* a string or function that returns the domain name to log to\n* __region__:* the region your domain resides in\n* __itemName__: a string (\'uuid\', \'epoch\', \'timestamp\') or function that returns the item name to log\n\n*Metadata:* Logged as a native JSON object to the \'meta\' attribute of the item.\n\n### Mail Transport\n\nThe [winston-mail][19] is an email transport:\n\n``` js\n var Mail = require(\'winston-mail\').Mail;\n winston.add(Mail, options);\n```\n\nThe Mail transport uses [emailjs](https://github.com/eleith/emailjs) behind the scenes. Options are the following:\n\n* __to:__ The address(es) you want to send to. *[required]*\n* __from:__ The address you want to send from. (default: `winston@[server-host-name]`)\n* __host:__ SMTP server hostname (default: localhost)\n* __port:__ SMTP port (default: 587 or 25)\n* __username__ User for server auth\n* __password__ Password for server auth\n* __ssl:__ Use SSL (boolean or object { key, ca, cert })\n* __tls:__ Boolean (if true, use starttls)\n* __level:__ Level of messages that this transport should log. \n* __silent:__ Boolean flag indicating whether to suppress output.\n\n*Metadata:* Stringified as JSON in email.\n\n### Amazon SNS (Simple Notification System) Transport\n\nThe [winston-sns][21] transport uses amazon SNS to send emails, texts, or a bunch of other notifications.\n\n``` js\n require(\'winston-sns\').SNS;\n winston.add(winston.transports.SNS, options);\n```\n\nOptions:\n\n* __aws_key:__ Your Amazon Web Services Key. *[required]*\n* __aws_secret:__ Your Amazon Web Services Secret. *[required]*\n* __subscriber:__ Subscriber number - found in your SNS AWS Console, after clicking on a topic. Same as AWS Account ID. *[required]*\n* __topic_arn:__ Also found in SNS AWS Console - listed under a topic as Topic ARN. *[required]*\n* __region:__ AWS Region to use. Can be one of: `us-east-1`,`us-west-1`,`eu-west-1`,`ap-southeast-1`,`ap-northeast-1`,`us-gov-west-1`,`sa-east-1`. (default: `us-east-1`)\n* __subject:__ Subject for notifications. (default: "Winston Error Report")\n* __message:__ Message of notifications. Uses placeholders for level (%l), error message (%e), and metadata (%m). (default: "Level \'%l\' Error:\\n%e\\n\\nMetadata:\\n%m")\n* __level:__ lowest level this transport will log. (default: `info`)\n\n### Graylog2 Transport\n\n[winston-graylog2][22] is a Graylog2 transport:\n\n``` js\n var Graylog2 = require(\'winston-graylog2\').Graylog2;\n winston.add(Graylog2, options);\n```\n\nThe Graylog2 transport connects to a Graylog2 server over UDP using the following options:\n\n* __level:__ Level of messages this transport should log. (default: info)\n* __silent:__ Boolean flag indicating whether to suppress output. (default: false)\n\n* __graylogHost:__ IP address or hostname of the graylog2 server. (default: localhost)\n* __graylogPort:__ Port to send messages to on the graylog2 server. (default: 12201)\n* __graylogHostname:__ The hostname associated with graylog2 messages. (default: require(\'os\').hostname())\n* __graylogFacility:__ The graylog2 facility to send log messages.. (default: nodejs)\n\n*Metadata:* Stringified as JSON in the full message GELF field.\n\n### Adding Custom Transports\nAdding a custom transport (say for one of the datastore on the Roadmap) is actually pretty easy. All you need to do is accept a couple of options, set a name, implement a log() method, and add it to the set of transports exposed by winston.\n\n``` js\n var util = require(\'util\'),\n winston = require(\'winston\');\n\n var CustomLogger = winston.transports.CustomerLogger = function (options) {\n //\n // Name this logger\n //\n this.name = \'customLogger\';\n\n //\n // Set the level from your options\n //\n this.level = options.level || \'info\';\n\n //\n // Configure your storage backing as you see fit\n //\n };\n\n //\n // Inherit from `winston.Transport` so you can take advantage\n // of the base functionality and `.handleExceptions()`.\n //\n util.inherits(CustomLogger, winston.Transport);\n\n CustomLogger.prototype.log = function (level, msg, meta, callback) {\n //\n // Store this message and metadata, maybe use some custom logic\n // then callback indicating success.\n //\n callback(null, true);\n };\n```\n\n### Inspirations\n1. [npm][0]\n2. [log.js][4]\n3. [socket.io][5]\n4. [node-rlog][6]\n5. [BigBrother][7]\n6. [Loggly][8]\n\n## Installation\n\n### Installing npm (node package manager)\n```\n curl http://npmjs.org/install.sh | sh\n```\n\n### Installing winston\n```\n [sudo] npm install winston\n```\n\n## Run Tests\nAll of the winston tests are written in [vows][9], and designed to be run with npm. \n\n``` bash\n $ npm test\n```\n\n#### Author: [Charlie Robbins](http://twitter.com/indexzero)\n#### Contributors: [Matthew Bergman](http://github.com/fotoverite), [Marak Squires](http://github.com/marak)\n\n[0]: https://github.com/isaacs/npm/blob/master/lib/utils/log.js\n[1]: http://nodejs.org/docs/v0.3.5/api/events.html#events.EventEmitter\n[2]: http://github.com/nodejitsu/require-analyzer\n[3]: http://nodejitsu.com\n[4]: https://github.com/visionmedia/log.js\n[5]: http://socket.io\n[6]: https://github.com/jbrisbin/node-rlog\n[7]: https://github.com/feisty/BigBrother\n[8]: http://loggly.com\n[9]: http://vowsjs.org\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/flatiron/winston/issues' },
npm sill resolved homepage: 'https://github.com/flatiron/winston',
npm sill resolved _id: 'winston@0.6.2',
npm sill resolved _from: 'winston@0.6.x' } ]
npm info install pkginfo@0.3.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt
npm info install read@1.0.5 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt
npm info install revalidator@0.1.6 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt
npm info install utile@0.1.7 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt
npm info install winston@0.6.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt
npm info installOne pkginfo@0.3.0
npm info installOne read@1.0.5
npm info installOne revalidator@0.1.6
npm info installOne utile@0.1.7
npm info installOne winston@0.6.2
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/pkginfo unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/revalidator unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/utile unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/winston unbuild
npm sill gunzTarPerm extractEntry lib/ext/method.js
npm sill gunzTarPerm extractEntry lib/ext/profile.js
npm verb tar unpack /Users/hamrickb/.npm/pkginfo/0.3.0/package.tgz
npm sill lockFile 9643cfbd-ules-prompt-node-modules-pkginfo tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/pkginfo
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/pkginfo /Users/hamrickb/.npm/9643cfbd-ules-prompt-node-modules-pkginfo.lock
npm sill lockFile e21fa54b-kb-npm-pkginfo-0-3-0-package-tgz tar:///Users/hamrickb/.npm/pkginfo/0.3.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/pkginfo/0.3.0/package.tgz /Users/hamrickb/.npm/e21fa54b-kb-npm-pkginfo-0-3-0-package-tgz.lock
npm sill gunzTarPerm extractEntry examples/views/cms/views/index.html
npm sill gunzTarPerm extractEntry examples/views/cms/views/layout.html
npm verb tar unpack /Users/hamrickb/.npm/read/1.0.5/package.tgz
npm sill lockFile 147b0ca3-modules-prompt-node-modules-read tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read /Users/hamrickb/.npm/147b0ca3-modules-prompt-node-modules-read.lock
npm sill lockFile 1d1d35dc-rickb-npm-read-1-0-5-package-tgz tar:///Users/hamrickb/.npm/read/1.0.5/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/read/1.0.5/package.tgz /Users/hamrickb/.npm/1d1d35dc-rickb-npm-read-1-0-5-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/revalidator/0.1.6/package.tgz
npm sill lockFile 07e05db8--prompt-node-modules-revalidator tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/revalidator
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/revalidator /Users/hamrickb/.npm/07e05db8--prompt-node-modules-revalidator.lock
npm sill lockFile c8ba76c3-pm-revalidator-0-1-6-package-tgz tar:///Users/hamrickb/.npm/revalidator/0.1.6/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/revalidator/0.1.6/package.tgz /Users/hamrickb/.npm/c8ba76c3-pm-revalidator-0-1-6-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/utile/0.1.7/package.tgz
npm sill lockFile e7227a76-odules-prompt-node-modules-utile tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/utile
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/utile /Users/hamrickb/.npm/e7227a76-odules-prompt-node-modules-utile.lock
npm sill lockFile 2fee4f9d-ickb-npm-utile-0-1-7-package-tgz tar:///Users/hamrickb/.npm/utile/0.1.7/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/utile/0.1.7/package.tgz /Users/hamrickb/.npm/2fee4f9d-ickb-npm-utile-0-1-7-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/winston/0.6.2/package.tgz
npm sill lockFile 3d4ea498-ules-prompt-node-modules-winston tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/winston
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/winston /Users/hamrickb/.npm/3d4ea498-ules-prompt-node-modules-winston.lock
npm sill lockFile de374657-kb-npm-winston-0-6-2-package-tgz tar:///Users/hamrickb/.npm/winston/0.6.2/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/winston/0.6.2/package.tgz /Users/hamrickb/.npm/de374657-kb-npm-winston-0-6-2-package-tgz.lock
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm extractEntry lib/index.js
npm sill gunzTarPerm extractEntry lib/Error/custom.js
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry examples/views/cms/views/page.html
npm sill gunzTarPerm extractEntry examples/views/cms/views/partials/footer.html
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry lib/ext/ref-counter.js
npm sill gunzTarPerm extractEntry lib/ext/resolvers.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry lib/Error/index.js
npm sill gunzTarPerm extractEntry lib/Error/is-error.js
npm sill gunzTarPerm extractEntry .lint
npm sill gunzTarPerm extractEntry test/_base.js
npm sill gunzTarPerm extractEntry examples/views/cms/views/partials/nav.html
npm sill gunzTarPerm extractEntry examples/views/handlebars/basic.js
npm sill gunzTarPerm extractEntry LICENCE
npm sill gunzTarPerm extractEntry rs.js
npm sill lockFile 29dda503--manager-node-modules-underscore tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/underscore
npm sill lockFile 29dda503--manager-node-modules-underscore tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/underscore
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry docs/docco.css
npm sill lockFile 4cfbaacf-npm-underscore-1-5-1-package-tgz tar:///Users/hamrickb/.npm/underscore/1.5.1/package.tgz
npm sill lockFile 4cfbaacf-npm-underscore-1-5-1-package-tgz tar:///Users/hamrickb/.npm/underscore/1.5.1/package.tgz
npm sill gunzTarPerm extractEntry lib/Error/valid-error.js
npm sill gunzTarPerm extractEntry lib/Error/prototype/index.js
npm info preinstall underscore@1.5.1
npm sill gunzTarPerm extractEntry examples/views/handlebars/layout.js
npm sill gunzTarPerm extractEntry examples/views/handlebars/partials.js
npm sill gunzTarPerm extractEntry example/example.js
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry docs/pkginfo.html
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/underscore
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/underscore
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules' ]
npm info linkStuff underscore@1.5.1
npm verb linkBins underscore@1.5.1
npm verb linkMans underscore@1.5.1
npm verb rebuildBundles underscore@1.5.1
npm info install underscore@1.5.1
npm sill gunzTarPerm extractEntry test/index.js
npm sill gunzTarPerm extractEntry test/primitive.js
npm sill gunzTarPerm extractEntry lib/Error/prototype/throw.js
npm sill gunzTarPerm extractEntry lib/Function/i.js
npm info postinstall underscore@1.5.1
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry examples/views/handlebars/templates/basic/index.html
npm sill gunzTarPerm extractEntry examples/views/handlebars/templates/layout.html
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry lib/read.js
npm sill gunzTarPerm extractEntry test/basic.js
npm sill gunzTarPerm extractEntry examples/package.json
npm sill gunzTarPerm extractEntry examples/all-properties.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry lib/Function/insert.js
npm sill gunzTarPerm extractEntry lib/Function/invoke.js
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry test/defaults.js
npm sill gunzTarPerm extractEntry test/many.js
npm sill gunzTarPerm extractEntry examples/views/handlebars/templates/withLayout/index.html
npm sill gunzTarPerm extractEntry examples/views/handlebars/templates/withPartials/footer.html
npm sill gunzTarPerm extractEntry lib/Function/is-arguments.js
npm sill gunzTarPerm extractEntry lib/Function/is-function.js
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry CHANGELOG.md
npm sill gunzTarPerm extractEntry example/webservice.js
npm sill gunzTarPerm extractEntry lib/revalidator.js
npm sill gunzTarPerm extractEntry test/validator-test.js
npm sill gunzTarPerm extractEntry examples/array-argument.js
npm sill gunzTarPerm extractEntry examples/multiple-properties.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill lockFile c4dc2be1-e-modules-lock-node-modules-tape tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape
npm sill lockFile c4dc2be1-e-modules-lock-node-modules-tape tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape
npm sill gunzTarPerm extractEntry LICENSE
npm sill lockFile e09e5530-rickb-npm-tape-0-2-2-package-tgz tar:///Users/hamrickb/.npm/tape/0.2.2/package.tgz
npm sill lockFile e09e5530-rickb-npm-tape-0-2-2-package-tgz tar:///Users/hamrickb/.npm/tape/0.2.2/package.tgz
npm sill gunzTarPerm extractEntry test/regular.js
npm sill gunzTarPerm extractEntry test/ext/async.js
npm sill gunzTarPerm extractEntry lib/Function/index.js
npm sill gunzTarPerm extractEntry lib/Function/noop.js
npm sill gunzTarPerm extractEntry examples/views/handlebars/templates/withPartials/header.html
npm sill gunzTarPerm extractEntry examples/views/handlebars/templates/withPartials/index.html
npm sill lockFile 9436e545-s-optimist-node-modules-wordwrap tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist/node_modules/wordwrap
npm sill lockFile 9436e545-s-optimist-node-modules-wordwrap tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist/node_modules/wordwrap
npm info preinstall tape@0.2.2
npm sill lockFile f232f9e0-b-npm-wordwrap-0-0-2-package-tgz tar:///Users/hamrickb/.npm/wordwrap/0.0.2/package.tgz
npm sill lockFile f232f9e0-b-npm-wordwrap-0-0-2-package-tgz tar:///Users/hamrickb/.npm/wordwrap/0.0.2/package.tgz
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry docs/transports.md
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry LICENSE
npm verb cache add [ 'defined@~0.0.0', null ]
npm verb cache add name=undefined spec="defined@~0.0.0" args=["defined@~0.0.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'defined@~0.0.0',
npm verb parsed url path: 'defined@~0.0.0',
npm verb parsed url href: 'defined@~0.0.0' }
npm verb cache add name="defined" spec="~0.0.0" args=["defined","~0.0.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.0.0',
npm verb parsed url path: '~0.0.0',
npm verb parsed url href: '~0.0.0' }
npm verb addNamed [ 'defined', '~0.0.0' ]
npm verb addNamed [ null, '>=0.0.0-0 <0.1.0-0' ]
npm sill lockFile d0fd0d9a-defined-0-0-0 defined@~0.0.0
npm verb lock defined@~0.0.0 /Users/hamrickb/.npm/d0fd0d9a-defined-0-0-0.lock
npm verb cache add [ 'jsonify@~0.0.0', null ]
npm verb cache add name=undefined spec="jsonify@~0.0.0" args=["jsonify@~0.0.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'jsonify@~0.0.0',
npm verb parsed url path: 'jsonify@~0.0.0',
npm verb parsed url href: 'jsonify@~0.0.0' }
npm verb cache add name="jsonify" spec="~0.0.0" args=["jsonify","~0.0.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.0.0',
npm verb parsed url path: '~0.0.0',
npm verb parsed url href: '~0.0.0' }
npm verb addNamed [ 'jsonify', '~0.0.0' ]
npm verb addNamed [ null, '>=0.0.0-0 <0.1.0-0' ]
npm sill lockFile 6f82df5c-jsonify-0-0-0 jsonify@~0.0.0
npm verb lock jsonify@~0.0.0 /Users/hamrickb/.npm/6f82df5c-jsonify-0-0-0.lock
npm info preinstall wordwrap@0.0.2
npm verb cache add [ 'deep-equal@~0.0.0', null ]
npm verb cache add name=undefined spec="deep-equal@~0.0.0" args=["deep-equal@~0.0.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'deep-equal@~0.0.0',
npm verb parsed url path: 'deep-equal@~0.0.0',
npm verb parsed url href: 'deep-equal@~0.0.0' }
npm verb cache add name="deep-equal" spec="~0.0.0" args=["deep-equal","~0.0.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.0.0',
npm verb parsed url path: '~0.0.0',
npm verb parsed url href: '~0.0.0' }
npm verb addNamed [ 'deep-equal', '~0.0.0' ]
npm verb addNamed [ null, '>=0.0.0-0 <0.1.0-0' ]
npm sill lockFile abb56e7a-deep-equal-0-0-0 deep-equal@~0.0.0
npm verb lock deep-equal@~0.0.0 /Users/hamrickb/.npm/abb56e7a-deep-equal-0-0-0.lock
npm sill addNameRange { name: 'defined', range: '>=0.0.0-0 <0.1.0-0', hasData: false }
npm sill addNameRange { name: 'jsonify', range: '>=0.0.0-0 <0.1.0-0', hasData: false }
npm sill addNameRange { name: 'deep-equal',
npm sill addNameRange range: '>=0.0.0-0 <0.1.0-0',
npm sill addNameRange hasData: false }
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist/node_modules/wordwrap
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist/node_modules/wordwrap
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist/node_modules' ]
npm info linkStuff wordwrap@0.0.2
npm verb linkBins wordwrap@0.0.2
npm verb linkMans wordwrap@0.0.2
npm verb rebuildBundles wordwrap@0.0.2
npm sill gunzTarPerm extractEntry lib/Function/pluck.js
npm sill gunzTarPerm extractEntry lib/Function/remove.js
npm info install wordwrap@0.0.2
npm sill gunzTarPerm extractEntry examples/views/jade/index.js
npm sill gunzTarPerm extractEntry examples/views/jade/templates/about.jade
npm sill gunzTarPerm extractEntry test/ext/dispose.js
npm sill gunzTarPerm extractEntry test/ext/max-age.js
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry CHANGELOG.md
npm info postinstall wordwrap@0.0.2
npm verb registry.get deep-equal not expired, no request
npm sill addNameRange number 2 { name: 'deep-equal',
npm sill addNameRange range: '>=0.0.0-0 <0.1.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'deep-equal',
npm sill addNameRange [ '0.0.0', '0.1.0', '0.1.1', '0.1.2', '0.2.0', '0.2.1' ] ]
npm verb addNamed [ 'deep-equal', '0.0.0' ]
npm verb addNamed [ '0.0.0', '0.0.0' ]
npm sill lockFile 52f78ead-deep-equal-0-0-0 deep-equal@0.0.0
npm verb lock deep-equal@0.0.0 /Users/hamrickb/.npm/52f78ead-deep-equal-0-0-0.lock
npm sill gunzTarPerm extractEntry examples/object-argument.js
npm sill gunzTarPerm extractEntry examples/single-property.js
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/optimist
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff optimist@0.5.0
npm verb linkBins optimist@0.5.0
npm verb linkMans optimist@0.5.0
npm verb rebuildBundles optimist@0.5.0
npm verb rebuildBundles [ 'wordwrap' ]
npm info install optimist@0.5.0
npm info postinstall optimist@0.5.0
npm sill gunzTarPerm extractEntry lib/Function/valid-function.js
npm sill gunzTarPerm extractEntry lib/Function/k.js
npm sill gunzTarPerm extractEntry examples/views/jade/templates/includes/foot.jade
npm sill gunzTarPerm extractEntry examples/views/jade/templates/includes/head.jade
npm sill gunzTarPerm extractEntry test/ext/max.js
npm sill gunzTarPerm extractEntry test/ext/method.js
npm sill gunzTarPerm extractEntry lib/Function/prototype/chain.js
npm sill gunzTarPerm extractEntry lib/Function/prototype/curry.js
npm sill gunzTarPerm extractEntry lib/args.js
npm sill gunzTarPerm extractEntry lib/base64.js
npm sill gunzTarPerm extractEntry examples/views/jade/templates/index.jade
npm sill gunzTarPerm extractEntry examples/views/jade/templates/layout.jade
npm sill gunzTarPerm extractEntry test/ext/profile.js
npm sill gunzTarPerm extractEntry test/ext/ref-counter.js
npm sill gunzTarPerm extractEntry lib/Function/prototype/index.js
npm sill gunzTarPerm extractEntry lib/Function/prototype/lock.js
npm sill gunzTarPerm extractEntry lib/file.js
npm sill gunzTarPerm extractEntry lib/format.js
npm sill gunzTarPerm extractEntry examples/views/mixed/index.js
npm sill gunzTarPerm extractEntry examples/views/mixed/templates/handlebars.html
npm sill gunzTarPerm extractEntry test/ext/resolvers.js
npm sill gunzTarPerm extractEntry lib/Function/prototype/match.js
npm sill gunzTarPerm extractEntry lib/Function/prototype/not.js
npm sill gunzTarPerm extractEntry lib/index.js
npm sill gunzTarPerm extractEntry test/file-test.js
npm sill gunzTarPerm extractEntry examples/views/mixed/templates/index.jade
npm sill gunzTarPerm extractEntry images/hapi.png
npm verb registry.get jsonify not expired, no request
npm sill addNameRange number 2 { name: 'jsonify', range: '>=0.0.0-0 <0.1.0-0', hasData: true }
npm sill addNameRange versions [ 'jsonify', [ '0.0.0' ] ]
npm verb addNamed [ 'jsonify', '0.0.0' ]
npm verb addNamed [ '0.0.0', '0.0.0' ]
npm sill lockFile e3f559e0-jsonify-0-0-0 jsonify@0.0.0
npm verb lock jsonify@0.0.0 /Users/hamrickb/.npm/e3f559e0-jsonify-0-0-0.lock
npm verb registry.get defined not expired, no request
npm sill addNameRange number 2 { name: 'defined', range: '>=0.0.0-0 <0.1.0-0', hasData: true }
npm sill addNameRange versions [ 'defined', [ '0.0.0' ] ]
npm verb addNamed [ 'defined', '0.0.0' ]
npm verb addNamed [ '0.0.0', '0.0.0' ]
npm sill lockFile 09d7042a-defined-0-0-0 defined@0.0.0
npm verb lock defined@0.0.0 /Users/hamrickb/.npm/09d7042a-defined-0-0-0.lock
npm sill gunzTarPerm extractEntry lib/Function/prototype/partial.js
npm sill gunzTarPerm extractEntry lib/Function/prototype/silent.js
npm sill gunzTarPerm extractEntry examples/target-dir.js
npm sill gunzTarPerm extractEntry examples/subdir/package.json
npm sill lockFile f866f4cc--multicouch-node-modules-shelljs tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/shelljs
npm sill lockFile f866f4cc--multicouch-node-modules-shelljs tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/shelljs
npm sill lockFile a321a573-kb-npm-shelljs-0-2-6-package-tgz tar:///Users/hamrickb/.npm/shelljs/0.2.6/package.tgz
npm sill lockFile a321a573-kb-npm-shelljs-0-2-6-package-tgz tar:///Users/hamrickb/.npm/shelljs/0.2.6/package.tgz
npm sill gunzTarPerm extractEntry test/format-test.js
npm sill gunzTarPerm extractEntry test/function-args-test.js
npm info preinstall shelljs@0.2.6
npm sill gunzTarPerm extractEntry CONTRIBUTING.md
npm sill gunzTarPerm extractEntry lib/Function/prototype/wrap.js
npm sill gunzTarPerm extractEntry lib/Math/index.js
npm sill gunzTarPerm extractEntry lib/pkginfo.js
npm sill gunzTarPerm extractEntry test/pkginfo-test.js
npm sill gunzTarPerm extractEntry examples/couchdb.js
npm sill gunzTarPerm extractEntry examples/exception.js
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/shelljs
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/shelljs
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules' ]
npm info linkStuff shelljs@0.2.6
npm verb linkBins shelljs@0.2.6
npm verb link bins [ { shjs: './bin/shjs' },
npm verb link bins '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch/node_modules/.bin',
npm verb link bins false ]
npm verb linkMans shelljs@0.2.6
npm verb rebuildBundles shelljs@0.2.6
npm sill lockFile 52f78ead-deep-equal-0-0-0 deep-equal@0.0.0
npm sill lockFile 52f78ead-deep-equal-0-0-0 deep-equal@0.0.0
npm sill lockFile 147b0ca3-modules-prompt-node-modules-read tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read
npm sill lockFile 147b0ca3-modules-prompt-node-modules-read tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read
npm sill lockFile abb56e7a-deep-equal-0-0-0 deep-equal@~0.0.0
npm sill lockFile abb56e7a-deep-equal-0-0-0 deep-equal@~0.0.0
npm sill lockFile 1d1d35dc-rickb-npm-read-1-0-5-package-tgz tar:///Users/hamrickb/.npm/read/1.0.5/package.tgz
npm sill lockFile 1d1d35dc-rickb-npm-read-1-0-5-package-tgz tar:///Users/hamrickb/.npm/read/1.0.5/package.tgz
npm sill gunzTarPerm extractEntry lib/auth.js
npm sill gunzTarPerm extractEntry lib/handler.js
npm sill gunzTarPerm extractEntry test/random-string-test.js
npm sill gunzTarPerm extractEntry test/require-directory-test.js
npm sill gunzTarPerm extractEntry lib/Math/sign.js
npm sill gunzTarPerm extractEntry lib/Boolean/index.js
npm info install shelljs@0.2.6
npm info preinstall read@1.0.5
npm sill gunzTarPerm extractEntry examples/raw-mode.js
npm sill gunzTarPerm extractEntry examples/webhook-post.js
npm info postinstall shelljs@0.2.6
npm verb readDependencies using package.json deps
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/multicouch
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff multicouch@0.8.1
npm verb linkBins multicouch@0.8.1
npm verb linkMans multicouch@0.8.1
npm verb rebuildBundles multicouch@0.8.1
npm verb readDependencies using package.json deps
npm verb rebuildBundles [ '.bin', 'commander', 'ini', 'shelljs', 'which' ]
npm info install multicouch@0.8.1
npm verb cache add [ 'mute-stream@~0.0.4', null ]
npm verb cache add name=undefined spec="mute-stream@~0.0.4" args=["mute-stream@~0.0.4",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'mute-stream@~0.0.4',
npm verb parsed url path: 'mute-stream@~0.0.4',
npm verb parsed url href: 'mute-stream@~0.0.4' }
npm verb cache add name="mute-stream" spec="~0.0.4" args=["mute-stream","~0.0.4"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.0.4',
npm verb parsed url path: '~0.0.4',
npm verb parsed url href: '~0.0.4' }
npm verb addNamed [ 'mute-stream', '~0.0.4' ]
npm verb addNamed [ null, '>=0.0.4-0 <0.1.0-0' ]
npm sill lockFile 0cb27cfc-mute-stream-0-0-4 mute-stream@~0.0.4
npm verb lock mute-stream@~0.0.4 /Users/hamrickb/.npm/0cb27cfc-mute-stream-0-0-4.lock
npm sill gunzTarPerm extractEntry lib/index.js
npm sill gunzTarPerm extractEntry lib/pack.js
npm sill gunzTarPerm extractEntry lib/Boolean/is-boolean.js
npm sill gunzTarPerm extractEntry lib/Object/_iterate.js
npm sill gunzTarPerm extractEntry test/utile-test.js
npm sill gunzTarPerm extractEntry test/fixtures/read-json-file/config.json
npm info postinstall multicouch@0.8.1
npm sill lockFile e3f559e0-jsonify-0-0-0 jsonify@0.0.0
npm sill lockFile e3f559e0-jsonify-0-0-0 jsonify@0.0.0
npm sill addNameRange { name: 'mute-stream',
npm sill addNameRange range: '>=0.0.4-0 <0.1.0-0',
npm sill addNameRange hasData: false }
npm sill gunzTarPerm extractEntry lib/winston.js
npm sill gunzTarPerm extractEntry lib/winston/common.js
npm sill lockFile 6f82df5c-jsonify-0-0-0 jsonify@~0.0.0
npm sill lockFile 6f82df5c-jsonify-0-0-0 jsonify@~0.0.0
npm sill lockFile 09d7042a-defined-0-0-0 defined@0.0.0
npm sill lockFile 09d7042a-defined-0-0-0 defined@0.0.0
npm sill lockFile d0fd0d9a-defined-0-0-0 defined@~0.0.0
npm sill lockFile d0fd0d9a-defined-0-0-0 defined@~0.0.0
npm sill resolved [ { name: 'deep-equal',
npm sill resolved version: '0.0.0',
npm sill resolved description: 'node\'s assert.deepEqual algorithm',
npm sill resolved main: 'index.js',
npm sill resolved directories: { lib: '.', example: 'example', test: 'test' },
npm sill resolved scripts: { test: 'tap test/*.js' },
npm sill resolved devDependencies: { tap: '0.0.x' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'http://github.com/substack/node-deep-equal.git' },
npm sill resolved keywords: [ 'equality', 'equal', 'compare' ],
npm sill resolved author:
npm sill resolved { name: 'James Halliday',
npm sill resolved email: 'mail@substack.net',
npm sill resolved url: 'http://substack.net' },
npm sill resolved license: 'MIT/X11',
npm sill resolved engine: { node: '>=0.4' },
npm sill resolved readme: 'deep-equal\n==========\n\nNode\'s `assert.deepEqual() algorithm` as a standalone module.\n\nexample\n=======\n\n``` js\nvar equal = require(\'deep-equal\');\nconsole.dir([\n equal(\n { a : [ 2, 3 ], b : [ 4 ] },\n { a : [ 2, 3 ], b : [ 4 ] }\n ),\n equal(\n { x : 5, y : [6] },\n { x : 5, y : 6 }\n )\n]);\n```\n\nmethods\n=======\n\nvar deepEqual = require(\'deep-equal\')\n\ndeepEqual(a, b)\n---------------\n\nCompare objects `a` and `b`, returning whether they are equal according to a\nrecursive equality algorithm.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install deep-equal\n```\n\ntest\n====\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm test\n```\n\nlicense\n=======\n\nMIT. Derived largely from node\'s assert module.\n',
npm sill resolved readmeFilename: 'README.markdown',
npm sill resolved bugs: { url: 'https://github.com/substack/node-deep-equal/issues' },
npm sill resolved homepage: 'https://github.com/substack/node-deep-equal',
npm sill resolved _id: 'deep-equal@0.0.0',
npm sill resolved _from: 'deep-equal@~0.0.0' },
npm sill resolved { name: 'jsonify',
npm sill resolved version: '0.0.0',
npm sill resolved description: 'JSON without touching any globals',
npm sill resolved main: 'index.js',
npm sill resolved directories: { lib: '.', test: 'test' },
npm sill resolved devDependencies: { tap: '0.0.x', garbage: '0.0.x' },
npm sill resolved scripts: { test: 'tap test' },
npm sill resolved repository: { type: 'git', url: 'http://github.com/substack/jsonify.git' },
npm sill resolved keywords: [ 'json', 'browser' ],
npm sill resolved author: { name: 'Douglas Crockford', url: 'http://crockford.com/' },
npm sill resolved license: 'Public Domain',
npm sill resolved readme: 'jsonify\n=======\n\nThis module provides Douglas Crockford\'s JSON implementation without modifying\nany globals.\n\n`stringify` and `parse` are merely exported without respect to whether or not a\nglobal `JSON` object exists.\n\nmethods\n=======\n\nvar json = require(\'jsonify\');\n\njson.parse(source, reviver)\n---------------------------\n\nReturn a new javascript object from a parse of the `source` string.\n\nIf a `reviver` function is specified, walk the structure passing each name/value\npair to `reviver.call(parent, key, value)` to transform the `value` before\nparsing it.\n\njson.stringify(value, replacer, space)\n--------------------------------------\n\nReturn a string representation for `value`.\n\nIf `replacer` is specified, walk the structure passing each name/value pair to\n`replacer.call(parent, key, value)` to transform the `value` before stringifying\nit.\n\nIf `space` is a number, indent the result by that many spaces.\nIf `space` is a string, use `space` as the indentation.\n',
npm sill resolved readmeFilename: 'README.markdown',
npm sill resolved bugs: { url: 'https://github.com/substack/jsonify/issues' },
npm sill resolved homepage: 'https://github.com/substack/jsonify',
npm sill resolved _id: 'jsonify@0.0.0',
npm sill resolved _from: 'jsonify@~0.0.0' },
npm sill resolved { name: 'defined',
npm sill resolved version: '0.0.0',
npm sill resolved description: 'return the first argument that is `!== undefined`',
npm sill resolved main: 'index.js',
npm sill resolved directories: { example: 'example', test: 'test' },
npm sill resolved dependencies: {},
npm sill resolved devDependencies: { tap: '~0.3.0', tape: '~0.0.2' },
npm sill resolved scripts: { test: 'tap test/*.js' },
npm sill resolved repository: { type: 'git', url: 'git://github.com/substack/defined.git' },
npm sill resolved homepage: 'https://github.com/substack/defined',
npm sill resolved keywords: [ 'undefined', 'short-circuit', '||', 'or', '//', 'defined-or' ],
npm sill resolved author:
npm sill resolved { name: 'James Halliday',
npm sill resolved email: 'mail@substack.net',
npm sill resolved url: 'http://substack.net' },
npm sill resolved license: 'MIT',
npm sill resolved readme: '# defined\n\nreturn the first argument that is `!== undefined`\n\n[![build status](https://secure.travis-ci.org/substack/defined.png)](http://travis-ci.org/substack/defined)\n\nMost of the time when I chain together `||`s, I actually just want the first\nitem that is not `undefined`, not the first non-falsy item.\n\nThis module is like the defined-or (`//`) operator in perl 5.10+.\n\n# example\n\n``` js\nvar defined = require(\'defined\');\nvar opts = { y : false, w : 4 };\nvar x = defined(opts.x, opts.y, opts.w, 100);\nconsole.log(x);\n```\n\n```\n$ node example/defined.js\nfalse\n```\n\nThe return value is `false` because `false` is the first item that is\n`!== undefined`.\n\n# methods\n\n``` js\nvar defined = require(\'defined\')\n```\n\n## var x = defined(a, b, c...)\n\nReturn the first item in the argument list `a, b, c...` that is `!== undefined`.\n\nIf all the items are `=== undefined`, return undefined.\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install defined\n```\n\n# license\n\nMIT\n',
npm sill resolved readmeFilename: 'readme.markdown',
npm sill resolved bugs: { url: 'https://github.com/substack/defined/issues' },
npm sill resolved _id: 'defined@0.0.0',
npm sill resolved _from: 'defined@~0.0.0' } ]
npm info install deep-equal@0.0.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape
npm info install jsonify@0.0.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape
npm info install defined@0.0.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape
npm info installOne deep-equal@0.0.0
npm info installOne jsonify@0.0.0
npm info installOne defined@0.0.0
npm sill gunzTarPerm extractEntry lib/Object/for-each.js
npm sill gunzTarPerm extractEntry lib/Object/get-property-names.js
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/deep-equal unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/jsonify unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/defined unbuild
npm sill gunzTarPerm extractEntry test/fixtures/require-directory/helloWorld.js
npm sill gunzTarPerm extractEntry test/fixtures/require-directory/directory/index.js
npm sill lockFile f7f3370f-oodie-server-node-modules-follow tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/follow
npm sill lockFile f7f3370f-oodie-server-node-modules-follow tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/follow
npm verb registry.get mute-stream not expired, no request
npm sill addNameRange number 2 { name: 'mute-stream',
npm sill addNameRange range: '>=0.0.4-0 <0.1.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'mute-stream', [ '0.0.1', '0.0.2', '0.0.3', '0.0.4' ] ]
npm verb addNamed [ 'mute-stream', '0.0.4' ]
npm verb addNamed [ '0.0.4', '0.0.4' ]
npm sill lockFile 71666a8b-mute-stream-0-0-4 mute-stream@0.0.4
npm verb lock mute-stream@0.0.4 /Users/hamrickb/.npm/71666a8b-mute-stream-0-0-4.lock
npm sill lockFile a8f345d0-ckb-npm-follow-0-9-0-package-tgz tar:///Users/hamrickb/.npm/follow/0.9.0/package.tgz
npm sill lockFile a8f345d0-ckb-npm-follow-0-9-0-package-tgz tar:///Users/hamrickb/.npm/follow/0.9.0/package.tgz
npm verb tar unpack /Users/hamrickb/.npm/deep-equal/0.0.0/package.tgz
npm sill lockFile 18a550d4-les-tape-node-modules-deep-equal tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/deep-equal
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/deep-equal /Users/hamrickb/.npm/18a550d4-les-tape-node-modules-deep-equal.lock
npm sill lockFile a747a2b9-npm-deep-equal-0-0-0-package-tgz tar:///Users/hamrickb/.npm/deep-equal/0.0.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/deep-equal/0.0.0/package.tgz /Users/hamrickb/.npm/a747a2b9-npm-deep-equal-0-0-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/jsonify/0.0.0/package.tgz
npm sill lockFile ba19748f-odules-tape-node-modules-jsonify tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/jsonify
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/jsonify /Users/hamrickb/.npm/ba19748f-odules-tape-node-modules-jsonify.lock
npm sill lockFile 013dc25b-kb-npm-jsonify-0-0-0-package-tgz tar:///Users/hamrickb/.npm/jsonify/0.0.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/jsonify/0.0.0/package.tgz /Users/hamrickb/.npm/013dc25b-kb-npm-jsonify-0-0-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/defined/0.0.0/package.tgz
npm sill lockFile 8e1e103e-odules-tape-node-modules-defined tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/defined
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/defined /Users/hamrickb/.npm/8e1e103e-odules-tape-node-modules-defined.lock
npm sill lockFile 1d0700a6-kb-npm-defined-0-0-0-package-tgz tar:///Users/hamrickb/.npm/defined/0.0.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/defined/0.0.0/package.tgz /Users/hamrickb/.npm/1d0700a6-kb-npm-defined-0-0-0-package-tgz.lock
npm sill gunzTarPerm extractEntry lib/file.js
npm sill gunzTarPerm extractEntry lib/composer.js
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm info preinstall follow@0.9.0
npm sill gunzTarPerm extractEntry lib/Object/index.js
npm sill gunzTarPerm extractEntry lib/Object/flatten.js
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry test/helpers/macros.js
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/follow
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/follow
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff follow@0.9.0
npm verb linkBins follow@0.9.0
npm verb link bins [ { follow: './cli.js' },
npm verb link bins '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/.bin',
npm verb link bins false ]
npm verb linkMans follow@0.9.0
npm verb rebuildBundles follow@0.9.0
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry README.markdown
npm sill gunzTarPerm extractEntry lib/Object/is-copy.js
npm sill gunzTarPerm extractEntry lib/Object/is-empty.js
npm sill gunzTarPerm extractEntry lib/request.js
npm sill gunzTarPerm extractEntry lib/validation.js
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry index.js
npm info install follow@0.9.0
npm info postinstall follow@0.9.0
npm sill gunzTarPerm extractEntry lib/Object/is-list.js
npm sill gunzTarPerm extractEntry lib/Object/is-object.js
npm sill gunzTarPerm extractEntry lib/parse.js
npm sill gunzTarPerm extractEntry lib/stringify.js
npm sill gunzTarPerm extractEntry test/parse.js
npm sill gunzTarPerm extractEntry test/stringify.js
npm sill gunzTarPerm extractEntry lib/route.js
npm sill gunzTarPerm extractEntry lib/router.js
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry example/defined.js
npm sill gunzTarPerm extractEntry lib/Object/is-plain-object.js
npm sill gunzTarPerm extractEntry lib/Object/filter.js
npm sill gunzTarPerm extractEntry lib/ext.js
npm sill gunzTarPerm extractEntry lib/schema.js
npm sill gunzTarPerm extractEntry lib/winston/config.js
npm sill gunzTarPerm extractEntry lib/winston/container.js
npm sill lockFile 71666a8b-mute-stream-0-0-4 mute-stream@0.0.4
npm sill lockFile 71666a8b-mute-stream-0-0-4 mute-stream@0.0.4
npm sill gunzTarPerm extractEntry readme.markdown
npm sill lockFile 0cb27cfc-mute-stream-0-0-4 mute-stream@~0.0.4
npm sill lockFile 0cb27cfc-mute-stream-0-0-4 mute-stream@~0.0.4
npm sill resolved [ { name: 'mute-stream',
npm sill resolved version: '0.0.4',
npm sill resolved main: 'mute.js',
npm sill resolved directories: { test: 'test' },
npm sill resolved devDependencies: { tap: '~0.2.5' },
npm sill resolved scripts: { test: 'tap test/*.js' },
npm sill resolved repository: { type: 'git', url: 'git://github.com/isaacs/mute-stream' },
npm sill resolved keywords: [ 'mute', 'stream', 'pipe' ],
npm sill resolved author:
npm sill resolved { name: 'Isaac Z. Schlueter',
npm sill resolved email: 'i@izs.me',
npm sill resolved url: 'http://blog.izs.me/' },
npm sill resolved license: 'BSD',
npm sill resolved description: 'Bytes go in, but they don\'t come out (when muted).',
npm sill resolved readme: '# mute-stream\n\nBytes go in, but they don\'t come out (when muted).\n\nThis is a basic pass-through stream, but when muted, the bytes are\nsilently dropped, rather than being passed through.\n\n## Usage\n\n```javascript\nvar MuteStream = require(\'mute-stream\')\n\nvar ms = new MuteStream(options)\n\nms.pipe(process.stdout)\nms.write(\'foo\') // writes \'foo\' to stdout\nms.mute()\nms.write(\'bar\') // does not write \'bar\'\nms.unmute()\nms.write(\'baz\') // writes \'baz\' to stdout\n\n// can also be used to mute incoming data\nvar ms = new MuteStream\ninput.pipe(ms)\n\nms.on(\'data\', function (c) {\n console.log(\'data: \' + c)\n})\n\ninput.emit(\'data\', \'foo\') // logs \'foo\'\nms.mute()\ninput.emit(\'data\', \'bar\') // does not log \'bar\'\nms.unmute()\ninput.emit(\'data\', \'baz\') // logs \'baz\'\n```\n\n## Options\n\nAll options are optional.\n\n* `replace` Set to a string to replace each character with the\n specified string when muted. (So you can show `****` instead of the\n password, for example.)\n\n* `prompt` If you are using a replacement char, and also using a\n prompt with a readline stream (as for a `Password: *****` input),\n then specify what the prompt is so that backspace will work\n properly. Otherwise, pressing backspace will overwrite the prompt\n with the replacement character, which is weird.\n\n## ms.mute()\n\nSet `muted` to `true`. Turns `.write()` into a no-op.\n\n## ms.unmute()\n\nSet `muted` to `false`\n\n## ms.isTTY\n\nTrue if the pipe destination is a TTY, or if the incoming pipe source is\na TTY.\n\n## Other stream methods...\n\nThe other standard readable and writable stream methods are all\navailable. The MuteStream object acts as a facade to its pipe source\nand destination.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/isaacs/mute-stream/issues' },
npm sill resolved homepage: 'https://github.com/isaacs/mute-stream',
npm sill resolved _id: 'mute-stream@0.0.4',
npm sill resolved _from: 'mute-stream@~0.0.4' } ]
npm info install mute-stream@0.0.4 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read
npm info installOne mute-stream@0.0.4
npm sill gunzTarPerm extractEntry package.json
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read/node_modules/mute-stream unbuild
npm sill gunzTarPerm extractEntry lib/Object/is.js
npm sill gunzTarPerm extractEntry lib/Object/extend.js
npm verb tar unpack /Users/hamrickb/.npm/mute-stream/0.0.4/package.tgz
npm sill lockFile 4ecab262-es-read-node-modules-mute-stream tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read/node_modules/mute-stream
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read/node_modules/mute-stream /Users/hamrickb/.npm/4ecab262-es-read-node-modules-mute-stream.lock
npm sill lockFile 54365c3f-pm-mute-stream-0-0-4-package-tgz tar:///Users/hamrickb/.npm/mute-stream/0.0.4/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/mute-stream/0.0.4/package.tgz /Users/hamrickb/.npm/54365c3f-pm-mute-stream-0-0-4-package-tgz.lock
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry README.markdown
npm sill gunzTarPerm extractEntry test/def.js
npm sill gunzTarPerm extractEntry lib/dtrace.js
npm sill gunzTarPerm extractEntry lib/server.js
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm extractEntry lib/winston/exception.js
npm sill gunzTarPerm extractEntry lib/winston/logger.js
npm sill gunzTarPerm extractEntry lib/Object/key-of.js
npm sill gunzTarPerm extractEntry lib/Object/extend-properties.js
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry example/cmp.js
npm sill gunzTarPerm extractEntry test/cmp.js
npm sill gunzTarPerm extractEntry lib/winston/transports.js
npm sill gunzTarPerm extractEntry lib/winston/config/cli-config.js
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry lib/directory.js
npm sill gunzTarPerm extractEntry lib/Object/map-keys.js
npm sill gunzTarPerm extractEntry lib/Object/extend-deep.js
npm sill gunzTarPerm extractEntry lib/winston/config/npm-config.js
npm sill gunzTarPerm extractEntry lib/winston/config/syslog-config.js
npm sill gunzTarPerm extractEntry mute.js
npm sill gunzTarPerm extractEntry test/basic.js
npm sill gunzTarPerm extractEntry lib/state.js
npm sill gunzTarPerm extractEntry lib/defaults.js
npm sill gunzTarPerm extractEntry lib/Object/map-to-array.js
npm sill gunzTarPerm extractEntry lib/Object/every.js
npm sill gunzTarPerm extractEntry lib/winston/transports/console.js
npm sill gunzTarPerm extractEntry lib/winston/transports/file.js
npm sill lockFile 9643cfbd-ules-prompt-node-modules-pkginfo tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/pkginfo
npm sill lockFile 9643cfbd-ules-prompt-node-modules-pkginfo tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/pkginfo
npm sill gunzTarPerm extractEntry lib/utils.js
npm sill gunzTarPerm extractEntry lib/payload.js
npm sill lockFile e21fa54b-kb-npm-pkginfo-0-3-0-package-tgz tar:///Users/hamrickb/.npm/pkginfo/0.3.0/package.tgz
npm sill lockFile e21fa54b-kb-npm-pkginfo-0-3-0-package-tgz tar:///Users/hamrickb/.npm/pkginfo/0.3.0/package.tgz
npm sill gunzTarPerm extractEntry lib/Object/map.js
npm sill gunzTarPerm extractEntry lib/Object/diff.js
npm info preinstall pkginfo@0.3.0
npm sill lockFile 07e05db8--prompt-node-modules-revalidator tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/revalidator
npm sill lockFile 07e05db8--prompt-node-modules-revalidator tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/revalidator
npm sill lockFile de4425f3--node-modules-hoodie-plugins-api tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api
npm sill lockFile de4425f3--node-modules-hoodie-plugins-api tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api
npm sill lockFile c8ba76c3-pm-revalidator-0-1-6-package-tgz tar:///Users/hamrickb/.npm/revalidator/0.1.6/package.tgz
npm sill lockFile c8ba76c3-pm-revalidator-0-1-6-package-tgz tar:///Users/hamrickb/.npm/revalidator/0.1.6/package.tgz
npm sill lockFile 39ce1520-ie-plugins-api-0-2-1-package-tgz tar:///Users/hamrickb/.npm/hoodie-plugins-api/0.2.1/package.tgz
npm sill lockFile 39ce1520-ie-plugins-api-0-2-1-package-tgz tar:///Users/hamrickb/.npm/hoodie-plugins-api/0.2.1/package.tgz
npm sill gunzTarPerm extractEntry lib/views.js
npm sill gunzTarPerm extractEntry lib/proxy.js
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/pkginfo
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/pkginfo
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules' ]
npm info linkStuff pkginfo@0.3.0
npm verb linkBins pkginfo@0.3.0
npm verb linkMans pkginfo@0.3.0
npm verb rebuildBundles pkginfo@0.3.0
npm sill lockFile 881aae80--manager-node-modules-nodemailer tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer
npm sill lockFile 881aae80--manager-node-modules-nodemailer tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer
npm info install pkginfo@0.3.0
npm sill gunzTarPerm extractEntry lib/Object/reduce.js
npm sill gunzTarPerm extractEntry lib/Object/descriptor.js
npm sill lockFile d98d641e-npm-nodemailer-0-5-2-package-tgz tar:///Users/hamrickb/.npm/nodemailer/0.5.2/package.tgz
npm sill lockFile d98d641e-npm-nodemailer-0-5-2-package-tgz tar:///Users/hamrickb/.npm/nodemailer/0.5.2/package.tgz
npm info preinstall revalidator@0.1.6
npm info preinstall hoodie-plugins-api@0.2.1
npm sill gunzTarPerm extractEntry lib/winston/transports/http.js
npm sill gunzTarPerm extractEntry lib/winston/transports/transport.js
npm info postinstall pkginfo@0.3.0
npm verb readDependencies using package.json deps
npm sill lockFile 8e1e103e-odules-tape-node-modules-defined tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/defined
npm sill lockFile 8e1e103e-odules-tape-node-modules-defined tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/defined
npm info preinstall nodemailer@0.5.2
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/revalidator
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/revalidator
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules' ]
npm info linkStuff revalidator@0.1.6
npm verb linkBins revalidator@0.1.6
npm verb linkMans revalidator@0.1.6
npm verb rebuildBundles revalidator@0.1.6
npm sill lockFile 1d0700a6-kb-npm-defined-0-0-0-package-tgz tar:///Users/hamrickb/.npm/defined/0.0.0/package.tgz
npm sill lockFile 1d0700a6-kb-npm-defined-0-0-0-package-tgz tar:///Users/hamrickb/.npm/defined/0.0.0/package.tgz
npm verb readDependencies using package.json deps
npm info install revalidator@0.1.6
npm verb cache add [ 'couchr@0.0.13', null ]
npm verb cache add name=undefined spec="couchr@0.0.13" args=["couchr@0.0.13",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'couchr@0.0.13',
npm verb parsed url path: 'couchr@0.0.13',
npm verb parsed url href: 'couchr@0.0.13' }
npm verb cache add name="couchr" spec="0.0.13" args=["couchr","0.0.13"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.0.13',
npm verb parsed url path: '0.0.13',
npm verb parsed url href: '0.0.13' }
npm verb addNamed [ 'couchr', '0.0.13' ]
npm verb addNamed [ '0.0.13', '0.0.13' ]
npm sill lockFile 975c9a34-couchr-0-0-13 couchr@0.0.13
npm verb lock couchr@0.0.13 /Users/hamrickb/.npm/975c9a34-couchr-0-0-13.lock
npm verb cache add [ 'uuid@1.4.1', null ]
npm verb cache add name=undefined spec="uuid@1.4.1" args=["uuid@1.4.1",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'uuid@1.4.1',
npm verb parsed url path: 'uuid@1.4.1',
npm verb parsed url href: 'uuid@1.4.1' }
npm verb cache add name="uuid" spec="1.4.1" args=["uuid","1.4.1"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.4.1',
npm verb parsed url path: '1.4.1',
npm verb parsed url href: '1.4.1' }
npm verb addNamed [ 'uuid', '1.4.1' ]
npm verb addNamed [ '1.4.1', '1.4.1' ]
npm sill lockFile 0ac31546-uuid-1-4-1 uuid@1.4.1
npm verb lock uuid@1.4.1 /Users/hamrickb/.npm/0ac31546-uuid-1-4-1.lock
npm verb readDependencies using package.json deps
npm sill gunzTarPerm extractEntry lib/response/headers.js
npm sill gunzTarPerm extractEntry lib/response/index.js
npm verb cache add [ 'async@0.2.8', null ]
npm verb cache add name=undefined spec="async@0.2.8" args=["async@0.2.8",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'async@0.2.8',
npm verb parsed url path: 'async@0.2.8',
npm verb parsed url href: 'async@0.2.8' }
npm verb cache add name="async" spec="0.2.8" args=["async","0.2.8"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.8',
npm verb parsed url path: '0.2.8',
npm verb parsed url href: '0.2.8' }
npm verb addNamed [ 'async', '0.2.8' ]
npm verb addNamed [ '0.2.8', '0.2.8' ]
npm sill lockFile 4348054e-async-0-2-8 async@0.2.8
npm verb lock async@0.2.8 /Users/hamrickb/.npm/4348054e-async-0-2-8.lock
npm verb cache add [ 'moment@2.1.0', null ]
npm verb cache add name=undefined spec="moment@2.1.0" args=["moment@2.1.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'moment@2.1.0',
npm verb parsed url path: 'moment@2.1.0',
npm verb parsed url href: 'moment@2.1.0' }
npm verb cache add name="moment" spec="2.1.0" args=["moment","2.1.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '2.1.0',
npm verb parsed url path: '2.1.0',
npm verb parsed url href: '2.1.0' }
npm verb addNamed [ 'moment', '2.1.0' ]
npm verb addNamed [ '2.1.0', '2.1.0' ]
npm sill lockFile 64ea3f57-moment-2-1-0 moment@2.1.0
npm verb lock moment@2.1.0 /Users/hamrickb/.npm/64ea3f57-moment-2-1-0.lock
npm verb cache add [ 'underscore@1.4.4', null ]
npm verb cache add name=undefined spec="underscore@1.4.4" args=["underscore@1.4.4",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'underscore@1.4.4',
npm verb parsed url path: 'underscore@1.4.4',
npm verb parsed url href: 'underscore@1.4.4' }
npm verb cache add name="underscore" spec="1.4.4" args=["underscore","1.4.4"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.4.4',
npm verb parsed url path: '1.4.4',
npm verb parsed url href: '1.4.4' }
npm verb addNamed [ 'underscore', '1.4.4' ]
npm verb addNamed [ '1.4.4', '1.4.4' ]
npm sill lockFile c6b5e825-underscore-1-4-4 underscore@1.4.4
npm verb lock underscore@1.4.4 /Users/hamrickb/.npm/c6b5e825-underscore-1-4-4.lock
npm info postinstall revalidator@0.1.6
npm sill gunzTarPerm extractEntry lib/Object/safe-traverse.js
npm sill gunzTarPerm extractEntry lib/Object/count.js
npm verb readDependencies using package.json deps
npm info preinstall defined@0.0.0
npm verb cache add [ 'mailcomposer@~0.2', null ]
npm verb cache add name=undefined spec="mailcomposer@~0.2" args=["mailcomposer@~0.2",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'mailcomposer@~0.2',
npm verb parsed url path: 'mailcomposer@~0.2',
npm verb parsed url href: 'mailcomposer@~0.2' }
npm verb cache add name="mailcomposer" spec="~0.2" args=["mailcomposer","~0.2"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.2',
npm verb parsed url path: '~0.2',
npm verb parsed url href: '~0.2' }
npm verb addNamed [ 'mailcomposer', '~0.2' ]
npm verb addNamed [ null, '>=0.2.0-0 <0.3.0-0' ]
npm sill lockFile 295c1460-mailcomposer-0-2 mailcomposer@~0.2
npm verb lock mailcomposer@~0.2 /Users/hamrickb/.npm/295c1460-mailcomposer-0-2.lock
npm verb cache add [ 'simplesmtp@~0.2 || ~0.3', null ]
npm verb cache add name=undefined spec="simplesmtp@~0.2 || ~0.3" args=["simplesmtp@~0.2 || ~0.3",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'simplesmtp@~0.2%20||%20~0.3',
npm verb parsed url path: 'simplesmtp@~0.2%20||%20~0.3',
npm verb parsed url href: 'simplesmtp@~0.2%20||%20~0.3' }
npm verb cache add name="simplesmtp" spec="~0.2 || ~0.3" args=["simplesmtp","~0.2 || ~0.3"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.2%20||%20~0.3',
npm verb parsed url path: '~0.2%20||%20~0.3',
npm verb parsed url href: '~0.2%20||%20~0.3' }
npm verb addNamed [ 'simplesmtp', '~0.2 || ~0.3' ]
npm verb addNamed [ null, '>=0.2.0-0 <0.3.0-0||>=0.3.0-0 <0.4.0-0' ]
npm sill lockFile 53ed49a0-simplesmtp-0-2-0-3 simplesmtp@~0.2 || ~0.3
npm verb lock simplesmtp@~0.2 || ~0.3 /Users/hamrickb/.npm/53ed49a0-simplesmtp-0-2-0-3.lock
npm sill addNameRange { name: 'mailcomposer',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: false }
npm sill addNameRange { name: 'simplesmtp',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0||>=0.3.0-0 <0.4.0-0',
npm sill addNameRange hasData: false }
npm verb readDependencies using package.json deps
npm sill lockFile ce1427b0-e-server-node-modules-http-proxy tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/http-proxy
npm sill lockFile ce1427b0-e-server-node-modules-http-proxy tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/http-proxy
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/defined
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/defined
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules' ]
npm info linkStuff defined@0.0.0
npm verb linkBins defined@0.0.0
npm verb linkMans defined@0.0.0
npm verb rebuildBundles defined@0.0.0
npm sill lockFile c0d021eb-npm-http-proxy-1-0-2-package-tgz tar:///Users/hamrickb/.npm/http-proxy/1.0.2/package.tgz
npm sill lockFile c0d021eb-npm-http-proxy-1-0-2-package-tgz tar:///Users/hamrickb/.npm/http-proxy/1.0.2/package.tgz
npm verb registry.get couchr/0.0.13 not expired, no request
npm info install defined@0.0.0
npm sill lockFile 18a550d4-les-tape-node-modules-deep-equal tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/deep-equal
npm sill lockFile 18a550d4-les-tape-node-modules-deep-equal tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/deep-equal
npm sill lockFile 975c9a34-couchr-0-0-13 couchr@0.0.13
npm sill lockFile 975c9a34-couchr-0-0-13 couchr@0.0.13
npm verb registry.get underscore/1.4.4 not expired, no request
npm sill lockFile a747a2b9-npm-deep-equal-0-0-0-package-tgz tar:///Users/hamrickb/.npm/deep-equal/0.0.0/package.tgz
npm sill lockFile a747a2b9-npm-deep-equal-0-0-0-package-tgz tar:///Users/hamrickb/.npm/deep-equal/0.0.0/package.tgz
npm sill gunzTarPerm extractEntry lib/response/payload.js
npm sill gunzTarPerm extractEntry lib/response/plain.js
npm sill lockFile c6b5e825-underscore-1-4-4 underscore@1.4.4
npm sill lockFile c6b5e825-underscore-1-4-4 underscore@1.4.4
npm sill gunzTarPerm extractEntry lib/Object/some.js
npm sill gunzTarPerm extractEntry lib/Object/copy.js
npm info postinstall defined@0.0.0
npm verb registry.get uuid/1.4.1 not expired, no request
npm verb registry.get async/0.2.8 not expired, no request
npm info preinstall http-proxy@1.0.2
npm info preinstall deep-equal@0.0.0
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm verb registry.get moment/2.1.0 not expired, no request
npm verb registry.get mailcomposer not expired, no request
npm sill addNameRange number 2 { name: 'mailcomposer',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'mailcomposer',
npm sill addNameRange [ '0.1.0',
npm sill addNameRange '0.1.1',
npm sill addNameRange '0.1.2',
npm sill addNameRange '0.1.3',
npm sill addNameRange '0.1.4',
npm sill addNameRange '0.1.5',
npm sill addNameRange '0.1.6',
npm sill addNameRange '0.1.7',
npm sill addNameRange '0.1.8',
npm sill addNameRange '0.1.9',
npm sill addNameRange '0.1.10',
npm sill addNameRange '0.1.11',
npm sill addNameRange '0.1.12',
npm sill addNameRange '0.1.13',
npm sill addNameRange '0.1.14',
npm sill addNameRange '0.1.15',
npm sill addNameRange '0.1.16',
npm sill addNameRange '0.1.17',
npm sill addNameRange '0.1.18',
npm sill addNameRange '0.1.19',
npm sill addNameRange '0.1.20',
npm sill addNameRange '0.1.21',
npm sill addNameRange '0.1.22',
npm sill addNameRange '0.1.23',
npm sill addNameRange '0.1.24',
npm sill addNameRange '0.1.25',
npm sill addNameRange '0.1.26',
npm sill addNameRange '0.1.27',
npm sill addNameRange '0.1.28',
npm sill addNameRange '0.1.29',
npm sill addNameRange '0.1.30',
npm sill addNameRange '0.1.31',
npm sill addNameRange '0.1.33',
npm sill addNameRange '0.1.34',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.2.1',
npm sill addNameRange '0.2.2',
npm sill addNameRange '0.2.3',
npm sill addNameRange '0.2.4',
npm sill addNameRange '0.2.5',
npm sill addNameRange '0.2.6',
npm sill addNameRange '0.2.7',
npm sill addNameRange '0.2.8' ] ]
npm verb addNamed [ 'mailcomposer', '0.2.8' ]
npm verb addNamed [ '0.2.8', '0.2.8' ]
npm sill lockFile e39bbbd5-mailcomposer-0-2-8 mailcomposer@0.2.8
npm verb lock mailcomposer@0.2.8 /Users/hamrickb/.npm/e39bbbd5-mailcomposer-0-2-8.lock
npm verb readDependencies using package.json deps
npm verb cache add [ 'eventemitter3@*', null ]
npm verb cache add name=undefined spec="eventemitter3@*" args=["eventemitter3@*",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'eventemitter3@*',
npm verb parsed url path: 'eventemitter3@*',
npm verb parsed url href: 'eventemitter3@*' }
npm verb cache add name="eventemitter3" spec="*" args=["eventemitter3","*"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '*',
npm verb parsed url path: '*',
npm verb parsed url href: '*' }
npm verb addNamed [ 'eventemitter3', '*' ]
npm verb addNamed [ null, '*' ]
npm sill lockFile 33ba0664-eventemitter3 eventemitter3@*
npm verb lock eventemitter3@* /Users/hamrickb/.npm/33ba0664-eventemitter3.lock
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/deep-equal
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/deep-equal
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules' ]
npm info linkStuff deep-equal@0.0.0
npm verb linkBins deep-equal@0.0.0
npm verb linkMans deep-equal@0.0.0
npm verb rebuildBundles deep-equal@0.0.0
npm sill lockFile ba19748f-odules-tape-node-modules-jsonify tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/jsonify
npm sill lockFile ba19748f-odules-tape-node-modules-jsonify tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/jsonify
npm verb registry.get simplesmtp not expired, no request
npm sill addNameRange number 2 { name: 'simplesmtp',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0||>=0.3.0-0 <0.4.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'simplesmtp',
npm sill addNameRange [ '0.1.0',
npm sill addNameRange '0.1.2',
npm sill addNameRange '0.1.3',
npm sill addNameRange '0.1.4',
npm sill addNameRange '0.1.5',
npm sill addNameRange '0.1.6',
npm sill addNameRange '0.1.7',
npm sill addNameRange '0.1.8',
npm sill addNameRange '0.1.9',
npm sill addNameRange '0.1.11',
npm sill addNameRange '0.1.12',
npm sill addNameRange '0.1.13',
npm sill addNameRange '0.1.14',
npm sill addNameRange '0.1.15',
npm sill addNameRange '0.1.16',
npm sill addNameRange '0.1.17',
npm sill addNameRange '0.1.18',
npm sill addNameRange '0.1.19',
npm sill addNameRange '0.1.20',
npm sill addNameRange '0.1.21',
npm sill addNameRange '0.1.22',
npm sill addNameRange '0.1.23',
npm sill addNameRange '0.1.24',
npm sill addNameRange '0.1.25',
npm sill addNameRange '0.1.26',
npm sill addNameRange '0.1.27',
npm sill addNameRange '0.1.28',
npm sill addNameRange '0.1.29',
npm sill addNameRange '0.1.30',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.2.1',
npm sill addNameRange '0.2.2',
npm sill addNameRange '0.2.3',
npm sill addNameRange '0.2.4',
npm sill addNameRange '0.2.6',
npm sill addNameRange '0.2.7',
npm sill addNameRange '0.3.0',
npm sill addNameRange '0.3.1',
npm sill addNameRange '0.3.2',
npm sill addNameRange '0.3.3',
npm sill addNameRange '0.3.4',
npm sill addNameRange '0.3.5',
npm sill addNameRange '0.3.6',
npm sill addNameRange '0.3.7',
npm sill addNameRange '0.3.8',
npm sill addNameRange '0.3.9',
npm sill addNameRange '0.3.10',
npm sill addNameRange '0.3.11',
npm sill addNameRange '0.3.13',
npm sill addNameRange '0.3.14',
npm sill addNameRange '0.3.15',
npm sill addNameRange '0.3.16',
npm sill addNameRange '0.3.18',
npm sill addNameRange '0.3.19',
npm sill addNameRange '0.3.20',
npm sill addNameRange '0.3.21' ] ]
npm verb addNamed [ 'simplesmtp', '0.3.21' ]
npm verb addNamed [ '0.3.21', '0.3.21' ]
npm sill lockFile d3f092b8-simplesmtp-0-3-21 simplesmtp@0.3.21
npm verb lock simplesmtp@0.3.21 /Users/hamrickb/.npm/d3f092b8-simplesmtp-0-3-21.lock
npm sill gunzTarPerm extractEntry lib/Object/to-plain-object.js
npm sill gunzTarPerm extractEntry lib/Object/compare.js
npm sill gunzTarPerm extractEntry lib/Object/valid-callable.js
npm sill gunzTarPerm extractEntry lib/Object/compact.js
npm sill gunzTarPerm extractEntry lib/Object/valid-value.js
npm sill gunzTarPerm extractEntry lib/Object/clear.js
npm sill gunzTarPerm extractEntry lib/Object/values.js
npm sill gunzTarPerm extractEntry lib/Object/is-callable.js
npm sill gunzTarPerm extractEntry lib/RegExp/index.js
npm sill gunzTarPerm extractEntry lib/RegExp/is-reg-exp.js
npm sill gunzTarPerm extractEntry lib/RegExp/valid-reg-exp.js
npm sill gunzTarPerm extractEntry lib/String/index.js
npm sill gunzTarPerm extractEntry lib/String/is-string.js
npm sill gunzTarPerm extractEntry lib/String/prototype/camel-to-hyphen.js
npm sill gunzTarPerm extractEntry lib/String/prototype/ends-with.js
npm sill gunzTarPerm extractEntry lib/String/prototype/format.js
npm sill gunzTarPerm extractEntry lib/String/prototype/hyphen-to-camel.js
npm sill gunzTarPerm extractEntry lib/String/prototype/contains.js
npm sill gunzTarPerm extractEntry lib/String/prototype/index.js
npm sill gunzTarPerm extractEntry lib/String/prototype/last.js
npm sill gunzTarPerm extractEntry lib/String/prototype/pad.js
npm sill gunzTarPerm extractEntry lib/String/prototype/repeat.js
npm sill gunzTarPerm extractEntry lib/String/prototype/simple-replace.js
npm sill gunzTarPerm extractEntry lib/String/prototype/case-insensitive-compare.js
npm sill gunzTarPerm extractEntry lib/String/prototype/starts-with.js
npm sill gunzTarPerm extractEntry lib/String/prototype/capitalize.js
npm sill gunzTarPerm extractEntry lib/String/prototype/trim-common-left.js
npm sill gunzTarPerm extractEntry lib/String/prototype/indent.js
npm sill gunzTarPerm extractEntry lib/Array/from.js
npm sill gunzTarPerm extractEntry lib/Array/generate.js
npm sill gunzTarPerm extractEntry lib/Array/index.js
npm sill gunzTarPerm extractEntry lib/Array/of.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/_compare-by-length.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/exclusion.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/find.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/first-index.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/e-last-index-of.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/flatten.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/for-each-right.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/group.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/index.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/indexes-of.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/e-index-of.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/intersection.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/diff.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/is-copy.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/copy.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/is-uniq.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/contains.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/last-index.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/compact.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/last.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/common-left.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/remove.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/clear.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/some-right.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/binary-search.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/uniq.js
npm sill gunzTarPerm extractEntry lib/Array/prototype/first.js
npm sill gunzTarPerm extractEntry lib/Date/index.js
npm sill gunzTarPerm extractEntry lib/Date/is-date.js
npm sill gunzTarPerm extractEntry lib/Date/valid-date.js
npm sill gunzTarPerm extractEntry lib/Date/prototype/copy.js
npm sill gunzTarPerm extractEntry lib/Date/prototype/days-in-month.js
npm sill gunzTarPerm extractEntry lib/Date/prototype/floor-day.js
npm sill gunzTarPerm extractEntry lib/Date/prototype/floor-month.js
npm sill gunzTarPerm extractEntry lib/Date/prototype/floor-year.js
npm sill gunzTarPerm extractEntry lib/Date/prototype/format.js
npm sill gunzTarPerm extractEntry lib/Date/prototype/index.js
npm sill gunzTarPerm extractEntry lib/Number/index.js
npm sill gunzTarPerm extractEntry lib/Number/is-nan.js
npm sill gunzTarPerm extractEntry lib/Number/is-number.js
npm sill gunzTarPerm extractEntry lib/Number/to-int.js
npm sill gunzTarPerm extractEntry lib/Number/to-uint.js
npm sill gunzTarPerm extractEntry lib/Number/to-uint32.js
npm sill gunzTarPerm extractEntry lib/Number/prototype/index.js
npm sill gunzTarPerm extractEntry lib/Number/prototype/pad.js
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry test/reserved.js
npm sill gunzTarPerm extractEntry test/__tad.js
npm sill gunzTarPerm extractEntry test/global.js
npm sill gunzTarPerm extractEntry test/Error/custom.js
npm sill gunzTarPerm extractEntry test/Error/is-error.js
npm sill gunzTarPerm extractEntry test/Error/valid-error.js
npm sill gunzTarPerm extractEntry test/Error/prototype/throw.js
npm sill gunzTarPerm extractEntry test/Function/i.js
npm sill gunzTarPerm extractEntry test/Function/invoke.js
npm sill gunzTarPerm extractEntry test/Function/is-arguments.js
npm sill gunzTarPerm extractEntry test/Function/is-function.js
npm sill gunzTarPerm extractEntry test/Function/insert.js
npm sill gunzTarPerm extractEntry test/Function/noop.js
npm sill gunzTarPerm extractEntry test/Function/pluck.js
npm sill gunzTarPerm extractEntry test/Function/remove.js
npm sill gunzTarPerm extractEntry test/Function/valid-function.js
npm sill gunzTarPerm extractEntry test/Function/k.js
npm sill gunzTarPerm extractEntry test/Function/prototype/chain.js
npm sill gunzTarPerm extractEntry test/Function/prototype/curry.js
npm sill gunzTarPerm extractEntry test/Function/prototype/lock.js
npm sill gunzTarPerm extractEntry test/Function/prototype/match.js
npm sill gunzTarPerm extractEntry test/Function/prototype/not.js
npm sill gunzTarPerm extractEntry test/Function/prototype/partial.js
npm sill gunzTarPerm extractEntry test/Function/prototype/silent.js
npm sill gunzTarPerm extractEntry test/Function/prototype/wrap.js
npm sill gunzTarPerm extractEntry test/Math/sign.js
npm sill gunzTarPerm extractEntry test/Boolean/is-boolean.js
npm sill gunzTarPerm extractEntry test/Object/_iterate.js
npm sill gunzTarPerm extractEntry test/Object/flatten.js
npm sill gunzTarPerm extractEntry test/Object/for-each.js
npm sill gunzTarPerm extractEntry test/Object/get-property-names.js
npm sill gunzTarPerm extractEntry test/Object/is-callable.js
npm sill gunzTarPerm extractEntry test/Object/filter.js
npm sill gunzTarPerm extractEntry test/Object/is-empty.js
npm sill gunzTarPerm extractEntry test/Object/is-list.js
npm sill gunzTarPerm extractEntry test/Object/is-object.js
npm sill gunzTarPerm extractEntry test/Object/is-plain-object.js
npm sill gunzTarPerm extractEntry test/Object/is.js
npm sill gunzTarPerm extractEntry test/Object/extend.js
npm sill gunzTarPerm extractEntry test/Object/key-of.js
npm sill gunzTarPerm extractEntry test/Object/extend-properties.js
npm sill gunzTarPerm extractEntry test/Object/map-keys.js
npm sill gunzTarPerm extractEntry test/Object/extend-deep.js
npm sill gunzTarPerm extractEntry test/Object/map-to-array.js
npm sill gunzTarPerm extractEntry test/Object/every.js
npm sill gunzTarPerm extractEntry test/Object/map.js
npm sill gunzTarPerm extractEntry test/Object/diff.js
npm sill gunzTarPerm extractEntry test/Object/reduce.js
npm sill gunzTarPerm extractEntry test/Object/descriptor.js
npm sill gunzTarPerm extractEntry test/Object/safe-traverse.js
npm sill gunzTarPerm extractEntry test/Object/count.js
npm sill gunzTarPerm extractEntry test/Object/some.js
npm sill gunzTarPerm extractEntry test/Object/copy.js
npm sill gunzTarPerm extractEntry test/Object/to-plain-object.js
npm sill gunzTarPerm extractEntry test/Object/compare.js
npm sill gunzTarPerm extractEntry test/Object/valid-callable.js
npm sill gunzTarPerm extractEntry test/Object/compact.js
npm sill gunzTarPerm extractEntry test/Object/valid-value.js
npm sill gunzTarPerm extractEntry test/Object/clear.js
npm sill gunzTarPerm extractEntry test/Object/values.js
npm sill gunzTarPerm extractEntry test/Object/is-copy.js
npm sill gunzTarPerm extractEntry test/RegExp/is-reg-exp.js
npm sill gunzTarPerm extractEntry test/RegExp/valid-reg-exp.js
npm sill gunzTarPerm extractEntry test/String/is-string.js
npm sill gunzTarPerm extractEntry test/String/prototype/camel-to-hyphen.js
npm sill gunzTarPerm extractEntry test/String/prototype/contains.js
npm sill gunzTarPerm extractEntry test/String/prototype/ends-with.js
npm sill gunzTarPerm extractEntry test/String/prototype/format.js
npm sill gunzTarPerm extractEntry test/String/prototype/hyphen-to-camel.js
npm sill gunzTarPerm extractEntry test/String/prototype/case-insensitive-compare.js
npm sill gunzTarPerm extractEntry test/String/prototype/last.js
npm sill gunzTarPerm extractEntry test/String/prototype/pad.js
npm sill gunzTarPerm extractEntry test/String/prototype/repeat.js
npm sill gunzTarPerm extractEntry test/String/prototype/simple-replace.js
npm sill gunzTarPerm extractEntry test/String/prototype/starts-with.js
npm sill gunzTarPerm extractEntry test/String/prototype/capitalize.js
npm sill gunzTarPerm extractEntry test/String/prototype/trim-common-left.js
npm sill gunzTarPerm extractEntry test/String/prototype/indent.js
npm sill gunzTarPerm extractEntry test/Array/__scopes.js
npm sill gunzTarPerm extractEntry test/Array/from.js
npm sill gunzTarPerm extractEntry test/Array/generate.js
npm sill gunzTarPerm extractEntry test/Array/of.js
npm sill gunzTarPerm extractEntry test/Array/prototype/_compare-by-length.js
npm sill gunzTarPerm extractEntry test/Array/prototype/e-last-index-of.js
npm sill gunzTarPerm extractEntry test/Array/prototype/exclusion.js
npm sill gunzTarPerm extractEntry test/Array/prototype/find.js
npm sill gunzTarPerm extractEntry test/Array/prototype/first-index.js
npm sill gunzTarPerm extractEntry test/Array/prototype/e-index-of.js
npm sill gunzTarPerm extractEntry test/Array/prototype/flatten.js
npm sill gunzTarPerm extractEntry test/Array/prototype/for-each-right.js
npm sill gunzTarPerm extractEntry test/Array/prototype/group.js
npm sill gunzTarPerm extractEntry test/Array/prototype/indexes-of.js
npm sill gunzTarPerm extractEntry test/Array/prototype/intersection.js
npm sill gunzTarPerm extractEntry test/Array/prototype/diff.js
npm sill gunzTarPerm extractEntry test/Array/prototype/is-copy.js
npm sill gunzTarPerm extractEntry test/Array/prototype/copy.js
npm sill gunzTarPerm extractEntry test/Array/prototype/is-uniq.js
npm sill gunzTarPerm extractEntry test/Array/prototype/contains.js
npm sill gunzTarPerm extractEntry test/Array/prototype/last-index.js
npm sill gunzTarPerm extractEntry test/Array/prototype/compact.js
npm sill gunzTarPerm extractEntry test/Array/prototype/last.js
npm sill gunzTarPerm extractEntry test/Array/prototype/common-left.js
npm sill gunzTarPerm extractEntry test/Array/prototype/remove.js
npm sill gunzTarPerm extractEntry test/Array/prototype/clear.js
npm sill gunzTarPerm extractEntry test/Array/prototype/some-right.js
npm sill gunzTarPerm extractEntry test/Array/prototype/binary-search.js
npm sill gunzTarPerm extractEntry test/Array/prototype/uniq.js
npm sill gunzTarPerm extractEntry test/Array/prototype/first.js
npm sill gunzTarPerm extractEntry test/Date/is-date.js
npm sill gunzTarPerm extractEntry test/Date/valid-date.js
npm sill gunzTarPerm extractEntry test/Date/prototype/copy.js
npm sill gunzTarPerm extractEntry test/Date/prototype/days-in-month.js
npm sill gunzTarPerm extractEntry test/Date/prototype/floor-day.js
npm sill gunzTarPerm extractEntry test/Date/prototype/floor-month.js
npm sill gunzTarPerm extractEntry test/Date/prototype/floor-year.js
npm sill gunzTarPerm extractEntry test/Date/prototype/format.js
npm sill gunzTarPerm extractEntry test/Number/index.js
npm sill gunzTarPerm extractEntry test/Number/is-nan.js
npm sill gunzTarPerm extractEntry test/Number/is-number.js
npm sill gunzTarPerm extractEntry test/Number/to-int.js
npm sill gunzTarPerm extractEntry test/Number/to-uint.js
npm sill gunzTarPerm extractEntry test/Number/to-uint32.js
npm sill gunzTarPerm extractEntry test/Number/prototype/pad.js
npm info install deep-equal@0.0.0
npm sill gunzTarPerm extractEntry lib/winston/transports/webhook.js
npm sill gunzTarPerm extractEntry test/cli-test.js
npm sill lockFile 013dc25b-kb-npm-jsonify-0-0-0-package-tgz tar:///Users/hamrickb/.npm/jsonify/0.0.0/package.tgz
npm sill lockFile 013dc25b-kb-npm-jsonify-0-0-0-package-tgz tar:///Users/hamrickb/.npm/jsonify/0.0.0/package.tgz
npm sill addNameRange { name: 'eventemitter3', range: '*', hasData: false }
npm info postinstall deep-equal@0.0.0
npm sill gunzTarPerm extractEntry .gitattributes
npm sill gunzTarPerm extractEntry test/views.js
npm info preinstall jsonify@0.0.0
npm sill lockFile 0ac31546-uuid-1-4-1 uuid@1.4.1
npm sill lockFile 0ac31546-uuid-1-4-1 uuid@1.4.1
npm sill lockFile 4348054e-async-0-2-8 async@0.2.8
npm sill lockFile 4348054e-async-0-2-8 async@0.2.8
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/jsonify
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules/jsonify
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape/node_modules' ]
npm info linkStuff jsonify@0.0.0
npm verb linkBins jsonify@0.0.0
npm verb linkMans jsonify@0.0.0
npm verb rebuildBundles jsonify@0.0.0
npm sill gunzTarPerm extractEntry test/custom-timestamp-test.js
npm sill gunzTarPerm extractEntry test/exception-test.js
npm info install jsonify@0.0.0
npm sill lockFile ea663ebb-odie-server-node-modules-request tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm sill lockFile ea663ebb-odie-server-node-modules-request tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info postinstall jsonify@0.0.0
npm sill gunzTarPerm extractEntry test/gzip.js
npm sill gunzTarPerm extractEntry test/handler.js
npm sill lockFile e84d2bd9-b-npm-request-2-16-6-package-tgz tar:///Users/hamrickb/.npm/request/2.16.6/package.tgz
npm sill lockFile e84d2bd9-b-npm-request-2-16-6-package-tgz tar:///Users/hamrickb/.npm/request/2.16.6/package.tgz
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/tape
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules' ]
npm info linkStuff tape@0.2.2
npm verb linkBins tape@0.2.2
npm verb link bins [ {},
npm verb link bins '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock/node_modules/.bin',
npm verb link bins false ]
npm verb linkMans tape@0.2.2
npm verb rebuildBundles tape@0.2.2
npm verb rebuildBundles [ 'deep-equal', 'defined', 'jsonify' ]
npm info install tape@0.2.2
npm sill lockFile 4ecab262-es-read-node-modules-mute-stream tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read/node_modules/mute-stream
npm sill lockFile 4ecab262-es-read-node-modules-mute-stream tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read/node_modules/mute-stream
npm verb registry.get eventemitter3 not expired, no request
npm sill addNameRange number 2 { name: 'eventemitter3', range: '*', hasData: true }
npm sill addNameRange versions [ 'eventemitter3', [ '0.0.0', '0.0.1', '0.1.0', '0.1.1' ] ]
npm verb addNamed [ 'eventemitter3', '0.1.1' ]
npm verb addNamed [ '0.1.1', '0.1.1' ]
npm sill lockFile fea42b1c-eventemitter3-0-1-1 eventemitter3@0.1.1
npm verb lock eventemitter3@0.1.1 /Users/hamrickb/.npm/fea42b1c-eventemitter3-0-1-1.lock
npm sill lockFile 54365c3f-pm-mute-stream-0-0-4-package-tgz tar:///Users/hamrickb/.npm/mute-stream/0.0.4/package.tgz
npm sill lockFile 54365c3f-pm-mute-stream-0-0-4-package-tgz tar:///Users/hamrickb/.npm/mute-stream/0.0.4/package.tgz
npm info preinstall request@2.16.6
npm info postinstall tape@0.2.2
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/lock
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules' ]
npm info linkStuff lock@0.0.3
npm verb linkBins lock@0.0.3
npm verb linkMans lock@0.0.3
npm verb rebuildBundles lock@0.0.3
npm verb readDependencies using package.json deps
npm verb rebuildBundles [ 'tape' ]
npm info install lock@0.0.3
npm info preinstall mute-stream@0.0.4
npm verb readDependencies using package.json deps
npm verb cache add [ 'hawk@~0.10.2', null ]
npm verb cache add name=undefined spec="hawk@~0.10.2" args=["hawk@~0.10.2",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'hawk@~0.10.2',
npm verb parsed url path: 'hawk@~0.10.2',
npm verb parsed url href: 'hawk@~0.10.2' }
npm verb cache add name="hawk" spec="~0.10.2" args=["hawk","~0.10.2"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.10.2',
npm verb parsed url path: '~0.10.2',
npm verb parsed url href: '~0.10.2' }
npm verb addNamed [ 'hawk', '~0.10.2' ]
npm verb addNamed [ null, '>=0.10.2-0 <0.11.0-0' ]
npm sill lockFile f84498ae-hawk-0-10-2 hawk@~0.10.2
npm verb lock hawk@~0.10.2 /Users/hamrickb/.npm/f84498ae-hawk-0-10-2.lock
npm verb cache add [ 'node-uuid@~1.4.0', null ]
npm verb cache add name=undefined spec="node-uuid@~1.4.0" args=["node-uuid@~1.4.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'node-uuid@~1.4.0',
npm verb parsed url path: 'node-uuid@~1.4.0',
npm verb parsed url href: 'node-uuid@~1.4.0' }
npm verb cache add name="node-uuid" spec="~1.4.0" args=["node-uuid","~1.4.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~1.4.0',
npm verb parsed url path: '~1.4.0',
npm verb parsed url href: '~1.4.0' }
npm verb addNamed [ 'node-uuid', '~1.4.0' ]
npm verb addNamed [ null, '>=1.4.0-0 <1.5.0-0' ]
npm sill lockFile f662725f-node-uuid-1-4-0 node-uuid@~1.4.0
npm verb lock node-uuid@~1.4.0 /Users/hamrickb/.npm/f662725f-node-uuid-1-4-0.lock
npm verb cache add [ 'cookie-jar@~0.2.0', null ]
npm verb cache add name=undefined spec="cookie-jar@~0.2.0" args=["cookie-jar@~0.2.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'cookie-jar@~0.2.0',
npm verb parsed url path: 'cookie-jar@~0.2.0',
npm verb parsed url href: 'cookie-jar@~0.2.0' }
npm verb cache add name="cookie-jar" spec="~0.2.0" args=["cookie-jar","~0.2.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.2.0',
npm verb parsed url path: '~0.2.0',
npm verb parsed url href: '~0.2.0' }
npm verb addNamed [ 'cookie-jar', '~0.2.0' ]
npm verb addNamed [ null, '>=0.2.0-0 <0.3.0-0' ]
npm sill lockFile 4df5a18a-cookie-jar-0-2-0 cookie-jar@~0.2.0
npm verb lock cookie-jar@~0.2.0 /Users/hamrickb/.npm/4df5a18a-cookie-jar-0-2-0.lock
npm info postinstall lock@0.0.3
npm sill gunzTarPerm extractEntry test/hapi.js
npm sill gunzTarPerm extractEntry test/helper.js
npm verb cache add [ 'aws-sign@~0.2.0', null ]
npm verb cache add name=undefined spec="aws-sign@~0.2.0" args=["aws-sign@~0.2.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'aws-sign@~0.2.0',
npm verb parsed url path: 'aws-sign@~0.2.0',
npm verb parsed url href: 'aws-sign@~0.2.0' }
npm verb cache add name="aws-sign" spec="~0.2.0" args=["aws-sign","~0.2.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.2.0',
npm verb parsed url path: '~0.2.0',
npm verb parsed url href: '~0.2.0' }
npm verb addNamed [ 'aws-sign', '~0.2.0' ]
npm verb addNamed [ null, '>=0.2.0-0 <0.3.0-0' ]
npm sill lockFile b6564d90-aws-sign-0-2-0 aws-sign@~0.2.0
npm verb lock aws-sign@~0.2.0 /Users/hamrickb/.npm/b6564d90-aws-sign-0-2-0.lock
npm verb cache add [ 'oauth-sign@~0.2.0', null ]
npm verb cache add name=undefined spec="oauth-sign@~0.2.0" args=["oauth-sign@~0.2.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'oauth-sign@~0.2.0',
npm verb parsed url path: 'oauth-sign@~0.2.0',
npm verb parsed url href: 'oauth-sign@~0.2.0' }
npm verb cache add name="oauth-sign" spec="~0.2.0" args=["oauth-sign","~0.2.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.2.0',
npm verb parsed url path: '~0.2.0',
npm verb parsed url href: '~0.2.0' }
npm verb addNamed [ 'oauth-sign', '~0.2.0' ]
npm verb addNamed [ null, '>=0.2.0-0 <0.3.0-0' ]
npm sill lockFile d6e8c101-oauth-sign-0-2-0 oauth-sign@~0.2.0
npm verb lock oauth-sign@~0.2.0 /Users/hamrickb/.npm/d6e8c101-oauth-sign-0-2-0.lock
npm verb cache add [ 'forever-agent@~0.2.0', null ]
npm verb cache add name=undefined spec="forever-agent@~0.2.0" args=["forever-agent@~0.2.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'forever-agent@~0.2.0',
npm verb parsed url path: 'forever-agent@~0.2.0',
npm verb parsed url href: 'forever-agent@~0.2.0' }
npm verb cache add name="forever-agent" spec="~0.2.0" args=["forever-agent","~0.2.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.2.0',
npm verb parsed url path: '~0.2.0',
npm verb parsed url href: '~0.2.0' }
npm verb addNamed [ 'forever-agent', '~0.2.0' ]
npm verb addNamed [ null, '>=0.2.0-0 <0.3.0-0' ]
npm sill lockFile df7f0a96-forever-agent-0-2-0 forever-agent@~0.2.0
npm verb lock forever-agent@~0.2.0 /Users/hamrickb/.npm/df7f0a96-forever-agent-0-2-0.lock
npm verb cache add [ 'tunnel-agent@~0.2.0', null ]
npm verb cache add name=undefined spec="tunnel-agent@~0.2.0" args=["tunnel-agent@~0.2.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'tunnel-agent@~0.2.0',
npm verb parsed url path: 'tunnel-agent@~0.2.0',
npm verb parsed url href: 'tunnel-agent@~0.2.0' }
npm verb cache add name="tunnel-agent" spec="~0.2.0" args=["tunnel-agent","~0.2.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.2.0',
npm verb parsed url path: '~0.2.0',
npm verb parsed url href: '~0.2.0' }
npm verb addNamed [ 'tunnel-agent', '~0.2.0' ]
npm verb addNamed [ null, '>=0.2.0-0 <0.3.0-0' ]
npm sill lockFile 13cacb1b-tunnel-agent-0-2-0 tunnel-agent@~0.2.0
npm verb lock tunnel-agent@~0.2.0 /Users/hamrickb/.npm/13cacb1b-tunnel-agent-0-2-0.lock
npm verb cache add [ 'json-stringify-safe@~3.0.0', null ]
npm verb cache add name=undefined spec="json-stringify-safe@~3.0.0" args=["json-stringify-safe@~3.0.0",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'json-stringify-safe@~3.0.0',
npm verb parsed url path: 'json-stringify-safe@~3.0.0',
npm verb parsed url href: 'json-stringify-safe@~3.0.0' }
npm verb cache add name="json-stringify-safe" spec="~3.0.0" args=["json-stringify-safe","~3.0.0"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~3.0.0',
npm verb parsed url path: '~3.0.0',
npm verb parsed url href: '~3.0.0' }
npm verb addNamed [ 'json-stringify-safe', '~3.0.0' ]
npm verb addNamed [ null, '>=3.0.0-0 <3.1.0-0' ]
npm sill lockFile a99e72b7-json-stringify-safe-3-0-0 json-stringify-safe@~3.0.0
npm verb lock json-stringify-safe@~3.0.0 /Users/hamrickb/.npm/a99e72b7-json-stringify-safe-3-0-0.lock
npm verb cache add [ 'qs@~0.5.4', null ]
npm verb cache add name=undefined spec="qs@~0.5.4" args=["qs@~0.5.4",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'qs@~0.5.4',
npm verb parsed url path: 'qs@~0.5.4',
npm verb parsed url href: 'qs@~0.5.4' }
npm verb cache add name="qs" spec="~0.5.4" args=["qs","~0.5.4"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.5.4',
npm verb parsed url path: '~0.5.4',
npm verb parsed url href: '~0.5.4' }
npm verb addNamed [ 'qs', '~0.5.4' ]
npm verb addNamed [ null, '>=0.5.4-0 <0.6.0-0' ]
npm sill lockFile 2dead18a-qs-0-5-4 qs@~0.5.4
npm verb lock qs@~0.5.4 /Users/hamrickb/.npm/2dead18a-qs-0-5-4.lock
npm sill lockFile e39bbbd5-mailcomposer-0-2-8 mailcomposer@0.2.8
npm sill lockFile e39bbbd5-mailcomposer-0-2-8 mailcomposer@0.2.8
npm sill gunzTarPerm extractEntry test/logger-test.js
npm sill gunzTarPerm extractEntry test/container-test.js
npm verb readDependencies using package.json deps
npm sill addNameRange { name: 'hawk', range: '>=0.10.2-0 <0.11.0-0', hasData: false }
npm sill addNameRange { name: 'node-uuid',
npm sill addNameRange range: '>=1.4.0-0 <1.5.0-0',
npm sill addNameRange hasData: false }
npm sill addNameRange { name: 'cookie-jar',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: false }
npm verb cache add [ 'form-data@~0.0.3', null ]
npm verb cache add name=undefined spec="form-data@~0.0.3" args=["form-data@~0.0.3",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'form-data@~0.0.3',
npm verb parsed url path: 'form-data@~0.0.3',
npm verb parsed url href: 'form-data@~0.0.3' }
npm verb cache add name="form-data" spec="~0.0.3" args=["form-data","~0.0.3"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~0.0.3',
npm verb parsed url path: '~0.0.3',
npm verb parsed url href: '~0.0.3' }
npm verb addNamed [ 'form-data', '~0.0.3' ]
npm verb addNamed [ null, '>=0.0.3-0 <0.1.0-0' ]
npm sill lockFile 539eee6c-form-data-0-0-3 form-data@~0.0.3
npm verb lock form-data@~0.0.3 /Users/hamrickb/.npm/539eee6c-form-data-0-0-3.lock
npm verb cache add [ 'mime@~1.2.7', null ]
npm verb cache add name=undefined spec="mime@~1.2.7" args=["mime@~1.2.7",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'mime@~1.2.7',
npm verb parsed url path: 'mime@~1.2.7',
npm verb parsed url href: 'mime@~1.2.7' }
npm verb cache add name="mime" spec="~1.2.7" args=["mime","~1.2.7"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~1.2.7',
npm verb parsed url path: '~1.2.7',
npm verb parsed url href: '~1.2.7' }
npm verb addNamed [ 'mime', '~1.2.7' ]
npm verb addNamed [ null, '>=1.2.7-0 <1.3.0-0' ]
npm sill lockFile 3725bc70-mime-1-2-7 mime@~1.2.7
npm verb lock mime@~1.2.7 /Users/hamrickb/.npm/3725bc70-mime-1-2-7.lock
npm sill lockFile 295c1460-mailcomposer-0-2 mailcomposer@~0.2
npm sill lockFile 295c1460-mailcomposer-0-2 mailcomposer@~0.2
npm verb readDependencies using package.json deps
npm sill resolved []
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read/node_modules/mute-stream
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read/node_modules/mute-stream
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read/node_modules' ]
npm info linkStuff mute-stream@0.0.4
npm verb linkBins mute-stream@0.0.4
npm verb linkMans mute-stream@0.0.4
npm verb rebuildBundles mute-stream@0.0.4
npm sill addNameRange { name: 'aws-sign', range: '>=0.2.0-0 <0.3.0-0', hasData: false }
npm sill addNameRange { name: 'oauth-sign',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: false }
npm sill addNameRange { name: 'forever-agent',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: false }
npm sill lockFile 64ea3f57-moment-2-1-0 moment@2.1.0
npm sill lockFile 64ea3f57-moment-2-1-0 moment@2.1.0
npm sill addNameRange { name: 'tunnel-agent',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: false }
npm sill addNameRange { name: 'json-stringify-safe',
npm sill addNameRange range: '>=3.0.0-0 <3.1.0-0',
npm sill addNameRange hasData: false }
npm sill addNameRange { name: 'qs', range: '>=0.5.4-0 <0.6.0-0', hasData: false }
npm info install mute-stream@0.0.4
npm sill lockFile be93268b-dules-couchr-node-modules-follow tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr/node_modules/follow
npm sill lockFile be93268b-dules-couchr-node-modules-follow tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr/node_modules/follow
npm sill resolved [ { name: 'couchr',
npm sill resolved description: 'Lightweight XHR wrapper for CouchDB requests',
npm sill resolved version: '0.0.13',
npm sill resolved categories: [ 'AJAX & Websockets', 'API Clients' ],
npm sill resolved jam:
npm sill resolved { main: 'couchr-browser.js',
npm sill resolved include: [Object],
npm sill resolved dependencies: [Object] },
npm sill resolved main: 'couchr-node.js',
npm sill resolved dependencies: { follow: '0.8.0' },
npm sill resolved github: 'https://github.com/caolan/couchr',
npm sill resolved bugs: { url: 'https://github.com/caolan/couchr/issues' },
npm sill resolved repositories: [ [Object] ],
npm sill resolved licenses: [ [Object] ],
npm sill resolved readme: '# couchr\n\nSimple request library for CouchDB. Provides both a Node.js module and a\nbrowser module (based on jQuery.ajax), with better CouchDB error reporting\nand a simpler API than making XHR requests directly in the browser.\n\n\n### Examples\n\n```javascript\n// browser\nrequire([\'couchr\'], function (couchr) {\n couchr.get(\'/dbname/docid\', function (err, doc) {\n ...\n });\n});\n\n// Node\nvar couchr = require(\'couchr\');\ncouchr.get(\'http://hostname:port/dbname/docid\', function (err, doc) {\n ...\n});\n```\n\n### Methods\n\n```javascript\ncouchr.get (url, /*optional*/params, function (err, res, req) { ... })\ncouchr.post(url, /*optional*/data, function (err, res, req) { ... })\ncouchr.put (url, /*optional*/data, function (err, res, req) { ... })\ncouchr.del (url, /*optional*/data, function (err, res, req) { ... })\ncouchr.head(url, function (err, res, req) { ... })\n\ncouchr.copy(from, to, function (err, res, req) { ... }) \n\nvar feed = couchr.changes(db_url);\nfeed.on(\'change\', function (change_object) { ... });\nfeed.on(\'error\', function (err) { ... });\nfeed.pause();\nfeed.resume();\n```\n\n### Installation\n\nBrowser (using [jam](http://jamjs.org)):\n\n jam install couchr\n\nNode (using [npm](http://npmjs.org)):\n\n npm install couchr\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved repository: { type: 'git', url: 'https://github.com/caolan/couchr.git' },
npm sill resolved homepage: 'https://github.com/caolan/couchr',
npm sill resolved _id: 'couchr@0.0.13',
npm sill resolved _from: 'couchr@0.0.13',
npm sill resolved scripts: {} },
npm sill resolved { name: 'underscore',
npm sill resolved description: 'JavaScript\'s functional programming helper library.',
npm sill resolved homepage: 'http://underscorejs.org',
npm sill resolved keywords: [ 'util', 'functional', 'server', 'client', 'browser' ],
npm sill resolved author: { name: 'Jeremy Ashkenas', email: 'jeremy@documentcloud.org' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/documentcloud/underscore.git' },
npm sill resolved main: 'underscore.js',
npm sill resolved version: '1.4.4',
npm sill resolved devDependencies: { phantomjs: '0.2.2' },
npm sill resolved scripts: { test: 'phantomjs test/vendor/runner.js test/index.html?noglobals=true' },
npm sill resolved readme: ' __\n /\\ \\ __\n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____\n /\\ \\/\\ \\ /\' _ `\\ /\'_ \\ /\'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/\'__`\\ \\/\\ \\ /\',__\\\n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/\n \\ \\____/\n \\/___/\n\nUnderscore.js is a utility-belt library for JavaScript that provides\nsupport for the usual functional suspects (each, map, reduce, filter...)\nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://underscorejs.org\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/documentcloud/underscore/issues' },
npm sill resolved _id: 'underscore@1.4.4',
npm sill resolved _from: 'underscore@1.4.4' },
npm sill resolved { name: 'uuid',
npm sill resolved version: '1.4.1',
npm sill resolved description: 'Rigorous implementation of RFC4122 (v1 and v4) UUIDs.',
npm sill resolved keywords: [ 'uuid', 'guid', 'rfc4122' ],
npm sill resolved author: { name: 'Robert Kieffer', email: 'robert@broofa.com' },
npm sill resolved contributors: [ [Object] ],
npm sill resolved main: './uuid.js',
npm sill resolved devDependencies: { mocha: '1.8.0' },
npm sill resolved scripts: { test: 'mocha test/test.js' },
npm sill resolved browser: { './rng.js': './rng-browser.js' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'https://github.com/shtylman/node-uuid.git' },
npm sill resolved testling: { browsers: [Object], harness: 'mocha-tdd', files: 'test/*.js' },
npm sill resolved readme: '# uuid [![Build Status](https://secure.travis-ci.org/shtylman/node-uuid.png?branch=master)](http://travis-ci.org/shtylman/node-uuid) #\n\n[![browser support](http://ci.testling.com/shtylman/node-uuid.png)](http://ci.testling.com/shtylman/node-uuid)\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip\'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src="uuid.js"></script>\n```\n\nOr in node.js:\n\n```\nnpm install uuid\n```\n\n```javascript\nvar uuid = require(\'uuid\');\n\n// Generate a v1 (time-based) id\nuuid.v1(); // -> \'6c84fb90-12c4-11e1-840d-7b25c5ee775a\'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> \'110ec58a-a0f2-4ac4-8393-c866d813b8d1\'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date(\'2011-11-01\').getTime(),\n nsecs: 5678\n}); // -> "710b962e-041c-11e1-9234-0123456789ab"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> \'02a2ce90-1432-11e1-8558-0b488e4fc115\'\nuuid.unparse(buffer, 16) // -> \'02a31cb0-1432-11e1-8558-0b488e4fc115\'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or \'new Buffer\' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse(\'797ff043-11eb-11e1-80d6-510998755d10\'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> \'797ff043-11eb-11e1-80d6-510998755d10\'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it\'s previous value.\n\nReturns the uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> \'6c84fb90-12c4-11e1-840d-7b25c5ee775a\'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/shtylman/node-uuid/issues' },
npm sill resolved homepage: 'https://github.com/shtylman/node-uuid',
npm sill resolved _id: 'uuid@1.4.1',
npm sill resolved _from: 'uuid@1.4.1' },
npm sill resolved { name: 'async',
npm sill resolved description: 'Higher-order functions and common patterns for asynchronous code',
npm sill resolved main: './lib/async',
npm sill resolved author: { name: 'Caolan McMahon' },
npm sill resolved version: '0.2.8',
npm sill resolved repository: { type: 'git', url: 'http://github.com/caolan/async.git' },
npm sill resolved bugs: { url: 'http://github.com/caolan/async/issues' },
npm sill resolved licenses: [ [Object] ],
npm sill resolved devDependencies: { nodeunit: '>0.0.0', 'uglify-js': '1.2.x', nodelint: '>0.0.0' },
npm sill resolved jam: { main: 'lib/async.js', include: [Object] },
npm sill resolved scripts: { test: 'nodeunit test/test-async.js' },
npm sill resolved readme: '# Async.js\n\nAsync is a utility module which provides straight-forward, powerful functions\nfor working with asynchronous JavaScript. Although originally designed for\nuse with [node.js](http://nodejs.org), it can also be used directly in the\nbrowser.\n\nAsync provides around 20 functions that include the usual \'functional\'\nsuspects (map, reduce, filter, each…) as well as some common patterns\nfor asynchronous control flow (parallel, series, waterfall…). All these\nfunctions assume you follow the node.js convention of providing a single\ncallback as the last argument of your async function.\n\n\n## Quick Examples\n\n```javascript\nasync.map([\'file1\',\'file2\',\'file3\'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n\nasync.filter([\'file1\',\'file2\',\'file3\'], path.exists, function(results){\n // results now equals an array of the existing files\n});\n\nasync.parallel([\n function(){ ... },\n function(){ ... }\n], callback);\n\nasync.series([\n function(){ ... },\n function(){ ... }\n]);\n```\n\nThere are many more functions available so take a look at the docs below for a\nfull list. This module aims to be comprehensive, so if you feel anything is\nmissing please create a GitHub issue for it.\n\n## Common Pitfalls\n\n### Binding a context to an iterator\n\nThis section is really about bind, not about async. If you are wondering how to\nmake async execute your iterators in a given context, or are confused as to why\na method of another library isn\'t working as an iterator, study this example:\n\n```js\n// Here is a simple object with an (unnecessarily roundabout) squaring method\nvar AsyncSquaringLibrary = {\n squareExponent: 2,\n square: function(number, callback){ \n var result = Math.pow(number, this.squareExponent);\n setTimeout(function(){\n callback(null, result);\n }, 200);\n }\n};\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){\n // result is [NaN, NaN, NaN]\n // This fails because the `this.squareExponent` expression in the square\n // function is not evaluated in the context of AsyncSquaringLibrary, and is\n // therefore undefined.\n});\n\nasync.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){\n // result is [1, 4, 9]\n // With the help of bind we can attach a context to the iterator before\n // passing it to async. Now the square function will be executed in its \n // \'home\' AsyncSquaringLibrary context and the value of `this.squareExponent`\n // will be as expected.\n});\n```\n\n## Download\n\nThe source is available for download from\n[GitHub](http://github.com/caolan/async).\nAlternatively, you can install using Node Package Manager (npm):\n\n npm install async\n\n__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed\n\n## In the Browser\n\nSo far it\'s been tested in IE6, IE7, IE8, FF3.6 and Chrome 5. Usage:\n\n```html\n<script type="text/javascript" src="async.js"></script>\n<script type="text/javascript">\n\n async.map(data, asyncProcess, function(err, results){\n alert(results);\n });\n\n</script>\n```\n\n## Documentation\n\n### Collections\n\n* [each](#each)\n* [map](#map)\n* [filter](#filter)\n* [reject](#reject)\n* [reduce](#reduce)\n* [detect](#detect)\n* [sortBy](#sortBy)\n* [some](#some)\n* [every](#every)\n* [concat](#concat)\n\n### Control Flow\n\n* [series](#series)\n* [parallel](#parallel)\n* [whilst](#whilst)\n* [doWhilst](#doWhilst)\n* [until](#until)\n* [doUntil](#doUntil)\n* [forever](#forever)\n* [waterfall](#waterfall)\n* [compose](#compose)\n* [applyEach](#applyEach)\n* [queue](#queue)\n* [cargo](#cargo)\n* [auto](#auto)\n* [iterator](#iterator)\n* [apply](#apply)\n* [nextTick](#nextTick)\n* [times](#times)\n* [timesSeries](#timesSeries)\n\n### Utils\n\n* [memoize](#memoize)\n* [unmemoize](#unmemoize)\n* [log](#log)\n* [dir](#dir)\n* [noConflict](#noConflict)\n\n\n## Collections\n\n<a name="forEach" />\n<a name="each" />\n### each(arr, iterator, callback)\n\nApplies an iterator function to each item in an array, in parallel.\nThe iterator is called with an item from the list and a callback for when it\nhas finished. If the iterator passes an error to this callback, the main\ncallback for the each function is immediately called with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// assuming openFiles is an array of file names and saveFile is a function\n// to save the modified contents of that file:\n\nasync.each(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name="forEachSeries" />\n<a name="eachSeries" />\n### eachSeries(arr, iterator, callback)\n\nThe same as each only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. This means the iterator functions will complete in order.\n\n\n---------------------------------------\n\n<a name="forEachLimit" />\n<a name="eachLimit" />\n### eachLimit(arr, limit, iterator, callback)\n\nThe same as each only no more than "limit" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first "limit" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err) which must be called once it has \n completed. If no error has occured, the callback should be run without \n arguments or with an explicit null argument.\n* callback(err) - A callback which is called after all the iterator functions\n have finished, or an error has occurred.\n\n__Example__\n\n```js\n// Assume documents is an array of JSON objects and requestApi is a\n// function that interacts with a rate-limited REST api.\n\nasync.eachLimit(documents, 20, requestApi, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n---------------------------------------\n\n<a name="map" />\n### map(arr, iterator, callback)\n\nProduces a new array of values by mapping each value in the given array through\nthe iterator function. The iterator is called with an item from the array and a\ncallback for when it has finished processing. The callback takes 2 arguments, \nan error and the transformed item from the array. If the iterator passes an\nerror to this callback, the main callback for the map function is immediately\ncalled with the error.\n\nNote, that since this function applies the iterator to each item in parallel\nthere is no guarantee that the iterator functions will complete in order, however\nthe results array will be in the same order as the original array.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map([\'file1\',\'file2\',\'file3\'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name="mapSeries" />\n### mapSeries(arr, iterator, callback)\n\nThe same as map only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n---------------------------------------\n\n<a name="mapLimit" />\n### mapLimit(arr, limit, iterator, callback)\n\nThe same as map only no more than "limit" iterators will be simultaneously \nrunning at any time.\n\nNote that the items are not processed in batches, so there is no guarantee that\n the first "limit" iterator functions will complete before any others are \nstarted.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* limit - The maximum number of iterators to run at any time.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, transformed) which must be called once \n it has completed with an error (which can be null) and a transformed item.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array of the\n transformed items from the original array.\n\n__Example__\n\n```js\nasync.map([\'file1\',\'file2\',\'file3\'], 1, fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n---------------------------------------\n\n<a name="filter" />\n### filter(arr, iterator, callback)\n\n__Alias:__ select\n\nReturns a new array of all the values which pass an async truth test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(results) - A callback which is called after all the iterator\n functions have finished.\n\n__Example__\n\n```js\nasync.filter([\'file1\',\'file2\',\'file3\'], path.exists, function(results){\n // results now equals an array of the existing files\n});\n```\n\n---------------------------------------\n\n<a name="filterSeries" />\n### filterSeries(arr, iterator, callback)\n\n__alias:__ selectSeries\n\nThe same as filter only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n---------------------------------------\n\n<a name="reject" />\n### reject(arr, iterator, callback)\n\nThe opposite of filter. Removes values that pass an async truth test.\n\n---------------------------------------\n\n<a name="rejectSeries" />\n### rejectSeries(arr, iterator, callback)\n\nThe same as reject, only the iterator is applied to each item in the array\nin series.\n\n\n---------------------------------------\n\n<a name="reduce" />\n### reduce(arr, memo, iterator, callback)\n\n__aliases:__ inject, foldl\n\nReduces a list of values into a single value using an async iterator to return\neach successive step. Memo is the initial state of the reduction. This\nfunction only operates in series. For performance reasons, it may make sense to\nsplit a call to this function into a parallel map, then use the normal\nArray.prototype.reduce on the results. This function is for situations where\neach step in the reduction needs to be async, if you can get the data before\nreducing it then it\'s probably a good idea to do so.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* memo - The initial state of the reduction.\n* iterator(memo, item, callback) - A function applied to each item in the\n array to produce the next step in the reduction. The iterator is passed a\n callback(err, reduction) which accepts an optional error as its first \n argument, and the state of the reduction as the second. If an error is \n passed to the callback, the reduction is stopped and the main callback is \n immediately called with the error.\n* callback(err, result) - A callback which is called after all the iterator\n functions have finished. Result is the reduced value.\n\n__Example__\n\n```js\nasync.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n}, function(err, result){\n // result is now equal to the last value of memo, which is 6\n});\n```\n\n---------------------------------------\n\n<a name="reduceRight" />\n### reduceRight(arr, memo, iterator, callback)\n\n__Alias:__ foldr\n\nSame as reduce, only operates on the items in the array in reverse order.\n\n\n---------------------------------------\n\n<a name="detect" />\n### detect(arr, iterator, callback)\n\nReturns the first value in a list that passes an async truth test. The\niterator is applied in parallel, meaning the first iterator to return true will\nfire the detect callback with that result. That means the result might not be\nthe first item in the original array (in terms of order) that passes the test.\n\nIf order within the original array is important then look at detectSeries.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value undefined if none passed.\n\n__Example__\n\n```js\nasync.detect([\'file1\',\'file2\',\'file3\'], path.exists, function(result){\n // result now equals the first file in the list that exists\n});\n```\n\n---------------------------------------\n\n<a name="detectSeries" />\n### detectSeries(arr, iterator, callback)\n\nThe same as detect, only the iterator is applied to each item in the array\nin series. This means the result is always the first in the original array (in\nterms of array order) that passes the truth test.\n\n\n---------------------------------------\n\n<a name="sortBy" />\n### sortBy(arr, iterator, callback)\n\nSorts a list by the results of running each value through an async iterator.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, sortValue) which must be called once it\n has completed with an error (which can be null) and a value to use as the sort\n criteria.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is the items from\n the original array sorted by the values returned by the iterator calls.\n\n__Example__\n\n```js\nasync.sortBy([\'file1\',\'file2\',\'file3\'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n}, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n});\n```\n\n---------------------------------------\n\n<a name="some" />\n### some(arr, iterator, callback)\n\n__Alias:__ any\n\nReturns true if at least one element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists. Once any iterator\ncall returns true, the main callback is immediately called.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called as soon as any iterator returns\n true, or after all the iterator functions have finished. Result will be\n either true or false depending on the values of the async tests.\n\n__Example__\n\n```js\nasync.some([\'file1\',\'file2\',\'file3\'], path.exists, function(result){\n // if result is true then at least one of the files exists\n});\n```\n\n---------------------------------------\n\n<a name="every" />\n### every(arr, iterator, callback)\n\n__Alias:__ all\n\nReturns true if every element in the array satisfies an async test.\n_The callback for each iterator call only accepts a single argument of true or\nfalse, it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like path.exists.\n\n__Arguments__\n\n* arr - An array to iterate over.\n* iterator(item, callback) - A truth test to apply to each item in the array.\n The iterator is passed a callback(truthValue) which must be called with a \n boolean argument once it has completed.\n* callback(result) - A callback which is called after all the iterator\n functions have finished. Result will be either true or false depending on\n the values of the async tests.\n\n__Example__\n\n```js\nasync.every([\'file1\',\'file2\',\'file3\'], path.exists, function(result){\n // if result is true then every file exists\n});\n```\n\n---------------------------------------\n\n<a name="concat" />\n### concat(arr, iterator, callback)\n\nApplies an iterator to each item in a list, concatenating the results. Returns the\nconcatenated list. The iterators are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of the arguments passed to the iterator function.\n\n__Arguments__\n\n* arr - An array to iterate over\n* iterator(item, callback) - A function to apply to each item in the array.\n The iterator is passed a callback(err, results) which must be called once it \n has completed with an error (which can be null) and an array of results.\n* callback(err, results) - A callback which is called after all the iterator\n functions have finished, or an error has occurred. Results is an array containing\n the concatenated results of the iterator function.\n\n__Example__\n\n```js\nasync.concat([\'dir1\',\'dir2\',\'dir3\'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n});\n```\n\n---------------------------------------\n\n<a name="concatSeries" />\n### concatSeries(arr, iterator, callback)\n\nSame as async.concat, but executes in series instead of parallel.\n\n\n## Control Flow\n\n<a name="series" />\n### series(tasks, [callback])\n\nRun an array of functions in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run and the callback for the series is\nimmediately called with the value of the error. Once the tasks have completed,\nthe results are passed to the final callback as an array.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.series.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed\n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.series([\n function(callback){\n // do some stuff ...\n callback(null, \'one\');\n },\n function(callback){\n // do some more stuff ...\n callback(null, \'two\');\n }\n],\n// optional callback\nfunction(err, results){\n // results is now equal to [\'one\', \'two\']\n});\n\n\n// an example using an object instead of an array\nasync.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equal to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name="parallel" />\n### parallel(tasks, [callback])\n\nRun an array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main callback is immediately called with the value of the error.\nOnce the tasks have completed, the results are passed to the final callback as an\narray.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final callback as an object\ninstead of an array. This can be a more readable way of handling results from\nasync.parallel.\n\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, \'one\');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, \'two\');\n }, 100);\n }\n],\n// optional callback\nfunction(err, results){\n // the results array will equal [\'one\',\'two\'] even though\n // the second function had a shorter timeout.\n});\n\n\n// an example using an object instead of an array\nasync.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equals to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n<a name="parallel" />\n### parallelLimit(tasks, limit, [callback])\n\nThe same as parallel only the tasks are executed in parallel with a maximum of "limit" \ntasks executing at any time.\n\nNote that the tasks are not executed in batches, so there is no guarantee that \nthe first "limit" tasks will complete before any others are started.\n\n__Arguments__\n\n* tasks - An array or object containing functions to run, each function is passed \n a callback(err, result) it must call on completion with an error (which can\n be null) and an optional result value.\n* limit - The maximum number of tasks to run at any time.\n* callback(err, results) - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all \n the result arguments passed to the task callbacks.\n\n---------------------------------------\n\n<a name="whilst" />\n### whilst(test, fn, callback)\n\nRepeatedly call fn, while test returns true. Calls the callback when stopped,\nor an error occurs.\n\n__Arguments__\n\n* test() - synchronous truth test to perform before each execution of fn.\n* fn(callback) - A function to call each time the test passes. The function is\n passed a callback(err) which must be called once it has completed with an \n optional error argument.\n* callback(err) - A callback which is called after the test fails and repeated\n execution of fn has stopped.\n\n__Example__\n\n```js\nvar count = 0;\n\nasync.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n);\n```\n\n---------------------------------------\n\n<a name="doWhilst" />\n### doWhilst(fn, test, callback)\n\nThe post check version of whilst. To reflect the difference in the order of operations `test` and `fn` arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n\n---------------------------------------\n\n<a name="until" />\n### until(test, fn, callback)\n\nRepeatedly call fn, until test returns true. Calls the callback when stopped,\nor an error occurs.\n\nThe inverse of async.whilst.\n\n---------------------------------------\n\n<a name="doUntil" />\n### doUntil(fn, test, callback)\n\nLike doWhilst except the test is inverted. Note the argument ordering differs from `until`.\n\n---------------------------------------\n\n<a name="forever" />\n### forever(fn, callback)\n\nCalls the asynchronous function \'fn\' repeatedly, in series, indefinitely.\nIf an error is passed to fn\'s callback then \'callback\' is called with the\nerror, otherwise it will never be called.\n\n---------------------------------------\n\n<a name="waterfall" />\n### waterfall(tasks, [callback])\n\nRuns an array of functions in series, each passing their results to the next in\nthe array. However, if any of the functions pass an error to the callback, the\nnext function is not executed and the main callback is immediately called with\nthe error.\n\n__Arguments__\n\n* tasks - An array of functions to run, each function is passed a \n callback(err, result1, result2, ...) it must call on completion. The first\n argument is an error (which can be null) and any further arguments will be \n passed as arguments in order to the next task.\n* callback(err, [results]) - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task\'s callback.\n\n\n\n__Example__\n\n```js\nasync.waterfall([\n function(callback){\n callback(null, \'one\', \'two\');\n },\n function(arg1, arg2, callback){\n callback(null, \'three\');\n },\n function(arg1, callback){\n // arg1 now equals \'three\'\n callback(null, \'done\');\n }\n], function (err, result) {\n // result now equals \'done\' \n});\n```\n\n---------------------------------------\n<a name="compose" />\n### compose(fn1, fn2...)\n\nCreates a function which is a composition of the passed asynchronous\nfunctions. Each function consumes the return value of the function that\nfollows. Composing functions f(), g() and h() would produce the result of\nf(g(h())), only this version uses callbacks to obtain the return values.\n\nEach function is executed with the `this` binding of the composed function.\n\n__Arguments__\n\n* functions... - the asynchronous functions to compose\n\n\n__Example__\n\n```js\nfunction add1(n, callback) {\n setTimeout(function () {\n callback(null, n + 1);\n }, 10);\n}\n\nfunction mul3(n, callback) {\n setTimeout(function () {\n callback(null, n * 3);\n }, 10);\n}\n\nvar add1mul3 = async.compose(mul3, add1);\n\nadd1mul3(4, function (err, result) {\n // result now equals 15\n});\n```\n\n---------------------------------------\n<a name="applyEach" />\n### applyEach(fns, args..., callback)\n\nApplies the provided arguments to each function in the array, calling the\ncallback after all functions have completed. If you only provide the first\nargument then it will return a function which lets you pass in the\narguments as if it were a single function call.\n\n__Arguments__\n\n* fns - the asynchronous functions to all call with the same arguments\n* args... - any number of separate arguments to pass to the function\n* callback - the final argument should be the callback, called when all\n functions have completed processing\n\n\n__Example__\n\n```js\nasync.applyEach([enableSearch, updateSchema], \'bucket\', callback);\n\n// partial application example:\nasync.each(\n buckets,\n async.applyEach([enableSearch, updateSchema]),\n callback\n);\n```\n\n---------------------------------------\n\n<a name="applyEachSeries" />\n### applyEachSeries(arr, iterator, callback)\n\nThe same as applyEach only the functions are applied in series.\n\n---------------------------------------\n\n<a name="queue" />\n### queue(worker, concurrency)\n\nCreates a queue object with the specified concurrency. Tasks added to the\nqueue will be processed in parallel (up to the concurrency limit). If all\nworkers are in progress, the task is queued until one is available. Once\na worker has completed a task, the task\'s callback is called.\n\n__Arguments__\n\n* worker(task, callback) - An asynchronous function for processing a queued\n task, which must call its callback(err) argument when finished, with an \n optional error as an argument.\n* concurrency - An integer for determining how many worker functions should be\n run in parallel.\n\n__Queue objects__\n\nThe queue object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* concurrency - an integer for determining how many worker functions should be\n run in parallel. This property can be changed after a queue is created to\n alter the concurrency on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* unshift(task, [callback]) - add a new task to the front of the queue.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a queue object with concurrency 2\n\nvar q = async.queue(function (task, callback) {\n console.log(\'hello \' + task.name);\n callback();\n}, 2);\n\n\n// assign a callback\nq.drain = function() {\n console.log(\'all items have been processed\');\n}\n\n// add some items to the queue\n\nq.push({name: \'foo\'}, function (err) {\n console.log(\'finished processing foo\');\n});\nq.push({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\n\n// add some items to the queue (batch-wise)\n\nq.push([{name: \'baz\'},{name: \'bay\'},{name: \'bax\'}], function (err) {\n console.log(\'finished processing bar\');\n});\n\n// add some items to the front of the queue\n\nq.unshift({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\n```\n\n---------------------------------------\n\n<a name="cargo" />\n### cargo(worker, [payload])\n\nCreates a cargo object with the specified payload. Tasks added to the\ncargo will be processed altogether (up to the payload limit). If the\nworker is in progress, the task is queued until it is available. Once\nthe worker has completed some tasks, each callback of those tasks is called.\n\n__Arguments__\n\n* worker(tasks, callback) - An asynchronous function for processing an array of\n queued tasks, which must call its callback(err) argument when finished, with \n an optional error as an argument.\n* payload - An optional integer for determining how many tasks should be\n processed per round; if omitted, the default is unlimited.\n\n__Cargo objects__\n\nThe cargo object returned by this function has the following properties and\nmethods:\n\n* length() - a function returning the number of items waiting to be processed.\n* payload - an integer for determining how many tasks should be\n process per round. This property can be changed after a cargo is created to\n alter the payload on-the-fly.\n* push(task, [callback]) - add a new task to the queue, the callback is called\n once the worker has finished processing the task.\n instead of a single task, an array of tasks can be submitted. the respective callback is used for every task in the list.\n* saturated - a callback that is called when the queue length hits the concurrency and further tasks will be queued\n* empty - a callback that is called when the last item from the queue is given to a worker\n* drain - a callback that is called when the last item from the queue has returned from the worker\n\n__Example__\n\n```js\n// create a cargo object with payload 2\n\nvar cargo = async.cargo(function (tasks, callback) {\n for(var i=0; i<tasks.length; i++){\n console.log(\'hello \' + tasks[i].name);\n }\n callback();\n}, 2);\n\n\n// add some items\n\ncargo.push({name: \'foo\'}, function (err) {\n console.log(\'finished processing foo\');\n});\ncargo.push({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\ncargo.push({name: \'baz\'}, function (err) {\n console.log(\'finished processing baz\');\n});\n```\n\n---------------------------------------\n\n<a name="auto" />\n### auto(tasks, [callback])\n\nDetermines the best order for running functions based on their requirements.\nEach function can optionally depend on other functions being completed first,\nand each function is run as soon as its requirements are satisfied. If any of\nthe functions pass an error to their callback, that function will not complete\n(so any other functions depending on it will not run) and the main callback\nwill be called immediately with the error. Functions also receive an object\ncontaining the results of functions which have completed so far.\n\nNote, all functions are called with a results object as a second argument, \nso it is unsafe to pass functions in the tasks object which cannot handle the\nextra argument. For example, this snippet of code:\n\n```js\nasync.auto({\n readData: async.apply(fs.readFile, \'data.txt\', \'utf-8\');\n}, callback);\n```\n\nwill have the effect of calling readFile with the results object as the last\nargument, which will fail:\n\n```js\nfs.readFile(\'data.txt\', \'utf-8\', cb, {});\n```\n\nInstead, wrap the call to readFile in a function which does not forward the \nresults object:\n\n```js\nasync.auto({\n readData: function(cb, results){\n fs.readFile(\'data.txt\', \'utf-8\', cb);\n }\n}, callback);\n```\n\n__Arguments__\n\n* tasks - An object literal containing named functions or an array of\n requirements, with the function itself the last item in the array. The key\n used for each function or array is used when specifying requirements. The \n function receives two arguments: (1) a callback(err, result) which must be \n called when finished, passing an error (which can be null) and the result of \n the function\'s execution, and (2) a results object, containing the results of\n the previously executed functions.\n* callback(err, results) - An optional callback which is called when all the\n tasks have been completed. The callback will receive an error as an argument\n if any tasks pass an error to their callback. Results will always be passed\n\tbut if an error occurred, no other tasks will be performed, and the results\n\tobject will only contain partial results.\n \n\n__Example__\n\n```js\nasync.auto({\n get_data: function(callback){\n // async code to get some data\n },\n make_folder: function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n },\n write_file: [\'get_data\', \'make_folder\', function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, filename);\n }],\n email_link: [\'write_file\', function(callback, results){\n // once the file is written let\'s email a link to it...\n // results.write_file contains the filename returned by write_file.\n }]\n});\n```\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n```js\nasync.parallel([\n function(callback){\n // async code to get some data\n },\n function(callback){\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n }\n],\nfunction(err, results){\n async.series([\n function(callback){\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n },\n function(callback){\n // once the file is written let\'s email a link to it...\n }\n ]);\n});\n```\n\nFor a complicated series of async tasks using the auto function makes adding\nnew tasks much easier and makes the code more readable.\n\n\n---------------------------------------\n\n<a name="iterator" />\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the array,\nreturning a continuation to call the next one after that. It\'s also possible to\n\'peek\' the next iterator by doing iterator.next().\n\nThis function is used internally by the async module but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* tasks - An array of functions to run.\n\n__Example__\n\n```js\nvar iterator = async.iterator([\n function(){ sys.p(\'one\'); },\n function(){ sys.p(\'two\'); },\n function(){ sys.p(\'three\'); }\n]);\n\nnode> var iterator2 = iterator();\n\'one\'\nnode> var iterator3 = iterator2();\n\'two\'\nnode> iterator3();\n\'three\'\nnode> var nextfn = iterator2.next();\nnode> nextfn();\n\'three\'\n```\n\n---------------------------------------\n\n<a name="apply" />\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied, a useful\nshorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n```js\n// using apply\n\nasync.parallel([\n async.apply(fs.writeFile, \'testfile1\', \'test1\'),\n async.apply(fs.writeFile, \'testfile2\', \'test2\'),\n]);\n\n\n// the same process without using apply\n\nasync.parallel([\n function(callback){\n fs.writeFile(\'testfile1\', \'test1\', callback);\n },\n function(callback){\n fs.writeFile(\'testfile2\', \'test2\', callback);\n }\n]);\n```\n\nIt\'s possible to pass any number of additional arguments when calling the\ncontinuation:\n\n```js\nnode> var fn = async.apply(sys.puts, \'one\');\nnode> fn(\'two\', \'three\');\none\ntwo\nthree\n```\n\n---------------------------------------\n\n<a name="nextTick" />\n### nextTick(callback)\n\nCalls the callback on a later loop around the event loop. In node.js this just\ncalls process.nextTick, in the browser it falls back to setImmediate(callback)\nif available, otherwise setTimeout(callback, 0), which means other higher priority\nevents may precede the execution of the callback.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* callback - The function to call on a later loop around the event loop.\n\n__Example__\n\n```js\nvar call_order = [];\nasync.nextTick(function(){\n call_order.push(\'two\');\n // call_order now equals [\'one\',\'two\']\n});\ncall_order.push(\'one\')\n```\n\n<a name="times" />\n### times(n, callback)\n\nCalls the callback n times and accumulates results in the same manner\nyou would use with async.map.\n\n__Arguments__\n\n* n - The number of times to run the function.\n* callback - The function to call n times.\n\n__Example__\n\n```js\n// Pretend this is some complicated async factory\nvar createUser = function(id, callback) {\n callback(null, {\n id: \'user\' + id\n })\n}\n// generate 5 users\nasync.times(5, function(n, next){\n createUser(n, function(err, user) {\n next(err, user)\n })\n}, function(err, users) {\n // we should now have 5 users\n});\n```\n\n<a name="timesSeries" />\n### timesSeries(n, callback)\n\nThe same as times only the iterator is applied to each item in the array in\nseries. The next iterator is only called once the current one has completed\nprocessing. The results array will be in the same order as the original.\n\n\n## Utils\n\n<a name="memoize" />\n### memoize(fn, [hasher])\n\nCaches the results of an async function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\nThe cache of results is exposed as the `memo` property of the function returned\nby `memoize`.\n\n__Arguments__\n\n* fn - the function you to proxy and cache results from.\n* hasher - an optional function for generating a custom hash for storing\n results, it has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n```js\nvar slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n};\nvar fn = async.memoize(slow_fn);\n\n// fn can now be used as if it were slow_fn\nfn(\'some name\', function () {\n // callback\n});\n```\n\n<a name="unmemoize" />\n### unmemoize(fn)\n\nUndoes a memoized function, reverting it to the original, unmemoized\nform. Comes handy in tests.\n\n__Arguments__\n\n* fn - the memoized function\n\n<a name="log" />\n### log(function, arguments)\n\nLogs the result of an async function to the console. Only works in node.js or\nin browsers that support console.log and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.log is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, \'hello \' + name);\n }, 1000);\n};\n```\n```js\nnode> async.log(hello, \'world\');\n\'hello world\'\n```\n\n---------------------------------------\n\n<a name="dir" />\n### dir(function, arguments)\n\nLogs the result of an async function to the console using console.dir to\ndisplay the properties of the resulting object. Only works in node.js or\nin browsers that support console.dir and console.error (such as FF and Chrome).\nIf multiple arguments are returned from the async function, console.dir is\ncalled on each argument in order.\n\n__Arguments__\n\n* function - The function you want to eventually apply all arguments to.\n* arguments... - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n};\n```\n```js\nnode> async.dir(hello, \'world\');\n{hello: \'world\'}\n```\n\n---------------------------------------\n\n<a name="noConflict" />\n### noConflict()\n\nChanges the value of async back to its original value, returning a reference to the\nasync object.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/caolan/async',
npm sill resolved _id: 'async@0.2.8',
npm sill resolved _from: 'async@0.2.8' },
npm sill resolved { name: 'moment',
npm sill resolved version: '2.1.0',
npm sill resolved description: 'Parse, manipulate, and display dates.',
npm sill resolved homepage: 'http://momentjs.com',
npm sill resolved author:
npm sill resolved { name: 'Tim Wood',
npm sill resolved email: 'washwithcare@gmail.com',
npm sill resolved url: 'http://timwoodcreates.com/' },
npm sill resolved contributors: [ [Object], [Object] ],
npm sill resolved keywords:
npm sill resolved [ 'moment',
npm sill resolved 'date',
npm sill resolved 'time',
npm sill resolved 'parse',
npm sill resolved 'format',
npm sill resolved 'validate',
npm sill resolved 'i18n',
npm sill resolved 'l10n',
npm sill resolved 'ender' ],
npm sill resolved main: './moment.js',
npm sill resolved engines: { node: '*' },
npm sill resolved repository: { type: 'git', url: 'https://github.com/timrwood/moment.git' },
npm sill resolved bugs: { url: 'https://github.com/timrwood/moment/issues' },
npm sill resolved licenses: [ [Object] ],
npm sill resolved devDependencies:
npm sill resolved { 'uglify-js': 'latest',
npm sill resolved grunt: 'latest',
npm sill resolved nodeunit: 'latest',
npm sill resolved 'grunt-contrib-jshint': 'latest',
npm sill resolved 'grunt-contrib-nodeunit': 'latest',
npm sill resolved 'grunt-contrib-concat': 'latest',
npm sill resolved 'grunt-contrib-uglify': 'latest',
npm sill resolved 'grunt-contrib-watch': 'latest',
npm sill resolved 'grunt-lib-legacyhelpers': 'latest' },
npm sill resolved scripts: { test: 'grunt' },
npm sill resolved ender: './ender.js',
npm sill resolved dojoBuild: 'package.js',
npm sill resolved readme: 'A lightweight javascript date library for parsing, validating, manipulating, and formatting dates.\n\n# [Documentation](http://momentjs.com/docs/)\n\nUpgrading to 2.0.0\n==================\n\nThere are a number of small backwards incompatible changes with version 2.0.0.\n\n[See them and their descriptions here](https://gist.github.com/timrwood/e72f2eef320ed9e37c51#backwards-incompatible-changes)\n\nChanged language ordinal method to return the number + ordinal instead of just the ordinal.\n\nChanged two digit year parsing cutoff to match strptime.\n\nRemoved `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`.\n\nRemoved `moment.humanizeDuration()` in favor of `moment.duration().humanize()`.\n\nRemoved the lang data objects from the top level namespace.\n\nDuplicate `Date` passed to `moment()` instead of referencing it.\n\nTravis Build Status\n===================\n\nDevelop [![Build Status](https://travis-ci.org/timrwood/moment.png?branch=develop)](https://travis-ci.org/timrwood/moment)\n\nMaster [![Build Status](https://travis-ci.org/timrwood/moment.png)](https://travis-ci.org/timrwood/moment)\n\nChangelog\n=========\n\n### 2.1.0 [See changelog](https://gist.github.com/timrwood/b8c2d90d528eddb53ab5)\n\nAdded better week support.\n\nAdded ability to set offset with `moment#zone`.\n\nAdded ability to set month or weekday from a string.\n\nAdded `moment#min` and `moment#max`\n\n### 2.0.0 [See changelog](https://gist.github.com/timrwood/e72f2eef320ed9e37c51)\n\nAdded short form localized tokens.\n\nAdded ability to define language a string should be parsed in.\n\nAdded support for reversed add/subtract arguments.\n\nAdded support for `endOf(\'week\')` and `startOf(\'week\')`.\n\nFixed the logic for `moment#diff(Moment, \'months\')` and `moment#diff(Moment, \'years\')`\n\n`moment#diff` now floors instead of rounds.\n\nNormalized `moment#toString`.\n\nAdded `isSame`, `isAfter`, and `isBefore` methods.\n\nAdded better week support.\n\nAdded `moment#toJSON`\n\nBugfix: Fixed parsing of first century dates\n\nBugfix: Parsing 10Sep2001 should work as expected\n\nBugfix: Fixed wierdness with `moment.utc()` parsing.\n\nChanged language ordinal method to return the number + ordinal instead of just the ordinal.\n\nChanged two digit year parsing cutoff to match strptime.\n\nRemoved `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`.\n\nRemoved `moment.humanizeDuration()` in favor of `moment.duration().humanize()`.\n\nRemoved the lang data objects from the top level namespace.\n\nDuplicate `Date` passed to `moment()` instead of referencing it.\n\n### 1.7.2 [See discussion](https://github.com/timrwood/moment/issues/456)\n\nBugfixes\n\n### 1.7.1 [See discussion](https://github.com/timrwood/moment/issues/384)\n\nBugfixes\n\n### 1.7.0 [See discussion](https://github.com/timrwood/moment/issues/288)\n\nAdded `moment.fn.endOf()` and `moment.fn.startOf()`.\n\nAdded validation via `moment.fn.isValid()`.\n\nMade formatting method 3x faster. http://jsperf.com/momentjs-cached-format-functions\n\nAdd support for month/weekday callbacks in `moment.fn.format()`\n\nAdded instance specific languages.\n\nAdded two letter weekday abbreviations with the formatting token `dd`.\n\nVarious language updates.\n\nVarious bugfixes.\n\n### 1.6.0 [See discussion](https://github.com/timrwood/moment/pull/268)\n\nAdded Durations.\n\nRevamped parser to support parsing non-separated strings (YYYYMMDD vs YYYY-MM-DD).\n\nAdded support for millisecond parsing and formatting tokens (S SS SSS)\n\nAdded a getter for `moment.lang()`\n\nVarious bugfixes.\n\nThere are a few things deprecated in the 1.6.0 release.\n\n1. The format tokens `z` and `zz` (timezone abbreviations like EST CST MST etc) will no longer be supported. Due to inconsistent browser support, we are unable to consistently produce this value. See [this issue](https://github.com/timrwood/moment/issues/162) for more background.\n\n2. The method `moment.fn.native` is deprecated in favor of `moment.fn.toDate`. There continue to be issues with Google Closure Compiler throwing errors when using `native`, even in valid instances.\n\n3. The way to customize am/pm strings is being changed. This would only affect you if you created a custom language file. For more information, see [this issue](https://github.com/timrwood/moment/pull/222).\n\n### 1.5.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=10&page=1&state=closed)\n\nAdded UTC mode.\n\nAdded automatic ISO8601 parsing.\n\nVarious bugfixes.\n\n### 1.4.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=8&state=closed)\n\nAdded `moment.fn.toDate` as a replacement for `moment.fn.native`.\n\nAdded `moment.fn.sod` and `moment.fn.eod` to get the start and end of day.\n\nVarious bugfixes.\n\n### 1.3.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=7&state=closed)\n\nAdded support for parsing month names in the current language.\n\nAdded escape blocks for parsing tokens.\n\nAdded `moment.fn.calendar` to format strings like \'Today 2:30 PM\', \'Tomorrow 1:25 AM\', and \'Last Sunday 4:30 AM\'.\n\nAdded `moment.fn.day` as a setter.\n\nVarious bugfixes\n\n### 1.2.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=4&state=closed)\n\nAdded timezones to parser and formatter.\n\nAdded `moment.fn.isDST`.\n\nAdded `moment.fn.zone` to get the timezone offset in minutes.\n\n### 1.1.2 [See milestone](https://github.com/timrwood/moment/issues?milestone=6&state=closed)\n\nVarious bugfixes\n\n### 1.1.1 [See milestone](https://github.com/timrwood/moment/issues?milestone=5&state=closed)\n\nAdded time specific diffs (months, days, hours, etc)\n\n### 1.1.0\n\nAdded `moment.fn.format` localized masks. \'L LL LLL LLLL\' [issue 29](https://github.com/timrwood/moment/pull/29)\n\nFixed [issue 31](https://github.com/timrwood/moment/pull/31).\n\n### 1.0.1\n\nAdded `moment.version` to get the current version.\n\nRemoved `window !== undefined` when checking if module exists to support browserify. [issue 25](https://github.com/timrwood/moment/pull/25)\n\n### 1.0.0\n\nAdded convenience methods for getting and setting date parts.\n\nAdded better support for `moment.add()`.\n\nAdded better lang support in NodeJS.\n\nRenamed library from underscore.date to Moment.js\n\n### 0.6.1\n\nAdded Portuguese, Italian, and French language support\n\n### 0.6.0\n\nAdded _date.lang() support.\nAdded support for passing multiple formats to try to parse a date. _date("07-10-1986", ["MM-DD-YYYY", "YYYY-MM-DD"]);\nMade parse from string and single format 25% faster.\n\n### 0.5.2\n\nBugfix for [issue 8](https://github.com/timrwood/underscore.date/pull/8) and [issue 9](https://github.com/timrwood/underscore.date/pull/9).\n\n### 0.5.1\n\nBugfix for [issue 5](https://github.com/timrwood/underscore.date/pull/5).\n\n### 0.5.0\n\nDropped the redundant `_date.date()` in favor of `_date()`.\nRemoved `_date.now()`, as it is a duplicate of `_date()` with no parameters.\nRemoved `_date.isLeapYear(yearNumber)`. Use `_date([yearNumber]).isLeapYear()` instead.\nExposed customization options through the `_date.relativeTime`, `_date.weekdays`, `_date.weekdaysShort`, `_date.months`, `_date.monthsShort`, and `_date.ordinal` variables instead of the `_date.customize()` function.\n\n### 0.4.1\n\nAdded date input formats for input strings.\n\n### 0.4.0\n\nAdded underscore.date to npm. Removed dependencies on underscore.\n\n### 0.3.2\n\nAdded `\'z\'` and `\'zz\'` to `_.date().format()`. Cleaned up some redundant code to trim off some bytes.\n\n### 0.3.1\n\nCleaned up the namespace. Moved all date manipulation and display functions to the _.date() object.\n\n### 0.3.0\n\nSwitched to the Underscore methodology of not mucking with the native objects\' prototypes.\nMade chaining possible.\n\n### 0.2.1\n\nChanged date names to be a more pseudo standardized \'dddd, MMMM Do YYYY, h:mm:ss a\'.\nAdded `Date.prototype` functions `add`, `subtract`, `isdst`, and `isleapyear`.\n\n### 0.2.0\n\nChanged function names to be more concise.\nChanged date format from php date format to custom format.\n\n### 0.1.0\n\nInitial release\n\nLicense\n=======\n\nMoment.js is freely distributable under the terms of the MIT license.\n\nCopyright (c) 2011-2012 Tim Wood\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation\nfiles (the "Software"), to deal in the Software without restriction, including without limitation the rights to use,\ncopy, 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n',
npm sill resolved readmeFilename: 'readme.md',
npm sill resolved _id: 'moment@2.1.0',
npm sill resolved _from: 'moment@2.1.0' } ]
npm info install couchr@0.0.13 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api
npm info install underscore@1.4.4 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api
npm info install uuid@1.4.1 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api
npm info install async@0.2.8 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api
npm info install moment@2.1.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api
npm info installOne couchr@0.0.13
npm info installOne underscore@1.4.4
npm info installOne uuid@1.4.1
npm info installOne async@0.2.8
npm info installOne moment@2.1.0
npm sill addNameRange { name: 'form-data',
npm sill addNameRange range: '>=0.0.3-0 <0.1.0-0',
npm sill addNameRange hasData: false }
npm sill addNameRange { name: 'mime', range: '>=1.2.7-0 <1.3.0-0', hasData: false }
npm sill lockFile d30d7d0a-ckb-npm-follow-0-8-0-package-tgz tar:///Users/hamrickb/.npm/follow/0.8.0/package.tgz
npm sill lockFile d30d7d0a-ckb-npm-follow-0-8-0-package-tgz tar:///Users/hamrickb/.npm/follow/0.8.0/package.tgz
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/couchr unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/underscore unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/uuid unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/async unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/moment unbuild
npm info postinstall mute-stream@0.0.4
npm verb about to build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read
npm info build /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/read
npm verb linkStuff [ false,
npm verb linkStuff false,
npm verb linkStuff false,
npm verb linkStuff '/Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules' ]
npm info linkStuff read@1.0.5
npm verb linkBins read@1.0.5
npm verb linkMans read@1.0.5
npm verb rebuildBundles read@1.0.5
npm verb registry.get aws-sign not expired, no request
npm sill addNameRange number 2 { name: 'aws-sign', range: '>=0.2.0-0 <0.3.0-0', hasData: true }
npm sill addNameRange versions [ 'aws-sign',
npm sill addNameRange [ '0.0.1', '0.0.2', '0.1.0', '0.1.1', '0.2.0', '0.3.0' ] ]
npm verb addNamed [ 'aws-sign', '0.2.0' ]
npm verb addNamed [ '0.2.0', '0.2.0' ]
npm sill lockFile 166e4cb0-aws-sign-0-2-0 aws-sign@0.2.0
npm verb lock aws-sign@0.2.0 /Users/hamrickb/.npm/166e4cb0-aws-sign-0-2-0.lock
npm verb registry.get cookie-jar not expired, no request
npm sill addNameRange number 2 { name: 'cookie-jar',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'cookie-jar', [ '0.2.0', '0.3.0' ] ]
npm verb addNamed [ 'cookie-jar', '0.2.0' ]
npm verb addNamed [ '0.2.0', '0.2.0' ]
npm sill lockFile d85dc282-cookie-jar-0-2-0 cookie-jar@0.2.0
npm verb lock cookie-jar@0.2.0 /Users/hamrickb/.npm/d85dc282-cookie-jar-0-2-0.lock
npm verb registry.get node-uuid not expired, no request
npm sill addNameRange number 2 { name: 'node-uuid', range: '>=1.4.0-0 <1.5.0-0', hasData: true }
npm sill addNameRange versions [ 'node-uuid',
npm sill addNameRange [ '1.2.0',
npm sill addNameRange '1.3.0',
npm sill addNameRange '1.3.1',
npm sill addNameRange '1.3.2',
npm sill addNameRange '1.1.0',
npm sill addNameRange '1.0.0',
npm sill addNameRange '1.3.3',
npm sill addNameRange '1.4.0',
npm sill addNameRange '1.4.1' ] ]
npm verb addNamed [ 'node-uuid', '1.4.1' ]
npm verb addNamed [ '1.4.1', '1.4.1' ]
npm sill lockFile 7c2028cd-node-uuid-1-4-1 node-uuid@1.4.1
npm verb lock node-uuid@1.4.1 /Users/hamrickb/.npm/7c2028cd-node-uuid-1-4-1.lock
npm verb tar unpack /Users/hamrickb/.npm/couchr/0.0.13/package.tgz
npm sill lockFile 5e69549c--plugins-api-node-modules-couchr tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/couchr
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/couchr /Users/hamrickb/.npm/5e69549c--plugins-api-node-modules-couchr.lock
npm sill lockFile bf4e15a7-kb-npm-couchr-0-0-13-package-tgz tar:///Users/hamrickb/.npm/couchr/0.0.13/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/couchr/0.0.13/package.tgz /Users/hamrickb/.npm/bf4e15a7-kb-npm-couchr-0-0-13-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/underscore/1.4.4/package.tgz
npm sill lockFile 1e323d49-gins-api-node-modules-underscore tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/underscore
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/underscore /Users/hamrickb/.npm/1e323d49-gins-api-node-modules-underscore.lock
npm sill lockFile 24188524-npm-underscore-1-4-4-package-tgz tar:///Users/hamrickb/.npm/underscore/1.4.4/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/underscore/1.4.4/package.tgz /Users/hamrickb/.npm/24188524-npm-underscore-1-4-4-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/uuid/1.4.1/package.tgz
npm sill lockFile 2f615b23-ie-plugins-api-node-modules-uuid tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/uuid
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/uuid /Users/hamrickb/.npm/2f615b23-ie-plugins-api-node-modules-uuid.lock
npm sill lockFile 83054ce0-rickb-npm-uuid-1-4-1-package-tgz tar:///Users/hamrickb/.npm/uuid/1.4.1/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/uuid/1.4.1/package.tgz /Users/hamrickb/.npm/83054ce0-rickb-npm-uuid-1-4-1-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/async/0.2.8/package.tgz
npm sill lockFile 5f5e3bdf-e-plugins-api-node-modules-async tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/async
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/async /Users/hamrickb/.npm/5f5e3bdf-e-plugins-api-node-modules-async.lock
npm sill lockFile 44175142-ickb-npm-async-0-2-8-package-tgz tar:///Users/hamrickb/.npm/async/0.2.8/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/async/0.2.8/package.tgz /Users/hamrickb/.npm/44175142-ickb-npm-async-0-2-8-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/moment/2.1.0/package.tgz
npm sill lockFile 04bd2242--plugins-api-node-modules-moment tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/moment
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/hoodie-plugins-api/node_modules/moment /Users/hamrickb/.npm/04bd2242--plugins-api-node-modules-moment.lock
npm sill lockFile bedd3d81-ckb-npm-moment-2-1-0-package-tgz tar:///Users/hamrickb/.npm/moment/2.1.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/moment/2.1.0/package.tgz /Users/hamrickb/.npm/bedd3d81-ckb-npm-moment-2-1-0-package-tgz.lock
npm verb registry.get forever-agent not expired, no request
npm sill addNameRange number 2 { name: 'forever-agent',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'forever-agent', [ '0.2.0', '0.3.0', '0.4.0', '0.5.0' ] ]
npm verb addNamed [ 'forever-agent', '0.2.0' ]
npm verb addNamed [ '0.2.0', '0.2.0' ]
npm sill lockFile 88b53d74-forever-agent-0-2-0 forever-agent@0.2.0
npm verb lock forever-agent@0.2.0 /Users/hamrickb/.npm/88b53d74-forever-agent-0-2-0.lock
npm verb registry.get tunnel-agent not expired, no request
npm sill addNameRange number 2 { name: 'tunnel-agent',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'tunnel-agent', [ '0.2.0', '0.3.0' ] ]
npm verb addNamed [ 'tunnel-agent', '0.2.0' ]
npm verb addNamed [ '0.2.0', '0.2.0' ]
npm sill lockFile ba879b4f-tunnel-agent-0-2-0 tunnel-agent@0.2.0
npm verb lock tunnel-agent@0.2.0 /Users/hamrickb/.npm/ba879b4f-tunnel-agent-0-2-0.lock
npm verb registry.get qs not expired, no request
npm sill addNameRange number 2 { name: 'qs', range: '>=0.5.4-0 <0.6.0-0', hasData: true }
npm sill addNameRange versions [ 'qs',
npm sill addNameRange [ '0.0.1',
npm sill addNameRange '0.0.2',
npm sill addNameRange '0.0.3',
npm sill addNameRange '0.0.4',
npm sill addNameRange '0.0.5',
npm sill addNameRange '0.0.6',
npm sill addNameRange '0.0.7',
npm sill addNameRange '0.1.0',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.3.0',
npm sill addNameRange '0.3.1',
npm sill addNameRange '0.3.2',
npm sill addNameRange '0.4.0',
npm sill addNameRange '0.4.1',
npm sill addNameRange '0.4.2',
npm sill addNameRange '0.5.0',
npm sill addNameRange '0.5.1',
npm sill addNameRange '0.5.2',
npm sill addNameRange '0.5.3',
npm sill addNameRange '0.5.4',
npm sill addNameRange '0.5.5',
npm sill addNameRange '0.5.6',
npm sill addNameRange '0.6.0',
npm sill addNameRange '0.6.1',
npm sill addNameRange '0.6.2',
npm sill addNameRange '0.6.3',
npm sill addNameRange '0.6.4',
npm sill addNameRange '0.6.5',
npm sill addNameRange '0.6.6' ] ]
npm verb addNamed [ 'qs', '0.5.6' ]
npm verb addNamed [ '0.5.6', '0.5.6' ]
npm sill lockFile 84168241-qs-0-5-6 qs@0.5.6
npm verb lock qs@0.5.6 /Users/hamrickb/.npm/84168241-qs-0-5-6.lock
npm verb rebuildBundles [ 'mute-stream' ]
npm info install read@1.0.5
npm info preinstall follow@0.8.0
npm verb registry.get json-stringify-safe not expired, no request
npm sill addNameRange number 2 { name: 'json-stringify-safe',
npm sill addNameRange range: '>=3.0.0-0 <3.1.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'json-stringify-safe',
npm sill addNameRange [ '2.0.0', '3.0.0', '4.0.0', '5.0.0' ] ]
npm verb addNamed [ 'json-stringify-safe', '3.0.0' ]
npm verb addNamed [ '3.0.0', '3.0.0' ]
npm sill lockFile f18d29ee-json-stringify-safe-3-0-0 json-stringify-safe@3.0.0
npm verb lock json-stringify-safe@3.0.0 /Users/hamrickb/.npm/f18d29ee-json-stringify-safe-3-0-0.lock
npm verb registry.get oauth-sign not expired, no request
npm sill addNameRange number 2 { name: 'oauth-sign',
npm sill addNameRange range: '>=0.2.0-0 <0.3.0-0',
npm sill addNameRange hasData: true }
npm sill addNameRange versions [ 'oauth-sign', [ '0.2.0', '0.3.0', '0.4.0' ] ]
npm verb addNamed [ 'oauth-sign', '0.2.0' ]
npm verb addNamed [ '0.2.0', '0.2.0' ]
npm sill lockFile 5137425d-oauth-sign-0-2-0 oauth-sign@0.2.0
npm verb lock oauth-sign@0.2.0 /Users/hamrickb/.npm/5137425d-oauth-sign-0-2-0.lock
npm sill lockFile fea42b1c-eventemitter3-0-1-1 eventemitter3@0.1.1
npm sill lockFile fea42b1c-eventemitter3-0-1-1 eventemitter3@0.1.1
npm verb registry.get mime not expired, no request
npm sill addNameRange number 2 { name: 'mime', range: '>=1.2.7-0 <1.3.0-0', hasData: true }
npm sill addNameRange versions [ 'mime',
npm sill addNameRange [ '1.0.0',
npm sill addNameRange '1.1.0',
npm sill addNameRange '1.2.1',
npm sill addNameRange '1.2.2',
npm sill addNameRange '1.2.3',
npm sill addNameRange '1.2.4',
npm sill addNameRange '1.2.5',
npm sill addNameRange '1.2.6',
npm sill addNameRange '1.2.7',
npm sill addNameRange '1.2.8',
npm sill addNameRange '1.2.9',
npm sill addNameRange '1.2.10',
npm sill addNameRange '1.2.11' ] ]
npm verb addNamed [ 'mime', '1.2.11' ]
npm verb addNamed [ '1.2.11', '1.2.11' ]
npm sill lockFile c4b0741f-mime-1-2-11 mime@1.2.11
npm verb lock mime@1.2.11 /Users/hamrickb/.npm/c4b0741f-mime-1-2-11.lock
npm verb registry.get form-data not expired, no request
npm sill addNameRange number 2 { name: 'form-data', range: '>=0.0.3-0 <0.1.0-0', hasData: true }
npm sill addNameRange versions [ 'form-data',
npm sill addNameRange [ '0.0.0',
npm sill addNameRange '0.0.2',
npm sill addNameRange '0.0.3',
npm sill addNameRange '0.0.4',
npm sill addNameRange '0.0.5',
npm sill addNameRange '0.0.6',
npm sill addNameRange '0.0.7',
npm sill addNameRange '0.0.8',
npm sill addNameRange '0.0.9',
npm sill addNameRange '0.0.10',
npm sill addNameRange '0.1.0',
npm sill addNameRange '0.1.1',
npm sill addNameRange '0.1.2' ] ]
npm verb addNamed [ 'form-data', '0.0.10' ]
npm verb addNamed [ '0.0.10', '0.0.10' ]
npm sill lockFile db20d55d-form-data-0-0-10 form-data@0.0.10
npm verb lock form-data@0.0.10 /Users/hamrickb/.npm/db20d55d-form-data-0-0-10.lock
npm sill lockFile 33ba0664-eventemitter3 eventemitter3@*
npm sill lockFile 33ba0664-eventemitter3 eventemitter3@*
npm info postinstall read@1.0.5
npm sill lockFile d3f092b8-simplesmtp-0-3-21 simplesmtp@0.3.21
npm sill lockFile d3f092b8-simplesmtp-0-3-21 simplesmtp@0.3.21
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill resolved [ { name: 'eventemitter3',
npm sill resolved version: '0.1.1',
npm sill resolved description: 'EventEmitter3 focuses on performance while maintaining a Node.js AND browser compatible interface. This the source of the same EventEmitter that is used in Primus.',
npm sill resolved main: 'index.js',
npm sill resolved scripts: { test: 'NODE_ENV=testing ./node_modules/.bin/mocha $(find test -name \'*.test.js\')' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/3rd-Eden/EventEmitter3.git' },
npm sill resolved keywords:
npm sill resolved [ 'EventEmitter',
npm sill resolved 'EventEmitter2',
npm sill resolved 'EventEmitter3',
npm sill resolved 'Events',
npm sill resolved 'reactor',
npm sill resolved 'pub/sub',
npm sill resolved 'event',
npm sill resolved 'emitter' ],
npm sill resolved author: { name: 'Arnout Kazemier' },
npm sill resolved license: 'MIT',
npm sill resolved bugs: { url: 'https://github.com/3rd-Eden/EventEmitter3/issues' },
npm sill resolved devDependencies: { mocha: '1.13.x', 'pre-commit': '0.0.x', chai: '1.8.x' },
npm sill resolved readme: '# EventEmitter3\n\nEventEmitter3 is a faster alternative to EventEmitter2 and the build-in\nEventEmitter that ships within Node.js. It removes some features that you might\nnot need:\n\n- Domain support.\n- Thrown errors when there are no error listeners specified.\n- That a `newListener` event is emitted when an event is emitted.\n- No silly `setMaxListeners`.\n- No silly `listenerCount` function.. Just do `EventEmitter.listeners(event).length`\n\nAnd adds some features you want:\n\n- Emit events with a custom context without binding: `EE.on(event, fn, context)`\n which also works with once `EE.once(event, fn, context)`\n\nIt\'s a drop in replacement of your existing EventEmitters, but just faster. Free\nperformance, who wouldn\'t want that.\n\nThe source of the EventEmitter is compatible for browser usage, no fancy pancy\n`Array.isArray` stuff is used, it\'s just plain ol JavaScript that should even\nwork IE5 if you want to. This module currently serves it\'s use in\n[Primus](http://github.com/primus/primus)\'s client file.\n\n## Installation\n\n```bash\n$ npm install --save eventemitter3\n```\nor as a [component](http://component.io)\n\n```bash\n$ component install eventemitter3\n```\n\nthen\n\n```js\nvar EventEmitter = require(\'eventemitter3\');\n\n// or\n\nvar EventEmitter = require(\'eventemitter3\').EventEmitter;\n```\n\nFor API methods see the official Node.js documentation: \n\nhttp://nodejs.org/api/events.html\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/3rd-Eden/EventEmitter3',
npm sill resolved _id: 'eventemitter3@0.1.1',
npm sill resolved _from: 'eventemitter3@*' } ]
npm info install eventemitter3@0.1.1 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/http-proxy
npm info installOne eventemitter3@0.1.1
npm sill gunzTarPerm extractEntry test/log-exception-test.js
npm sill gunzTarPerm extractEntry test/log-rewriter-test.js
npm verb readDependencies using package.json deps
npm sill lockFile 53ed49a0-simplesmtp-0-2-0-3 simplesmtp@~0.2 || ~0.3
npm sill lockFile 53ed49a0-simplesmtp-0-2-0-3 simplesmtp@~0.2 || ~0.3
npm verb registry.get hawk not expired, no request
npm sill addNameRange number 2 { name: 'hawk', range: '>=0.10.2-0 <0.11.0-0', hasData: true }
npm sill addNameRange versions [ 'hawk',
npm sill addNameRange [ '0.0.1',
npm sill addNameRange '0.0.2',
npm sill addNameRange '0.0.3',
npm sill addNameRange '0.0.4',
npm sill addNameRange '0.0.5',
npm sill addNameRange '0.0.6',
npm sill addNameRange '0.0.7',
npm sill addNameRange '0.0.8',
npm sill addNameRange '0.1.0',
npm sill addNameRange '0.2.0',
npm sill addNameRange '0.3.0',
npm sill addNameRange '0.4.0',
npm sill addNameRange '0.5.0',
npm sill addNameRange '0.5.1',
npm sill addNameRange '0.5.2',
npm sill addNameRange '0.5.3',
npm sill addNameRange '0.6.0',
npm sill addNameRange '0.6.1',
npm sill addNameRange '0.7.0',
npm sill addNameRange '0.7.1',
npm sill addNameRange '0.8.1',
npm sill addNameRange '0.9.0',
npm sill addNameRange '0.10.0',
npm sill addNameRange '0.10.1',
npm sill addNameRange '0.10.2',
npm sill addNameRange '0.11.0',
npm sill addNameRange '0.11.1',
npm sill addNameRange '0.12.0',
npm sill addNameRange '0.12.1',
npm sill addNameRange '0.12.2',
npm sill addNameRange '0.13.0',
npm sill addNameRange '0.13.1',
npm sill addNameRange '0.14.0',
npm sill addNameRange '0.15.0',
npm sill addNameRange '1.0.0',
npm sill addNameRange '1.1.0-pre',
npm sill addNameRange '1.1.1',
npm sill addNameRange '1.1.2' ] ]
npm verb addNamed [ 'hawk', '0.10.2' ]
npm verb addNamed [ '0.10.2', '0.10.2' ]
npm sill lockFile 887f3c04-hawk-0-10-2 hawk@0.10.2
npm verb lock hawk@0.10.2 /Users/hamrickb/.npm/887f3c04-hawk-0-10-2.lock
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/http-proxy/node_modules/eventemitter3 unbuild
npm sill gunzTarPerm extractEntry test/utils.js
npm sill gunzTarPerm extractEntry test/state.js
npm verb readDependencies using package.json deps
npm sill resolved [ { name: 'mailcomposer',
npm sill resolved description: 'Compose E-Mail messages',
npm sill resolved version: '0.2.8',
npm sill resolved author: { name: 'Andris Reinman' },
npm sill resolved maintainers: [ [Object] ],
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'http://github.com/andris9/mailcomposer.git' },
npm sill resolved scripts: { test: 'nodeunit test/' },
npm sill resolved main: './lib/mailcomposer',
npm sill resolved licenses: [ [Object] ],
npm sill resolved dependencies:
npm sill resolved { mimelib: '~0.2.14',
npm sill resolved mime: '1.2.9',
npm sill resolved he: '~0.3.6',
npm sill resolved punycode: '~1.2.3',
npm sill resolved 'follow-redirects': '0.0.3',
npm sill resolved 'dkim-signer': '~0.1.0' },
npm sill resolved devDependencies: { nodeunit: '*', mailparser: '~0.4.0' },
npm sill resolved engine: { node: '>=0.4' },
npm sill resolved keywords: [ 'e-mail', 'mime', 'parser' ],
npm sill resolved readme: '# mailcomposer\n\n**mailcomposer** is a Node.JS module for generating e-mail messages that can be\nstreamed to SMTP or file.\n\nThis is a standalone module that only generates raw e-mail source, you need to\nwrite your own or use an existing transport mechanism (SMTP client, Amazon SES,\nSendGrid etc). **mailcomposer** frees you from the tedious task of generating\n[rfc2822](http://tools.ietf.org/html/rfc2822) compatible messages.\n\n[![Build Status](https://secure.travis-ci.org/andris9/mailcomposer.png)](http://travis-ci.org/andris9/mailcomposer)\n\n**mailcomposer** supports:\n\n * **Unicode** to use any characters ✔\n * **HTML** content as well as **plain text** alternative\n * **Attachments** and streaming for larger files (use strings, buffers, files or binary streams as attachments)\n * **Embedded images** in HTML\n * **DKIM** signing\n * usage of **your own** transport mechanism\n\n## Support mailcomposer development\n\n[![Donate to author](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DB26KWR2BQX5W)\n\n## Installation\n\nInstall through NPM\n\n npm install mailcomposer\n\n## Usage\n\n### Include mailcomposer module\n\n```javascript\nvar MailComposer = require("mailcomposer").MailComposer;\n```\n\n### Create a new `MailComposer` instance\n\n```javascript\nvar mailcomposer = new MailComposer([options]);\n```\n\nWhere `options` is an optional options object with the following possible properties:\n\n * **escapeSMTP** - if set replaces dots in the beginning of a line with double dots\n * **encoding** - sets transfer encoding for the textual parts (defaults to `"quoted-printable"`)\n * **charset** - sets output character set for strings (defaults to `"utf-8"`)\n * **keepBcc** - if set to true, includes `Bcc:` field in the message headers. Useful for *sendmail* command.\n * **forceEmbeddedImages** - convert image urls and absolute paths in HTML to embedded attachments.\n\n### Simple example\n\nThe following example generates a simple e-mail message with plaintext and html\nbody.\n\n```javascript\nvar MailComposer = require("mailcomposer").MailComposer;\n mailcomposer = new MailComposer(),\n fs = require("fs");\n\n// add additional header field\nmailcomposer.addHeader("x-mailer", "Nodemailer 1.0");\n\n// setup message data\nmailcomposer.setMessageOption({\n from: "andris@tr.ee",\n to: "andris@node.ee",\n body: "Hello world!",\n html: "<b>Hello world!</b>"\n});\n\nmailcomposer.streamMessage();\n\n// pipe the output to a file\nmailcomposer.pipe(fs.createWriteStream("test.eml"));\n```\n\nThe output for such a script (the contents for "test.eml") would look like:\n\n MIME-Version: 1.0\n X-Mailer: Nodemailer 1.0\n From: andris@tr.ee\n To: andris@node.ee\n Content-Type: multipart/alternative;\n boundary="----mailcomposer-?=_1-1328088797399"\n\n ------mailcomposer-?=_1-1328088797399\n Content-Type: text/plain; charset=utf-8\n Content-Transfer-Encoding: quoted-printable\n\n Hello world!\n ------mailcomposer-?=_1-1328088797399\n Content-Type: text/html; charset=utf-8\n Content-Transfer-Encoding: quoted-printable\n\n <b>Hello world!</b>\n ------mailcomposer-?=_1-1328088797399--\n\n## API\n\n### Add custom headers\n\nHeaders can be added with `mailcomposer.addHeader(key, value[, formatted])` where `formatted` indicates if the value should be kept as is. If the value is missing or falsy, header value is sanitized and folded. If true, the value is passed to output as is.\n\n```javascript\nvar mailcomposer = new MailComposer();\nmailcomposer.addHeader("x-mailer", "Nodemailer 1.0");\n```\n\nIf you add an header value with the same key several times, all of the values will be used\nin the generated header. For example:\n\n```javascript\nmailcomposer.addHeader("x-mailer", "Nodemailer 1.0");\nmailcomposer.addHeader("x-mailer", "Nodemailer 2.0");\n```\n\nWill be generated into\n\n ...\n X-Mailer: Nodemailer 1.0\n X-Mailer: Nodemailer 2.0\n ...\n\nThe contents of the field value is not edited in any way (except for the folding),\nso if you want to use unicode symbols you need to escape these to mime words\nby yourself. Exception being object values - in this case the object\nis automatically JSONized and mime encoded.\n\n```javascript\n// using objects as header values is allowed (will be converted to JSON)\nvar apiOptions = {};\napiOptions.category = "newuser";\napiOptions.tags = ["user", "web"];\nmailcomposer.addHeader("X-SMTPAPI", apiOptions)\n```\n\n### Add message parts\n\nYou can set message sender, receiver, subject line, message body etc. with\n`mailcomposer.setMessageOption(options)` where options is an object with the\ndata to be set. This function overwrites any previously set values with the\nsame key\n\nThe following example creates a simple e-mail with sender being `andris@tr.ee`,\nreceiver `andris@node.ee` and plaintext part of the message as `Hello world!`:\n\n```javascript\nmailcomposer.setMessageOption({\n from: "andris@tr.ee",\n to: "andris@node.ee",\n body: "Hello world!"\n});\n```\n\nPossible options that can be used are (all fields accept unicode):\n\n * **from** (alias `sender`) - the sender of the message. If several addresses are given, only the first one will be used\n * **to** - receivers for the `To:` field\n * **cc** - receivers for the `Cc:` field\n * **bcc** - receivers for the `Bcc:` field\n * **replyTo** (alias `reply_to`) - e-mail address for the `Reply-To:` field\n * **inReplyTo** - The message-id this message is replying\n * **references** - Message-id list\n * **subject** - the subject line of the message\n * **body** (alias `text`) - the plaintext part of the message\n * **html** - the HTML part of the message\n * **envelope** - optional SMTP envelope, if auto generated envelope is not suitable\n\nThis method can be called several times\n\n```javascript\nmailcomposer.setMessageOption({from: "andris@tr.ee"});\nmailcomposer.setMessageOption({to: "andris@node.ee"});\nmailcomposer.setMessageOption({body: "Hello world!"});\n```\n\nTrying to set the same key several times will yield in overwrite\n\n```javascript\nmailcomposer.setMessageOption({body: "Hello world!"});\nmailcomposer.setMessageOption({body: "Hello world?"});\n// body contents will be "Hello world?"\n```\n\n### Address format\n\nAll e-mail address fields take structured e-mail lists (comma separated)\nas the input. Unicode is allowed for all the parts (receiver name, e-mail username\nand domain) of the address. If the domain part contains unicode symbols, it is\nautomatically converted into punycode, user part will be converted into UTF-8\nmime word.\n\nE-mail addresses can be a plain e-mail addresses\n\n username@example.com\n\nor with a formatted name\n\n \'Ноде Майлер\' <username@example.com>\n\nOr in case of comma separated lists, the formatting can be mixed\n\n username@example.com, \'Ноде Майлер\' <username@example.com>, "Name, User" <username@example.com>\n\n### SMTP envelope\n\nSMTP envelope is usually auto generated from `from`, `to`, `cc` and `bcc` fields but\nif for some reason you want to specify it yourself, you can do it with `envelope` property.\n\n`envelope` is an object with the following params: `from`, `to`, `cc` and `bcc` just like\nwith regular mail options. You can also use the regular address format.\n\n```javascript\nmailOptions = {\n ...,\n from: "mailer@node.ee",\n to: "daemon@node.ee",\n envelope: {\n from: "Daemon <deamon@node.ee>",\n to: "mailer@node.ee, Mailer <mailer2@node.ee>"\n }\n}\n```\n\n### Add attachments\n\nAttachments can be added with `mailcomposer.addAttachment(attachment)` where\n`attachment` is an object with attachment (meta)data with the following possible\nproperties:\n\n * **fileName** (alias `filename`) - filename to be reported as the name of the attached file, use of unicode is allowed\n * **cid** - content id for using inline images in HTML message source\n * **contents** - String or a Buffer contents for the attachment\n * **filePath** - path to a file or an URL if you want to stream the file instead of including it (better for larger attachments)\n * **streamSource** - Stream object for arbitrary binary streams if you want to stream the contents (needs to support *pause*/*resume*)\n * **contentType** - content type for the attachment, if not set will be derived from the `fileName` property\n * **contentDisposition** - content disposition type for the attachment, defaults to "attachment"\n * **userAgent** - User-Agent string to be used if the fileName points to an URL\n\nOne of `contents`, `filePath` or `streamSource` must be specified, if none is\npresent, the attachment will be discarded. Other fields are optional.\n\nAttachments can be added as many as you want.\n\n**Using embedded images in HTML**\n\nAttachments can be used as embedded images in the HTML body. To use this\nfeature, you need to set additional property of the attachment - `cid`\n(unique identifier of the file) which is a reference to the attachment file.\nThe same `cid` value must be used as the image URL in HTML (using `cid:` as\nthe URL protocol, see example below).\n\nNB! the cid value should be as unique as possible!\n\n```javascript\nvar cid_value = Date.now() + \'.image.jpg\';\n\nvar html = \'Embedded image: <img src="cid:\' + cid_value + \'" />\';\n\nvar attachment = {\n fileName: "image.png",\n filePath: "/static/images/image.png",\n cid: cid_value\n};\n```\n\n**Automatic embedding images**\n\nIf you want to convert images in the HTML to embedded images automatically, you can\nset mailcomposer option `forceEmbeddedImages` to true. In this case all images in\nthe HTML that are either using an absolute URL (http://...) or absolute file path\n(/path/to/file) are replaced with embedded attachments.\n\nFor example when using this code\n\n```javascript\nvar mailcomposer = new MailComposer({forceEmbeddedImages: true});\nmailcomposer.setMessageOption({\n html: \'Embedded image: <img src="http://example.com/image.png">\'\n});\n```\n\nThe image linked is fetched and added automatically as an attachment and the url\nin the HTML is replaced automatically with a proper `cid:` string.\n\n### Add alternatives to HTML and text\n\nIn addition to text and HTML, any kind of data can be inserted as an alternative content of the main body - for example a word processing document with the same text as in the HTML field. It is the job of the e-mail client to select and show the best fitting alternative to the reader.\n\nAlternatives to text and HTML can be added with `mailcomposer.addAlternative(alternative)` where\n`alternative` is an object with alternative (meta)data with the following possible\nproperties:\n\n * **contents** - String or a Buffer contents for the attachment\n * **contentType** - optional content type for the attachment, if not set will be set to "application/octet-stream"\n * **contentEncoding** - optional value of how the data is encoded, defaults to "base64"\n\nIf `contents` is empty, the alternative will be discarded. Other fields are optional.\n\n**Usage example:**\n\n```javascript\n// add HTML "alternative"\nmailcomposer.setMessageOption({\n html: "<b>Hello world!</b>"\n});\n\n// add Markdown alternative\nmailcomposer.addAlternative({\n contentType: "text/x-web-markdown",\n contents: "**Hello world!**"\n});\n```\n\nIf the receiving e-mail client can render messages in Markdown syntax as well, it could prefer\nto display this alternative as the main content of the message.\n\nAlternatives can be added as many as you want.\n\n### DKIM Signing\n\n**mailcomposer** supports DKIM signing with very simple setup. Use this with caution\nthough since the generated message needs to be buffered entirely before it can be\nsigned - in this case the streaming capability offered by mailcomposer is illusionary,\nthere will only be one `\'data\'` event with the entire message. Not a big deal with\nsmall messages but might consume a lot of RAM when using larger attachments.\n\nSet up the DKIM signing with `useDKIM` method:\n\n```javascript\nmailcomposer.useDKIM(dkimOptions)\n```\n\nWhere `dkimOptions` includes necessary options for signing\n\n * **domainName** - the domainname that is being used for signing\n * **keySelector** - key selector. If you have set up a TXT record with DKIM public key at *zzz._domainkey.example.com* then `zzz` is the selector\n * **privateKey** - DKIM private key that is used for signing as a string\n * **headerFieldNames** - optional colon separated list of header fields to sign, by default all fields suggested by RFC4871 #5.5 are used\n\n**NB!** Currently if several header fields with the same name exists, only the last one (the one in the bottom) is signed.\n\nExample:\n\n```javascript\nmailcomposer.setMessageOption({from: "andris@tr.ee"});\nmailcomposer.setMessageOption({to: "andris@node.ee"});\nmailcomposer.setMessageOption({body: "Hello world!"});\nmailcomposer.useDKIM({\n domainName: "node.ee",\n keySelector: "dkim",\n privateKey: fs.readFileSync("private_key.pem")\n});\n```\n\n### Start streaming\n\nWhen the message data is setup, streaming can be started. After this it is not\npossible to add headers, attachments or change body contents.\n\n```javascript\nmailcomposer.streamMessage();\n```\n\nThis generates `\'data\'` events for the message headers and body and final `\'end\'` event.\nAs `MailComposer` objects are Stream instances, these can be piped\n\n```javascript\n// save the output to a file\nmailcomposer.streamMessage();\nmailcomposer.pipe(fs.createWriteStream("out.txt"));\n```\n\n### Compile the message in one go\n\nIf you do not want to use the streaming possibilities, you can compile the entire\nmessage into a string in one go with `buildMessage`.\n\n```javascript\nmailcomposer.buildMessage(function(err, messageSource){\n console.log(err || messageSource);\n});\n```\n\nThe function is actually just a wrapper around `streamMessage` and emitted events.\n\n## Envelope\n\nEnvelope can be generated with an `getEnvelope()` which returns an object\nthat includes a `from` address (string) and a list of `to` addresses (array of\nstrings) suitable for forwarding to a SMTP server as `MAIL FROM:` and `RCPT TO:`.\n\n```javascript\nconsole.log(mailcomposer.getEnvelope());\n// {from:"sender@example.com", to:["receiver@example.com"]}\n```\n\n**NB!** both `from` and `to` properties might be missing from the envelope object\nif corresponding addresses were not detected from the e-mail.\n\n## Running tests\n\nTests are run with [nodeunit](https://github.com/caolan/nodeunit)\n\nRun\n\n npm test\n\n## License\n\n**MIT**\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/andris9/mailcomposer/issues' },
npm sill resolved homepage: 'https://github.com/andris9/mailcomposer',
npm sill resolved _id: 'mailcomposer@0.2.8',
npm sill resolved _from: 'mailcomposer@~0.2' },
npm sill resolved { name: 'simplesmtp',
npm sill resolved description: 'Simple SMTP server module to create custom SMTP servers',
npm sill resolved version: '0.3.21',
npm sill resolved author: { name: 'Andris Reinman' },
npm sill resolved maintainers: [ [Object] ],
npm sill resolved repository: { type: 'git', url: 'http://github.com/andris9/simplesmtp.git' },
npm sill resolved scripts: { test: 'nodeunit test/' },
npm sill resolved main: './lib/smtp',
npm sill resolved licenses: [ [Object] ],
npm sill resolved dependencies: { rai: '~0.1', xoauth2: '~0.1' },
npm sill resolved devDependencies: { nodeunit: '*', mailcomposer: '*' },
npm sill resolved engines: { node: '>=0.8.0' },
npm sill resolved keywords: [ 'servers', 'text-based', 'smtp', 'email', 'mail', 'e-mail' ],
npm sill resolved readme: '# simplesmtp\n\nThis is a module to easily create custom SMTP servers and clients - use SMTP as a first class protocol in Node.JS!\n\n[![Build Status](https://secure.travis-ci.org/andris9/simplesmtp.png)](http://travis-ci.org/andris9/simplesmtp)\n[![NPM version](https://badge.fury.io/js/simplesmtp.png)](http://badge.fury.io/js/simplesmtp)\n\n## Version warning!\n\nIf you are using node v0.6, then the last usable version of **simplesmtp** is v0.2.7\n\nCurrent version of simplesmtp is fully supported for Node v0.8+\n\n## Support simplesmtp development\n\n[![Donate to author](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DB26KWR2BQX5W)\n\n## SMTP Server\n\n## Simple SMTP server\n\nFor a simple inbound only, no authentication SMTP server you can use\n\n simplesmtp.createSimpleServer([options], requestListener).listen(port);\n\nExample\n\n simplesmtp.createSimpleServer({SMTPBanner:"My Server"}, function(req){\n req.pipe(process.stdout);\n req.accept();\n }).listen(port);\n\nProperties\n\n * **req.from** - From address\n * **req.to** - an array of To addresses\n * **req.host** - hostname reported by the client\n * **req.remodeAddress** - client IP address\n\nMethods\n\n * **req.accept** *([id])* - Accept the message with the selected ID\n * **req.reject** *([message])* - Reject the message with the selected message\n * **req.pipe** *(stream)* - Pipe the incoming data to a writable stream\n\nEvents\n\n * **\'data\'** *(chunk)* - A chunk (Buffer) of the message.\n * **\'end\'** - The message has been transferred\n\n\n## Advanced SMTP server\n\n### Usage\n\nCreate a new SMTP server instance with\n\n var smtp = simplesmtp.createServer([options]);\n\nAnd start listening on selected port\n\n smtp.listen(25, [function(err){}]);\n\nSMTP options can include the following:\n\n * **name** - the hostname of the server, will be used for informational messages\n * **debug** - if set to true, print out messages about the connection\n * **timeout** - client timeout in milliseconds, defaults to 60 000 (60 sec.)\n * **secureConnection** - start a server on secure connection\n * **SMTPBanner** - greeting banner that is sent to the client on connection\n * **requireAuthentication** - if set to true, require that the client must authenticate itself\n * **enableAuthentication** - if set to true, client may authenticate itself but don\'t have to (as opposed to `requireAuthentication` that explicitly requires clients to authenticate themselves)\n * **maxSize** - maximum size of an e-mail in bytes (currently informational only)\n * **credentials** - TLS credentials (`{key:\'\', cert:\'\', ca:[\'\']}`) for the server\n * **authMethods** - allowed authentication methods, defaults to `["PLAIN", "LOGIN"]`\n * **disableEHLO** - if set to true, support HELO command only\n * **ignoreTLS** - if set to true, allow client do not use STARTTLS\n * **disableDNSValidation** - if set, do not validate sender domains\n\n### Example\n\n var simplesmtp = require("simplesmtp"),\n fs = require("fs");\n\n var smtp = simplesmtp.createServer();\n smtp.listen(25);\n\n smtp.on("startData", function(connection){\n console.log("Message from:", connection.from);\n console.log("Message to:", connection.to);\n connection.saveStream = fs.createWriteStream("/tmp/message.txt");\n });\n\n smtp.on("data", function(connection, chunk){\n connection.saveStream.write(chunk);\n });\n\n smtp.on("dataReady", function(connection, callback){\n connection.saveStream.end();\n console.log("Incoming message saved to /tmp/message.txt");\n callback(null, "ABC1"); // ABC1 is the queue id to be advertised to the client\n // callback(new Error("Rejected as spam!")); // reported back to the client\n });\n\n### Events\n\n * **startData** *(connection)* - DATA stream is opened by the client (`connection` is an object with `from`, `to`, `host` and `remoteAddress` properties)\n * **data** *(connection, chunk)* - e-mail data chunk is passed from the client\n * **dataReady** *(connection, callback)* - client is finished passing e-mail data, `callback` returns the queue id to the client\n * **authorizeUser** *(connection, username, password, callback)* - will be emitted if `requireAuthentication` option is set to true. `callback` has two parameters *(err, success)* where `success` is Boolean and should be true, if user is authenticated successfully\n * **validateSender** *(connection, email, callback)* - will be emitted if `validateSender` listener is set up\n * **validateRecipient** *(connection, email, callback)* - will be emitted it `validataRecipients` listener is set up\n * **close** *(connection)* - emitted when the connection to client is closed\n\n## SMTP Client\n\n### Usage\n\nSMTP client can be created with `simplesmtp.connect(port[,host][, options])`\nwhere\n\n * **port** is the port to connect to\n * **host** is the hostname to connect to (defaults to "localhost")\n * **options** is an optional options object (see below)\n\n### Connection options\n\nThe following connection options can be used with `simplesmtp.connect`:\n\n * **secureConnection** - use SSL\n * **name** - the name of the client server\n * **auth** - authentication object `{user:"...", pass:"..."}` or `{XOAuthToken:"base64data"}`\n * **ignoreTLS** - ignore server support for STARTTLS\n * **tls** - optional options object for `tls.connect`, also applies to STARTTLS. For example `rejectUnauthorized` is set to `false` by default. You can override this option by setting `tls: {rejectUnauthorized: true}`\n * **debug** - output client and server messages to console\n * **logFile** - optional filename where communication with remote server has to be logged\n * **instanceId** - unique instance id for debugging (will be output console with the messages)\n * **localAddress** - local interface to bind to for network connections (needs Node.js >= 0.11.3 for working with tls)\n * **greetingTimeout** (defaults to 10000) - Time to wait in ms until greeting message is received from the server\n * **connectionTimeout** (system default if not set) - Time to wait in ms until the socket is opened to the server\n * **rejectUnathorized** (defaults to false) - if set to true accepts only valid server certificates. You can override this option with the `tls` option, this is just a shorthand\n * **dsn** - An object with methods `success`, `failure` and `delay`. If any of these are set to true, DSN will be used\n\n### Connection events\n\nOnce a connection is set up the following events can be listened to:\n\n * **\'idle\'** - the connection to the SMTP server has been successfully set up and the client is waiting for an envelope\n * **\'message\'** - the envelope is passed successfully to the server and a message stream can be started\n * **\'ready\'** `(success)` - the message was sent\n * **\'rcptFailed\'** `(addresses)` - not all recipients were accepted (invalid addresses are included as an array)\n * **\'error\'** `(err, stage)` - An error occurred. The connection is closed and an \'end\' event is emitted shortly. Second argument indicates on which SMTP session stage an error occured.\n * **\'end\'** - connection to the client is closed\n\n### Sending an envelope\n\nWhen an `\'idle\'` event is emitted, an envelope object can be sent to the server.\nThis includes a string `from` and an array of strings `to` property.\n\nEnvelope can be sent with `client.useEnvelope(envelope)`\n\n // run only once as \'idle\' is emitted again after message delivery\n client.once("idle", function(){\n client.useEnvelope({\n from: "me@example.com",\n to: ["receiver1@example.com", "receiver2@example.com"]\n });\n });\n\nThe `to` part of the envelope includes **all** recipients from `To:`, `Cc:` and `Bcc:` fields.\n\nIf setting the envelope up fails, an error is emitted. If only some (not all)\nrecipients are not accepted, the mail can still be sent but an `rcptFailed`\nevent is emitted.\n\n client.on("rcptFailed", function(addresses){\n console.log("The following addresses were rejected: ", addresses);\n });\n\nIf the envelope is set up correctly a `\'message\'` event is emitted.\n\n### Sending a message\n\nWhen `\'message\'` event is emitted, it is possible to send mail. To do this\nyou can pipe directly a message source (for example an .eml file) to the client\nor alternatively you can send the message with `client.write` calls (you also\nneed to call `client.end()` once the message is completed.\n\nIf you are piping a stream to the client, do not leave the `\'end\'` event out,\nthis is needed to complete the message sequence by the client.\n\n client.on("message", function(){\n fs.createReadStream("test.eml").pipe(client);\n });\n\nOnce the message is delivered a `\'ready\'` event is emitted. The event has an\nparameter which indicates if the message was transmitted( (true) or not (false)\nand another which includes the last received data from the server.\n\n client.on("ready", function(success, response){\n if(success){\n console.log("The message was transmitted successfully with "+response);\n }\n });\n\n### XOAUTH\n\n**simplesmtp** supports [XOAUTH2 and XOAUTH](https://developers.google.com/google-apps/gmail/oauth_protocol) authentication.\n\n#### XOAUTH2\n\nTo use this feature you can set `XOAuth2` param as an `auth` option\n\n var mailOptions = {\n ...,\n auth:{\n XOAuth2: {\n user: "example.user@gmail.com",\n clientId: "8819981768.apps.googleusercontent.com",\n clientSecret: "{client_secret}",\n refreshToken: "1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI",\n accessToken: "vF9dft4qmTc2Nvb3RlckBhdHRhdmlzdGEuY29tCg==",\n timeout: 3600\n }\n }\n }\n\n`accessToken` and `timeout` values are optional. If login fails a new access token is generated automatically.\n\n#### XOAUTH\n\nTo use this feature you can set `XOAuthToken` param as an `auth` option\n\n var mailOptions = {\n ...,\n auth:{\n XOAuthToken: "R0VUIGh0dHBzOi8vbWFpbC5nb29...."\n }\n }\n\nAlternatively it is also possible to use XOAuthToken generators (supported by Nodemailer) - this\nneeds to be an object with a mandatory method `generate` that takes a callback function for\ngenerating a XOAUTH token string. This is better for generating tokens only when needed -\nthere is no need to calculate unique token for every e-mail request, since a lot of these\nmight share the same connection and thus the cleint needs not to re-authenticate itself\nwith another token.\n\n var XOGen = {\n token: "abc",\n generate: function(callback){\n if(1 != 1){\n return callback(new Error("Tokens can\'t be generated in strange environments"));\n }\n callback(null, new Buffer(this.token, "utf-8").toString("base64"));\n }\n }\n\n var mailOptions = {\n ...,\n auth:{\n XOAuthToken: XOGen\n }\n }\n\n### Error types\n\nEmitted errors include the reason for failing in the `name` property\n\n * **UnknowAuthError** - the client tried to authenticate but the method was not supported\n * **AuthError** - the username/password used were rejected\n * **TLSError** - STARTTLS failed\n * **SenderError** - the sender e-mail address was rejected\n * **RecipientError** - all recipients were rejected (if only some of the recipients are rejected, a `\'rcptFailed\'` event is raised instead\n\nThere\'s also an additional property in the error object called `data` that includes\nthe last response received from the server (if available for the current error type).\n\n### About reusing the connection\n\nYou can reuse the same connection several times but you can\'t send a mail\nthrough the same connection concurrently. So if you catch and `\'idle\'` event\nlock the connection to a message process and unlock after `\'ready\'`.\n\nOn `\'error\'` events you should reschedule the message and on `\'end\'` events\nyou should recreate the connection.\n\n### Closing the client\n\nBy default the client tries to keep the connection up. If you want to close it,\nrun `client.quit()` - this sends a `QUIT` command to the server and closes the\nconnection\n\n client.quit();\n\n## SMTP Client Connection pool\n\n**simplesmtp** has the option for connection pooling if you want to reuse a bulk\nof connections.\n\n### Usage\n\nCreate a connection pool of SMTP clients with\n\n simplesmtp.createClientPool(port[,host][, options])\n\nwhere\n\n * **port** is the port to connect to\n * **host** is the hostname to connect to (defaults to "localhost")\n * **options** is an optional options object (see below)\n\n### Connection options\n\nThe following connection options can be used with `simplesmtp.connect`:\n\n * **secureConnection** - use SSL\n * **name** - the name of the client server\n * **auth** - authentication object `{user:"...", pass:"..."}` or `{XOAuthToken:"base64data"}`\n * **ignoreTLS** - ignore server support for STARTTLS\n * **debug** - output client and server messages to console\n * **logFile** - optional filename where communication with remote server has to be logged\n * **maxConnections** - how many connections to keep in the pool (defaults to 5)\n * **localAddress** - local interface to bind to for network connections (needs Node.js >= 0.11.3 for working with tls)\n * **maxMessages** - limit the count of messages to send through a single connection (no limit by default)\n\n### Send an e-mail\n\nE-mails can be sent through the pool with\n\n pool.sendMail(mail[, callback])\n\nwhere\n\n * **mail** is a [MailComposer](https://github.com/andris9/mailcomposer) compatible object\n * **callback** `(error, responseObj)` - is the callback function to run after the message is delivered or an error occured. `responseObj` may include `failedRecipients` which is an array with e-mail addresses that were rejected and `message` which is the last response from the server.\n\n### Errors\n\nIn addition to SMTP client errors another error name is used\n\n * **DeliveryError** - used if the message was not accepted by the SMTP server\n\n## License\n\n**MIT**\n\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/andris9/simplesmtp/issues' },
npm sill resolved homepage: 'https://github.com/andris9/simplesmtp',
npm sill resolved _id: 'simplesmtp@0.3.21',
npm sill resolved _from: 'simplesmtp@~0.2 || ~0.3' } ]
npm info install mailcomposer@0.2.8 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer
npm info install simplesmtp@0.3.21 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer
npm info installOne mailcomposer@0.2.8
npm info installOne simplesmtp@0.3.21
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer/node_modules/mailcomposer unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer/node_modules/simplesmtp unbuild
npm verb cache add [ 'request@~2.2.5', null ]
npm verb cache add name=undefined spec="request@~2.2.5" args=["request@~2.2.5",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'request@~2.2.5',
npm verb parsed url path: 'request@~2.2.5',
npm verb parsed url href: 'request@~2.2.5' }
npm verb cache add name="request" spec="~2.2.5" args=["request","~2.2.5"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '~2.2.5',
npm verb parsed url path: '~2.2.5',
npm verb parsed url href: '~2.2.5' }
npm verb addNamed [ 'request', '~2.2.5' ]
npm verb addNamed [ null, '>=2.2.5-0 <2.3.0-0' ]
npm sill lockFile 6c77ccb9-request-2-2-5 request@~2.2.5
npm verb lock request@~2.2.5 /Users/hamrickb/.npm/6c77ccb9-request-2-2-5.lock
npm verb tar unpack /Users/hamrickb/.npm/eventemitter3/0.1.1/package.tgz
npm sill lockFile 66673962-proxy-node-modules-eventemitter3 tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/http-proxy/node_modules/eventemitter3
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/http-proxy/node_modules/eventemitter3 /Users/hamrickb/.npm/66673962-proxy-node-modules-eventemitter3.lock
npm sill lockFile c8756c54--eventemitter3-0-1-1-package-tgz tar:///Users/hamrickb/.npm/eventemitter3/0.1.1/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/eventemitter3/0.1.1/package.tgz /Users/hamrickb/.npm/c8756c54--eventemitter3-0-1-1-package-tgz.lock
npm sill addNameRange { name: 'request', range: '>=2.2.5-0 <2.3.0-0', hasData: false }
npm sill gunzTarPerm extractEntry package.json
npm sill lockFile 166e4cb0-aws-sign-0-2-0 aws-sign@0.2.0
npm sill lockFile 166e4cb0-aws-sign-0-2-0 aws-sign@0.2.0
npm sill lockFile d85dc282-cookie-jar-0-2-0 cookie-jar@0.2.0
npm sill lockFile d85dc282-cookie-jar-0-2-0 cookie-jar@0.2.0
npm sill lockFile 88b53d74-forever-agent-0-2-0 forever-agent@0.2.0
npm sill lockFile 88b53d74-forever-agent-0-2-0 forever-agent@0.2.0
npm verb tar unpack /Users/hamrickb/.npm/mailcomposer/0.2.8/package.tgz
npm sill lockFile 907a03cd-mailer-node-modules-mailcomposer tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer/node_modules/mailcomposer
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer/node_modules/mailcomposer /Users/hamrickb/.npm/907a03cd-mailer-node-modules-mailcomposer.lock
npm sill lockFile b96430ff-m-mailcomposer-0-2-8-package-tgz tar:///Users/hamrickb/.npm/mailcomposer/0.2.8/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/mailcomposer/0.2.8/package.tgz /Users/hamrickb/.npm/b96430ff-m-mailcomposer-0-2-8-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/simplesmtp/0.3.21/package.tgz
npm sill lockFile 72fc8148-demailer-node-modules-simplesmtp tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer/node_modules/simplesmtp
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/hoodie-plugins-manager/node_modules/nodemailer/node_modules/simplesmtp /Users/hamrickb/.npm/72fc8148-demailer-node-modules-simplesmtp.lock
npm sill lockFile ca2a731b-pm-simplesmtp-0-3-21-package-tgz tar:///Users/hamrickb/.npm/simplesmtp/0.3.21/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/simplesmtp/0.3.21/package.tgz /Users/hamrickb/.npm/ca2a731b-pm-simplesmtp-0-3-21-package-tgz.lock
npm sill gunzTarPerm extractEntry package.json
npm sill lockFile b6564d90-aws-sign-0-2-0 aws-sign@~0.2.0
npm sill lockFile b6564d90-aws-sign-0-2-0 aws-sign@~0.2.0
npm sill gunzTarPerm extractEntry package.json
npm sill gunzTarPerm extractEntry package.json
npm sill lockFile 4df5a18a-cookie-jar-0-2-0 cookie-jar@~0.2.0
npm sill lockFile 4df5a18a-cookie-jar-0-2-0 cookie-jar@~0.2.0
npm sill lockFile df7f0a96-forever-agent-0-2-0 forever-agent@~0.2.0
npm sill lockFile df7f0a96-forever-agent-0-2-0 forever-agent@~0.2.0
npm sill lockFile ba879b4f-tunnel-agent-0-2-0 tunnel-agent@0.2.0
npm sill lockFile ba879b4f-tunnel-agent-0-2-0 tunnel-agent@0.2.0
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill lockFile 13cacb1b-tunnel-agent-0-2-0 tunnel-agent@~0.2.0
npm sill lockFile 13cacb1b-tunnel-agent-0-2-0 tunnel-agent@~0.2.0
npm sill gunzTarPerm extractEntry test/auth.js
npm sill gunzTarPerm extractEntry test/serverTimeout.js
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm modes [ '755', '644' ]
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm verb registry.get request not expired, no request
npm sill addNameRange number 2 { name: 'request', range: '>=2.2.5-0 <2.3.0-0', hasData: true }
npm sill addNameRange versions [ 'request',
npm sill addNameRange [ '0.10.0',
npm sill addNameRange '0.8.3',
npm sill addNameRange '0.9.0',
npm sill addNameRange '0.9.1',
npm sill addNameRange '0.9.5',
npm sill addNameRange '1.0.0',
npm sill addNameRange '1.1.0',
npm sill addNameRange '1.1.1',
npm sill addNameRange '1.2.0',
npm sill addNameRange '1.9.0',
npm sill addNameRange '1.9.1',
npm sill addNameRange '1.9.2',
npm sill addNameRange '1.9.3',
npm sill addNameRange '1.9.5',
npm sill addNameRange '1.9.7',
npm sill addNameRange '1.9.8',
npm sill addNameRange '1.9.9',
npm sill addNameRange '2.0.0',
npm sill addNameRange '2.0.1',
npm sill addNameRange '2.0.2',
npm sill addNameRange '2.0.3',
npm sill addNameRange '2.0.4',
npm sill addNameRange '2.0.5',
npm sill addNameRange '2.1.0',
npm sill addNameRange '2.1.1',
npm sill addNameRange '2.2.0',
npm sill addNameRange '2.2.5',
npm sill addNameRange '2.2.6',
npm sill addNameRange '2.2.9',
npm sill addNameRange '2.9.0',
npm sill addNameRange '2.9.1',
npm sill addNameRange '2.9.2',
npm sill addNameRange '2.9.3',
npm sill addNameRange '2.9.100',
npm sill addNameRange '2.9.150',
npm sill addNameRange '2.9.151',
npm sill addNameRange '2.9.152',
npm sill addNameRange '2.9.153',
npm sill addNameRange '2.9.200',
npm sill addNameRange '2.9.201',
npm sill addNameRange '2.9.202',
npm sill addNameRange '2.9.203',
npm sill addNameRange '2.10.0',
npm sill addNameRange '2.11.0',
npm sill addNameRange '2.11.1',
npm sill addNameRange '2.11.2',
npm sill addNameRange '2.11.3',
npm sill addNameRange '2.11.4',
npm sill addNameRange '2.12.0',
npm sill addNameRange '2.14.0',
npm sill addNameRange '2.16.0',
npm sill addNameRange '2.16.2',
npm sill addNameRange '2.16.4',
npm sill addNameRange '2.16.6',
npm sill addNameRange '2.18.0',
npm sill addNameRange '2.19.0',
npm sill addNameRange '2.20.0',
npm sill addNameRange '2.21.0',
npm sill addNameRange '2.22.0',
npm sill addNameRange '2.23.0',
npm sill addNameRange '2.24.0',
npm sill addNameRange '2.25.0',
npm sill addNameRange '2.26.0',
npm sill addNameRange '2.27.0',
npm sill addNameRange '2.28.0',
npm sill addNameRange '2.29.0',
npm sill addNameRange '2.30.0',
npm sill addNameRange '2.31.0',
npm sill addNameRange '2.32.0',
npm sill addNameRange '2.33.0' ] ]
npm verb addNamed [ 'request', '2.2.9' ]
npm verb addNamed [ '2.2.9', '2.2.9' ]
npm sill lockFile 0b1d7d4f-request-2-2-9 request@2.2.9
npm verb lock request@2.2.9 /Users/hamrickb/.npm/0b1d7d4f-request-2-2-9.lock
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry lib/async.js
npm sill lockFile f18d29ee-json-stringify-safe-3-0-0 json-stringify-safe@3.0.0
npm sill lockFile f18d29ee-json-stringify-safe-3-0-0 json-stringify-safe@3.0.0
npm sill lockFile 84168241-qs-0-5-6 qs@0.5.6
npm sill lockFile 84168241-qs-0-5-6 qs@0.5.6
npm sill lockFile 5137425d-oauth-sign-0-2-0 oauth-sign@0.2.0
npm sill lockFile 5137425d-oauth-sign-0-2-0 oauth-sign@0.2.0
npm sill lockFile e7227a76-odules-prompt-node-modules-utile tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/utile
npm sill lockFile e7227a76-odules-prompt-node-modules-utile tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/prompt/node_modules/utile
npm sill lockFile a99e72b7-json-stringify-safe-3-0-0 json-stringify-safe@~3.0.0
npm sill lockFile a99e72b7-json-stringify-safe-3-0-0 json-stringify-safe@~3.0.0
npm sill lockFile 2dead18a-qs-0-5-4 qs@~0.5.4
npm sill lockFile 2dead18a-qs-0-5-4 qs@~0.5.4
npm sill lockFile d6e8c101-oauth-sign-0-2-0 oauth-sign@~0.2.0
npm sill lockFile d6e8c101-oauth-sign-0-2-0 oauth-sign@~0.2.0
npm sill lockFile 2fee4f9d-ickb-npm-utile-0-1-7-package-tgz tar:///Users/hamrickb/.npm/utile/0.1.7/package.tgz
npm sill lockFile 2fee4f9d-ickb-npm-utile-0-1-7-package-tgz tar:///Users/hamrickb/.npm/utile/0.1.7/package.tgz
npm sill gunzTarPerm extractEntry package.json
npm sill lockFile c4b0741f-mime-1-2-11 mime@1.2.11
npm sill lockFile c4b0741f-mime-1-2-11 mime@1.2.11
npm sill lockFile 3725bc70-mime-1-2-7 mime@~1.2.7
npm sill lockFile 3725bc70-mime-1-2-7 mime@~1.2.7
npm sill gunzTarPerm extractEntry package.json
npm sill lockFile 7c2028cd-node-uuid-1-4-1 node-uuid@1.4.1
npm sill lockFile 7c2028cd-node-uuid-1-4-1 node-uuid@1.4.1
npm sill lockFile 887f3c04-hawk-0-10-2 hawk@0.10.2
npm sill lockFile 887f3c04-hawk-0-10-2 hawk@0.10.2
npm sill gunzTarPerm extractEntry test/payload.js
npm sill gunzTarPerm extractEntry test/proxy.js
npm info preinstall utile@0.1.7
npm sill lockFile f662725f-node-uuid-1-4-0 node-uuid@~1.4.0
npm sill lockFile f662725f-node-uuid-1-4-0 node-uuid@~1.4.0
npm sill lockFile f84498ae-hawk-0-10-2 hawk@~0.10.2
npm sill lockFile f84498ae-hawk-0-10-2 hawk@~0.10.2
npm sill gunzTarPerm extractEntry couchr-browser.js
npm sill gunzTarPerm extractEntry couchr-node.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry underscore-min.js
npm sill gunzTarPerm extractEntry index.js
npm sill gunzTarPerm extractEntry underscore.js
npm sill gunzTarPerm extractEntry index.html
npm sill gunzTarPerm extractEntry .travis.yml
npm sill gunzTarPerm extractEntry CONTRIBUTING.md
npm sill gunzTarPerm extractEntry CNAME
npm sill gunzTarPerm extractEntry favicon.ico
npm sill gunzTarPerm extractEntry rng.js
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm verb readDependencies using package.json deps
npm verb readDependencies using package.json deps
npm sill lockFile db20d55d-form-data-0-0-10 form-data@0.0.10
npm sill lockFile db20d55d-form-data-0-0-10 form-data@0.0.10
npm sill gunzTarPerm extractEntry package.json
npm verb cache add [ 'i@0.3.x', null ]
npm verb cache add name=undefined spec="i@0.3.x" args=["i@0.3.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'i@0.3.x',
npm verb parsed url path: 'i@0.3.x',
npm verb parsed url href: 'i@0.3.x' }
npm verb cache add name="i" spec="0.3.x" args=["i","0.3.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.3.x',
npm verb parsed url path: '0.3.x',
npm verb parsed url href: '0.3.x' }
npm verb addNamed [ 'i', '0.3.x' ]
npm verb addNamed [ null, '>=0.3.0-0 <0.4.0-0' ]
npm sill lockFile 2b556e57-i-0-3-x i@0.3.x
npm verb lock i@0.3.x /Users/hamrickb/.npm/2b556e57-i-0-3-x.lock
npm verb cache add [ 'async@0.1.x', null ]
npm verb cache add name=undefined spec="async@0.1.x" args=["async@0.1.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'async@0.1.x',
npm verb parsed url path: 'async@0.1.x',
npm verb parsed url href: 'async@0.1.x' }
npm verb cache add name="async" spec="0.1.x" args=["async","0.1.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.1.x',
npm verb parsed url path: '0.1.x',
npm verb parsed url href: '0.1.x' }
npm verb addNamed [ 'async', '0.1.x' ]
npm verb addNamed [ null, '>=0.1.0-0 <0.2.0-0' ]
npm sill lockFile 463e1c03-async-0-1-x async@0.1.x
npm verb lock async@0.1.x /Users/hamrickb/.npm/463e1c03-async-0-1-x.lock
npm verb cache add [ 'deep-equal@*', null ]
npm verb cache add name=undefined spec="deep-equal@*" args=["deep-equal@*",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'deep-equal@*',
npm verb parsed url path: 'deep-equal@*',
npm verb parsed url href: 'deep-equal@*' }
npm verb cache add name="deep-equal" spec="*" args=["deep-equal","*"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '*',
npm verb parsed url path: '*',
npm verb parsed url href: '*' }
npm verb addNamed [ 'deep-equal', '*' ]
npm verb addNamed [ null, '*' ]
npm sill lockFile 2aa4e33c-deep-equal deep-equal@*
npm verb lock deep-equal@* /Users/hamrickb/.npm/2aa4e33c-deep-equal.lock
npm verb cache add [ 'ncp@0.2.x', null ]
npm verb cache add name=undefined spec="ncp@0.2.x" args=["ncp@0.2.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'ncp@0.2.x',
npm verb parsed url path: 'ncp@0.2.x',
npm verb parsed url href: 'ncp@0.2.x' }
npm verb cache add name="ncp" spec="0.2.x" args=["ncp","0.2.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '0.2.x',
npm verb parsed url path: '0.2.x',
npm verb parsed url href: '0.2.x' }
npm verb addNamed [ 'ncp', '0.2.x' ]
npm verb addNamed [ null, '>=0.2.0-0 <0.3.0-0' ]
npm sill lockFile 144b88e9-ncp-0-2-x ncp@0.2.x
npm verb lock ncp@0.2.x /Users/hamrickb/.npm/144b88e9-ncp-0-2-x.lock
npm verb cache add [ 'rimraf@1.x.x', null ]
npm verb cache add name=undefined spec="rimraf@1.x.x" args=["rimraf@1.x.x",null]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: 'rimraf@1.x.x',
npm verb parsed url path: 'rimraf@1.x.x',
npm verb parsed url href: 'rimraf@1.x.x' }
npm verb cache add name="rimraf" spec="1.x.x" args=["rimraf","1.x.x"]
npm verb parsed url { protocol: null,
npm verb parsed url slashes: null,
npm verb parsed url auth: null,
npm verb parsed url host: null,
npm verb parsed url port: null,
npm verb parsed url hostname: null,
npm verb parsed url hash: null,
npm verb parsed url search: null,
npm verb parsed url query: null,
npm verb parsed url pathname: '1.x.x',
npm verb parsed url path: '1.x.x',
npm verb parsed url href: '1.x.x' }
npm verb addNamed [ 'rimraf', '1.x.x' ]
npm verb addNamed [ null, '>=1.0.0-0 <2.0.0-0' ]
npm sill lockFile 42682ec2-rimraf-1-x-x rimraf@1.x.x
npm verb lock rimraf@1.x.x /Users/hamrickb/.npm/42682ec2-rimraf-1-x-x.lock
npm sill lockFile 539eee6c-form-data-0-0-3 form-data@~0.0.3
npm sill lockFile 539eee6c-form-data-0-0-3 form-data@~0.0.3
npm sill lockFile 0b1d7d4f-request-2-2-9 request@2.2.9
npm sill lockFile 0b1d7d4f-request-2-2-9 request@2.2.9
npm sill resolved [ { author:
npm sill resolved { name: 'Mikeal Rogers',
npm sill resolved email: 'mikeal.rogers@gmail.com',
npm sill resolved url: 'http://www.futurealoof.com' },
npm sill resolved name: 'aws-sign',
npm sill resolved description: 'AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.',
npm sill resolved version: '0.2.0',
npm sill resolved repository: { url: 'https://github.com/mikeal/aws-sign' },
npm sill resolved main: 'index.js',
npm sill resolved dependencies: {},
npm sill resolved devDependencies: {},
npm sill resolved optionalDependencies: {},
npm sill resolved engines: { node: '*' },
npm sill resolved bugs: { url: 'https://github.com/mikeal/aws-sign/issues' },
npm sill resolved readme: 'ERROR: No README data found!',
npm sill resolved homepage: 'https://github.com/mikeal/aws-sign',
npm sill resolved _id: 'aws-sign@0.2.0',
npm sill resolved _from: 'aws-sign@~0.2.0' },
npm sill resolved { author:
npm sill resolved { name: 'Mikeal Rogers',
npm sill resolved email: 'mikeal.rogers@gmail.com',
npm sill resolved url: 'http://www.futurealoof.com' },
npm sill resolved name: 'cookie-jar',
npm sill resolved description: 'Cookie Jar. Originally pulled form tobi, maintained as vendor in request, now a standalone module.',
npm sill resolved version: '0.2.0',
npm sill resolved repository: { url: 'https://github.com/mikeal/cookie-jar' },
npm sill resolved main: 'index.js',
npm sill resolved scripts: { test: 'node tests/run.js' },
npm sill resolved dependencies: {},
npm sill resolved devDependencies: {},
npm sill resolved optionalDependencies: {},
npm sill resolved engines: { node: '*' },
npm sill resolved bugs: { url: 'https://github.com/mikeal/cookie-jar/issues' },
npm sill resolved readme: 'ERROR: No README data found!',
npm sill resolved homepage: 'https://github.com/mikeal/cookie-jar',
npm sill resolved _id: 'cookie-jar@0.2.0',
npm sill resolved _from: 'cookie-jar@~0.2.0' },
npm sill resolved { author:
npm sill resolved { name: 'Mikeal Rogers',
npm sill resolved email: 'mikeal.rogers@gmail.com',
npm sill resolved url: 'http://www.futurealoof.com' },
npm sill resolved name: 'forever-agent',
npm sill resolved description: 'HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.',
npm sill resolved version: '0.2.0',
npm sill resolved repository: { url: 'https://github.com/mikeal/forever-agent' },
npm sill resolved main: 'index.js',
npm sill resolved dependencies: {},
npm sill resolved devDependencies: {},
npm sill resolved optionalDependencies: {},
npm sill resolved engines: { node: '*' },
npm sill resolved bugs: { url: 'https://github.com/mikeal/forever-agent/issues' },
npm sill resolved readme: 'ERROR: No README data found!',
npm sill resolved homepage: 'https://github.com/mikeal/forever-agent',
npm sill resolved _id: 'forever-agent@0.2.0',
npm sill resolved _from: 'forever-agent@~0.2.0' },
npm sill resolved { author:
npm sill resolved { name: 'Mikeal Rogers',
npm sill resolved email: 'mikeal.rogers@gmail.com',
npm sill resolved url: 'http://www.futurealoof.com' },
npm sill resolved name: 'tunnel-agent',
npm sill resolved description: 'HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.',
npm sill resolved version: '0.2.0',
npm sill resolved repository: { url: 'https://github.com/mikeal/tunnel-agent' },
npm sill resolved main: 'index.js',
npm sill resolved dependencies: {},
npm sill resolved devDependencies: {},
npm sill resolved optionalDependencies: {},
npm sill resolved engines: { node: '*' },
npm sill resolved bugs: { url: 'https://github.com/mikeal/tunnel-agent/issues' },
npm sill resolved readme: 'ERROR: No README data found!',
npm sill resolved homepage: 'https://github.com/mikeal/tunnel-agent',
npm sill resolved _id: 'tunnel-agent@0.2.0',
npm sill resolved _from: 'tunnel-agent@~0.2.0' },
npm sill resolved { name: 'json-stringify-safe',
npm sill resolved version: '3.0.0',
npm sill resolved description: 'Like JSON.stringify, but doesn\'t blow up on circular refs',
npm sill resolved main: 'stringify.js',
npm sill resolved scripts: { test: 'node test.js' },
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/isaacs/json-stringify-safe' },
npm sill resolved keywords: [ 'json', 'stringify', 'circular', 'safe' ],
npm sill resolved author:
npm sill resolved { name: 'Isaac Z. Schlueter',
npm sill resolved email: 'i@izs.me',
npm sill resolved url: 'http://blog.izs.me' },
npm sill resolved license: 'BSD',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved readme: '# json-stringify-safe\n\nLike JSON.stringify, but doesn\'t throw on circular references.\n\n## Usage\n\nTakes the same arguments as `JSON.stringify`.\n\n```javascript\nvar stringify = require(\'json-stringify-safe\');\nvar circularObj = {};\ncircularObj.circularRef = circularObj;\ncircularObj.list = [ circularObj, circularObj ];\nconsole.log(stringify(circularObj, null, 2));\n```\n\nOutput:\n\n```json\n{\n "circularRef": "[Circular]",\n "list": [\n "[Circular]",\n "[Circular]"\n ]\n}\n```\n',
npm sill resolved bugs: { url: 'https://github.com/isaacs/json-stringify-safe/issues' },
npm sill resolved homepage: 'https://github.com/isaacs/json-stringify-safe',
npm sill resolved _id: 'json-stringify-safe@3.0.0',
npm sill resolved _from: 'json-stringify-safe@~3.0.0' },
npm sill resolved { name: 'qs',
npm sill resolved description: 'querystring parser',
npm sill resolved version: '0.5.6',
npm sill resolved keywords: [ 'query string', 'parser', 'component' ],
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/visionmedia/node-querystring.git' },
npm sill resolved devDependencies: { mocha: '*', 'expect.js': '*' },
npm sill resolved component: { scripts: [Object] },
npm sill resolved author:
npm sill resolved { name: 'TJ Holowaychuk',
npm sill resolved email: 'tj@vision-media.ca',
npm sill resolved url: 'http://tjholowaychuk.com' },
npm sill resolved main: 'index',
npm sill resolved engines: { node: '*' },
npm sill resolved readme: '# node-querystring\n\n query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others.\n\n## Installation\n\n $ npm install qs\n\n## Examples\n\n```js\nvar qs = require(\'qs\');\n\nqs.parse(\'user[name][first]=Tobi&user[email]=tobi@learnboost.com\');\n// => { user: { name: { first: \'Tobi\' }, email: \'tobi@learnboost.com\' } }\n\nqs.stringify({ user: { name: \'Tobi\', email: \'tobi@learnboost.com\' }})\n// => user[name]=Tobi&user[email]=tobi%40learnboost.com\n```\n\n## Testing\n\nInstall dev dependencies:\n\n $ npm install -d\n\nand execute:\n\n $ make test\n\nbrowser:\n\n $ open test/browser/index.html\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk &lt;tj@vision-media.ca&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\'Software\'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \'AS IS\', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.',
npm sill resolved readmeFilename: 'Readme.md',
npm sill resolved bugs: { url: 'https://github.com/visionmedia/node-querystring/issues' },
npm sill resolved homepage: 'https://github.com/visionmedia/node-querystring',
npm sill resolved _id: 'qs@0.5.6',
npm sill resolved _from: 'qs@~0.5.4' },
npm sill resolved { author:
npm sill resolved { name: 'Mikeal Rogers',
npm sill resolved email: 'mikeal.rogers@gmail.com',
npm sill resolved url: 'http://www.futurealoof.com' },
npm sill resolved name: 'oauth-sign',
npm sill resolved description: 'OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.',
npm sill resolved version: '0.2.0',
npm sill resolved repository: { url: 'https://github.com/mikeal/oauth-sign' },
npm sill resolved main: 'index.js',
npm sill resolved dependencies: {},
npm sill resolved devDependencies: {},
npm sill resolved optionalDependencies: {},
npm sill resolved engines: { node: '*' },
npm sill resolved scripts: { test: 'node test.js' },
npm sill resolved bugs: { url: 'https://github.com/mikeal/oauth-sign/issues' },
npm sill resolved readme: 'ERROR: No README data found!',
npm sill resolved homepage: 'https://github.com/mikeal/oauth-sign',
npm sill resolved _id: 'oauth-sign@0.2.0',
npm sill resolved _from: 'oauth-sign@~0.2.0' },
npm sill resolved { author:
npm sill resolved { name: 'Robert Kieffer',
npm sill resolved email: 'robert@broofa.com',
npm sill resolved url: 'http://github.com/broofa' },
npm sill resolved contributors: [ [Object] ],
npm sill resolved dependencies: {},
npm sill resolved description: 'A comprehensive library for mime-type mapping',
npm sill resolved devDependencies: {},
npm sill resolved keywords: [ 'util', 'mime' ],
npm sill resolved main: 'mime.js',
npm sill resolved name: 'mime',
npm sill resolved repository: { url: 'https://github.com/broofa/node-mime', type: 'git' },
npm sill resolved version: '1.2.11',
npm sill resolved readme: '# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last \'/\' or \'.\'). E.g.\n\n var mime = require(\'mime\');\n\n mime.lookup(\'/path/to/file.txt\'); // => \'text/plain\'\n mime.lookup(\'file.txt\'); // => \'text/plain\'\n mime.lookup(\'.TXT\'); // => \'text/plain\'\n mime.lookup(\'htm\'); // => \'text/html\'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension(\'text/html\'); // => \'html\'\n mime.extension(\'application/octet-stream\'); // => \'bin\'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup(\'text/plain\'); // => \'UTF-8\'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n \'text/x-some-format\': [\'x-sf\', \'x-sft\', \'x-sfml\'],\n \'application/x-my-type\': [\'x-mt\', \'x-mtt\'],\n // etc ...\n });\n\n mime.lookup(\'x-sft\'); // => \'text/x-some-format\'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension(\'text/x-some-format\'); // => \'x-sf\'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache ".types" format file\n\n mime.load(\'./my_project.types\');\n\nThe .types file format is simple - See the `types` dir for examples.\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/broofa/node-mime/issues' },
npm sill resolved homepage: 'https://github.com/broofa/node-mime',
npm sill resolved _id: 'mime@1.2.11',
npm sill resolved _from: 'mime@~1.2.7' },
npm sill resolved { name: 'node-uuid',
npm sill resolved description: 'Rigorous implementation of RFC4122 (v1 and v4) UUIDs.',
npm sill resolved url: 'http://github.com/broofa/node-uuid',
npm sill resolved keywords: [ 'uuid', 'guid', 'rfc4122' ],
npm sill resolved author: { name: 'Robert Kieffer', email: 'robert@broofa.com' },
npm sill resolved contributors: [ [Object] ],
npm sill resolved lib: '.',
npm sill resolved main: './uuid.js',
npm sill resolved repository: { type: 'git', url: 'https://github.com/broofa/node-uuid.git' },
npm sill resolved version: '1.4.1',
npm sill resolved readme: '# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) (\'broofa/node-uuid\').\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip\'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n<script src="uuid.js"></script>\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require(\'node-uuid\');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> \'6c84fb90-12c4-11e1-840d-7b25c5ee775a\'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> \'110ec58a-a0f2-4ac4-8393-c866d813b8d1\'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date(\'2011-11-01\').getTime(),\n nsecs: 5678\n}); // -> "710b962e-041c-11e1-9234-0123456789ab"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> \'02a2ce90-1432-11e1-8558-0b488e4fc115\'\nuuid.unparse(buffer, 16) // -> \'02a31cb0-1432-11e1-8558-0b488e4fc115\'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or \'new Buffer\' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse(\'797ff043-11eb-11e1-80d6-510998755d10\'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>\nvar string = uuid.unparse(bytes); // -> \'797ff043-11eb-11e1-80d6-510998755d10\'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it\'s previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> \'6c84fb90-12c4-11e1-840d-7b25c5ee775a\'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/broofa/node-uuid/issues' },
npm sill resolved homepage: 'https://github.com/broofa/node-uuid',
npm sill resolved _id: 'node-uuid@1.4.1',
npm sill resolved _from: 'node-uuid@~1.4.0' },
npm sill resolved { name: 'hawk',
npm sill resolved description: 'HTTP Hawk Authentication Scheme',
npm sill resolved version: '0.10.2',
npm sill resolved author:
npm sill resolved { name: 'Eran Hammer',
npm sill resolved email: 'eran@hueniverse.com',
npm sill resolved url: 'http://hueniverse.com' },
npm sill resolved contributors: [],
npm sill resolved repository: { type: 'git', url: 'git://github.com/hueniverse/hawk' },
npm sill resolved main: 'index',
npm sill resolved keywords: [ 'http', 'authentication', 'scheme', 'hawk' ],
npm sill resolved engines: { node: '0.8.x' },
npm sill resolved dependencies:
npm sill resolved { hoek: '0.7.x',
npm sill resolved boom: '0.3.x',
npm sill resolved cryptiles: '0.1.x',
npm sill resolved sntp: '0.1.x' },
npm sill resolved devDependencies: { lab: '0.0.x', 'complexity-report': '0.x.x' },
npm sill resolved scripts: { test: 'make test-cov' },
npm sill resolved licenses: [ [Object] ],
npm sill resolved readme: '![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png)\r\n\r\n<img align="right" src="https://raw.github.com/hueniverse/hawk/master/images/logo.png" /> **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial\r\nHTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz).\r\n\r\nCurrent version: **0.10.1**\r\n\r\n[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk)\r\n\r\n# Table of Content\r\n\r\n- [**Introduction**](#introduction)\r\n - [Replay Protection](#replay-protection)\r\n - [Usage Example](#usage-example)\r\n - [Protocol Example](#protocol-example)\r\n - [Payload Validation](#payload-validation)\r\n - [Response Payload Validation](#response-payload-validation)\r\n<p></p>\r\n- [**Single URI Authorization**](#single-uri-authorization)\r\n - [Usage Example](#bewit-usage-example)\r\n<p></p>\r\n- [**Security Considerations**](#security-considerations)\r\n - [MAC Keys Transmission](#mac-keys-transmission)\r\n - [Confidentiality of Requests](#confidentiality-of-requests)\r\n - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers)\r\n - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials)\r\n - [Entropy of Keys](#entropy-of-keys)\r\n - [Coverage Limitations](#coverage-limitations)\r\n - [Future Time Manipulation](#future-time-manipulation)\r\n - [Client Clock Poisoning](#client-clock-poisoning)\r\n - [Bewit Limitations](#bewit-limitations)\r\n<p></p>\r\n- [**Frequently Asked Questions**](#frequently-asked-questions)\r\n<p></p>\r\n- [**Acknowledgements**](#acknowledgements)\r\n\r\n# Introduction\r\n\r\n**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with\r\npartial cryptographic verification of the request and response, covering the HTTP method, request URI, host,\r\nand optionally the request payload.\r\n\r\nSimilar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of\r\nclient credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme,\r\nthe key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is\r\nincluded in its place.\r\n\r\nHowever, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of\r\nreplay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less\r\n"chattiness" (interaction with the server).\r\n\r\nAlso unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because\r\nthe client and server must both have access to the key material in the clear.\r\n\r\nThe primary design goals of this scheme are to:\r\n* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources,\r\n* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where\r\n to send an authenticated request), and\r\n* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client\r\n failure to validate the server\'s identity as part of its TLS handshake.\r\n\r\nIn addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using\r\na query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk).\r\n\r\nThe **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server,\r\nwhich is beyond the scope of this module. Typically, the shared credentials are established via an initial\r\nTLS-protected phase or derived from some other shared confidential information available to both the client\r\nand the server.\r\n\r\n\r\n## Replay Protection\r\n\r\nWithout replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more \r\nthan once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when \r\nmaking requests. This gives the server enough information to prevent replay attacks.\r\n\r\nThe nonce is generated by the client, and is a string unique across all requests with the same timestamp and\r\nkey identifier combination. \r\n\r\nThe timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards\r\nare rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks.\r\nBy default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in\r\npractice translates to a maximum of 2 minutes as the skew can be positive or negative).\r\n\r\nUsing a timestamp requires the client\'s clock to be in sync with the server\'s clock. **Hawk** requires both the client\r\nclock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types\r\n(e.g. browsers) to deploy NTP, the server provides the client with its current time in response to a bad timestamp.\r\n\r\nThere is no expectation that the client will adjust its system clock to match the server (in fact, this would be a\r\npotential attack vector). Instead, the client only uses the server\'s time to calculate an offset used only\r\nfor communications with that particular server. The protocol rewards clients with synchronized clocks by reducing\r\nthe number of round trips required to authenticate the first request.\r\n\r\n\r\n## Usage Example\r\n\r\nServer code:\r\n\r\n```javascript\r\nvar Http = require(\'http\');\r\nvar Hawk = require(\'hawk\');\r\n\r\n\r\n// Credentials lookup function\r\n\r\nvar credentialsFunc = function (id, callback) {\r\n\r\n var credentials = {\r\n key: \'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\',\r\n algorithm: \'sha256\',\r\n user: \'Steve\'\r\n };\r\n\r\n return callback(null, credentials);\r\n};\r\n\r\n// Create HTTP server\r\n\r\nvar handler = function (req, res) {\r\n\r\n // Authenticate incoming request\r\n\r\n Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {\r\n\r\n // Prepare response\r\n\r\n var payload = (!err ? \'Hello \' + credentials.user + \' \' + artifacts.ext : \'Shoosh!\');\r\n var headers = { \'Content-Type\': \'text/plain\' };\r\n\r\n // Generate Server-Authorization response header\r\n\r\n var header = Hawk.server.header(artifacts, { payload: payload, contentType: headers[\'Content-Type\'] });\r\n headers[\'Server-Authorization\'] = header;\r\n\r\n // Send the response back\r\n\r\n res.writeHead(!err ? 200 : 401, headers);\r\n res.end(payload);\r\n });\r\n};\r\n\r\n// Start server\r\n\r\nHttp.createServer(handler).listen(8000, \'example.com\');\r\n```\r\n\r\nClient code:\r\n\r\n```javascript\r\nvar Request = require(\'request\');\r\nvar Hawk = require(\'hawk\');\r\n\r\n\r\n// Client credentials\r\n\r\nvar credentials = {\r\n id: \'dh37fgj492je\',\r\n key: \'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\',\r\n algorithm: \'sha256\'\r\n}\r\n\r\n// Request options\r\n\r\nvar requestOptions = {\r\n uri: \'http://example.com:8000/resource/1?b=1&a=2\',\r\n method: \'GET\',\r\n headers: {}\r\n};\r\n\r\n// Generate Authorization request header\r\n\r\nvar header = Hawk.client.header(\'http://example.com:8000/resource/1?b=1&a=2\', \'GET\', { credentials: credentials, ext: \'some-app-data\' });\r\nrequestOptions.headers.Authorization = header.field;\r\n\r\n// Send authenticated request\r\n\r\nRequest(requestOptions, function (error, response, body) {\r\n\r\n // Authenticate the server\'s response\r\n\r\n var isValid = Hawk.client.authenticate(response, header.artifacts, { payload: body });\r\n\r\n // Output results\r\n\r\n console.log(response.statusCode + \': \' + body + (isValid ? \' (valid)\' : \' (invalid)\'));\r\n});\r\n```\r\n\r\n**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local\r\nmachine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP \'start()\' method.\r\n\r\n```javascript\r\nHawk.sntp.start();\r\n```\r\n\r\n\r\n## Protocol Example\r\n\r\nThe client attempts to access a protected resource without authentication, sending the following HTTP request to\r\nthe resource server:\r\n\r\n```\r\nGET /resource/1?b=1&a=2 HTTP/1.1\r\nHost: example.com:8000\r\n```\r\n\r\nThe resource server returns an authentication challenge.\r\n\r\n```\r\nHTTP/1.1 401 Unauthorized\r\nWWW-Authenticate: Hawk\r\n```\r\n\r\nThe client has previously obtained a set of **Hawk** credentials for accessing resources on the "http://example.com/"\r\nserver. The **Hawk** credentials issued to the client include the following attributes:\r\n\r\n* Key identifier: dh37fgj492je\r\n* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\r\n* Algorithm: sha256\r\n\r\nThe client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1,\r\n1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline\r\ncharacter):\r\n\r\n```\r\nhawk.1.header\r\n1353832234\r\nj4h3g2\r\nGET\r\n/resource?a=1&b=2\r\nexample.com\r\n8000\r\n\r\nsome-app-ext-data\r\n\r\n```\r\n\r\nThe request MAC is calculated using HMAC with the specified hash algorithm "sha256" and the key over the normalized request string.\r\nThe result is base64-encoded to produce the request MAC:\r\n\r\n```\r\n6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\r\n```\r\n\r\nThe client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using\r\nthe HTTP `Authorization` request header field:\r\n\r\n```\r\nGET /resource/1?b=1&a=2 HTTP/1.1\r\nHost: example.com:8000\r\nAuthorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="\r\n```\r\n\r\nThe server validates the request by calculating the request MAC again based on the request received and verifies the validity\r\nand scope of the **Hawk** credentials. If valid, the server responds with the requested resource.\r\n\r\n\r\n### Payload Validation\r\n\r\n**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash\r\nusing the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character):\r\n* `hawk.1.payload`\r\n* the content-type in lowercase, without any parameters (e.g. `application/json`)\r\n* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability)\r\n\r\nFor example:\r\n\r\n* Payload: `Thank you for flying Hawk`\r\n* Content Type: `text/plain`\r\n* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=`\r\n\r\nResults in the following input to the payload hash function (newline terminated values):\r\n\r\n```\r\nhawk.1.payload\r\ntext/plain\r\nThank you for flying Hawk\r\n\r\n```\r\n\r\nWhich produces the following hash value:\r\n\r\n```\r\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\r\n```\r\n\r\nThe client constructs the normalized request string (newline terminated values):\r\n\r\n```\r\nhawk.1.header\r\n1353832234\r\nj4h3g2\r\nPOST\r\n/resource?a=1&b=2\r\nexample.com\r\n8000\r\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\r\nsome-app-ext-data\r\n\r\n```\r\n\r\nThen calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data,\r\nand request MAC, with the request using the HTTP `Authorization` request header field:\r\n\r\n```\r\nPOST /resource/1 HTTP/1.1\r\nHost: example.com:8000\r\nAuthorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw="\r\n```\r\n\r\nIt is up to the server if and when it validates the payload for any given request, based solely on it\'s security policy\r\nand the nature of the data included.\r\n\r\nIf the payload is available at the time of authentication, the server uses the hash value provided by the client to construct\r\nthe normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value\r\nwith the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash.\r\n\r\nHowever, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed\r\nat a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value\r\nprovided by the client after validating the MAC.\r\n\r\nIt is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value\r\nincluded in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided\r\nby the client, the payload may be modified by an attacker.\r\n\r\n\r\n## Response Payload Validation\r\n\r\n**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the\r\nclient to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header\r\nas a response header using the exact same syntax as the `Authorization` request header field.\r\n\r\nThe header is contructed using the same process as the client\'s request header. The server uses the same credentials and other\r\nartifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with\r\nnew values based on the server response. The rest as identical to those used by the client.\r\n\r\nThe result MAC digest is included with the optional `hash` and `ext` values:\r\n\r\n```\r\nServer-Authorization: Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"\r\n```\r\n\r\n\r\n# Single URI Authorization\r\n\r\nThere are cases in which limited and short-term access to a protected resource is granted to a third party which does not\r\nhave access to the shared credentials. For example, displaying a protected image on a web page accessed by anyone. **Hawk**\r\nprovides limited support for such URIs in the form of a _bewit_ - a URI query parameter appended to the request URI which contains\r\nthe necessary credentials to authenticate the request.\r\n\r\nBecause of the significant security risks involved in issuing such access, bewit usage is purposely limited only to GET requests\r\nand for a finite period of time. Both the client and server can issue bewit credentials, however, the server should not use the same\r\ncredentials as the client to maintain clear traceability as to who issued which credentials.\r\n\r\nIn order to simplify implementation, bewit credentials do not support single-use policy and can be replayed multiple times within\r\nthe granted access timeframe. \r\n\r\n\r\n## Bewit Usage Example\r\n\r\nServer code:\r\n\r\n```javascript\r\nvar Http = require(\'http\');\r\nvar Hawk = require(\'hawk\');\r\n\r\n\r\n// Credentials lookup function\r\n\r\nvar credentialsFunc = function (id, callback) {\r\n\r\n var credentials = {\r\n key: \'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\',\r\n algorithm: \'sha256\'\r\n };\r\n\r\n return callback(null, credentials);\r\n};\r\n\r\n// Create HTTP server\r\n\r\nvar handler = function (req, res) {\r\n\r\n Hawk.uri.authenticate(req, credentialsFunc, {}, function (err, credentials, attributes) {\r\n\r\n res.writeHead(!err ? 200 : 401, { \'Content-Type\': \'text/plain\' });\r\n res.end(!err ? \'Access granted\' : \'Shoosh!\');\r\n });\r\n};\r\n\r\nHttp.createServer(handler).listen(8000, \'example.com\');\r\n```\r\n\r\nBewit code generation:\r\n\r\n```javascript\r\nvar Request = require(\'request\');\r\nvar Hawk = require(\'hawk\');\r\n\r\n\r\n// Client credentials\r\n\r\nvar credentials = {\r\n id: \'dh37fgj492je\',\r\n key: \'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\',\r\n algorithm: \'sha256\'\r\n}\r\n\r\n// Generate bewit\r\n\r\nvar duration = 60 * 5; // 5 Minutes\r\nvar bewit = Hawk.uri.getBewit(\'http://example.com:8080/resource/1?b=1&a=2\', { credentials: credentials, ttlSec: duration, ext: \'some-app-data\' });\r\nvar uri = \'http://example.com:8000/resource/1?b=1&a=2\' + \'&bewit=\' + bewit;\r\n```\r\n\r\n\r\n# Security Considerations\r\n\r\nThe greatest sources of security risks are usually found not in **Hawk** but in the policies and procedures surrounding its use.\r\nImplementers are strongly encouraged to assess how this module addresses their security requirements. This section includes\r\nan incomplete list of security considerations that must be reviewed and understood before deploying **Hawk** on the server.\r\nMany of the protections provided in **Hawk** depends on whether and how they are used.\r\n\r\n### MAC Keys Transmission\r\n\r\n**Hawk** does not provide any mechanism for obtaining or transmitting the set of shared credentials required. Any mechanism used\r\nto obtain **Hawk** credentials must ensure that these transmissions are protected using transport-layer mechanisms such as TLS.\r\n\r\n### Confidentiality of Requests\r\n\r\nWhile **Hawk** provides a mechanism for verifying the integrity of HTTP requests, it provides no guarantee of request\r\nconfidentiality. Unless other precautions are taken, eavesdroppers will have full access to the request content. Servers should\r\ncarefully consider the types of data likely to be sent as part of such requests, and employ transport-layer security mechanisms\r\nto protect sensitive resources.\r\n\r\n### Spoofing by Counterfeit Servers\r\n\r\n**Hawk** provides limited verification of the server authenticity. When receiving a response back from the server, the server\r\nmay choose to include a response `Server-Authorization` header which the client can use to verify the response. However, it is up to\r\nthe server to determine when such measure is included, to up to the client to enforce that policy.\r\n\r\nA hostile party could take advantage of this by intercepting the client\'s requests and returning misleading or otherwise\r\nincorrect responses. Service providers should consider such attacks when developing services using this protocol, and should\r\nrequire transport-layer security for any requests where the authenticity of the resource server or of server responses is an issue.\r\n\r\n### Plaintext Storage of Credentials\r\n\r\nThe **Hawk** key functions the same way passwords do in traditional authentication systems. In order to compute the request MAC,\r\nthe server must have access to the key in plaintext form. This is in contrast, for example, to modern operating systems, which\r\nstore only a one-way hash of user credentials.\r\n\r\nIf an attacker were to gain access to these keys - or worse, to the server\'s database of all such keys - he or she would be able\r\nto perform any action on behalf of any resource owner. Accordingly, it is critical that servers protect these keys from unauthorized\r\naccess.\r\n\r\n### Entropy of Keys\r\n\r\nUnless a transport-layer security protocol is used, eavesdroppers will have full access to authenticated requests and request\r\nMAC values, and will thus be able to mount offline brute-force attacks to recover the key used. Servers should be careful to\r\nassign keys which are long enough, and random enough, to resist such attacks for at least the length of time that the **Hawk**\r\ncredentials are valid.\r\n\r\nFor example, if the credentials are valid for two weeks, servers should ensure that it is not possible to mount a brute force\r\nattack that recovers the key in less than two weeks. Of course, servers are urged to err on the side of caution, and use the\r\nlongest key reasonable.\r\n\r\nIt is equally important that the pseudo-random number generator (PRNG) used to generate these keys be of sufficiently high\r\nquality. Many PRNG implementations generate number sequences that may appear to be random, but which nevertheless exhibit\r\npatterns or other weaknesses which make cryptanalysis or brute force attacks easier. Implementers should be careful to use\r\ncryptographically secure PRNGs to avoid these problems.\r\n\r\n### Coverage Limitations\r\n\r\nThe request MAC only covers the HTTP `Host` header and optionally the `Content-Type` header. It does not cover any other headers\r\nwhich can often affect how the request body is interpreted by the server. If the server behavior is influenced by the presence\r\nor value of such headers, an attacker can manipulate the request headers without being detected. Implementers should use the\r\n`ext` feature to pass application-specific information via the `Authorization` header which is protected by the request MAC.\r\n\r\nThe response authentication, when performed, only covers the response payload, content-type, and the request information \r\nprovided by the client in it\'s request (method, resource, timestamp, nonce, etc.). It does not cover the HTTP status code or\r\nany other response header field (e.g. Location) which can affect the client\'s behaviour.\r\n\r\n### Future Time Manipulation\r\n\r\nThe protocol relies on a clock sync between the client and server. To accomplish this, the server informs the client of its\r\ncurrent time when an invalid timestamp is received.\r\n\r\nIf an attacker is able to manipulate this information and cause the client to use an incorrect time, it would be able to cause\r\nthe client to generate authenticated requests using time in the future. Such requests will fail when sent by the client, and will\r\nnot likely leave a trace on the server (given the common implementation of nonce, if at all enforced). The attacker will then\r\nbe able to replay the request at the correct time without detection.\r\n\r\nThe client must only use the time information provided by the server if:\r\n* it was delivered over a TLS connection and the server identity has been verified, or\r\n* the `tsm` MAC digest calculated using the same client credentials over the timestamp has been verified.\r\n\r\n### Client Clock Poisoning\r\n\r\nWhen receiving a request with a bad timestamp, the server provides the client with its current time. The client must never use\r\nthe time received from the server to adjust its own clock, and must only use it to calculate an offset for communicating with\r\nthat particular server.\r\n\r\n### Bewit Limitations\r\n\r\nSpecial care must be taken when issuing bewit credentials to third parties. Bewit credentials are valid until expiration and cannot\r\nbe revoked or limited without using other means. Whatever resource they grant access to will be completely exposed to anyone with\r\naccess to the bewit credentials which act as bearer credentials for that particular resource. While bewit usage is limited to GET\r\nrequests only and therefore cannot be used to perform transactions or change server state, it can still be used to expose private\r\nand sensitive information.\r\n\r\n\r\n# Frequently Asked Questions\r\n\r\n### Where is the protocol specification?\r\n\r\nIf you are looking for some prose explaining how all this works, **this is it**. **Hawk** is being developed as an open source\r\nproject instead of a standard. In other words, the [code](/hueniverse/hawk/tree/master/lib) is the specification. Not sure about\r\nsomething? Open an issue!\r\n\r\n### Is it done?\r\n\r\nAt if version 0.10.0, **Hawk** is feature-complete. However, until this module reaches version 1.0.0 it is considered experimental\r\nand is likely to change. This also means your feedback and contribution are very welcome. Feel free to open issues with questions\r\nand suggestions.\r\n\r\n### Where can I find **Hawk** implementations in other languages?\r\n\r\n**Hawk**\'s only reference implementation is provided in JavaScript as a node.js module. However, others are actively porting it to other\r\nplatforms. There is already a [PHP](https://github.com/alexbilbie/PHP-Hawk),\r\n[.NET](https://github.com/pcibraro/hawknet), and [JAVA](https://github.com/wealdtech/hawk) libraries available. The full list\r\nis maintained [here](https://github.com/hueniverse/hawk/issues?labels=port). Please add an issue if you are working on another\r\nport. A cross-platform test-suite is in the works.\r\n\r\n### Why isn\'t the algorithm part of the challenge or dynamically negotiated?\r\n\r\nThe algorithm used is closely related to the key issued as different algorithms require different key sizes (and other\r\nrequirements). While some keys can be used for multiple algorithm, the protocol is designed to closely bind the key and algorithm\r\ntogether as part of the issued credentials.\r\n\r\n### Why is Host and Content-Type the only headers covered by the request MAC?\r\n\r\nIt is really hard to include other headers. Headers can be changed by proxies and other intermediaries and there is no\r\nwell-established way to normalize them. Many platforms change the case of header field names and values. The only\r\nstraight-forward solution is to include the headers in some blob (say, base64 encoded JSON) and include that with the request,\r\nan approach taken by JWT and other such formats. However, that design violates the HTTP header boundaries, repeats information,\r\nand introduces other security issues because firewalls will not be aware of these "hidden" headers. In addition, any information\r\nrepeated must be compared to the duplicated information in the header and therefore only moves the problem elsewhere.\r\n\r\n### Why not just use HTTP Digest?\r\n\r\nDigest requires pre-negotiation to establish a nonce. This means you can\'t just make a request - you must first send\r\na protocol handshake to the server. This pattern has become unacceptable for most web services, especially mobile\r\nwhere extra round-trip are costly.\r\n\r\n### Why bother with all this nonce and timestamp business?\r\n\r\n**Hawk** is an attempt to find a reasonable, practical compromise between security and usability. OAuth 1.0 got timestamp\r\nand nonces halfway right but failed when it came to scalability and consistent developer experience. **Hawk** addresses\r\nit by requiring the client to sync its clock, but provides it with tools to accomplish it.\r\n\r\nIn general, replay protection is a matter of application-specific threat model. It is less of an issue on a TLS-protected\r\nsystem where the clients are implemented using best practices and are under the control of the server. Instead of dropping\r\nreplay protection, **Hawk** offers a required time window and an optional nonce verification. Together, it provides developers\r\nwith the ability to decide how to enforce their security policy without impacting the client\'s implementation.\r\n\r\n### What are `app` and `dlg` in the authorization header and normalized mac string?\r\n\r\nThe original motivation for **Hawk** was to replace the OAuth 1.0 use cases. This included both a simple client-server mode which\r\nthis module is specifically designed for, and a delegated access mode which is being developed separately in\r\n[Oz](https://github.com/hueniverse/oz). In addition to the **Hawk** use cases, Oz requires another attribute: the application id `app`.\r\nThis provides binding between the credentials and the application in a way that prevents an attacker from tricking an application\r\nto use credentials issued to someone else. It also has an optional \'delegated-by\' attribute `dlg` which is the application id of the\r\napplication the credentials were directly issued to. The goal of these two additions is to allow Oz to utilize **Hawk** directly,\r\nbut with the additional security of delegated credentials.\r\n\r\n### What is the purpose of the static strings used in each normalized MAC input?\r\n\r\nWhen calculating a hash or MAC, a static prefix (tag) is added. The prefix is used to prevent MAC values from being\r\nused or reused for a purpose other than what they were created for (i.e. prevents switching MAC values between a request,\r\nresponse, and a bewit use cases). It also protects against expliots created after a potential change in how the protocol\r\ncreates the normalized string. For example, if a future version would switch the order of nonce and timestamp, it\r\ncan create an exploit opportunity for cases where the nonce is similar in format to a timestamp.\r\n\r\n### Does **Hawk** have anything to do with OAuth?\r\n\r\nShort answer: no.\r\n\r\n**Hawk** was originally proposed as the OAuth MAC Token specification. However, the OAuth working group in its consistent\r\nincompetence failed to produce a final, usable solution to address one of the most popular use cases of OAuth 1.0 - using it\r\nto authenticate simple client-server transactions (i.e. two-legged). As you can guess, the OAuth working group is still hard\r\nat work to produce more garbage.\r\n\r\n**Hawk** provides a simple HTTP authentication scheme for making client-server requests. It does not address the OAuth use case\r\nof delegating access to a third party. If you are looking for an OAuth alternative, check out [Oz](/hueniverse/oz).\r\n\r\n\r\n# Acknowledgements\r\n\r\n**Hawk** is a derivative work of the [HTTP MAC Authentication Scheme](http://tools.ietf.org/html/draft-hammer-oauth-v2-mac-token-05) proposal\r\nco-authored by Ben Adida, Adam Barth, and Eran Hammer, which in turn was based on the OAuth 1.0 community specification.\r\n\r\nSpecial thanks to Ben Laurie for his always insightful feedback and advice.\r\n\r\nThe **Hawk** logo was created by [Chris Carrasco](http://chriscarrasco.com).\r\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved bugs: { url: 'https://github.com/hueniverse/hawk/issues' },
npm sill resolved homepage: 'https://github.com/hueniverse/hawk',
npm sill resolved _id: 'hawk@0.10.2',
npm sill resolved _from: 'hawk@~0.10.2' },
npm sill resolved { author:
npm sill resolved { name: 'Felix Geisendörfer',
npm sill resolved email: 'felix@debuggable.com',
npm sill resolved url: 'http://debuggable.com/' },
npm sill resolved name: 'form-data',
npm sill resolved description: 'A module to create readable `"multipart/form-data"` streams. Can be used to submit forms and file uploads to other web applications.',
npm sill resolved version: '0.0.10',
npm sill resolved repository:
npm sill resolved { type: 'git',
npm sill resolved url: 'git://github.com/felixge/node-form-data.git' },
npm sill resolved main: './lib/form_data',
npm sill resolved scripts: { test: 'node test/run.js' },
npm sill resolved engines: { node: '>= 0.6' },
npm sill resolved dependencies: { 'combined-stream': '~0.0.4', mime: '~1.2.2', async: '~0.2.7' },
npm sill resolved devDependencies:
npm sill resolved { fake: '~0.2.1',
npm sill resolved far: '~0.0.7',
npm sill resolved formidable: '~1.0.13',
npm sill resolved request: '~2.16.6' },
npm sill resolved readme: '# Form-Data [![Build Status](https://travis-ci.org/alexindigo/node-form-data.png?branch=master)](https://travis-ci.org/alexindigo/node-form-data) [![Dependency Status](https://gemnasium.com/alexindigo/node-form-data.png)](https://gemnasium.com/alexindigo/node-form-data)\n\nA module to create readable `"multipart/form-data"` streams. Can be used to\nsubmit forms and file uploads to other web applications.\n\nThe API of this module is inspired by the\n[XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n\n## Install\n\n```\nnpm install form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require(\'form-data\');\nvar fs = require(\'fs\');\n\nvar form = new FormData();\nform.append(\'my_field\', \'my value\');\nform.append(\'my_buffer\', new Buffer(10));\nform.append(\'my_file\', fs.createReadStream(\'/foo/bar.jpg\'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require(\'form-data\');\nvar http = require(\'http\');\n\nvar form = new FormData();\n\nhttp.request(\'http://nodejs.org/images/logo.png\', function(response) {\n form.append(\'my_field\', \'my value\');\n form.append(\'my_buffer\', new Buffer(10));\n form.append(\'my_logo\', response);\n});\n```\n\nOr @mikeal\'s request stream:\n\n``` javascript\nvar FormData = require(\'form-data\');\nvar request = require(\'request\');\n\nvar form = new FormData();\n\nform.append(\'my_field\', \'my value\');\nform.append(\'my_buffer\', new Buffer(10));\nform.append(\'my_logo\', request(\'http://nodejs.org/images/logo.png\'));\n```\n\nIn order to submit this form to a web application, you can use node\'s http\nclient interface:\n\n``` javascript\nvar http = require(\'http\');\n\nvar request = http.request({\n method: \'post\',\n host: \'example.org\',\n path: \'/upload\',\n headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on(\'response\', function(res) {\n console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `\'Content-Length\'` header to be set for you:\n\n``` javascript\nform.submit(\'example.org/upload\', function(err, res) {\n console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = \'\\r\\n\';\nvar form = new FormData();\n\nvar options = {\n header: CRLF + \'--\' + form.getBoundary() + CRLF + \'X-Custom-Header: 123\' + CRLF + CRLF,\n knownLength: 1\n};\n\nform.append(\'my_buffer\', buffer, options);\n\nform.submit(\'http://example.com/\', function(err, res) {\n if (err) throw err;\n console.log(\'Done\');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (fs.readStream, http.response and mikeal\'s request), for some other types of streams you\'d need to provide "file"-related information manually:\n\n``` javascript\nsomeModule.stream(function(err, stdout, stderr) {\n if (err) throw err;\n\n var form = new FormData();\n\n form.append(\'file\', stdout, {\n filename: \'unicycle.jpg\',\n contentType: \'image/jpg\',\n knownLength: 19806\n });\n\n form.submit(\'http://example.com/\', function(err, res) {\n if (err) throw err;\n console.log(\'Done\');\n });\n});\n```\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n host: \'example.com\',\n path: \'/probably.php?extra=params\',\n auth: \'username:password\'\n}, function(err, res) {\n console.log(res.statusCode);\n});\n```\n\n## TODO\n\n- Add new streams (0.10) support and try really hard not to break it for 0.8.x.\n\n## License\n\nForm-Data is licensed under the MIT license.\n',
npm sill resolved readmeFilename: 'Readme.md',
npm sill resolved bugs: { url: 'https://github.com/felixge/node-form-data/issues' },
npm sill resolved homepage: 'https://github.com/felixge/node-form-data',
npm sill resolved _id: 'form-data@0.0.10',
npm sill resolved _from: 'form-data@~0.0.3' } ]
npm info install aws-sign@0.2.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install cookie-jar@0.2.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install forever-agent@0.2.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install tunnel-agent@0.2.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install json-stringify-safe@3.0.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install qs@0.5.6 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install oauth-sign@0.2.0 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install mime@1.2.11 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install node-uuid@1.4.1 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install hawk@0.10.2 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info install form-data@0.0.10 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request
npm info installOne aws-sign@0.2.0
npm info installOne cookie-jar@0.2.0
npm info installOne forever-agent@0.2.0
npm info installOne tunnel-agent@0.2.0
npm info installOne json-stringify-safe@3.0.0
npm info installOne qs@0.5.6
npm info installOne oauth-sign@0.2.0
npm info installOne mime@1.2.11
npm info installOne node-uuid@1.4.1
npm info installOne hawk@0.10.2
npm WARN engine hawk@0.10.2: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.25","npm":"1.3.24"})
npm info installOne form-data@0.0.10
npm sill lockFile 6c77ccb9-request-2-2-5 request@~2.2.5
npm sill lockFile 6c77ccb9-request-2-2-5 request@~2.2.5
npm sill addNameRange { name: 'i', range: '>=0.3.0-0 <0.4.0-0', hasData: false }
npm sill addNameRange { name: 'async', range: '>=0.1.0-0 <0.2.0-0', hasData: false }
npm sill addNameRange { name: 'deep-equal', range: '*', hasData: false }
npm sill addNameRange { name: 'ncp', range: '>=0.2.0-0 <0.3.0-0', hasData: false }
npm sill addNameRange { name: 'rimraf', range: '>=1.0.0-0 <2.0.0-0', hasData: false }
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/aws-sign unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/cookie-jar unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/forever-agent unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/tunnel-agent unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/json-stringify-safe unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/qs unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/oauth-sign unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/mime unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/node-uuid unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/hawk unbuild
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/form-data unbuild
npm sill resolved [ { name: 'request',
npm sill resolved description: 'Simplified HTTP request client.',
npm sill resolved tags: [ 'http', 'simple', 'util', 'utility' ],
npm sill resolved version: '2.2.9',
npm sill resolved author: { name: 'Mikeal Rogers', email: 'mikeal.rogers@gmail.com' },
npm sill resolved repository: { type: 'git', url: 'http://github.com/mikeal/request.git' },
npm sill resolved bugs: { url: 'http://github.com/mikeal/request/issues' },
npm sill resolved engines: [ 'node >= 0.3.6' ],
npm sill resolved main: './main',
npm sill resolved scripts: { test: 'bash tests/run.sh' },
npm sill resolved readme: '# Request -- Simplified HTTP request method\n\n## Install\n\n<pre>\n npm install request\n</pre>\n\nOr from source:\n\n<pre>\n git clone git://github.com/mikeal/request.git \n cd request\n npm link\n</pre>\n\n## Super simple to use\n\nRequest is designed to be the simplest way possible to make http calls. It support HTTPS and follows redirects by default.\n\n```javascript\nvar request = require(\'request\');\nrequest(\'http://www.google.com\', function (error, response, body) {\n if (!error && response.statusCode == 200) {\n console.log(body) // Print the google web page.\n }\n})\n```\n\n## Streaming\n\nYou can stream any response to a file stream.\n\n```javascript\nrequest(\'http://google.com/doodle.png\').pipe(fs.createWriteStream(\'doodle.png\'))\n```\n\nYou can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types, in this case `application/json`, and use the proper content-type in the PUT request if one is not already provided in the headers.\n\n```javascript\nfs.readStream(\'file.json\').pipe(request.put(\'http://mysite.com/obj.json\'))\n```\n\nRequest can also pipe to itself. When doing so the content-type and content-length will be preserved in the PUT headers.\n\n```javascript\nrequest.get(\'http://google.com/img.png\').pipe(request.put(\'http://mysite.com/img.png\'))\n```\n\nNow let\'s get fancy.\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === \'/doodle.png\') {\n if (req.method === \'PUT\') {\n req.pipe(request.put(\'http://mysite.com/doodle.png\'))\n } else if (req.method === \'GET\' || req.method === \'HEAD\') {\n request.get(\'http://mysite.com/doodle.png\').pipe(resp)\n } \n }\n})\n```\n\nYou can also pipe() from a http.ServerRequest instance and to a http.ServerResponse instance. The HTTP method and headers will be sent as well as the entity-body data. Which means that, if you don\'t really care about security, you can do:\n\n```javascript\nhttp.createServer(function (req, resp) {\n if (req.url === \'/doodle.png\') {\n var x = request(\'http://mysite.com/doodle.png\')\n req.pipe(x)\n x.pipe(resp)\n }\n})\n```\n\nAnd since pipe() returns the destination stream in node 0.5.x you can do one line proxying :)\n\n```javascript\nreq.pipe(request(\'http://mysite.com/doodle.png\')).pipe(resp)\n```\n\nAlso, none of this new functionality conflicts with requests previous features, it just expands them.\n\n```javascript\nvar r = request.defaults({\'proxy\':\'http://localproxy.com\'})\n\nhttp.createServer(function (req, resp) {\n if (req.url === \'/doodle.png\') {\n r.get(\'http://google.com/doodle.png\').pipe(resp)\n }\n})\n```\n\nYou can still use intermediate proxies, the requests will still follow HTTP forwards, etc.\n\n## OAuth Signing\n\n```javascript\n// Twitter OAuth\nvar qs = require(\'querystring\')\n , oauth =\n { callback: \'http://mysite.com/callback/\'\n , consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n }\n , url = \'https://api.twitter.com/oauth/request_token\'\n ;\nrequest.post({url:url, oauth:oauth}, function (e, r, body) {\n // Assume by some stretch of magic you aquired the verifier\n var access_token = qs.parse(body)\n , oauth = \n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: access_token.oauth_token\n , verifier: VERIFIER\n , token_secret: access_token.oauth_token_secret\n }\n , url = \'https://api.twitter.com/oauth/access_token\'\n ;\n request.post({url:url, oauth:oauth}, function (e, r, body) {\n var perm_token = qs.parse(body)\n , oauth = \n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: perm_token.oauth_token\n , token_secret: perm_token.oauth_token_secret\n }\n , url = \'https://api.twitter.com/1/users/show.json?\'\n , params = \n { screen_name: perm_token.screen_name\n , user_id: perm_token.user_id\n }\n ;\n url += qs.stringify(params)\n request.get({url:url, oauth:oauth, json:true}, function (e, r, user) {\n console.log(user)\n })\n })\n})\n```\n\n\n\n### request(options, callback)\n\nThe first argument can be either a url or an options object. The only required option is uri, all others are optional.\n\n* `uri` || `url` - fully qualified uri or a parsed url object from url.parse()\n* `method` - http method, defaults to GET\n* `headers` - http headers, defaults to {}\n* `body` - entity body for POST and PUT requests. Must be buffer or string.\n* `json` - sets `body` but to JSON representation of value and adds `Content-type: application/json` header.\n* `multipart` - (experimental) array of objects which contains their own headers and `body` attribute. Sends `multipart/related` request. See example below.\n* `followRedirect` - follow HTTP 3xx responses as redirects. defaults to true.\n* `maxRedirects` - the maximum number of redirects to follow, defaults to 10.\n* `onResponse` - If true the callback will be fired on the "response" event instead of "end". If a function it will be called on "response" and not effect the regular semantics of the main callback on "end".\n* `encoding` - Encoding to be used on response.setEncoding when buffering the response data.\n* `pool` - A hash object containing the agents for these requests. If omitted this request will use the global pool which is set to node\'s default maxSockets.\n* `pool.maxSockets` - Integer containing the maximum amount of sockets in the pool.\n* `timeout` - Integer containing the number of milliseconds to wait for a request to respond before aborting the request\t\n* `proxy` - An HTTP proxy to be used. Support proxy Auth with Basic Auth the same way it\'s supported with the `url` parameter by embedding the auth info in the uri.\n* `oauth` - Options for OAuth HMAC-SHA1 signing, see documentation above.\n* `strictSSL` - Set to `true` to require that SSL certificates be valid. Note: to use your own certificate authority, you need to specify an agent that was created with that ca as an option.\n* `jar` - Set to `false` if you don\'t want cookies to be remembered for future use or define your custom cookie jar (see examples section)\n\n\nThe callback argument gets 3 arguments. The first is an error when applicable (usually from the http.Client option not the http.ClientRequest object). The second in an http.ClientResponse object. The third is the response body buffer.\n\n## Convenience methods\n\nThere are also shorthand methods for different HTTP METHODs and some other conveniences.\n\n### request.defaults(options) \n \nThis method returns a wrapper around the normal request API that defaults to whatever options you pass in to it.\n\n### request.put\n\nSame as request() but defaults to `method: "PUT"`.\n\n```javascript\nrequest.put(url)\n```\n\n### request.post\n\nSame as request() but defaults to `method: "POST"`.\n\n```javascript\nrequest.post(url)\n```\n\n### request.head\n\nSame as request() but defaults to `method: "HEAD"`.\n\n```javascript\nrequest.head(url)\n```\n\n### request.del\n\nSame as request() but defaults to `method: "DELETE"`.\n\n```javascript\nrequest.del(url)\n```\n\n### request.get\n\nAlias to normal request method for uniformity.\n\n```javascript\nrequest.get(url)\n```\n### request.cookie\n\nFunction that creates a new cookie.\n\n```javascript\nrequest.cookie(\'cookie_string_here\')\n```\n### request.jar\n\nFunction that creates a new cookie jar.\n\n```javascript\nrequest.jar()\n```\n\n\n## Examples:\n\n```javascript\n var request = require(\'request\')\n , rand = Math.floor(Math.random()*100000000).toString()\n ;\n request(\n { method: \'PUT\'\n , uri: \'http://mikeal.iriscouch.com/testjs/\' + rand\n , multipart: \n [ { \'content-type\': \'application/json\'\n , body: JSON.stringify({foo: \'bar\', _attachments: {\'message.txt\': {follows: true, length: 18, \'content_type\': \'text/plain\' }}})\n }\n , { body: \'I am an attachment\' }\n ] \n }\n , function (error, response, body) {\n if(response.statusCode == 201){\n console.log(\'document saved as: http://mikeal.iriscouch.com/testjs/\'+ rand)\n } else {\n console.log(\'error: \'+ response.statusCode)\n console.log(body)\n }\n }\n )\n```\nCookies are enabled by default (so they can be used in subsequent requests). To disable cookies set jar to false (either in defaults or in the options sent).\n\n```javascript\nvar request = request.defaults({jar: false})\nrequest(\'http://www.google.com\', function () {\n request(\'http://images.google.com\')\n})\n```\n\nIf you to use a custom cookie jar (instead of letting request use its own global cookie jar) you do so by setting the jar default or by specifying it as an option:\n\n```javascript\nvar j = request.jar()\nvar request = request.defaults({jar:j})\nrequest(\'http://www.google.com\', function () {\n request(\'http://images.google.com\')\n})\n```\nOR\n\n```javascript\nvar j = request.jar()\nvar cookie = request.cookie(\'your_cookie_here\')\nj.add(cookie)\nrequest({url: \'http://www.google.com\', jar: j}, function () {\n request(\'http://images.google.com\')\n})\n```\n',
npm sill resolved readmeFilename: 'README.md',
npm sill resolved homepage: 'https://github.com/mikeal/request',
npm sill resolved _id: 'request@2.2.9',
npm sill resolved _from: 'request@~2.2.5' } ]
npm info install request@2.2.9 into /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr/node_modules/follow
npm info installOne request@2.2.9
npm sill gunzTarPerm extractEntry .npmignore
npm sill gunzTarPerm extractEntry README.md
npm info /Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/couchr/node_modules/follow/node_modules/request unbuild
npm sill gunzTarPerm extractEntry rng-browser.js
npm sill gunzTarPerm extractEntry uuid.js
npm sill gunzTarPerm extractEntry LICENSE
npm sill gunzTarPerm extractEntry test/ext.js
npm sill gunzTarPerm extractEntry test/request.js
npm verb tar unpack /Users/hamrickb/.npm/aws-sign/0.2.0/package.tgz
npm sill lockFile f5f64e30-es-request-node-modules-aws-sign tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/aws-sign
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/aws-sign /Users/hamrickb/.npm/f5f64e30-es-request-node-modules-aws-sign.lock
npm sill lockFile 4fe77e4a-b-npm-aws-sign-0-2-0-package-tgz tar:///Users/hamrickb/.npm/aws-sign/0.2.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/aws-sign/0.2.0/package.tgz /Users/hamrickb/.npm/4fe77e4a-b-npm-aws-sign-0-2-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/cookie-jar/0.2.0/package.tgz
npm sill lockFile 7b72028f--request-node-modules-cookie-jar tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/cookie-jar
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/cookie-jar /Users/hamrickb/.npm/7b72028f--request-node-modules-cookie-jar.lock
npm sill lockFile 3a122ef9-npm-cookie-jar-0-2-0-package-tgz tar:///Users/hamrickb/.npm/cookie-jar/0.2.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/cookie-jar/0.2.0/package.tgz /Users/hamrickb/.npm/3a122ef9-npm-cookie-jar-0-2-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/forever-agent/0.2.0/package.tgz
npm sill lockFile fcd9c6fc-quest-node-modules-forever-agent tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/forever-agent
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/forever-agent /Users/hamrickb/.npm/fcd9c6fc-quest-node-modules-forever-agent.lock
npm sill lockFile 0c144bfb--forever-agent-0-2-0-package-tgz tar:///Users/hamrickb/.npm/forever-agent/0.2.0/package.tgz
npm verb lock tar:///Users/hamrickb/.npm/forever-agent/0.2.0/package.tgz /Users/hamrickb/.npm/0c144bfb--forever-agent-0-2-0-package-tgz.lock
npm verb tar unpack /Users/hamrickb/.npm/tunnel-agent/0.2.0/package.tgz
npm sill lockFile 05f57951-equest-node-modules-tunnel-agent tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/tunnel-agent
npm verb lock tar:///Users/hamrickb/.hoodie/cache/my-first-hoodie/node_modules/hoodie-server/node_modules/request/node_modules/tu
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment